有人认识这个键盘编码方案吗?

逆向工程 编码 司机
2021-06-17 04:37:43

我正在完成Perixx MX-2000 IIB鼠标的 linux 驱动程序的逆向工程鼠标具有的功能之一是任意按钮映射。我可以分配一个按钮来产生各种键或鼠标按钮。我已经记录了 Windows 驱动程序中可用的一些按钮分配,并自己找出了一些,但似乎没有可辨别的(对我而言)模式来映射整个地址空间。

按键的行为如下: 两个字节控制一个特定的鼠标按钮。我已经学习了一些键和修饰符,并将在下面发布。将鼠标按钮设置为十六进制值在单击时为我提供键盘输出

键盘输出| 十六进制值
a| 0x0400
b| 0x0500
c| 0x0600
...
z| 0x1D00
1| 0x1E00
2| 0x1F00
...
9| 0x2600
0| 0x2700
return| 0x2800
esc| 0x2900
backspace| 0x2A00
tab| 0x2B00
space| 0x2C00
...
Volume Up| 0x8000(XF86AudioRaiseVolume)
Volume Down| 0x8100(XF86AudioLowerVolume)
...

我已经映射了,0x8A00但会为你节省整个桌子。有趣的是,像 XF86 命令这样的东西出现的很早,比如0x6F00XF86AudioMicMute,或者0x6600是关机键。

至于最低有效字节,其中一部分是修饰符,用作掩码。Ctl(1 << 0)shift(1 << 1)alt(1 << 2)super/meta/windows(1<<3)所以这样,shift+ a(大写 A)是0x0402Ctl+ Alt+a将是0x0405所有四个修饰符都为您0x0F提供最少的信号。字节。玩弄 LSB 的高音,比如0x0440给我更多的键,比如 XF86Mute。所以看起来地址空间很大。

最重要的是,Windows 驱动程序中的一些键以完全不同的方案呈现。

输出| 十六进制值
aMouse Scroll up| 0x0143
Mouse Scroll down| 0xFF43
WWW Search| 0x2122
WWW Back| 0x2422
WWW Forward| 0x2522
Email| 0x8A21
Internet Expl Back| 0x8842(在 X11 中显示为鼠标按钮 8)
IE Forward| 0x9042(鼠标按钮 9)
Calculator| 0x9221
My Computer| 0x9421
Mute| 0xE220
Volume Up| 0xE920
Volume Down|0xEA20

还有一些鼠标按钮:

输出| 十六进制
Left Click| 0x8142
Right Click| 0x8242
Wheel Click|0x8442

最后,这些是内部鼠标命令。他们不会在我的 linux 机器上注册任何事件,但会更改鼠标的内部设置

行动| 十六进制

Cycle DPI setting| 0x034A
DPI increase| 0x014A
DPI decrease| 0x004A
Cycle mouse profile| 0x074A
Profile Up| 0x054A
Profile Down|0x044A

最后有一个特殊的集合,它看起来像0x0a88宏内存内部的那个点。

我找不到任何可能与此匹配的编码方案或键盘映射。字母键?如果您注意到,volume upis both0x80000xE920whilevol down是 both 0x8100and 0xEA20隧道尽头有点光,所以它们之间的距离是一致的。

但实际上,我无法找出匹配的标准映射。或者有什么办法找出所有的键不与内存手动摆弄,并通过循环0x00000xFFFF与点击xev各一次。

想法?有熟悉的吗?或发现其他图案?

编辑:到目前为止我映射的所有关键信息都在这个要点中,包括0x0000通过0xFF00(离开 LSByte 0x00)。所以仍然有大量的地址空间。使用 Windows 驱动程序中的额外键(例如0x9421= XF86Explorer)对我来说仍然没有任何意义

1个回答

这些是 16 位 USB 键盘/小键盘扫描代码。详情请参阅键盘扫描码规范附录 C 包含完整的映射