HID类GamePad和兼容HID设备报表描述符
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位的数据中。
HID类GamePad和兼容HID设备报表描述符的更多相关文章
- Day 21 python :面向对象 类的相关内置函数 /单例模式 /描述符
1.isinstance(obj,cls) 检查obj是否是类cls的对象: 备注:用isinstance 的时候,产生实例后,会显示实例既是父类的实例,也是子类的实例 class Mom: gend ...
- USB HID设备报告描述符详解(转)
转自:http://group.ednchina.com/93/198.aspx. 参考:USB HID usage table 概述: 报告在这里意思是数据传输(data transfer),而 ...
- USB系列之二:读取USB设备的描述符
在前面的文章中,我们已经给出了USB协议的链接地址,从这篇文章起,我们会涉及到许多USB 1.1的内容,我们的指导思想是先从熟悉USB 1.1协议入手,先使用现成的HCD和USBD,直接面对客户端驱动 ...
- HID 报告描述符精细说明.
1,报告描述符概述 1.1) 报表描述符 报表描述符和USB的其他描述符是不一样的,它不是一个简单的表格,报表描述符是USB所有描述符中最复杂的.报表描述符非常复杂而有弹性,因为它 ...
- 11.python描述符---类的装饰器---@property
描述符1.描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()这三个内置方法中的一个,描述符也被称为描述符协议(1):__ ...
- Ubuntu/Windows下利用“HIDAPI”库函数实现与Hid类USB设备通信
一.背景: 最近在做的一个项目需要使用USB传递数据,对USB理解不是很深,USB的系统驱动编写则更是天方 夜谭,因此将设备配置成HID类设备成为了首选.其最大的好处在于,LINUX/Windows系 ...
- 基于MDK的ARM-GCC开发环境建立及新唐M0的HID类设备的C++开发
一,下载安装测试arm-none-eabi-gcc编译工具链 1,查看arm-none-eabi-gcc编译工具版本 打开网页:https://sourcery.mentor.com/G ...
- USB学习小记-HID类键盘的报告描述符的理解
前言 断断续续的学习了将近三个月,才把USB的HID类搞明白,速度真是够慢的.利用晚上+周末的时间学习自己的东西确实是必要的,不过效率是有点低,以后要更专注一些才行,希望自己能做到吧. 在学习过程中, ...
- 一个AVRUSB作品HID类
最近为了HID类设备弄了半个把月.终于完成这个无线(红外)多媒体键盘,带鼠标功能.难就难在描述符上,不过在近4天的资料翻阅及多次的测试下,电脑不知道重启了多少次啊,的情况下 搞定了这个东西,大家可以看 ...
- USB HID描述符【转】
本文转载自: USB是个通用的总线,端口都是统一的.但是USB设备却各种各样,例如USB鼠标,USB键盘,U盘等等,那么USB主机是如何识别出不同的设备的呢?这就要依赖于描述符了.USB的描述符主要有 ...
随机推荐
- DNS欺骗:网站克隆实现网站钓鱼攻击
1 DNS 1.1 DNS是什么? 域名系统(Domain Name System)是互联网使用的命名系统,用来将主机域名转换为 ip 地址,属于应用层协议,使用 UDP 传输. 1.2 为什么需要D ...
- SOFAJRaft模块启动过程
本篇文章旨在分析SOFAJRaft中jraft-example模块的启动过程,由于SOFAJRaft在持续开源的过程中,所以无法保证示例代码永远是最新的,要是源代码有较大的变动,亦或出现纰漏.错误的地 ...
- dapr入门与本地托管模式尝试
1 简介 Dapr是一个可移植的.事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的.无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架.Dapr支持的语言 ...
- JVM参数:带你认识-X和-XX参数
摘要:JVM参数分为三类:标准参数.非标准参数(-X参数)和高级选项(-XX参数).本文主要为大家讲解-X参数和-XX参数. 本文分享自华为云社区<JVM运行参数之-X和-XX参数>,作者 ...
- Windows性能监控工具Perfmon的使用、性能指标分析
Fighting_001 关注 0.1 2018.08.25 22:18* 字数 1488 阅读 7604评论 0喜欢 4 目录结构 一.Perfmon简介.性能监控指标.性能对象指标 1.常用的性 ...
- Solon 的插件热插拨管理机制(H-Spi)
插件热插拨管理机制,简称:H-Spi.是框架提供的生产时用的另一种高级扩展方案.相对E-Spi,H-Spi 更侧重隔离.热插热拨.及管理性. 应用时,是以一个业务模块为单位进行开发,且封装为一个独立插 ...
- ChatGPT集成之前,让我们复习一下即将过时的知识
各大搜索引擎集成 ChatGPT 的步调已经在逐步加紧了.也许这将极大的改变搜索引擎的生态.那么就让我们在时代迎来巨变之前,复习一下即将过时的搜索引擎知识吧. 搜索引擎一般查询规则 在搜索引擎的时代, ...
- 联邦GNN综述与经典算法介绍
作者:京东科技 李杰 联邦学习和GNN都是当前AI领域的研究热点.联邦学习的多个参与方可以在不泄露原始数据的情况下,安全合规地联合训练业务模型,目前已在诸多领域取得了较好的结果.GNN在应对非欧数据结 ...
- go语言面试
go面试 基础 = 和 := 的区别? **Go语言中,= 操作符用于赋值,而 := 操作符可以用于声明及赋值. Go 语言支持短变量声明(针对局部变量),以 := 为标志,这里要注意的是,Go 语言 ...
- 一篇文章让你了解这个基于树莓派而设计的工业计算机-CM4 Industrial
CM4 Industrial是一款基于 Raspberry Pi / 树莓派 Compute Module 4,由EDATEC面向工业应用设计的嵌入式计算机设计的工业嵌入式计算机.系统可以根据不同的应 ...