FMV-KB611用hoboNicolaアダプター
PS/2接続のFMV-KB611用hoboNicolaアダプターを製作した記事です。オリジナルのPS/2用hoboNicolaにキーボードをJIS109キーボードに設定するコマンド送信を追加しています。
【ソースコード】の利用はあくまでも自己責任で行って下さい。
1. 部品の入手
プリント基板はPCBWayの Shared Project に登録していますので、回路図や部品の入手先はリンクを参照してください。
2. ビルドとファームウエアの書き込み
アダプターで使っているMCUはATmega32u4なのでボードの選択はArduino Leonardoです。Arduino IDEでビルドする方法はネットにいろいろ載っていますのでGoogleって下さい。
hoboNicolaアダプターを数種類作成する場合、ライブラリを分けたほうが都合がよい場合があります。 このときはキーボードの種類毎にディレクトリを分けたほうが都合が良く、Arduino IDEの設定でスケッチの保存場所を指定します。
ツールの設定と作業ディレクトリの構成は以下の通りです。 間違えるとビルドエラーになります。
********************************************************
*** CPU Arduino Leonardo (Arduino AVR Boards) ***
********************************************************
\作業ディレクトリ--+---\ps2_hobo_nicola_KB611---+---ps2_hobo_nicola_KB611.ino
| |
| +---ps2_kbd.cpp
| |
| +---ps2_kbd.h
|
+---\libralies---+---\Adafruit_TinyUSB_Library
|
+---\hoboNicolaLibrary_KB611
ファームウエアの書き込みはArduino IDEでシリアルポートの指定を行えば自動で書き込んでくれます。
3. MS-IMEの設定
MS-IMEは日本語モードでキーボード・レイアウトはJIS109キーボードです。キーボードはローマ字に変換してPCに出力します。 無変換/変換キーの動作を設定するには「以前のバージョン」のMS-IMEにする必要があります。 この変更のしかたはネットにいろいろ書いていますので検索してください。
変換中の無変換キーは確定に設定してしまうと、カタカナ入力に不便です。 MS-IMEはF7を押すとカタカナに変換してくれます。 また、次のようにひらがなキーをカタカナ変換に設定することも出来ます。
詳細設定→全般にある「直接入力モードを使用しない(U)」にチェックを入れておきます。
また、Japanist2003などを使用していた場合は、色設定をATOKにしておくと変換時の違和感が少ないです。
4. hoboNicolaアダプターの設定
KB611はJIS109キーボードとして使うので、hoboNicolaアダプターを使うために設定は特に不要です。 メモ帳を起動して右CTRLキーとMENUキーを200ms以上押して、Sキーを押すと、LEDが点滅して設定モードに入ります。 何かキーを押すと設定がトグル(完了)して通常モードに戻ります。 BACKSPACEを押すと設定一覧が出ますから、以下のように設定されているか確認します。
5. Observe IMEの設定
本キーボードはhoboNicolaで使用している"observe_ime"を使うことを想定しています。 Windowsのアプリ毎のIME状態がキーボードに反映されるので、いわゆるモードずれを気にする必要がありません。 入手先は情報元に記載しています。
無変換キーでMS-IMEは"IME on"、CAPSLOCKで"IME off"に切り替える。
"observe_ime"はIMEの状態からキーボードにScrLockで通知する。
hoboNicolaアダプターはScrLockの状態に従ってNicolaモードをon/offする。
※hoboNicolaアダプターの設定でNumLockに変更することも出来ます。
"observe_ime"はスタートアップに入れておいて、以下のように設定しておきます。
6. PS/2用hoboNicolaの変更点
6.1 ps2_hobo_nicola_KB611.ino
オリジナルのPS/2用hoboNicolaにキーボードをJIS109キーボードに設定するコマンド送信を追加しています。また、親指キーの指定をHID_F23とHID_F24にしていますが、これは内部で仮に使用するだけでPCには送信しません。
void setup() {
hobo_device_setup(false);
HoboNicola::init_hobo_nicola(&hobo_nicola);
ps2 = ps2_kbd::getInstance();
if (!ps2->begin(new ps2_event, LED_BUILTIN_RX))
hobo_nicola.error_blink(400);
//**koseki(2024.3.21)
ps2->kbd_jis109(); //KB611の親指シフト動作を無効にする
delay(500);
hobo_nicola.has_dedicated_oyakeys(true); // 専用の親指キーがある(KB611)
hobo_nicola.set_oyayubi_keys(HID_F23, HID_F24); // キーコードを変換済、左親指⇒F23、右親指⇒F24
//**
}
6.2 ps2_kbd.cpp
オリジナルのPS/2用hoboNicolaにキーボードをJIS109キーボードに設定するコマンド送信を追加しています。
//KB611の親指シフト動作を無効にする。
bool ps2_kbd::kbd_jis109() {
send_command(0xf0); // スキャンコード変更コマンド
bool f = send_command(0x8c); // コマンドの引数、ACKが返ればKB611
if (f) {
send_command(0x09); // 親指シフト動作を無効
} else
kbd_reset();
return f;
}
また、FMV-KB211は初期化のときの反応が遅いのか、ときどき失敗するのでACKが返ってくるまで繰り返しています。
bool ps2_kbd::begin(keyboard_notify* p, uint8_t led_pin) {
if (p)
notifier = p;
led_port = led_pin;
if (led_port != 0xff) {
pinMode(led_port, OUTPUT);
digitalWrite(led_port, 1); // LED off.
}
pinMode(PS2_DATA, INPUT);
pinMode(PS2_CLK, INPUT);
kbd_led_state = 0;
bus_state = Idle;
::clear_buffer();
attachInterrupt(CLK_INT, clk_interrupt, FALLING);
// delay(500);
// return kbd_reset();
bool ack = false;
for(int8_t i = 0; i < 8; i++) {
delay(500);
ack = kbd_reset();
if (ack)
break;
}
return ack;
}
6.3 nicola_table.cpp
以上はArduino本体の変更でしたが、hoboNicolaライブラリで変えているはここだけです。キーマップをKB611に合わせて調整しました。
7. 情報元
この記事が気に入ったらサポートをしてみませんか?