Web の QMK Configurator でキーマップを作成してからローカルの QMK Firmware でビルド/書き込みを行う

Corne Cherry で自分専用のキーマップを作成してファームウェアをビルド、書き込みする手順です。ビルドガイドの補足情報としてお役に立てば幸いです。

f:id:kyagi:20190717172535j:plain

Corne Cherry のファームウェア書き込みについて

ビルドガイドにもある通り、QMK Firmware を使用してファームウェアを書き込む必要がありますが、ビルドガイドではキーマップの編集手順が掲載されていないため、自分が行った手順を補足情報として載せておきます。

ここではキーマップの作成と編集を Web の QMK Configurator で行ってからローカルの QMK Firmware でビルド/書き込みを行っています。自分で keymap.c を書き換えるよりもコピー&ペーストで実施できるため、簡単です。*1

1. 自分専用のビルド環境を構築

qmk_firmware の crkbd/keymaps 配下で default をコピーして自分専用のビルド環境を構築します。

$ cd ~/git/qmk_firmware
$ pushd keyboards/crkbd/keymaps
$ cp -rp default kyagi

2. QMK Configurator でキーマップを作成してダウンロード

QMK Firmware/Building Your First Firmware の説明通り、キーマップの変更は keymap.c の keymaps 配列を編集することで行います。エディタで編集してもいいのですが、QMK Configurator を使用して自分好みのキーマップを作成し、COMPILE を実施した後、KEYMAP ONLY のリンクから keymap.c をダウンロードして keymaps 配列を入れ替えるとお手軽です。

$ vi kyagi/keymap.c # 自分で書き換えてもいいが...
$ cp ~/Downloads/crkbd_rev1_kyagi/keymap.c kyagi/keymap.c # QMK Configurator でコンパイル済みの keymap.c を KEYMAP ONLY からダウンロードしたほうが簡単

上記ではコピーしていますが、実際は keymaps 配列だけ書き換えればいいはずです。差分は以下のようになります。

