基于STM32F103的USB学习笔记6 - 字符串描述符

72 篇文章 39 订阅

字符串描述符是可选的。如果设备不支持字符串描述符,则必须将对设备,配置和接口描述符中的字符串描述符的所有引用重置为零。字符串描述符使用Unicode标准。

例程定义了4个字符串描述符。

const uint8_t usbDeviceStringLangID[USB_DEVICE_STRING_LANGID] =
{
    USB_DEVICE_STRING_LANGID,
    USB_STRING_DESCRIPTOR_TYPE,
    0x09,
    0x04
}; /* LangID = 0x0409: U.S. English */

const uint8_t usbDeviceStringVendor[USB_DEVICE_STRING_VENDOR] =
{
    USB_DEVICE_STRING_VENDOR,    /* Size of Vendor string */
    USB_STRING_DESCRIPTOR_TYPE,  /* bDescriptorType*/
    /* Manufacturer: "STMicroelectronics" */
    'S', 0, 'T', 0, 'M', 0, 'i', 0, 'c', 0, 'r', 0, 'o', 0, 'e', 0,
    'l', 0, 'e', 0, 'c', 0, 't', 0, 'r', 0, 'o', 0, 'n', 0, 'i', 0,
    'c', 0, 's', 0
};

const uint8_t usbDeviceStringProduct[USB_DEVICE_STRING_PRODUCT] =
{
    USB_DEVICE_STRING_PRODUCT,          /* bLength */
    USB_STRING_DESCRIPTOR_TYPE,        /* bDescriptorType */
    'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, ' ', 0, 'J', 0,
    'o', 0, 'y', 0, 's', 0, 't', 0, 'i', 0, 'c', 0, 'k', 0
};

uint8_t usbDeviceStringSerial[USB_DEVICE_STRING_SERIAL] =
{
    USB_DEVICE_STRING_SERIAL,           /* bLength */
    USB_STRING_DESCRIPTOR_TYPE,        /* bDescriptorType */
    'S', 0, 'T', 0, 'M', 0, '1', 0, '3', 0
};

和设备描述符类似,结构Device_Property有一个函数是获取字符描述符的。

ONE_DESCRIPTOR stUsbStringDescriptor[] =
{
    {(uint8_t*)usbDeviceStringLangID, USB_DEVICE_STRING_LANGID},
    {(uint8_t*)usbDeviceStringVendor, USB_DEVICE_STRING_VENDOR},
    {(uint8_t*)usbDeviceStringProduct, USB_DEVICE_STRING_PRODUCT},
    {(uint8_t*)usbDeviceStringSerial, USB_DEVICE_STRING_SERIAL}
};

uint8_t *usbClassGetStringDescriptor(uint16_t Length)
{
    uint8_t wValue0 = pInformation->USBwValue0;
    if (wValue0 >= 4)
    {
        return NULL;
    }
    else
    {
        return Standard_GetDescriptorData(Length, &stUsbStringDescriptor[wValue0]);
    }
}

注意设备描述符中的iVendor、iProduct、iSerialNum,它们正好对应在stUsbStringDescriptor中的位置,即USB主机得到设备描述符就可以知道对应的厂家,产品和产品序列号所对应的字符串描述符。

索引值0默认对应usbDeviceStringLangID。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值