自定义USB-HID设备_笔记

参考圈圈教程:

在USB键盘的描述符基础上做如下修改:

1、Device Descriptor :修改PID/VID ;

2、Configuration Descriptor :修改 Interface Descriptor中的 bInterfaceSubClass 字段和bInterfaceProtocol字段改为 0 ;(自定义HID不使用子类和协议)

3、HID Report Descriptor :

  • 应用集合的用途改为0x00(undefined)
  • 修改报告描述符格式


//USB报告描述符的定义
code uint8 ReportDescriptor[]=
{
 //每行开始的第一字节为该条目的前缀,前缀的格式为:
 //D7~D4:bTag。D3~D2:bType;D1~D0:bSize。以下分别对每个条目注释。
 
 //这是一个全局(bType为1)条目,将用途页选择为普通桌面Generic Desktop Page。
 //后面跟1字节数据(bSize为1),后面的字节数就不注释了,自己根据bSize来判断。
 0x05, 0x01, // USAGE_PAGE (Generic Desktop)
 
 //这是一个局部(bType为2)条目,用途选择为0x00。在普通桌面页中,
 //该用途是未定义的,如果使用该用途来开集合,那么系统将不会把它
 //当作标准系统设备,从而就成了一个用户自定义的HID设备。
 0x09, 0x00, // USAGE (0)
 
 //这是一个主条目(bType为0)条目,开集合,后面跟的数据0x01表示
 //该集合是一个应用集合。它的性质在前面由用途页和用途定义为
 //用户自定义。
 0xa1, 0x01, // COLLECTION (Application)

 //这是一个全局条目,说明逻辑值最小值为0。
 0x15, 0x00, //     LOGICAL_MINIMUM (0)
 
 //这是一个全局条目,说明逻辑值最大为255。
 0x25, 0xff, //     LOGICAL_MAXIMUM (255)
 
 //这是一个局部条目,说明用途的最小值为1。
 0x19, 0x01, //     USAGE_MINIMUM (1)
 
 //这是一个局部条目,说明用途的最大值8。
 0x29, 0x08, //     USAGE_MAXIMUM (8) 
 
 //这是一个全局条目,说明数据域的数量为八个。
 0x95, 0x08, //     REPORT_COUNT (8)
 
 //这是一个全局条目,说明每个数据域的长度为8bit,即1字节。
 0x75, 0x08, //     REPORT_SIZE (8)
 
 //这是一个主条目,说明有8个长度为8bit的数据域做为输入。
 0x81, 0x02, //     INPUT (Data,Var,Abs)
 
 //这是一个局部条目,说明用途的最小值为1。
 0x19, 0x01, //     USAGE_MINIMUM (1)
 
 //这是一个局部条目,说明用途的最大值8。
 0x29, 0x08, //     USAGE_MAXIMUM (8) 
 
 //这是一个主条目。定义输出数据(8字节,注意前面的全局条目)。
 0x91, 0x02, //   OUTPUT (Data,Var,Abs)
 
 //下面这个主条目用来关闭前面的集合。bSize为0,所以后面没数据。
 0xc0        // END_COLLECTION
};
//通过上面的报告描述符的定义,我们知道返回的输入报告具有8字节。
//输出报告也有8字节。至于这8字节的数据是干什么用的,就要由用户
//自己来决定了。像我们这个实验,输入报告的第一字节用来描述8个按键
//的状态,第二到第五字节返回返回报告的次数(增加一个长整型的变量Count,
//每发送一次报告就加1)。而输出报告的第一字节则用来控制板上8个LED
//的状态,第二字节(非0时)用来清除上面的报告计数器Count。



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值