USB 键盘 - 在 android 中未获得相同的扫描码

USB keypad - Not getting same scan code in android

我有一个带有 0 to 9,*,#,+,-,CALL,CALLEND 键的 USB 键盘,我将它与 Android 板一起使用。

使用默认 android Generic.kl 文件,此小键盘为每个按下的键提供正确的输出(在文本框和 this application 中选中)。

根据上述申请,扫码如下,

CALL - META_SHIFT_ON | META_SHIFT_RIGHT_ON - scanCode:48 keyCode:30 KEYCODE_B

ENDCALL - META_SHIFT_ON | META_SHIFT_RIGHT_ON - scanCode:30 keyCode:29 KEYCODE_A

STAR - META_SHIFT_ON | META_SHIFT_RIGHT_ON - scanCode:9 keyCode:15 KEYCODE_8

POUND - META_SHIFT_ON | META_SHIFT_RIGHT_ON - scanCode:4 keyCode:10 KEYCODE_3

需要重新映射,我自定义的.kl内容如下,

key 2 1

key 3 2

key 4 3

key 5 4

key 6 5

key 7 6

key 8 7

key 9 8

key 10 9

key 11 0

key 12 VOLUME_DOWN

key 78 VOLUME_UP

key 30 ENDCALL

key 48 CALL

我已经放在/system/usr/keylayout/

现在进行此更改后,当我使用相同的测试应用程序检查扫描代码时,ENDCALL 按钮得到 scanCode:54,之前是 30。

我对这种行为有以下疑问,

  1. 我对扫描码的理解是它们是特定于硬件的,无论 software/host 是什么,它每次都会提供相同的扫描码?我的意思是键盘的扫描码不会改变?这不会发生在这里。
  2. 我也尝试过在 /system/usr/keychars/ 中添加文件 .kcm,但有或没有它的行为是相同的。我需要为此使用 .kcm 文件吗?
  1. 是的,afaik 扫描代码特定于驻留在硬件中的固件。即对于 keypad/keyboard 设备,扫描代码将由硬件提供,它们将是唯一的以区分密钥。

  2. 在android中,如果您不想更改设备的字符映射表,则不需要字符映射文件(.kcm)。字符映射文件的工作是将键码映射到人类可读的字符。如果您没有为您的设备提供 .kcm 文件,它将使用 Generic.kcm 文件进行字符映射。

您也可以参考link 1 & 2了解更多信息。