$ diff -Nurp keymaps/default/keymap.c keymaps/kyagi/keymap.c
--- keymaps/default/keymap.c    2019-07-15 19:36:36.000000000 +0900
+++ keymaps/kyagi/keymap.c  2019-07-17 20:12:01.000000000 +0900
@@ -58,30 +58,8 @@ enum macro_keycodes {
 #define KC_ALTKN ALT_T(KC_LANG1)

 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-  [_QWERTY] = LAYOUT_kc( \
-  //,-----------------------------------------.                ,-----------------------------------------.
-        ESC,     Q,     W,     E,     R,     T,                      Y,     U,     I,     O,     P,  BSPC,\
-  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
-      CTLTB,     A,     S,     D,     F,     G,                      H,     J,     K,     L,  SCLN,  QUOT,\
-  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
-       LSFT,     Z,     X,     C,     V,     B,                      N,     M,  COMM,   DOT,  SLSH,  RSFT,\
-  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
-                                  GUIEI, LOWER,   SPC,      ENT, RAISE, ALTKN \
-                              //`--------------------'  `--------------------'
-  ),
-
-  [_LOWER] = LAYOUT_kc( \
-  //,-----------------------------------------.                ,-----------------------------------------.
-        ESC,     1,     2,     3,     4,     5,                      6,     7,     8,     9,     0,  BSPC,\
-  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
-      CTLTB,    F1,    F2,    F3,    F4,    F5,                     F6,    F7,    F8,    F9,   F10, XXXXX,\
-  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
-       LSFT,   F11,   F12,   F13,   F14,   F15,                    F16,   F17,   F18,   F19,   F20, XXXXX,\
-  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
-                                  GUIEI, LOWER,   SPC,      ENT, RAISE, ALTKN \
-                              //`--------------------'  `--------------------'
-  ),
-
+  [_QWERTY] = LAYOUT(KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_MINS, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_GRV, MO(1), KC_LALT, KC_SPC, KC_ENT, KC_RCTL, KC_RGUI),
+  [_LOWER] = LAYOUT(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, RSFT(KC_BSLS), KC_LCTL, LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), KC_F11, LSFT(KC_4), KC_QUOT, RCTL(KC_1), RSFT_T(KC_9), RSFT_T(KC_0), KC_SCLN, KC_F4, KC_LSFT, LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), KC_F12, LSFT(KC_8), KC_BSLS, RCTL(KC_2), KC_LBRC, KC_RBRC, RSFT(KC_SCLN), KC_EQL, KC_NO, KC_LALT, KC_SPC, KC_ENT, KC_RCTL, KC_RGUI),
   [_RAISE] = LAYOUT_kc( \
   //,-----------------------------------------.                ,-----------------------------------------.
         ESC,  EXLM,    AT,  HASH,   DLR,  PERC,                   CIRC,  AMPR,  ASTR,  LPRN,  RPRN,  BSPC,\

3. ローカルでのビルドと書き込み

USB ケーブルで Corne Cherry と Mac を接続し、ビルドと書き込みを行います。

$ popd
$ pwd
/Users/kyagi/git/qmk_firmware
$ make crkbd:kyagi
$ make crkbd:kyagi:avrdude

QMK Configurator でコンパイルしてダウンロードした .hex ファイルのみを差し替えてファームウェアに書き込む(OLED不使用)

コンパイルまでは QMK Configurator で可能なので FIRMWARE からダウンロードした .hex ファイルのみを差し替えて書き込みも可能です。ただし QMK Configurator で作成する keymap.c はレイアウトのみの簡易的なもので OLED 機能がコードに入っていないため、OLED は光りません。ただ、OLED 機能を使うと一部のキーに遅延が起こっているように感じるのと、パスワードなどの表示問題があるためオフのほうがいいかもしれません。機能的には問題ないようです。

$ pwd
/Users/kyagi/git/qmk_firmware
$ cp  ~/Downloads/crkbd_rev1_kyagi.hex .build/
$ ls -l .build
total 3168
-rwxr-xr-x   1 kyagi  staff  414300 Jul 15 19:41 crkbd_rev1_default.elf
-rw-r--r--@  1 kyagi  staff   53429 Jul 16 20:25 crkbd_rev1_default.hex
-rw-r--r--   1 kyagi  staff  325408 Jul 15 19:41 crkbd_rev1_default.map
-rwxr-xr-x   1 kyagi  staff  414292 Jul 17 20:12 crkbd_rev1_kyagi.elf
-rw-r--r--   1 kyagi  staff   70799 Jul 17 20:12 crkbd_rev1_kyagi.hex
-rw-r--r--   1 kyagi  staff  320940 Jul 17 20:12 crkbd_rev1_kyagi.map
drwxr-xr-x   2 kyagi  staff      64 Jul 15 20:41 obj_crkbd_rev1
drwxr-xr-x  33 kyagi  staff    1056 Jul 15 20:41 obj_crkbd_rev1_default
drwxr-xr-x  33 kyagi  staff    1056 Jul 17 20:59 obj_crkbd_rev1_kyagi
$ make crkbd:kyagi:avrdude

QMK Toolbox は使用不可

QMK Toolbox は使えないようです。書き込みしようとすると間違ったポート(Bluetooth)を見てしまうため失敗します。

*** Caterina device connected
    Found port: /dev/cu.Bluetooth-Incoming-Port
*** Attempting to flash, please don't remove device
>>> dfu-programmer atmega32u2 erase --force
    dfu-programmer: no device present.
>>> dfu-programmer atmega32u2 flash /Users/kyagi/Downloads/crkbd_rev1_kyagi.hex
    dfu-programmer: no device present.
>>> dfu-programmer atmega32u2 reset
    dfu-programmer: no device present.
>>> avrdude -p atmega32u2 -c avr109 -U flash:w:/Users/kyagi/Downloads/crkbd_rev1_kyagi.hex:i -P /dev/cu.Bluetooth-Incoming-Port -C avrdude.conf
    avrdude: warning at avrdude.conf:14976: part atmega32u4 overwrites previous definition avrdude.conf:11487.
    
    Connecting to programmer: .avrdude: butterfly_recv(): programmer is not responding
*** Caterina device disconnected

おまけ

私が作成したキーマップです。

  • もともと右親指で Ctrl、左親指で Alt、左小指で英数/かな切り替えの人生を送ってきました。英数/かな切り替えは LeftCtrl を Karabiner Elments でトグル設定にして対応しています。
  • タブキーがないですが、タブを利用するのは iTerm2 か JetBrains 製 IDE のみのためソフトウェアの設定で対応できます。iTerm2 は特定のキー(Ctl+t)からアスキーコード 0x09 を送るように設定しています(Preferences > Profiles > Keys > Send Hex Codes: 0x09)

f:id:kyagi:20190717194023p:plain f:id:kyagi:20190718024141p:plain

割れたキーボードを使うのははじめてなので長期使用するかどうかはまだ不明です... 一定期間試運転した後、決心がつけば、本格的に乗り換えるかもしれません。(^_^;

*1:はじめは quantum/quantum_keycodes.h を見ながら自前で keymap.c を編集していましたが、一部マクロの使い方が間違っている部分でコンパイルエラーになったので、だったら既にコンパイル済みの keymap.c からレイアウト部分だけ抜き出せばいいのでは、と思いつきました。実際は LAYOUT_kc マクロを使うか LAYOUT マクロを使うかの違いだったようです。