如何查询手柄与PC通信的数据格式?USB HID协议方面的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查询手柄与PC通信的数据格式?USB HID协议方面的问题相关的知识,希望对你有一定的参考价值。

我想做关于手柄方面的设计,但是查询了很久都没有查到相应的与PC通信数据结构,例如手柄的按钮1的数据格式是怎么样的?例子就如下面这样:

例如:

鼠标发送给PC的数据每次4个字节
BYTE1 BYTE2 BYTE3 BYTE4
定义分别是:
BYTE1 --
|--bit7: 1 表示 Y 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出
|--bit6: 1 表示 X 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出
|--bit5: Y 坐标变化的符号位,1表示负数,即鼠标向下移动
|--bit4: X 坐标变化的符号位,1表示负数,即鼠标向左移动
|--bit3: 恒为1
|--bit2: 1表示中键按下
|--bit1: 1表示右键按下
|--bit0: 1表示左键按下
BYTE2 -- X坐标变化量,与byte的bit4组成9位符号数,负数表示向左移,正数表右移。用补码表示变化量
BYTE3 -- Y坐标变化量,与byte的bit5组成9位符号数,负数表示向下移,正数表上移。用补码表示变化量
BYTE4 -- 滚轮变化。
由于手上没有USB鼠标,对BYTE1的4-7位没有测试,对于BYTE2 BYTE3做个测试,BYTE1的4-7全为0的时候,BYTE2
BYTE3的正负表示鼠标移动方向

键盘发送给PC的数据每次8个字节
BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7 BYTE8
定义分别是:
BYTE1 --
|--bit0: Left Control是否按下,按下为1
|--bit1: Left Shift 是否按下,按下为1
|--bit2: Left Alt 是否按下,按下为1
|--bit3: Left GUI 是否按下,按下为1
|--bit4: Right Control是否按下,按下为1
|--bit5: Right Shift 是否按下,按下为1
|--bit6: Right Alt 是否按下,按下为1
|--bit7: Right GUI 是否按下,按下为1
BYTE2 -- 暂不清楚,有的地方说是保留位
BYTE3--BYTE8 -- 这六个为普通按键

鼠标键盘倒是查到大量的资料,不知道各位可以帮帮我吗?

我好像看过有游戏手柄的hid描述符,或者自己把游戏手柄接到电脑,用bus hound监测各个按键按下时的数据 参考技术A USB HID
是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。

下列是HID类别设备的主要能力:
1、交换的数据存储在称为报表(report)的结构内,设备的固件必须支持HID报表的格式。主机在控制与中断传输中传送与要求报表,来传送与接收数据。报表的格式非常有弹性,可以处理任何类别的数据。
2、每一笔事务可以携带小量或中量的数据。低速设备每一笔事务最大是8个字节,全速设备每一笔事务最大是64个字节,高速设备每一笔事务最大是1024个字节。一个报表可以使用多笔事务。
3、设备可以在未预期的时间传送信息给主机,例如键盘的按键或是鼠标的移动。所以主机会定时轮询设备,来取得最新的数据。
下列是HID类别设备的主要限制:
1、最大的传输速度有限,特别是低速与全速的时候。主机可以保证低速的中断端点,每10ms内不会有超过1笔事务,每一秒最多800个字节。主机可以保证 全速端点,每1ms1笔事务,每一秒最多是6400个字节。主机可以保证高速端点,每125us3笔事务,每一秒最多24.576MB。
2、没有保证的传输速率。如果设备是设置在10ms的时距,事务之间的时间可能等于或小于10ms。除非设备是设置在全速时在每个帧传输数据,或是在高速时在每个微帧传输数据。这是最快的轮询速率,所以断点可以保证有正确的带宽可供使用。
3、Windows98Gold系统不支持中断输出传输,所有主机与设备的数据都必须使用控制传输。
HID设备除了传送数据给主机外,它也会从主机接收数据。只要能够符合HID类别规范的设备都可以是HID设备,在规范内提到了条型码笔、温度计以及电压计等例子。这些设备虽然没有传统的人机接口,但是它们都可以传送数据给主机,也可以从主机接收配置的要求。
设备除了HID接口之外,它可能同时还包含有其他的USB接口。例如影像显示设备可能使用HID接口来做亮度,对比,与更新率的软件控制,而使用传统的影 像接口来传送要显示的数据。USB扩音器可以使用实时传输来播放语音,同时使用HID接口来控制音量,震荡,与低音等。HID接口通常比传统的控制接口来 得便宜。
HID类别设备的规范是Device Class Definition for Human Interface Devices。另外还有一份文件HID Usabe Tables,用来定义让主机了解以及使用HID数据的数值。这两份文件是由USB Device Working Group所制定,Group的成员都是USB实施者论坛的会员。您可以在USB实施者论坛网站上下载这两份文件。 地址:http://www.usb.org
参考技术B 如果驱动正确的话,一般xp都能自动识别驱动大部分手柄,应该是那手柄有毛病!
参考技术C hid文档没有?
建议去微软那找下文档。微软的游戏手柄按键定义。。

以上是关于如何查询手柄与PC通信的数据格式?USB HID协议方面的问题的主要内容,如果未能解决你的问题,请参考以下文章

求救!!usb hid设备(模拟键盘)遇到的问题

如何与 Windows 上的 USB-HID 设备通信?

usb蓝牙转hid

OsX 中 USB HID API 的回调永远不会被游戏手柄或其他任何东西调用

USB-HID的介绍

使用 Android 与 USB HID 设备通信