Closed Nobutarou closed 2 days ago
\ は単純なミス -> done
Grub でも Windows でも反応しないので OS 側の問題ではない。
\_
は直したら効かなくなった。どういうことだ
UART 生きてて、RC4 に継ぐだけで ps/2 スキャンコードがターミナルで見れる。全部正しいので USB 側となる。
key -> ps/2 -> hid
caps -> 58 -> e3
無変換 -> 67 -> 8b
変換 -> 64 -> 8a
カタカナひらがな -> 13 -> 88
\_
-> 51 -> 87
\|
-> 6a -> 89
caps は一旦置いておいて、他は全部 0x80 番台。そして他に 0x80 番台は無い。
pause は E1 14 77 E1 b14 b77 FA FA
と押したことになってる。E1 = PS2_KC_EXTEND1 で使われていない。14 = PS2_KC_CTRL で右Ctrl になる。77 はPS2_KC_NUM だけど使われていない。 FA=PS2_KC_ACKで直前が PS2_KC_LOCK=0xED ではないから、なにも起きないはずなのに、おかしい。app_device_keyboard.c
APP_KeyboardUpdateState() 関数より。
pause は置いておいて
app_device_keyboard.c の hid_rpt01 の定義で
0x25, 0x65, // LOGICAL_MAXIMUM (101)
これのせいで 0x66 以上のキーが打ち切られてる?0x8b とでもしたら動く? --> 動かない。
0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
これは?--> ビンゴ
残念なことに勘なのだが、win は app_device_keyboard.c の 7 個の modifiers という構造体?の定義と 0xe0 ~ 0xe7 が対応していて、APP_KeyboardUpdateState() の中で keyboard.modifiers.bits.rightControl = 1/0 とかってやってるのが押したり離したりを表現してると思うので、ここに caps の ps/2 の 0x58 に対して keyboard.modifiers.bits.leftGUI = 1/0 などとしてやれば、動かないだろうか。
↑ Bingo!!!
とりあえず pause は別 issue でやろう
反応しないキー 円マーク (BS の左) caps lock 無変換 変換 カタひら
間違っているキー \ が ] になっている pause -> num lock + 左ctrl + 5長押しになっている。