搜索
bottom↓
回复: 33

请问HID键盘全键无冲是怎么做到的?

[复制链接]

出0入0汤圆

发表于 2018-8-5 17:24:38 | 显示全部楼层 |阅读模式
同上,正在折腾 stm32键盘,hid键盘标准只能发8个固定键+6个按键,手里有一把以前买的87键的机械键盘,确实是能做到全部按键按下都能响应,这个图是Bus Hound 里面看到的
对hid还不是很熟,问一下,这三个端点加起来不是才38个包吗?怎样能做到所有键按下都能响应呢?谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2018-8-5 17:28:49 | 显示全部楼层


这是另外一把108键的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-8-5 17:49:37 | 显示全部楼层
和其它没有关系,协议中发的是按键按下和放开;
可以有几个同时按下是控制芯片中提供多少内存保存操作的状态

出0入0汤圆

 楼主| 发表于 2018-8-5 17:57:50 | 显示全部楼层
mcu5i51 发表于 2018-8-5 17:49
和其它没有关系,协议中发的是按键按下和放开;
可以有几个同时按下是控制芯片中提供多少内存保存操作的状 ...

不是,hid协议规定,键盘一次传输只能8个字节,第一个是控制键(CTRL、SHIFT这些)1个位代表一个键,第二个保留,第三个到第八个,每个代表一个键值。所以普通键盘只支持8+6个键

出0入0汤圆

 楼主| 发表于 2018-8-5 18:00:13 | 显示全部楼层
如果说模拟成多个键盘,那就得模拟十多个设备了,那有点夸张,其他品牌键盘他们也只有两三个设备

出0入0汤圆

发表于 2018-8-5 18:03:42 | 显示全部楼层
可以在1ms之后传送,100个键有十几ms就完成了,全键无冲是可以响应全部按键,不是同时吧;
普通的一个个的按下,会有没有测试到(无响应)的;

出0入0汤圆

 楼主| 发表于 2018-8-5 18:08:57 来自手机 | 显示全部楼层
mcu5i51 发表于 2018-8-5 18:03
可以在1ms之后传送,100个键有十几ms就完成了,全键无冲是可以响应全部按键,不是同时吧;
普通的一个个的 ...

不可以的,它是你发一次数据过去,如果不发0,就一直认为正在按下,如果你发别的数据过去,它就认为前面的按键松开了,正在按其他的键

出0入0汤圆

发表于 2018-8-5 20:51:35 | 显示全部楼层
看后面的描述符吧,应该第一个是正常发送的,后面是映射的方式的描述吧,一个BIT位代表一个按键值,全键盘无冲  硬件电路 也得特殊处理

出0入4汤圆

发表于 2018-8-5 21:19:20 | 显示全部楼层
好像以前有种两人用按键对打的游戏,每人至少分配4个按键(在同一键盘上)。

出0入0汤圆

 楼主| 发表于 2018-8-5 21:32:47 | 显示全部楼层
本帖最后由 shenrongze 于 2018-8-5 21:38 编辑
OurWay 发表于 2018-8-5 20:51
看后面的描述符吧,应该第一个是正常发送的,后面是映射的方式的描述吧,一个BIT位代表一个按键值,全键盘 ...


硬件我已经弄好了,所有按键按下都可以正常采集。就是这个全键无冲有点麻烦,搞了两天,没头续,看bus hound人家是第二个端点40个字符大小,那是用到自定义吗?自定义hid电脑怎么识别为键盘数据呢,搞不明白

出0入0汤圆

发表于 2018-8-5 21:48:15 | 显示全部楼层
关注一下,自己搞STM32 HID鼠标发送间隔也被限制在1k,有些能做到8K的频率,怎么实现的?

出0入0汤圆

发表于 2018-8-5 21:55:24 | 显示全部楼层
hid只是提供了个键盘的建议格式。你完全可以不用那6个字节的描述方式, 只用按位描述的方式。

出0入0汤圆

 楼主| 发表于 2018-8-5 22:00:49 | 显示全部楼层
putty 发表于 2018-8-5 21:55
hid只是提供了个键盘的建议格式。你完全可以不用那6个字节的描述方式, 只用按位描述的方式。 ...

按位也是6*8  48个键而已呀

