开发环境:win7
开发板 :51单片机 + pdiusbd12 芯片
前言:
HID(Human Interface Device,人机接口设备)是USB设备中常用的设备类型,是直接与人交互的USB设备,
例如键盘、鼠标与游戏杆等。在USB设备中,HID设备的成本较低。
另外,HID设备并不一定要有人机交互功能,只要符合HID类别规范的设备都是HID设备。
所有的HID传输都是使用默认控制管道或是一个中断管道,HID设备必须有一个中断
输入端点来传送数据到主机,中断输出端点则不是必需的。
1,HID设备描述符
HID设备除了支持USB设备的5种标准描述符之外,还支持HID设备特有的3种描述符。这些描述符是:
a) USB标准描述符:设备、配置、接口、端点和字符串描述符。
b) HID特有的描述符:HID、报表(Report)和实体(Physical)描述符。
从描述符的关联关系看,HID描述符是关联于接口。所以如果一个HID设备有2个端点,设备不需要每个端点有一个HID描述符。
HID描述符的主要作用是用来识别HID通信所使用的额外描述符。下表是HID描述符结构。
bcdHID:设备与其描述符所遵循的HID规范的版本号码,此数值是4个16进位的BCD格式字符。例如版本1.1的bcdHID是0110h。
bCountryCode:硬件目的国家的识别码。如果不说明,该字段为0。
点击(此处)折叠或打开
-
typedef struct _hid_sub_descriptor
-
{
-
uint8_t bDescriptorType; // hid附属描述符类型
-
uint16_t wDescriptorLength; // 该描述符的总长度
-
}hid_sub_descriptor_t;
-
-
#define HID_SUB_DESCRIPTOR_MAX 1 // hid附属描述符的个数
-
-
typedef struct _hid_descriptor
-
{
-
uint8_t bLength; // HID描述符字节数大小
-
uint8_t bDescriptorType; // HID描述符类型编号
-
uint16_t bcdHID; // HID规范版本号(BCD码表示)
-
uint8_t bCountryCode; // 硬件设备所在的国家的国家编号
-
uint8_t bNumDescriptors; // hid附属描述符的数目(至少有一个report 描述符)
-
hid_sub_descriptor_t hidSubDescriptors[HID_SUB_DESCRIPTOR_MAX];
-
}hid_descriptor_t;
-
set->hid.bLength = sizeof(hid_descriptor_t); //HID描述符的字节数大小
-
set->hid.bDescriptorType = DESC_TYPE_HID; //HID描述符类型编号
-
set->hid.bcdHID = SWAP16(0x0110); //HID类协议版本号,为1.1
-
set->hid.bCountryCode = 0x21; //固件的国家地区代号,0x21为美国
-
set->hid.bNumDescriptors = HID_SUB_DESCRIPTOR_MAX; //下级描述符的数量
-
-
set->hid.hidSubDescriptors[0].bDescriptorType = DESC_TYPE_REPORT; //下级描述符为报告描述符
-
set->hid.hidSubDescriptors[0].wDescriptorLength = SWAP16(sizeof(MouseReportDescriptor)); //下级描述符的长度
2,interface 描述符中实现指定HID设备
-
interface->bLength = sizeof(interface_descriptor_t); //接口描述符的字节数大小
-
interface->bDescriptorType = DESC_TYPE_INTERFACE; //接口描述符类型编号
-
interface->bInterfaceNumber = 0x00; //接口编号为0
-
interface->bAltenateSetting = 0x00; //该接口描述符的编号
-
interface->bNumEndpoints = ENDPOINT_MAX; //非0端点数量为2,只使用端点主端点输入和输出
-
interface->bInterfaceClass = 0x03; //人机接口设备(HID)类
-
interface->bInterfaceSubClass = 0x01; //使用的子类:支持BIOS根启动Boot的子类
-
interface->bInterfaceProtocol = 0x02; //使用的协议:鼠标
-
interface->iInterface = 0x00; //接口描述符字符串索引
bInterfaceSubClass:
bInterfaceProtocol:
3,HID设备的报告描述符的实现
详情请看:
usb鼠标_HID报告描述符的实现(11)
阅读(2562) | 评论(0) | 转发(0) |