Как настроить дескриптор отчета и входной отчет для BLE HID Remote Control? - PullRequest
0 голосов
/ 18 октября 2019

Я проверил проект на GitHub (https://gist.github.com/sabas1080/93115fb66e09c9b40e5857a19f3e7787), и пытаюсь реализовать BLE-пульт дистанционного управления на ESP32 (этот пульт имеет 32 ключа). Проблема в том, что я не совсем уверенкак объявить отчет и, следовательно, входной отчет.

Формат данных HCI, который я должен отправить, выглядит следующим образом:

  • Общий размер: 8 байтов

  • Байт 0: клавиши-модификаторы

  • Байт 1: зарезервировано

  • Массив ключей: 6 байтов Каждый байт представляет собой кнопкуи может содержать до 6 кнопок.

В соответствии с документом, таблицы использования HID универсальной последовательной шины, я объявил этот отчет:

  0x05, 0x0C,        // Usage Page (Consumer)
  0x09, 0x01,        // Usage (Consumer Control)
  0xA1, 0x01,        // Collection (Application)
  0x85, 0x01,        // Report ID (1)
  0x05, 0x0C,        // Usage Page (Consumer Devices)
  0x15, 0x00,        // Logical Minimum (1) 
  0x25, 0x01,        // Logical Maximum (2)
  0x15, 0x08,        // Report Size (8) 
  0x25, 0x01,        // Report Count (1) Modifier 1 Byte
  0x81, 0x00,        // Input(Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
  0x15, 0x08,        // Report Size (8)
  0x25, 0x01,        // Report Count (1) Reserved 1 Byte
  0x81, 0x01,        // Input(Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)     
  0x15, 0x00,        // Logical Minimum 
  0x25, 0x20,        // Logical Maximum  32 keys
  0x15, 0x08,        // Report Size (8)
  0x25, 0x06,        // Report Count (6) Keys 6 Bytes
  0x81, 0x00,        // Input(Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
  0xC0,              // End Collection 

Это правильноЯ запутался в том, как установить параметры отчета.

Для входного отчета я попытался отправить команду громкости, например:

uint8_t msg1[] = {0x0, 0x0, 0xE9, 0x0, 0x0, 0x0, 0x0, 0x0}; // Volume Up
input->setValue(msg1, sizeof(msg1));
input->notify();

uint8_t msg2[] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
input->setValue(msg2, sizeof(msg2));
input->notify();
...