amobbs.com 阿莫电子技术论坛

标题: 请问HID键盘全键无冲是怎么做到的? [打印本页]

作者: shenrongze    时间: 2018-8-5 17:24
标题: 请问HID键盘全键无冲是怎么做到的?
同上,正在折腾 stm32键盘,hid键盘标准只能发8个固定键+6个按键,手里有一把以前买的87键的机械键盘,确实是能做到全部按键按下都能响应,这个图是Bus Hound 里面看到的[attach]423146[/attach]
对hid还不是很熟,问一下,这三个端点加起来不是才38个包吗?怎样能做到所有键按下都能响应呢?谢谢
作者: shenrongze    时间: 2018-8-5 17:28
[attach]423147[/attach]

这是另外一把108键的
作者: mcu5i51    时间: 2018-8-5 17:49
和其它没有关系,协议中发的是按键按下和放开;
可以有几个同时按下是控制芯片中提供多少内存保存操作的状态
作者: shenrongze    时间: 2018-8-5 17:57
mcu5i51 发表于 2018-8-5 17:49
和其它没有关系,协议中发的是按键按下和放开;
可以有几个同时按下是控制芯片中提供多少内存保存操作的状 ...

不是,hid协议规定,键盘一次传输只能8个字节,第一个是控制键(CTRL、SHIFT这些)1个位代表一个键,第二个保留,第三个到第八个,每个代表一个键值。所以普通键盘只支持8+6个键
作者: shenrongze    时间: 2018-8-5 18:00
如果说模拟成多个键盘,那就得模拟十多个设备了,那有点夸张,其他品牌键盘他们也只有两三个设备
作者: mcu5i51    时间: 2018-8-5 18:03
可以在1ms之后传送,100个键有十几ms就完成了,全键无冲是可以响应全部按键,不是同时吧;
普通的一个个的按下,会有没有测试到(无响应)的;
作者: shenrongze    时间: 2018-8-5 18:08
mcu5i51 发表于 2018-8-5 18:03
可以在1ms之后传送,100个键有十几ms就完成了,全键无冲是可以响应全部按键,不是同时吧;
普通的一个个的 ...

不可以的,它是你发一次数据过去,如果不发0,就一直认为正在按下,如果你发别的数据过去,它就认为前面的按键松开了,正在按其他的键
作者: OurWay    时间: 2018-8-5 20:51
看后面的描述符吧,应该第一个是正常发送的,后面是映射的方式的描述吧,一个BIT位代表一个按键值,全键盘无冲  硬件电路 也得特殊处理
作者: hz_fujian    时间: 2018-8-5 21:19
好像以前有种两人用按键对打的游戏,每人至少分配4个按键(在同一键盘上)。
作者: shenrongze    时间: 2018-8-5 21:32
本帖最后由 shenrongze 于 2018-8-5 21:38 编辑
OurWay 发表于 2018-8-5 20:51
看后面的描述符吧,应该第一个是正常发送的,后面是映射的方式的描述吧,一个BIT位代表一个按键值,全键盘 ...


硬件我已经弄好了,所有按键按下都可以正常采集。就是这个全键无冲有点麻烦,搞了两天,没头续,看bus hound人家是第二个端点40个字符大小,那是用到自定义吗?自定义hid电脑怎么识别为键盘数据呢,搞不明白
作者: 陈正杰    时间: 2018-8-5 21:48
关注一下,自己搞STM32 HID鼠标发送间隔也被限制在1k,有些能做到8K的频率,怎么实现的?
作者: putty    时间: 2018-8-5 21:55
hid只是提供了个键盘的建议格式。你完全可以不用那6个字节的描述方式, 只用按位描述的方式。
作者: shenrongze    时间: 2018-8-5 22:00
putty 发表于 2018-8-5 21:55
hid只是提供了个键盘的建议格式。你完全可以不用那6个字节的描述方式, 只用按位描述的方式。 ...

按位也是6*8  48个键而已呀
作者: shenrongze    时间: 2018-8-5 22:05
陈正杰 发表于 2018-8-5 21:48
关注一下,自己搞STM32 HID鼠标发送间隔也被限制在1k,有些能做到8K的频率,怎么实现的? ...

鼠标不懂~~帮不到你
作者: putty    时间: 2018-8-5 22:06
没规定只能6字节啊。想写多少就有多少
作者: shenrongze    时间: 2018-8-5 22:20
本帖最后由 shenrongze 于 2018-8-5 22:26 编辑
putty 发表于 2018-8-5 22:06
没规定只能6字节啊。想写多少就有多少


