预设查表Set 2
在Scan Codes Tables Set 2中,键盘主要键位区Make Code每颗按键都是由1组8-bit位码(1Byte)组成,Break Code为2Bytes,其中Break Code第1个Byte皆为十六进位的F0,第2个Byte则与Mack Code相同。在主要键位区中,只有右侧Ctrl键与右侧Alt键不同,分别与左侧Ctrl键与左侧Alt键相比较,在Make Code部分多十六进位的E0,Break Code多十六进位的E0F0。
扩展功能键(Extended Keys)如键盘中间九宫格区(Insert、Delete等)、方向键区与右侧数字键区,与Number Lock关闭时的右侧数字键区功能重复。换句话说,因为扩展功能键常会随着Shift键与Number Lock键的开启与关闭而影响输出结果,所以独立定义出一组规则,不会与主要键位区相同。在Make Code会增加十六进位的E0,Break Code多出十六进位的E0F0。另外数字键区「/」、PrintScreen键、Pause键,这些也是有独立的Make Code与Break Code表示。
在Scan Codes Tables Set 2中,键盘主要键位区Make Code每颗按键都是由1组8-bit位码(1Byte)组成,Break Code为2Bytes,其中Break Code第1个Byte皆为十六进位的F0,第2个Byte则与Mack Code相同。在主要键位区中,只有右侧Ctrl键与右侧Alt键不同,分别与左侧Ctrl键与左侧Alt键相比较,在Make Code部分多十六进位的E0,Break Code多十六进位的E0F0。
扩展功能键(Extended Keys)如键盘中间九宫格区(Insert、Delete等)、方向键区与右侧数字键区,与Number Lock关闭时的右侧数字键区功能重复。换句话说,因为扩展功能键常会随着Shift键与Number Lock键的开启与关闭而影响输出结果,所以独立定义出一组规则,不会与主要键位区相同。在Make Code会增加十六进位的E0,Break Code多出十六进位的E0F0。另外数字键区「/」、PrintScreen键、Pause键,这些也是有独立的Make Code与Break Code表示。
USB HID限制6+2键
PS/2按键压下与放开,是分Make Code与Break Code送出,而USB界面下则完全不同。依据USB HID(Human Interface Devices)规范,它是将正在压下的按键信号送出,没有压下按键的信号就不送出。压下的信号按键每一次的封包为8 Bytes,其中2 Bytes为Modifier Keys与Reserved保留键。
PS/2按键压下与放开,是分Make Code与Break Code送出,而USB界面下则完全不同。依据USB HID(Human Interface Devices)规范,它是将正在压下的按键信号送出,没有压下按键的信号就不送出。压下的信号按键每一次的封包为8 Bytes,其中2 Bytes为Modifier Keys与Reserved保留键。
Modifier Keys为1Byte即8 bit,每一个bit可以记录Shift、Ctrl、Alt、Windows键,左右侧各有1颗键共8键。Reserved保留键可以做为Caps Lock、Number Lock、Scroll Lock等等键使用。扣除Modifier Keys与Reserved Keys之后,其他按键最多只有6键可以输出。
USB键盘按键定义
▲由USB HID 1.11中可以明确看到USB键盘使用8 Bytes。
▲Reserved Keys保留键可以让厂商做为多种用途。
▲Modifier Keys每1个bit各代表着不同按键信号。
▲其他按键的信号送出的定义也与Scan Codes Tables Set 2不同,USB有自己的一套查表,详细可以查询USB HID Uasage Tables。
模拟多把键盘
但其实仍有办法遵守USB HID规范,又能突破限制。最简单的方法,就是利用键盘芯片,让电脑在使用1把键盘情形下,误认为同时连接多把键盘。就能将键盘按键,透过模拟的键盘分送信号。原本限制的6颗键就能串联起来,而重复的Modifier Keys与Reserved Keys位置,也能重新定义新按键送出,达成多颗键同时输出。
但其实仍有办法遵守USB HID规范,又能突破限制。最简单的方法,就是利用键盘芯片,让电脑在使用1把键盘情形下,误认为同时连接多把键盘。就能将键盘按键,透过模拟的键盘分送信号。原本限制的6颗键就能串联起来,而重复的Modifier Keys与Reserved Keys位置,也能重新定义新按键送出,达成多颗键同时输出。
此种方法稳定性较高,造成系统误判的机率较低,许多键盘都采用这种方式。不过每多模拟1把键盘,至少就需要多1颗芯片,还要将芯片互接连接并将信号分配控制,成本也随之增加。通常采用此方法时会猜测玩家的按键需求,而非无上限地模拟键盘。
▲由操作系统的装置管理员中,可以观察到微软SideWinder X4键盘模拟出2把键盘。
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |