我想在我的HID项目中添加一个字符串(以存储有关固件版本的信息)。我已经读过关于字符串描述符https://www.beyondlogic.org/usbnutshell/usb5.shtml的知识,我的理解是配置描述符或报告描述符列出了指向字符串的索引。该字符串存储在其他位置。然后主机可以通过“获取”字符串“描述符”请求通过索引请求字符串。
尽管如此,我还是对实现感到困惑。我一直在浏览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索引或至少一个配置字符串索引的字符串数组。可能示例文件不完整,但我更有可能不是在寻找正确的东西。
我的问题是,首先,我对字符串描述符如何工作的基本假设正确吗?如果是这样,字符串通常如何存储在哪里?任何指向示例实现的链接也将非常有帮助!
答案 0 :(得分:1)
在简要查看您的代码后,看起来代码在这里将字符串描述符返回到USB主机以响应“获取描述符”请求: