目录

1.12版本规范的GamePad参考报表描述符,报表格式如下图。

用CH582模拟GamePad,在电脑上显示的HID接口↓

报表描述符↓,其他描述符可以直接参考JoyStick相关一文,改一下HID类描述符中的一个长度值即可,见文章最后。

const uint8_t GamePadRepDesc[] = { //HID1.12规范,该报表适用于类似街机游戏机上有1个摇杆+6个按键的设备
  0x05, 0x01,       //UsagePage(Generic Desktop) UsagePage定义数据的用法或功能
  0x09, 0x05,       //Usage(Game Pad) Usage描述项目
  0xA1, 0x01,       //Collection(Application) Collection:包含有共同用途或者执行单一功能的项目。
    0x09, 0x01,     //Usage (Pointer)   定义指针(摇杆)
    0xA1, 0x00,     //Collection(Physical) 物理按键集合
      0x09, 0x30,   //Usage (X)    X方向
      0x09, 0x31,   //Usage (Y)    Y方向
      0x15, 0xFF,   //Logical Minimum (-1) 报表项目的最小数值
      0x25, 0x01,   //Logical Maximum (1) 报表项目的最大数值
      0x75, 0x02,   //Report Size (2) 项目字段的大小
      0x95, 0x02,   //Report Count (2) 项目的数据域位的数目
      0x81, 0x02,   //Input (Data,Variable,Absolute,No Null) 0x02的各位含义详见卷标
    0xC0,         //End Collection 关闭集合     0x75, 0x04,     //Report Size (4) 项目字段的大小 4-bit pad
    0x95, 0x01,     //Report Count (1) 项目的数据域位的数目
    0x81, 0x03,     //Input (Constant, Variable, Absolute) 0x03的各位含义详见卷标     0x05, 0x09,     //Usage Page (Buttons)  定义按键
    0x19, 0x01,     //Usage Minimum (Button 1)  定义1~6号六个按键
    0x29, 0x06,     //Usage Maximum (Button 6)
    0x15, 0x00,     //Logical Minimum (0) 报表项目的最小数值
    0x25, 0x01,     //Logical Maximum (1) 报表项目的最大数值
    0x95, 0x06,     //Report Count (6) 6个数据段
    0x75, 0x01,     //Report Size (1) 每个数据段占1位
    0x81, 0x02,     //Input (Data, Variable, Absolute) 0x02的各位含义详见卷标     0x95, 0x02,     //Report Count (2) 回传2个数据 Size沿用上一个 2-bit pad
    0x81, 0x03,     //Input (Constant, Variable, Absolute) 0x03的各位含义详见卷标
  0xC0           //End Collection 关闭集合
}; 

HID兼容设备也是HID中的一种设备。之所以“兼容”,是因为其支持双向传输,基本不做报表格式的限制,但数据中各字节各位的内容,就需要上层软件作区分。

下列描述符能够实现64字节的双向传输,无固定格式,在电脑上显示如图的HID接口↓

设备描述符略,具体含义见JoyStick相关一文,配置描述符↓

const uint8_t MyCfgDescr[] = {
0x09,0x02,0x29,0x00,0x01,0x01,0x04,0xA0,0x32, //配置描述符
0x09,0x04,0x00,0x00,0x02,0x03,0x00,0x00,0x00, //接口描述符
0x09,0x21,0x00,0x01,0x00,0x01,0x22,0x22,0x00, //HID类描述符  
0x07,0x05,0x81,0x03,0x40,0x00,0x01, //端点1 IN方向
0x07,0x05,0x01,0x03,0x40,0x00,0x01 //端点1 OUT方向
};

const uint8_t HIDDescr[] = { //HID1.0版本协议,双向传输HID兼容设备
  0x06, 0x00,0xFF,      //UsagePage(Vendor-defined)  厂商自定义用法或功能(在UsagePage使用了“厂商自定义”之后,以下的Usage都为厂商自定义,这里我都写0xFF了,厂商能够自行区分就好。在使用了标准的UsagePage后,Usage才需要继续查表格去得到标准值)
  0x09, 0xFF,         //Usage  自定义
  0xA1, 0xFF,         //Collection(Vendor-defined)  厂商自定义集合
    0x09, 0xFF,       //Usage  自定义
    0x15, 0x00,       //Logical Minimun(0)  报表项目的最小数值
    0x26, 0x00,0xFF,    //Logical Maximun(65280)  报表内容最大数值
    0x75, 0x08,       //Report Size(8)  每个数据段占8位
    0x95, 0x40,       //Report Counet(64)  64个数据段  双向64字节数据的IN方向传输
    0x81, 0x02,       //Input(Data,Variable,Absolute)  0x02各项含义详见卷标
    0x09, 0xFF,       //Usage  自定义
    0x15, 0x00,       //Logical Minimun(0)  报表项目的最小数值
    0x26, 0x00,0xFF,    //Logical Maximun(65280)  报表内容最大数值
    0x75, 0x08,       //Report Size(8)  每个数据段占8位
    0x95, 0x40,       //Report Counet(64)  64个数据段  双向64字节数据的OUT方向传输
    0x91, 0x02,       //Output(Data,Variable,Absolute)  0x02各项含义详见卷标
  0xC0             //End Collection 关闭集合
};

小贴士:HID类描述符中有代码是相关报表描述符总长度的↓

  0xXX(低8位), 0xXX(高8位),     //wDescriptorLength 报表描述符总长度

如果报表描述符不长,也可以将其写在类描述符的前面,用sizeof来获取长度,直接放到低8位的字节内。若报表描述符较长,就需要另行自定义函数去判断长度,再放进共计16位的数据中。

最新文章

  1. CozyRSS开发记录22-界面退化
  2. 在Linux客户机与Windows宿主机之间建立共享(VitrualBox)
  3. JNDI学习总结(一)——JNDI数据源的配置
  4. Hearthstone-Deck-Tracker项目的编译
  5. C++_快速排序
  6. 安装Oracle数据库和PLSQL连接数据库
  7. F - The Circumference of the Circle
  8. DBubtil的使用
  9. Linux中允许远程用户登录访问mysql的方法
  10. 13、ABPZero系列教程之拼多多卖家工具 微信公众号开发前的准备
  11. spring的7个模块
  12. Docker构建其它组件
  13. 浅谈Web服务器和应用服务器的区别
  14. vue中动态加载组件+开发者模式+JS参数值传递和引用传递
  15. openssl查看apk的证书信息
  16. SharePoint Online 自定义Modern UI表单
  17. python中a, b = a, a + b
  18. S2算法应用
  19. python: 面向对象:类和对象调用类中的变量和方法
  20. Geohash距离估算

热门文章

  1. Java遍历Map集合
  2. VUE Angular通用动态列表组件-亦可为自动轮播组件-01-根据数据量自动纵向滚动,鼠标划入停止滚动
  3. Vue ElementUI 修改MessageBox 弹框样式
  4. 都用过@Autowired,但你知道它是怎么实现的吗
  5. 同类型芯片资源对比-CH32x芯片快速应用说明
  6. 图解B树及C#实现(3)数据的删除
  7. docker搭建maven私服(nexus3),整合springboot上传下载依赖
  8. 0基础搭建基于OpenAI的ChatGPT钉钉聊天机器人
  9. C#/VB.NET 如何在不同工作簿之间复制单元格范围
  10. springcloud04 Ribbbon