Helix 自作キーボード製作記 (その4)

Helix 自作キーボード製作記 (その4)

関連記事

この記事は長くなりそうなので、シリーズ化になります。

はじめに

キーボードも出来上がり、次はキーカスタマイズです。
QMKファームウェアには様々な機能を持たせることができます。
今回購入したHelixももちろんQMKファームウェアベースなので、いろいろとカスタマイズできます。
今回はそのカスタマイズ方法を記事にしました。

基本的には HelixのGitHubのUsageのページFirmwareのページを読めば大丈夫です。

QMK Keymaps.cとrules.mkのカスタマイズ

はじめに

基本的な構造として、QMKは(というよりPro Microは)C言語ベースで書かれています。そのため、基本的には .c (c言語ファイル)と .mk (Makefile)の編集で機能を持たせることになります。

QMKファームウェアのフォルダ構造として基本的には深い階層にあるものが優先されます(同じ記述が書かれている場合は階層の深いところにあるファイルによって上書きされる)。そのため基本的には一番深いところにあるファイルをカスタマイズしてやれば新しい機能を持たせたり、機能を変更させたりできます。

QMKファームウェアのカスタマイズのための元ファイルのダウンロード、Pro Microへの書き込みに関しては前回の記事を参照してください。

今回はHelix rev2なので、「qmk_firmware-master/keyboards/helix/rev2/keymaps/」にあるファイルをいじってやります。
もともとあるファイルを変更すると、(特にGitを使っている場合は)意図しない上書きが起きたりするので基本的にコピーペーストして新しいファイルを作って作業すると良いです。
今回はkeymapsフォルダにある「default」をコピーペーストして「default2」というフォルダを作りカスタマイズしていきます。

そのため、今回いじるのは「qmk_firmware-master/keyboards/helix/rev2/keymaps/default2/」にある「keycaps.c」と「rules.mk」の2つのファイルになります。

rules.mkの編集

はじめに、「qmk_firmware-master/keyboards/helix/rev2/keymaps/default2」にあるrules.mkファイルをエディタソフトで開きます。エディター系を入れてない場合はテキストエディターで開けます。

# Build Options
#   change to "no" to disable the options, or define them in the Makefile in
#   the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
EXTRAKEY_ENABLE = no       # Audio control and System control(+450)
CONSOLE_ENABLE = no         # Console for debug(+400)
COMMAND_ENABLE = no        # Commands for debug and configuration
NKRO_ENABLE = no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality
MIDI_ENABLE = no            # MIDI controls
AUDIO_ENABLE = no           # Audio output on port C6
UNICODE_ENABLE = no         # Unicode
BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.
SWAP_HANDS_ENABLE = no        # Enable one-hand typing
# Helix keyboard customize
# you can edit follows 7 Variables
#  jp: 以下の7つの変数を必要に応じて編集します。
HELIX_ROWS = 5              # Helix Rows is 4 or 5
OLED_ENABLE = no            # OLED_ENABLE
LOCAL_GLCDFONT = no         # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
LED_BACK_ENABLE = no        # LED backlight (Enable WS2812 RGB underlight.)
LED_UNDERGLOW_ENABLE = no   # LED underglow (Enable WS2812 RGB underlight.)
LED_ANIMATIONS = yes        # LED animations
IOS_DEVICE_ENABLE = no      # connect to IOS device (iPad,iPhone)
Link_Time_Optimization = no # if firmware size over limit, try this option

内部には様々なコードが書いてありますが、基本的にいじる項目はこのあたりです。6から18行目に書いてあるコードはBuild Options (上)で、32から39行目に書いてあるコードはHelix keyboard customize (下)です。
Build Optionsに関してはQMK自身がもっているカスタマイズコードです。そのため一部はHelix側で定義されていないものもあるので、Build Optionsを有効にしたい場合は都度自分で定義を書かなくてはいけない場合があります。
対してHelix keyboard customizeはHelixにて既に定義がなされているので、これを有効にするだけで機能が実装されます。
色々な機能を実装しようとするとソースコードが大きくなってしまいPro Microの記憶容量を超えてしまいます。ので必要に応じて機能を選ぶ必要があります。
機能を実装したい場合は = no を消して = yes に書き換えます。

HELIX_ROWS = 5              # Helix Rows is 4 or 5

Helixキーボードを5行版として使用するか4行版として使用するかのコードです。初期は5行版になっているので4行版を使っている人はここを変える必要があります。

OLED_ENABLE = no            # OLED_ENABLE

OLEDディスプレイを表示するかどうかです。
OLEDは初期状態としてレイヤー番号を表示するようになっています。

