Nobutarou / at2usb_jp

0 stars 0 forks source link

caps などが反応しない。 #1

Closed Nobutarou closed 2 days ago

Nobutarou commented 3 days ago

反応しないキー 円マーク (BS の左) caps lock 無変換 変換 カタひら

間違っているキー \ が ] になっている pause -> num lock + 左ctrl + 5長押しになっている。

Nobutarou commented 3 days ago

\ は単純なミス -> done

Nobutarou commented 3 days ago

Grub でも Windows でも反応しないので OS 側の問題ではない。

Nobutarou commented 3 days ago

\_ は直したら効かなくなった。どういうことだ

Nobutarou commented 3 days ago

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 番台は無い。

Nobutarou commented 3 days ago

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() 関数より。

Nobutarou commented 3 days ago

pause は置いておいて

app_device_keyboard.c の hid_rpt01 の定義で

        0x25, 0x65, //   LOGICAL_MAXIMUM (101)

これのせいで 0x66 以上のキーが打ち切られてる?0x8b とでもしたら動く? --> 動かない。

        0x29, 0x65, //   USAGE_MAXIMUM (Keyboard Application)

これは?--> ビンゴ

Nobutarou commented 2 days ago

残念なことに勘なのだが、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 などとしてやれば、動かないだろうか。

Nobutarou commented 2 days ago

↑ Bingo!!!

Nobutarou commented 2 days ago

とりあえず pause は別 issue でやろう