Где разместить пользовательские строки в устройстве HID? - PullRequest
0 голосов
/ 07 октября 2019

У меня есть устройство HID, и я пытаюсь добавить две части информации для чтения через USB. Во-первых, я хочу иметь возможность прочитать строку версии прошивки, которую я создаю во время компиляции. Во-вторых, я хочу иметь возможность установить роль устройства с помощью двух перемычек и отправить 0,1,2,3. Первая половина каждого из них работает нормально, теперь я застрял в том, где именно я должен разместить эту информацию, чтобы иметь возможность прочитать ее на стороне хоста.

Я рассмотрел возможность добавления ее в качестве данныхНапечатайте как кнопка или подобное, но это кажется очень хакерским. Я также рассмотрел вопрос об изменении PID или строки Product, но они чувствуют, что они должны оставаться постоянными при обновлении прошивки. Сейчас я добавляю пользовательскую строку в дескриптор устройства.

const uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] =
{
  0x12,                       /*bLength */
  USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
  0x00,                       /*bcdUSB */
  0x02,
  0x00,                       /*bDeviceClass*/
  0x00,                       /*bDeviceSubClass*/
  0x00,                       /*bDeviceProtocol*/
  USB_MAX_EP0_SIZE,           /*bMaxPacketSize*/
  LOBYTE(USBD_VID),           /*idVendor*/
  HIBYTE(USBD_VID),           /*idVendor*/
  LOBYTE(USBD_PID),           /*idProduct*/
  HIBYTE(USBD_PID),           /*idProduct*/
  0x00,                       /*bcdDevice fw revision */
  0x01,
  USBD_IDX_MFC_STR,           /*Index of manufacturer  string*/
  USBD_IDX_PRODUCT_STR,       /*Index of product string*/
  USBD_IDX_SERIAL_STR,        /*Index of serial number string*/
  USBD_CFG_MAX_NUM            /*bNumConfigurations*/
} ; /* USB_DeviceDescriptor */

И тогда я бы добавил что-то вроде:

  USBD_IDX_USR_STR            /*Index of custom user string*/

Было бы это приемлемо? И если да, как я могу сообщить хосту, что означает этот новый байт в дескрипторе устройства? Существует ли какой-либо мета-дескриптор, определяющий смещение байтов каждого фрагмента дескриптора устройства?

Если это недопустимо, куда я должен поместить строку, например версию или роль прошивки?

1 Ответ

0 голосов
/ 07 октября 2019

Недопустимо добавлять данные в дескриптор устройства USB, поскольку их размер и структура определены в спецификациях USB.

Это нормально, если ваше устройство возвращает в ответ некоторые пользовательские строкичтобы "Получить String Descriptor" запросы с правильным индексом, хотя. Обычные драйверы USB будут запрашивать только те дрины, которые упоминаются в дескрипторах вашего устройства / интерфейса / конфигурации, поэтому они никогда не увидят дополнительную строку, которую вы хотите добавить. Строковый дескриптор был бы хорошим способом реализовать строку версии прошивки. (Между прочим, вы также должны поместить информацию о версии микропрограммы в bcdDevice.) Вы должны выбрать индексный номер для строки и затем жестко закодировать этот номер в любом программном обеспечении, которое необходимо для его чтения;нет никакой причины пытаться принудительно ввести это число в дескриптор.

Возможно, вы могли бы использовать перемычки, чтобы установить «роль» вашего устройства, но перемычки являются своего рода клавишами или кнопками, поэтому я хотел быпредложить вам сообщить о них стандартным способом, используя протокол HID. Возможно, вам стоит спросить о них в отдельном вопросе.

...