Как добавить дескриптор строки - PullRequest
2 голосов
/ 09 октября 2019

Я хотел бы добавить строку в мой проект HID (для хранения информации о версии прошивки). Я читал о строковых дескрипторах https://www.beyondlogic.org/usbnutshell/usb5.shtml, и я понимаю, что дескриптор конфигурации или дескриптор отчета перечисляет индекс, который указывает на строку. Строка хранится где-то еще. и затем хост может запросить строку по индексу через запрос «дескриптора» «get» для строки.

Хотя я довольно озадачен реализацией. Я просматривал примеры библиотек STM32F04 (доступные для загрузки из STM или дублированные здесь https://github.com/caozoux/arm/blob/master/stm32/STM32F0x2_USB-FS-Device_Lib%20V1.0.0/Libraries/STM32_USB_Device_Library/Class/dfu/src/usbd_dfu_core.c) и нашел это:

    /* USB DFU device Configuration Descriptor */
    const uint8_t usbd_dfu_CfgDesc[USB_DFU_CONFIG_DESC_SIZ] =
    {
      0x09, /* bLength: Configuration Descriptor size */
      USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
      USB_DFU_CONFIG_DESC_SIZ,
      /* wTotalLength: Bytes returned */
      0x00,
      0x01,         /*bNumInterfaces: 1 interface*/
      0x01,         /*bConfigurationValue: Configuration value*/
      0x02,         /*iConfiguration: Index of string descriptor describing the configuration*/
      0xC0,         /*bmAttributes: bus powered and Supports Remote Wakeup */
      0x32,         /*MaxPower 100 mA: this current is used for detecting Vbus*/
      /* 09 */

, который дает индекс iConfiguration в 0x02. Затем я искал все файлы другой ссылки на 0x02 или строку конфигурации и ничего не нашел. Я ожидал найти какой-то массив строк, которые можно индексировать индексом 0x02 или хотя бы строкой конфигурации. Возможно, файлы примеров неполные, но, скорее всего, я просто не ищу нужные вещи.

Мои вопросы: во-первых, мое основное предположение о том, как строковые дескрипторы работают правильно? И если да, то как и где обычно хранятся строки? Любые ссылки на примеры реализации также будут очень полезны!

1 Ответ

1 голос
/ 09 октября 2019

После краткого изучения вашего кода, похоже, что код, возвращающий строковые дескрипторы на USB-хост в ответ на запрос «Get Descriptor», находится здесь:

https://github.com/caozoux/arm/blob/e19fc5a/stm32/STM32F0x2_USB-FS-Device_Lib%20V1.0.0/Libraries/STM32_USB_Device_Library/Core/src/usbd_req.c#L313

...