Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Usb 在HID设备中的何处放置用户定义的字符串?_Usb_Stm32_Hid - Fatal编程技术网

Usb 在HID设备中的何处放置用户定义的字符串?

Usb 在HID设备中的何处放置用户定义的字符串?,usb,stm32,hid,Usb,Stm32,Hid,我有一个HID设备,我正试图添加两条信息通过USB读取。首先,我希望能够读取编译时创建的固件版本字符串。其次,我希望能够使用两个跳线设置设备的角色,并发送一个0,1,2,3。每种方法的前半部分都工作得很好,我现在被困在应该将这些信息放置在什么位置,以便能够在主机端读取这些信息 我曾考虑将其添加为按钮或类似的数据类型,但这感觉非常粗糙。我也考虑过更改PID或产品字符串,但这些感觉应该在固件更新期间保持不变。我目前的想法是向设备描述符添加自定义字符串 const uint8_t USBD_Devic

我有一个HID设备,我正试图添加两条信息通过USB读取。首先,我希望能够读取编译时创建的固件版本字符串。其次,我希望能够使用两个跳线设置设备的角色,并发送一个0,1,2,3。每种方法的前半部分都工作得很好,我现在被困在应该将这些信息放置在什么位置,以便能够在主机端读取这些信息

我曾考虑将其添加为按钮或类似的数据类型,但这感觉非常粗糙。我也考虑过更改PID或产品字符串,但这些感觉应该在固件更新期间保持不变。我目前的想法是向设备描述符添加自定义字符串

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*/
这是否可以接受?如果是这样,我如何让主机知道设备描述符中的这个新字节意味着什么?是否有某种元描述符定义设备描述符每一部分的字节偏移量


如果这是不可接受的,我应该将固件版本或角色之类的字符串放在哪里?

不可将数据添加到USB设备描述符,因为它的大小和结构在USB规范中定义

不过,让您的设备返回一些自定义字符串以响应具有正确索引的“Get String Descriptor”请求是可以的。普通USB驱动程序只会请求设备/接口/配置描述符中引用的DRING,因此它们永远不会看到您要添加的额外字符串。字符串描述符是实现固件版本字符串的好方法。(顺便说一下,您还应该将固件版本信息放入bcdDevice中。)您可以为字符串选择一个索引号,然后将该编号硬编码到任何需要读取它的软件中;没有理由试图将该数字强制输入某个描述符中

您可以使用跳线设置设备的“角色”,但跳线有点像键或按钮,因此我建议您使用HID协议以某种标准方式报告它们。也许你应该在另一个问题中询问他们