Linux ZaurusにPS/2キーボードを繋ぐ その2


スキャンコード

キーボードとの通信が出来るようになったので、ザウルスとのインターフェースの検討をしてみます。
ザウルス側はジョイパッドと同様にトラップさん作のser_code_ksimを使うことにします。

ここで言葉の定義をしておきます。似ている言葉なので混乱しないよう…(汗)

PS/2キーボードのキーを押したときにどのようなスキャンコードが出力されているのか、テクニカル・リファレンスを参照してみます。 キーを押したときのコード表が3種類あり、キーボードにコマンドを送ると切り替えることができます。
さて、どのようなコードが現れているのか?まとめてみると…

キー スキャンコード
Scan Code Set 1 Scan Code Set 2 Scan Code Set 3
Make Break Make Break Make Break
1(FullKey) 02 82 16 F0 16 16 F0 16
1(TenKey) 4F CF 69 F0 69 69 F0 69
End *1 E0 4F E0 CF E0 69 E0 F0 69 65 F0 65
*2 E0 AA E0 4F E0 CF E0 2A E0 F0 12 E0 69 E0 F0 69 E0 12
*3 E0 2A E0 4F E0 CF E0 AA E0 12 E0 69 E0 F0 69 E0 F0 12
*1 (Base Case or Shift+NumLock)
*2 (Shift Case)
*3 (Num Lock on)

書いてて訳わからなくなりました…

Scan Code Set 1 はスキャンコードの最上位ビットをMake/Breakの識別に使用しており、ぱたぱたと同様です。
Scan Code Set 2 と Scan Code Set3 はBreak時にプレフィックス(F0)が追加されます。

ぱっと見、Scan Code Set1がぱたぱたと同様のコード構成になっているので、何もせずに転送すればよさそうですが…
Endキーなど、一部のキーはプレフィックス(E0)が追加されます。また、NumLockやShiftの状態で出てくるコードが変わってます。…面倒くさっ。(汗)
テンキーの使用を制限すれば対応は容易ですが、付いてるキーは使えるようにしたいものです。

Scan Code Set 3は全てのキーに独立したスキャンコードが割り当てられており、プレフィックスでキーのBreakを識別しています。プレフィックスの処理をPICで行えば、全てのキーを独立したコードで送れそうです。これでもテンキー周りの扱いは一筋縄では行かないようですが。

今回はScan Code Set 3を使ってみることにします。

キーコード

さて、ザウルスに送るキーコードですが、ser_code_ksimの設定ファイルで何とでもなるので、基本的にスキャンコードを細工せずに送るだけにします。
ただし、一部キーのスキャンコードは0x80以上なので細工が必要です。
それと、テンキーの扱いをどうするか…まぁ、後回しにしますか。


リナザウ関係のゴミ置き場前ページ次ページ