2019/4/1 7M4MON
KeySweeper (by Samy Kamkar)というMicrosoft Wireless Keyboard 800から無線で送信される
キーコードデータを解析してゴニョゴニョする、ぁゃιぃ オープンソース・ハードウェアがあるのですが、
別件でnRF24L01を使用する予定がありましたので、私も Microsoft Wireless Keyboard 800 を入手して試してみました。
ワイヤレス技術をアタックで検証 by 堀合啓一 によると、英語版と日本語版ではデバイスIDの5バイト目が違うらしいです。
上記資料では p[4] = 0xCD を 0xCE にすれば良いとされていましたが、その変更では動作しませんでした。
調査したところ、私の手元の Microsoft Wireless Keyboard 800 は、p[4] = 0xCF となっていました。
というわけで、キーボード検出の条件式を "(p[4] == 0xCD) || (p[4] == 0xCE) ||(p[4] == 0xCF)" としておきました。
私は盗聴したキーコードを用いてゴニョゴニョしたい訳ではなく、純粋な技術的興味で作成しましたので
ゴニョゴニョ部は無効(Flash記録もshout送信もSMS発信もしない)として、大型の16セグメントLEDに
受信したキーコードを表示するようにしました。
表示器はI2Cの 16bit IOエキスパンダ MCP23017 + トランジスタアレイ に接続されています。
16セグメントで小文字を含めたアルファベット+数字+半角記号を表示可能です。
日本語のキーコードは英語と異なる(例:英語のキーコードはShift+2が@になる)ので
hidcodes.hに手を入れて正しい記号が表示されるようにしました。
ドットの部分は16ビットからあぶれてしまいますので、マイコンのGPIOから直接制御します。
DPはフォントに準拠し、 ! と ? と . のときだけ点灯させます。
フォントはMITライセンスのこれを使用しました。
ピン配置が全然違いますので、これを使って並び替えました。
並び替えは下記のとおりです。
/* maps segments to actual bits in chip */ uint16_t chip_bits[16] = { 0, // A 1, // B 3, // C 6, // D 7, // E 8, // F 9, // G 13, // H 14, // K 15, // M 2, // N 4, // R 5, // P 11, // S 10, // T 12, // U }; |
コードは github に上げましたのでご自由にどうぞ。
1800円くらい。