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


ソフトウェア

次はPICのソフトウェアを設計します。
「Linux ZaurusにPS/2キーボードを繋ぐ その2」の通り、PS/2キーボードのスキャンコードはscan code set3を使用することにします。

プログラムの流れは以下のようになります。

  1. PS/2キーボードからスキャンコードを受信する
  2. スキャンコードが0x7Fを超えるコードを0x00〜0x7Fの空きに変換する
  3. 変換したスキャンコードを元にキーのMake/Breakの管理を行う
  4. 基本的にスキャンコードをそのままキーコードにするが、NumLockがOFFのときはテンキーの一部を変更する
  5. Zaurusにキーコードを送信する (全てのキーが離されたときは2回送信)

テンキーの処理は、NumLockがOFFの時にカーソル等のキーコードに変更することで実現しました。

フローチャートを書くとこんな感じになります。かなり適当ですし、実際に出来上がったソフトと若干違ってます。大まかな流れを見るため…ということで。(汗)
処理に興味ある方、データの流れも合わせて参照してください。
zaukey_flow_s.png

Zaurus側の処理

Zaurus側ではトラップさん作のser_code_ksimを動作させます。
トラップさんのページでは、

「Zaurus のキーコードについては、カーネルソースの sharp_keycode.h を読んでみると良いでしょう。」

と書かれているので、SHARPのページからダウンロードして参照してみました。
…あれ?使われていないキーが定義されてる?

例えば、SLKEY_PLUS のようなC7x0のキーボードではFnキーを併用して入力するものや、 SLKEY_QUOTEDBLのようなパソコンのキーボードでもシフトを使わないと入力できないものが定義されています。

とろろが、これをser_code_ksim.iniに書いても入力できません。
SLKEY_PLUSは「+」が入力されても良さそうですが、実際には「*」が入力されます。 また、SLKEY_QUOTEDBLは「"」が入力されても良さそうですが、実際には「^」が入力されます。

よく調べてみると、一部の定義はsharp_keycode.hに書かれている名称とはあまり関係なく、Fnキーを使って入力するキーを定義していることがわかりました。 そこで、キーコードの一覧をまとめてみました。

完成!

で、実際に作ってみました。
回路図に無い部品も付いてますが…
信号のやり取りがあるとLEDを点けたくなるじゃないですか。
KeyboardAdapter_s.jpg AdapterPCB_s.jpg
NumLockLED点灯中!(笑)

特にもたつくこともなく入力できます。
これで、HHKなり何なり付けることが出来るようになりました。

でも、最初に書いた通りPS/2キーボードは風前の灯火なんですよね。
やはりこれからはUSBの時代なんですね。(´・ω・`)

一応ソフトを公開します。
ZauKeyboard_V100.zip
ご利用は計画的に自己責任で。


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