Helixのファームウェアは左手側のボードにUSBケーブルを繋ぐことを前提に作られている。 が、右手側に繋ぎたいことだってあるじゃん? というわけで、どっちに繋いでも使えるようにしてみた。
まず、自分の使ってるファームウェアのディレクトリ内(例えばkeyboards/helix/rev2/keymaps/default)のkeymap.cの冒頭付近、
extern keymap_config_t keymap_config;
の直前くらいに、
#ifdef REVERSE_KEYMAP_COLUMNS
# define _LAYOUT( \
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35, \
L40, L41, L42, L43, L44, L45, L46, R46, R40, R41, R42, R43, R44, R45 \
) \
LAYOUT( \
R05, R04, R03, R02, R01, R00, L05, L04, L03, L02, L01, L00, \
R15, R14, R13, R12, R11, R10, L15, L14, L13, L12, L11, L10, \
R25, R24, R23, R22, R21, R20, L25, L24, L23, L22, L21, L20, \
R35, R34, R33, R32, R31, R30, R36, L36, L35, L34, L33, L32, L31, L30, \
R45, R44, R43, R42, R41, R40, R46, L46, L45, L44, L43, L42, L41, L40 \
)
#else
# define _LAYOUT LAYOUT
#endif
を挿入する。 その上で、以降に出現する
[_QWERTY] = LAYOUT( \
等のLAYOUT
マクロを使っている部分を、
[_QWERTY] = _LAYOUT( \
のように全て_LAYOUT
に置き換える。
あとは、rules.mkの末尾に、
REVERSE_KEYMAP_COLUMNS = no
ifeq ($(strip $(REVERSE_KEYMAP_COLUMNS)), yes)
OPT_DEFS += -DREVERSE_KEYMAP_COLUMNS
endif
を挿入し、左手側にはそのままmake helix:default
等で生成したファームウェアを書き込む。
右手側については、今rules.mkに挿入した数行中の1行目を
REVERSE_KEYMAP_COLUMNS = yes
と書き換えた上で生成したファームウェアを書き込む。
これで、USBケーブルを左手側、右手側のどちらに繋いだ場合も、期待通りの配列で入力できるようになる。
なんかもっといい方法があったら教えてください。
どっかのピンを使って、今USBケーブルが繋がれてるのが左右どっちか物理的に認識出るようにすればいいのかなあ。