LOCAL_GLCDFONT = no         # use each keymaps "helixfont.h" insted of "common/glcdfont.c"

Helix専用のカスタマイズされた文字フォントデータを使うかどうかです。
これをyesにする場合はHelixのページの詳細を確認してください。

LED_BACK_ENABLE = no        # LED backlight (Enable WS2812 RGB underlight.)

LEDバックライト (キーごとに光らせるLED)を使用するかどうかです。
今回僕はこのタイプのLEDを実装したのでこれをyesにします。

LED_UNDERGLOW_ENABLE = no   # LED underglow (Enable WS2812 RGB underlight.)

LEDテープを使って基板下を光らせるタイプのLEDを使用するかどうかです。

LED_ANIMATIONS = yes        # LED animations

LEDのアニメーション (光らせ方を変えたい場合)をさせるかどうかです。

IOS_DEVICE_ENABLE = no      # connect to IOS device (iPad,iPhone)

iOSデバイスに接続してキーボードを利用したい場合に有効にします。僕はまだ試したことないのですが、iOSにつなぐ場合は特殊な操作が必要だそうです。
おそらくUSB On-The-Go 周りの設定だと思います。

Link_Time_Optimization = no # if firmware size over limit, try this option

色々なものを実装しすぎてファイルサイズでかくなりすぎて書き込めない場合はこれをyesにしたらいいことが起きるかもしれません。

keymap.cの編集

Keymap.cの構造に関してはQMKのkeymap.mdのページを参考にしてやるといいです。

ボタンを押した時にどういう機能を処理させるかをカスタマイズする項目が並んでいます。
5行タイプのHelixを使っている場合 (rules.mkでHELIX_ROWS = 5にしている場合)は56行目のif HELIX_ROWS == 5 ...から、4行タイプのHelixを使っている場合 (rules.mkでHELIX_ROWS = 4にしている場合)は186行目のif HELIX_ROWS == 4 ...から、キーボードカスタマイズの項目があります。

enum layer_number {
    _QWERTY = 0,
    _COLEMAK,
    _DVORAK,
    _LOWER,
    _RAISE,
    _ADJUST
};

とあるように(27-34行目)、基本的な構造としてHelixは6つのレイヤーを切り替えてボタンの機能を変えています(詰まる所1つのボタンに最大6つの機能を持たせています)。
初期状態ではQWERTYのレイヤーが有効になっているということですね。

  [_QWERTY] = LAYOUT( \
      KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                      KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_DEL, \
      KC_TAB,  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_SCLN, KC_QUOT, \
      KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_LBRC, KC_RBRC, KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \
      ADJUST,  KC_ESC,  KC_LALT, KC_LGUI, EISU,    LOWER,   KC_SPC,  KC_SPC,  RAISE,   KANA,    KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
      ),

例えば、デフォルトのキーマップのうち、「QWERTY」というレイヤー階層にはこのようなキーコードがアサインされています。「,」と「\」で区切られた構造でkeycodeが書かれています。

各種キーコードの詳細はQMKのDocumentのBasic KeycodesのページまたはGitHubのkeycodes.mdのページで確認出来ます。

基本的にはKC_のプレフィクスをつけてやるとキーボードの機能を持たせることが出来ます。

キーボードに文字入力以上の機能を持たせるには、Quantum Keycodesなどを使います。Basic Keycodes以上のKeycodeについてはQMKのDocumentのQuamtum Keycodesのページ以降またはGitHubのkeycodes.mdのページを参照して下さい。

特にRGB LED Backlightを有効にしている場合はRGB Lighting周りのKeycodesを使ってバックライトの光らせ方を変えたり出来ます。

enum custom_keycodes {
  QWERTY = SAFE_RANGE,
  COLEMAK,
  DVORAK,
  LOWER,
  RAISE,
  ADJUST,
  BACKLIT,
  EISU,
  KANA,
  RGBRST
};

Keycodesに含まれている「QWERTY」や「EISU」と言ったDocumentを見ても見当たらないようなKeycodeはカスタムキーコードと呼ばれるHelix専用に定義されているKeycodeです。

実際にどういう処理をしているかは、335行目以降のコードを確認するか、実際にキーボードにアサインして処理を確認して下さい。
process_record_user()関数を使えば自分の好みの処理を行えるということですね。

まとめ

というわけでキーカスタマイズの方法でした。
基本的にはkeycap.cの編集で事足りるということですね。

次回は本命MIDIコントローラー化についてです。

電子工作カテゴリの最新記事