Arduino IDE版d48trファームウェアのカスタマイズ方法について
ソースコード入手方法
Arduino IDE版d48trファームウェア、及びソースは以下でダウンロードできます
GitHub - delayed-brain/d48tr_arduino
セットアップ方法
Arduino IDEがインストールされていることを前提とします。
d48tr_libディレクトリをArduino IDEのライブラリフォルダに配置します。
(デフォルトでは、ドキュメント/Arduino/libraries)
d48tr_keymapディレクトリ内のd48tr_keymap.inoを編集することでカスタマイズが可能です
次にカスタマイズ方法について説明します。
キーマップの変更
const uint16_t keyMap[][rowNum][colNum] = { /* Qwerty * ,-----------------------------------------------------------------------------------. * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp | * |------+------+------+------+------+-------------+------+------+------+------+------| * | Tab | A | S | D | F | G | H | J | K | L | - | Enter| * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| Z | X | C | V | B | N | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------| * | Ctrl | GUI |Alt/ |MS_WH |MS_L |Space |Lower/|Raise/| Left | Down | Up |Right | * | | |MS_R | | | |Space |KANJI | | | | | * `-----------------------------------------------------------------------------------' */ [_QWERTY] = { { 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_TAB , 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_RSFT }, { KC_LCTL, KC_LGUI, ALT_MS_R, MS_WH, MS_L, KC_SPC, LT(_LOWER,KC_SPC),LT(_RAISE,KC_KANJI),KC_LEFT, KC_DOWN, KC_UP, KC_RGHT } },
d48tr_keymap.ino内のkeyMap配列を変更することでキーマップをカスタマイズできます。
キーコードはqmkのエイリアスと互換性を持たせていますが、使用できないコードがあります。
使用できるキーコードはこちら
シンプルに''で文字を囲っても入力できます。
こんな感じ。
{ KC_KANJI, 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', KC_BSPC }, { KEY_TAB, 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', '-', KEY_RETURN }, { KEY_LEFT_SHIFT, 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', KEY_RIGHT_SHIFT }, { 'a', 'a', MS_R, MS_WH, MS_L, ' ', ' ', MO(_RAISE), 'a' , 'a', 'a', 'a' }
レイヤーの追加方法
enum layer_numberに所望のレイヤー名を追加します。(17レイヤー以上は作成できません)
enum layer_number { _QWERTY = 0, _RAISE, _LOWER _NEW_LAYER };
既存レイヤーをコピペする等してconst uint16_t keyMap[][rowNum][colNum] 配下に新しいレイヤーを作成してください。
const uint16_t keyMap[][rowNum][colNum] = { //省略 [_NEW_LAYER] = { { 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_TAB , 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_RSFT }, { KC_LCTL, KC_LGUI, ALT_MS_R, MS_WH, MS_L, KC_SPC, LT(_LOWER,KC_SPC),LT(_RAISE,KC_KANJI),KC_LEFT, KC_DOWN, KC_UP, KC_RGHT } }, //省略 };
カスタムキーの作り方(タップ、ホールド無)
ユーザで任意のアクションを定義可能なカスタムキーの作成方法です。
enum custom_keycodesに所望のキー名を追加します。
enum custom_keycodes { XXXXXXX = 0x1001, MS_L, MS_R, MS_WH, NEW_KEY };
function_key関数の//custom_keycodes中にキーアクションを追加します。
「case key_press:」でキーを押した時
「case key_release:」でキーを離した時のアクションを定義してください。
/*---------------------------------------------------------------------------------------// * key functions */ void function_key(uint16_t keycode, int state){ //省略 //custom_keycodes else if (function_digit == 1){ //新規追加キー switch(keycode) { case NEW_KEY: //追加したキー名 switch(state) { case key_press: //キーを押した時 Keyboard.press(KC_A); break; case key_release: //キーを離した時 Keyboard.press(KC_A); break; } break; //省略 }
カスタムキーの作り方(タップ、ホールド有)
タップ操作、ホールド操作を判別可能なカスタムキーの作りかたです。
enum tap_custom_keycodesに所望のキー名を追加します。
enum tap_custom_keycodes { ALT_MS_R = 0x8001, NEW_TAPKEY };
function_key関数の//custom_keycodes(Tap enable)中にキーアクションを追加します。
「case TAP:」でキーをタップ(素早くキーを押し、離す)
「case Hold:」でキーをホールド(押し続けた時)
「case Hold_release:」でキーをホールド状態から離した時
のアクションを定義してください。
void function_key(uint16_t keycode, int state){ //省略 //custom_keycodes(Tap enable) else if (function_digit == 8){ //新規追加キー switch(keycode) { case NEW_TAPKEY: //追加したキー名 switch(state) { case key_press: break; case Tap: //タップ時 Mouse.press(MOUSE_RIGHT); Mouse.release(MOUSE_RIGHT); break; case Hold: //ホールド時 Keyboard.press(KC_LALT); break; case Hold_release: //ホールドから離した時 Keyboard.release(KC_LALT); break; } //省略
タップの時間判定について
タップ、ホールドの時間判定は下記のパラメータでチューニングが可能です。
#define TAPPING_TERM 200