出0入0汤圆

 楼主| 发表于 2018-8-5 22:05:13 | 显示全部楼层
陈正杰 发表于 2018-8-5 21:48
关注一下,自己搞STM32 HID鼠标发送间隔也被限制在1k,有些能做到8K的频率,怎么实现的? ...

鼠标不懂~~帮不到你

出0入0汤圆

发表于 2018-8-5 22:06:30 | 显示全部楼层
没规定只能6字节啊。想写多少就有多少

出0入0汤圆

 楼主| 发表于 2018-8-5 22:20:03 | 显示全部楼层
本帖最后由 shenrongze 于 2018-8-5 22:26 编辑
putty 发表于 2018-8-5 22:06
没规定只能6字节啊。想写多少就有多少


哦哦,谢谢

出0入0汤圆

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

出0入0汤圆

发表于 2018-8-6 18:18:46 | 显示全部楼层
你要去看HID的协议了,可是协议真是多的蛋疼

出0入0汤圆

 楼主| 发表于 2018-8-7 00:21:08 | 显示全部楼层
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

出10入0汤圆

发表于 2018-8-7 06:56:19 来自手机 | 显示全部楼层
楼主为何不抓下你那个全键键盘的描述符分析看看人家怎么做的呢?

出0入0汤圆

发表于 2018-8-7 08:25:24 | 显示全部楼层
学习一下

出0入0汤圆

 楼主| 发表于 2018-8-7 09:23:35 | 显示全部楼层
gamethink 发表于 2018-8-7 08:49
你意思是,只要描述符描述正確,可以一次將100多個鍵值全部發至PC,PC也能解析?
我沒實踐過,但我認為這 ...

报告描述符里面规定好电脑就可以识别,但是好像一次最多只能发0x40即64个键

出0入0汤圆

 楼主| 发表于 2018-8-7 09:24:24 | 显示全部楼层
blackcafe 发表于 2018-8-7 06:56
楼主为何不抓下你那个全键键盘的描述符分析看看人家怎么做的呢?

配置描述符已经抓到了,报告描述符好像没法抓?还是要用什么软件呢

出0入0汤圆

发表于 2018-8-7 11:03:09 | 显示全部楼层
试一下 Device Monitoring Studio

出0入0汤圆

发表于 2018-8-7 12:45:12 | 显示全部楼层
学习一下,等着看结果。
gh60?

出0入0汤圆

发表于 2018-8-7 17:20:33 | 显示全部楼层
你应该把抓到的所有枚举信息保存成TXT上来给别人看看先把

出0入0汤圆

 楼主| 发表于 2018-8-7 22:12:18 来自手机 | 显示全部楼层
winfisher 发表于 2018-8-7 12:45
学习一下,等着看结果。
gh60?

gh60就不用自己折腾代码啦

出0入0汤圆

发表于 2018-8-8 08:40:05 | 显示全部楼层
用USB分析仪,什么都能抓出来

出0入0汤圆

发表于 2018-8-8 14:24:01 | 显示全部楼层
楼主研究明白了,记得分享一下啊。最近也打算搞这个。

出0入0汤圆

发表于 2018-8-8 15:05:13 | 显示全部楼层
mcu5i51 发表于 2018-8-5 17:49
和其它没有关系,协议中发的是按键按下和放开;
可以有几个同时按下是控制芯片中提供多少内存保存操作的状 ...

PS2协议是发送通码断码,HID不是。
HID协议很灵活,同样的数据可以有不同的发送方式。具体到按键可以每个bit代表一个按键,也可以每个字节代表一个键值,只要主机支持解析这些协议就可以。

出0入0汤圆

发表于 2018-8-8 15:15:58 | 显示全部楼层
vuo50z 发表于 2018-8-8 15:05
PS2协议是发送通码断码,HID不是。
HID协议很灵活,同样的数据可以有不同的发送方式。具体到按键可以每个 ...

受教了,

出0入0汤圆

发表于 2022-8-10 21:22:19 | 显示全部楼层
楼主,全键无冲解决了吗,最近也在搞这个,不是规定一次只能传输8个字节嘛,怎么做到全键无冲的

出0入18汤圆

发表于 2022-8-12 18:26:14 来自手机 | 显示全部楼层
USB full speed 最大包64字节
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-8 11:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表