linux usb组合设备,(转)一个usb口实现多usb设备之USB HID复合设备实例(键盘+鼠标)

4076426411de657585834f1511f54f62.bmp

插上设备,实际测试看看效果,再打开设备管理器,发现人体学输入设备里只多出了一个人体学输入设备(图中另一个是我本来的USB鼠标),在键盘和鼠标里都多了一个HID类型的键盘和鼠标,再分别查看它们的PID和VID,发现都是一样的。

上两节我们实现了USB鼠标和USB键盘的实例,也许有人会问能不能用一套硬件同时实现USB鼠标和USB键盘的功能,答案是肯定的,而且这种应用场合是有的,比如带鼠标功能的多媒体键盘。

实现这种USB HID复合设备有两种方法,在《usbhid协议入门》一节已经讲到其中一种方法,说一个USB HID设备可以包含多种功能的报告描述符合集,这样可以实现复合设备,如带鼠标功能的USB键盘,这种复合键盘可以通过在报告描述里包含键盘和鼠标两种报告来实现,两个报告用报告ID来区分。这节我们就用这种方法来实现同时带鼠标和键盘功能的USB HID复合设备,有关另外一种方法的详细教程和实例可以参考本工作室推出的USB学习板。

既然可以用“在报告描述里包含键盘和鼠标两种报告来实现”,那么我们就把上两节的键盘和鼠标实例的报告描述符放在一起,再加上报告ID就是了,修改后的报告描述符如下:code char MouseReportDescriptor[119] = {

//-------------键盘部分报告描述符----------------

//表示用途页为通用桌面设备

0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)

//表示用途为键盘

0x09, 0x06,                    // USAGE (Keyboard)

//表示应用集合,必须要以END_COLLECTION来结束它,见最后的END_COLLECTION

0xa1, 0x01,                    // COLLECTION (Application)

//报告ID(报告ID 0是保留的)

0x85, 0x01, //Report ID (1)

//表示用途页为按键

0x05, 0x07,                    //   USAGE_PAGE (Keyboard)

//用途最小值,这里为左ctrl键

0x19, 0xe0,                    //   USAGE_MINIMUM (Keyboard LeftControl)

//用途最大值,这里为右GUI键,即window键

0x29, 0xe7,                    //   USAGE_MAXIMUM (Keyboard Right GUI)

//逻辑最小值为0

0x15, 0x00,                    //   LOGICAL_MINIMUM (0)

//逻辑最大值为1

0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)

//报告大小(即这个字段的宽度)为1bit,所以前面的逻辑最小值为0,逻辑最大值为1

0x75, 0x01,                    //   REPORT_SIZE (1)

//报告的个数为8,即总共有8个bits

0x95, 0x08,           

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值