[STM32F1]

STM32F1用USB模拟HID键盘的通信格式

[复制链接]
3316|10
手机看帖
扫描二维码
随时随地手机跟帖
通宵敲代码|  楼主 | 2017-6-27 16:00 | 显示全部楼层 |阅读模式


承接上贴
https://bbs.21ic.com/forum.php?mo ... p;page=1#pid8066394

上次测试的程序移植到MDK5上之后,可以正确识别HID键盘鼠标,
不过后来发现模拟键盘鼠标通信的时候,通信格式有点错误,
便进行了测试以便改正。


通宵敲代码|  楼主 | 2017-6-27 16:04 | 显示全部楼层


以下为转载内容,鼠标的介绍存在错误!!!


废话不多说,进入正题:

键盘发送给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 -- 这六个为普通按键
键盘经过测试。
例如:键盘发送一帧数据   02 00 0x04 0x05 00 00 00 00
表示同时按下了Left Shift + ‘a’+‘b’三个键
对于键码和PS2的键盘有所不同,具体请看附件。
USB HID to PS2 Scan Code 对照表.pdf

鼠标发送给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的正负表示鼠标移动方向



使用特权

评论回复
通宵敲代码|  楼主 | 2017-6-27 16:12 | 显示全部楼层


根据上面的介绍,
我在工程中增加如下函数,
重新调整了键盘鼠标发送的数据格式,
经过测试,键盘发送数据正常,
但鼠标关于byte1直接的描述仍存在错误。

新增函数如下
TIM截图20170627160651.png

键盘正常发送数据
TIM截图20170627161005.png

鼠标实现画图
TIM截图20170627160214.png




使用特权

评论回复
通宵敲代码|  楼主 | 2017-6-27 16:16 | 显示全部楼层



关于鼠标发送数据格式的推测

鼠标发送给PC的数据每次5个字节
BYTE1 BYTE2 BYTE3 BYTE4 BYTE5
定义分别是:
BYTE2 -- 始终为0x01,其他格式测试数据通信无效
BYTE2 --
       |--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 -- 滚轮变化。


附上更改后的工程
STM32_USB_复合设备_2017-06-21-23.zip (609.32 KB)

使用特权

评论回复
lxyppc| | 2017-6-27 16:23 | 显示全部楼层
看报告描述符就能知道各字节是什么意思

使用特权

评论回复
lingwise| | 2017-7-3 16:56 | 显示全部楼层
谢谢分享,写得很详细,留个记号

使用特权

评论回复
haov000| | 2017-7-3 17:11 | 显示全部楼层
不错不错 谢谢分享

使用特权

评论回复
cainiao518| | 2019-1-2 10:16 | 显示全部楼层
不错,不错

使用特权

评论回复
huzhengdong158| | 2019-7-23 10:52 | 显示全部楼层
下载后,怎么格式损坏了,不能用

使用特权

评论回复
huzhengdong158| | 2019-7-23 10:58 | 显示全部楼层
huzhengdong158 发表于 2019-7-23 10:52
下载后,怎么格式损坏了,不能用

可以用了,迅雷有问题,谢谢楼主

使用特权

评论回复
wenunit| | 2019-10-19 09:10 | 显示全部楼层
厉害了,哈哈。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:年轻不是资本,奋斗才是良策!

301

主题

7532

帖子

67

粉丝