哦哦,谢谢
作者: thxlp    时间: 2018-8-6 18:09
6个字节只是兼容以前的键盘的,用在bios环境下,因为规范不要求bios解析report descriptor。
进入到操作系统以后,操作系统会解析report descriptor,这个时候就没有6字节限制了。
关于全键无冲,你可以搜索nkro。
软件上大概的就是每个键对应一个位,0表示抬起,1表示按下,这样一个字节就能表示8个键,10几个字节就能覆盖全部的键
硬件上大概就是column和row之间接上二极管
作者: SC-Electronic    时间: 2018-8-6 18:18
你要去看HID的协议了,可是协议真是多的蛋疼
作者: shenrongze    时间: 2018-8-7 00:21
thxlp 发表于 2018-8-6 18:09
6个字节只是兼容以前的键盘的,用在bios环境下,因为规范不要求bios解析report descriptor。
进入到操作系 ...

哦哦,谢谢谢谢。

大概知道怎么弄了,多字节的已经调通了,但是一次只能传0x40个字节,我又不想模拟太多接口出来,想按照您说的按位来区分,但是调了一天,没搞定,麻烦帮我看下下面这个报告描述符对不对(我是想按16个字节来传,16*8就有128了)

        0x05, 0x01,                    //        USAGE_PAGE (Generic Desktop)        //63
        0x09, 0x06,                    //        USAGE (Keyboard)
        0xa1, 0x01,                    //        COLLECTION (Application)
        0x05, 0x07,                    //   USAGE_PAGE (Keyboard)
        0x19, 0x00,                    //   USAGE_MINIMUM (Reserved (no event indicated))
        0x29, 0x65,                    //   USAGE_MAXIMUM (Keyboard Application)
        0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
        0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
        0x75, 0x01,                    //   REPORT_SIZE (1)
        0x95, 0x80,                    //   REPORT_COUNT (8)
        0x81, 0x02,                    //   INPUT (Data,Var,Abs)
        0xc0,                          //        END_COLLECTION
作者: blackcafe    时间: 2018-8-7 06:56
楼主为何不抓下你那个全键键盘的描述符分析看看人家怎么做的呢?
作者: 贰梓    时间: 2018-8-7 08:25
学习一下
作者: shenrongze    时间: 2018-8-7 09:23
gamethink 发表于 2018-8-7 08:49
你意思是,只要描述符描述正確,可以一次將100多個鍵值全部發至PC,PC也能解析?
我沒實踐過,但我認為這 ...

报告描述符里面规定好电脑就可以识别,但是好像一次最多只能发0x40即64个键
作者: shenrongze    时间: 2018-8-7 09:24
blackcafe 发表于 2018-8-7 06:56
楼主为何不抓下你那个全键键盘的描述符分析看看人家怎么做的呢?

配置描述符已经抓到了,报告描述符好像没法抓?还是要用什么软件呢
作者: CH_anyin    时间: 2018-8-7 11:03
试一下 Device Monitoring Studio
作者: winfisher    时间: 2018-8-7 12:45
学习一下,等着看结果。
gh60?
作者: huangqi412    时间: 2018-8-7 17:20
你应该把抓到的所有枚举信息保存成TXT上来给别人看看先把
作者: shenrongze    时间: 2018-8-7 22:12
winfisher 发表于 2018-8-7 12:45
学习一下,等着看结果。
gh60?

gh60就不用自己折腾代码啦
作者: sme    时间: 2018-8-8 08:40
用USB分析仪,什么都能抓出来
作者: cchwhk    时间: 2018-8-8 14:24
楼主研究明白了,记得分享一下啊。最近也打算搞这个。
作者: vuo50z    时间: 2018-8-8 15:05
mcu5i51 发表于 2018-8-5 17:49
和其它没有关系,协议中发的是按键按下和放开;
可以有几个同时按下是控制芯片中提供多少内存保存操作的状 ...

PS2协议是发送通码断码,HID不是。
HID协议很灵活,同样的数据可以有不同的发送方式。具体到按键可以每个bit代表一个按键,也可以每个字节代表一个键值,只要主机支持解析这些协议就可以。
作者: mcu5i51    时间: 2018-8-8 15:15
vuo50z 发表于 2018-8-8 15:05
PS2协议是发送通码断码,HID不是。
HID协议很灵活,同样的数据可以有不同的发送方式。具体到按键可以每个 ...

受教了,
作者: 122541325    时间: 2022-8-10 21:22
楼主,全键无冲解决了吗,最近也在搞这个,不是规定一次只能传输8个字节嘛,怎么做到全键无冲的
作者: tang_qianfeng    时间: 2022-8-12 18:26
USB full speed 最大包64字节




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4