QMKファームウェアでコンパイル時にエラーが出る問題
前書き
- 2024/2/7に発生し、対応した時の記事です。よって変更が入っている可能性はあります
- 私はQMKにあまり詳しくありません、内容は間違っている可能性があります、文鎮化しても責任は取りません
-
sphh jp
という名前のキーボードを使っています、自分の使っているキーボード名に読み替えてください - この方法で治るのはおそらく、ロータリーエンコーダーのついていないキーボードです
- (ロータリーエンコーダー= ノブを回して音量調節とかするやつ)
qmk firmwareで 以下のようなコマンドでhexファイルを作っている人向けです
qmk compile -kb sphhjp/rev1 -km (キーマップ名)
エラー発生
一年振りくらい?にsphh jp
のキーマップを変えようとした時に今までは出ていなかった下記のようなエラーが発生した。
おそらくqmk firmware
をアップデートした際に過去のものと何かが変わったのであろう
Compiling: quantum/encoder.c quantum/encoder.c:31:6: error: #error "No encoder pads defined by ENCODERS_PAD_A and ENCODERS_PAD_B"
# error "No encoder pads defined by ENCODERS_PAD_A and ENCODERS_PAD_B"
^~~~~
quantum/encoder.c:35:33: error: 'ENCODERS_PAD_A' undeclared here (not in a function); did you mean 'ENCODER_ENABLE'?
static pin_t encoders_pad_a[] = ENCODERS_PAD_A;
^~~~~~~~~~~~~~
ENCODER_ENABLE
quantum/encoder.c:36:33: error: 'ENCODERS_PAD_B' undeclared here (not in a function); did you mean 'ENCODER_ENABLE'?
static pin_t encoders_pad_b[] = ENCODERS_PAD_B;
^~~~~~~~~~~~~~
ENCODER_ENABLE
quantum/encoder.c:36:33: error: invalid initializer
[ERRORS]
|
解決方法
qmk_firmware
└─keybords
└─sphhjp/rev1
├─rules.mk
├─config.h
├─keymaps/(省略)
└─(省略)
のrules.mk
に
ENCODER_ENABLE = no
を追加する。
(追加位置は多分どこでもいいけど、先頭はやめた方がいいと思う、私は末尾にする)
終わり
詳細について
内容のほとんどが予想です、ご注意ください
おそらく、ロータリーエンコーダー(ノブで回すやつ)周りの設定
ロータリーエンコーダーを使っていない場合は
昔は明確にrules.mk
の書いていなくてもデフォルトでoffだったので問題なかったのだが、
rules.mk
にENCODER_ENABLE = no
を明示しないと
config.h
に#define ENCODERS_PAD_A
を探しに行ってしまいエラーになる
ようになった
余談だが、ロータリーエンコーダーを使っている場合は
rules.mk
にENCODER_ENABLE = yes
config.h
に#define ENCODERS_PAD_A {hoge}
(など)
が定義されているはず
検索するとこのような記事
[Bug] Using only right side encoder in split keyboard · Issue #10096 · qmk/qmk_firmware · GitHub
QMK Firmware with Rotary Encoder error : r/MechanicalKeyboards
機械翻訳
爆笑、3か月遅れましたが、文字通りまったく同じエラーに遭遇しました。 ENCODER_ENABLE = yes を rules.mk の一番下ではなく一番上に移動しました。 次に、ENCODERS_PAD_A と ENCODERS_PAD_B の定義に対しても同じことを行い、 これらの行を config.h の最後ではなく先頭に移動しました。コンパイルが完了しました:)
ここでは
rules.mk
にENCODER_ENABLE = yes
とあるが、これはロータリーエンコーダーを使っている場合なので今回は違う