cocot46plusのファームウェアをアップデート
トラックボールのスクロール時にマウス用レイヤーに移動するtakashicompanyさん製ファームウェアを入れるとなぜかRemapでロータリーエンコーダーが設定できなくなった(これはこれで要調査)ので,QMKの勉強も兼ねて新しいファームウェアを作る.
やりたいことは以下の3つ:
- QMK latestへの追従
- ARMへの移行
- Vial化
注意点としては,RP2040は動作電圧3.3Vなのに対してcocot46plusで使用されるマウスセンサーは4V必要.なので,レベルシフト回路を実装したv2基板が必要になる(v2で本当に上手くいくかはまだ不明)
まずはGitHubを探してみると近いことをしている先人がいたので,この方のブランチを拝借:
当該ブランチにチェックアウトしたのちに,まずはデフォルトのキーマップをビルドしてみる.これはAtmega32U4がターゲット.
ビルドのログ
$ qmk compile -kb aki27/cocot46plus -km default
Ψ Compiling keymap with gmake -r -R -f builddefs/build_keyboard.mk -s KEYBOARD=aki27/cocot46plus KEYMAP=default KEYBOARD_FILESAFE=aki27_cocot46plus TARGET=aki27_cocot46plus_default INTERMEDIATE_OUTPUT=.build/obj_aki27_cocot46plus_default VERBOSE=false COLOR=true SILENT=false QMK_BIN="qmk"
Generating: .build/obj_aki27_cocot46plus_default/src/info_deps.d [OK]
avr-gcc (Homebrew AVR GCC 9.4.0_1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Generating: .build/obj_aki27_cocot46plus_default/src/info_config.h [OK]
Generating: .build/obj_aki27_cocot46plus_default/src/default_keyboard.c [OK]
Generating: .build/obj_aki27_cocot46plus_default/src/default_keyboard.h [OK]
Compiling: keyboards/aki27/cocot46plus/matrix.c [OK]
Compiling: keyboards/aki27/cocot46plus/cocot46plus.c [OK]
Compiling: .build/obj_aki27_cocot46plus_default/src/default_keyboard.c [OK]
Compiling: quantum/keymap_introspection.c [OK]
Compiling: quantum/quantum.c [OK]
Compiling: quantum/bitwise.c [OK]
Compiling: quantum/led.c [OK]
Compiling: quantum/action.c [OK]
Compiling: quantum/action_layer.c [OK]
Compiling: quantum/action_tapping.c [OK]
Compiling: quantum/action_util.c [OK]
Compiling: quantum/eeconfig.c [OK]
Compiling: quantum/keyboard.c [OK]
Compiling: quantum/keymap_common.c [OK]
Compiling: quantum/keycode_config.c [OK]
Compiling: quantum/sync_timer.c [OK]
Compiling: quantum/logging/debug.c [OK]
Compiling: quantum/logging/sendchar.c [OK]
Compiling: quantum/matrix_common.c [OK]
Compiling: quantum/debounce/sym_defer_g.c [OK]
Compiling: quantum/main.c [OK]
Assembling: platforms/avr/xprintf.S [OK]
Compiling: platforms/avr/printf.c [OK]
Compiling: quantum/pointing_device/pointing_device.c [OK]
Compiling: quantum/pointing_device/pointing_device_drivers.c [OK]
Compiling: quantum/pointing_device/pointing_device_auto_mouse.c [OK]
Compiling: drivers/sensors/adns5050.c [OK]
Compiling: quantum/color.c [OK]
Compiling: quantum/rgblight/rgblight.c [OK]
Compiling: quantum/rgblight/rgblight_drivers.c [OK]
Compiling: quantum/process_keycode/process_rgb.c [OK]
Compiling: quantum/led_tables.c [OK]
Compiling: drivers/oled/oled_driver.c [OK]
Compiling: quantum/encoder.c [OK]
Compiling: drivers/encoder/encoder_quadrature.c [OK]
Compiling: platforms/avr/drivers/ws2812_bitbang.c [OK]
Compiling: quantum/bootmagic/bootmagic.c [OK]
Compiling: quantum/process_keycode/process_grave_esc.c [OK]
Compiling: quantum/process_keycode/process_magic.c [OK]
Compiling: quantum/mousekey.c [OK]
Compiling: quantum/send_string/send_string.c [OK]
Compiling: quantum/process_keycode/process_space_cadet.c [OK]
Compiling: tmk_core/protocol/host.c [OK]
Compiling: tmk_core/protocol/report.c [OK]
Compiling: tmk_core/protocol/usb_device_state.c [OK]
Compiling: tmk_core/protocol/usb_util.c [OK]
Compiling: platforms/suspend.c [OK]
Compiling: platforms/synchronization_util.c [OK]
Compiling: platforms/timer.c [OK]
Compiling: platforms/avr/hardware_id.c [OK]
Compiling: platforms/avr/platform.c [OK]
Compiling: platforms/avr/suspend.c [OK]
Compiling: platforms/avr/timer.c [OK]
Compiling: platforms/avr/bootloaders/caterina.c [OK]
Compiling: platforms/avr/drivers/i2c_master.c [OK]
Archiving: .build/obj_aki27_cocot46plus_default/i2c_master.o [OK]
Compiling: tmk_core/protocol/lufa/lufa.c [OK]
Compiling: tmk_core/protocol/usb_descriptor.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Class/Common/HIDParser.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/ConfigDescriptors.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/DeviceStandardReq.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/Events.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/HostStandardReq.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/USBTask.c [OK]
Compiling: tmk_core/protocol/lufa/usb_util.c [OK]
Linking: .build/aki27_cocot46plus_default.elf [OK]
Creating load file for flashing: .build/aki27_cocot46plus_default.hex [OK]
Copying aki27_cocot46plus_default.hex to qmk_firmware folder [OK]
Checking file size of aki27_cocot46plus_default.hex [OK]
* The firmware size is fine - 27636/28672 (96%, 1036 bytes free)
通った.
つぎにRP2040がターゲットであるrp2040
キーマップをビルドする.
$ qmk compile -kb aki27/cocot46plus -km rp2040
Ψ Compiling keymap with gmake -r -R -f builddefs/build_keyboard.mk -s KEYBOARD=aki27/cocot46plus KEYMAP=rp2040 KEYBOARD_FILESAFE=aki27_cocot46plus TARGET=aki27_cocot46plus_rp2040 INTERMEDIATE_OUTPUT=.build/obj_aki27_cocot46plus_rp2040 VERBOSE=false COLOR=true SILENT=false QMK_BIN="qmk"
Generating: .build/obj_aki27_cocot46plus_rp2040/src/info_deps.d [OK]
sh: arm-none-eabi-gcc: command not found
sh: arm-none-eabi-gcc: command not found
gmake: *** [builddefs/common_rules.mk:225: gccversion] Error 127
ARM用GCCか何かがないと怒られたので導入する.
brew install arm-none-eabi-gcc
再チャレンジするも失敗.
$ qmk compile -kb aki27/cocot46plus -km rp2040
Ψ Compiling keymap with gmake -r -R -f builddefs/build_keyboard.mk -s KEYBOARD=aki27/cocot46plus KEYMAP=rp2040 KEYBOARD_FILESAFE=aki27_cocot46plus TARGET=aki27_cocot46plus_rp2040 INTERMEDIATE_OUTPUT=.build/obj_aki27_cocot46plus_rp2040 VERBOSE=false COLOR=true SILENT=false QMK_BIN="qmk"
arm-none-eabi-gcc (GCC) 14.1.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Generating: .build/obj_aki27_cocot46plus_rp2040/src/info_config.h [OK]
Generating: .build/obj_aki27_cocot46plus_rp2040/src/default_keyboard.c [OK]
Generating: .build/obj_aki27_cocot46plus_rp2040/src/default_keyboard.h [OK]
Compiling: keyboards/aki27/cocot46plus/matrix.c In file included from ./lib/pico-sdk/src/common/pico_base/include/pico/types.h:12,
from ./lib/pico-sdk/src/common/pico_base/include/pico.h:24,
from ./lib/pico-sdk/src/rp2_common/hardware_flash/include/hardware/flash.h:10,
from ./platforms/chibios/drivers/wear_leveling/wear_leveling_rp2040_flash_config.h:6,
from <command-line>:
./lib/pico-sdk/src/common/pico_base/include/pico/assert.h:18:10: fatal error: assert.h: No such file or directory
18 | #include <assert.h>
| ^~~~~~~~~~
compilation terminated.
[ERRORS]
|
|
|
gmake: *** [builddefs/common_rules.mk:373: .build/obj_aki27_cocot46plus_rp2040/matrix.o] Error 1
QMKをArm向けにビルドしようとしていた同志がZennにいたので,ツールチェインを再インストール.
brew uninstall arm-none-eabi-gcc
brew install --cask gcc-arm-embedded
再ビルドする.
$ qmk compile -kb aki27/cocot46plus -km rp2040
Ψ Compiling keymap with gmake -r -R -f builddefs/build_keyboard.mk -s KEYBOARD=aki27/cocot46plus KEYMAP=rp2040 KEYBOARD_FILESAFE=aki27_cocot46plus TARGET=aki27_cocot46plus_rp2040 INTERMEDIATE_OUTPUT=.build/obj_aki27_cocot46plus_rp2040 VERBOSE=false COLOR=true SILENT=false QMK_BIN="qmk"
arm-none-eabi-gcc (Arm GNU Toolchain 13.3.Rel1 (Build arm-13.24)) 13.3.1 20240614
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compiling: keyboards/aki27/cocot46plus/matrix.c In file included from ./lib/chibios/os/hal/osal/rt-nil/osal.h:32,
from ./lib/chibios/os/hal/include/hal.h:30,
from platforms/chibios/gpio.h:18,
from platforms/gpio.h:21,
from quantum/matrix.h:22,
from keyboards/aki27/cocot46plus/matrix.c:17:
./lib/chibios/os/rt/include/ch.h:125:10: fatal error: chlib.h: No such file or directory
125 | #include "chlib.h"
| ^~~~~~~~~
compilation terminated.
[ERRORS]
|
|
|
gmake: *** [builddefs/common_rules.mk:373: .build/obj_aki27_cocot46plus_rp2040/matrix.o] Error 1
一歩前進した.
ここまでコードは一切弄っていないのにgit status
がクリーンでないことに気づいたので差分を確認する.
$ git diff
diff --git a/lib/chibios b/lib/chibios
index be44b3305f..0062927e30 160000
--- a/lib/chibios
+++ b/lib/chibios
@@ -1 +1 @@
-Subproject commit be44b3305f9a9fe5f2f49a4e7b978db322dc463e
+Subproject commit 0062927e3058a8b5ef587234bbd98d42fb4e595e
diff --git a/lib/chibios-contrib b/lib/chibios-contrib
index 77cb0a4f75..a224be155a 160000
--- a/lib/chibios-contrib
+++ b/lib/chibios-contrib
@@ -1 +1 @@
-Subproject commit 77cb0a4f7589f89e724f5e6ecb1d76d514dd1212
+Subproject commit a224be155ae18d38deccf33a6c1d259b9a5ad8d3
GitHubを見るかぎり,chibios
, chibos-contrib
ともに変更前のコミットハッシュがqmk-master
ブランチのHEADを指して,変更後がmaster
ブランチのHEADを指している(本日時点).どちらもmaster
をチェックアウトするように.gitmodules
では設定されているが最終更新日が古いし,名前からしてもqmk-master
を使うのが正しそうな気がする.
という訳で,ブランチを変えてみる.
git checkout -b update-cocot46plus-rp2040
git -C lib/chibios checkout qmk-master
git -C lib/chibios-contrib checkout qmk-master
そしてビルドしてみると読みは当たってたっぽい.
$ qmk compile -kb aki27/cocot46plus -km rp2040
Ψ Compiling keymap with gmake -r -R -f builddefs/build_keyboard.mk -s KEYBOARD=aki27/cocot46plus KEYMAP=rp2040 KEYBOARD_FILESAFE=aki27_cocot46plus TARGET=aki27_cocot46plus_rp2040 INTERMEDIATE_OUTPUT=.build/obj_aki27_cocot46plus_rp2040 VERBOSE=false COLOR=true SILENT=false QMK_BIN="qmk"
arm-none-eabi-gcc (Arm GNU Toolchain 13.3.Rel1 (Build arm-13.24)) 13.3.1 20240614
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compiling: keyboards/aki27/cocot46plus/matrix.c [OK]
Compiling: keyboards/aki27/cocot46plus/cocot46plus.c [OK]
Compiling: .build/obj_aki27_cocot46plus_rp2040/src/default_keyboard.c [OK]
Compiling: quantum/keymap_introspection.c In file included from ./keyboards/aki27/cocot46plus/keymaps/rp2040/keymap.c:15,
from quantum/keymap_introspection.c:5:
./keyboards/aki27/cocot46plus/keymaps/rp2040/keymap.c:80:88: error: 'KC_PGDOWN' undeclared here (not in a function); did you mean 'KC_PGDN'?
80 | KC_PGUP, KC_MS_BTN3, KC_PGDOWN, XXXXXXX, XXXXXXX, XXXXXXX
| ^~~~~~~~~
./.build/obj_aki27_cocot46plus_rp2040/src/default_keyboard.h:36:37: note: in definition of macro 'LAYOUT'
36 | {KC_NO, KC_NO, k4C, KC_NO, k4E, KC_NO}, \
| ^~~
[ERRORS]
|
|
|
gmake: *** [builddefs/common_rules.mk:373: .build/obj_aki27_cocot46plus_rp2040/quantum/keymap_introspection.o] Error 1
自明なエラーだったので修正すると引き続き別のエラーが発生.
$ qmk compile -kb aki27/cocot46plus -km rp2040
Ψ Compiling keymap with gmake -r -R -f builddefs/build_keyboard.mk -s KEYBOARD=aki27/cocot46plus KEYMAP=rp2040 KEYBOARD_FILESAFE=aki27_cocot46plus TARGET=aki27_cocot46plus_rp2040 INTERMEDIATE_OUTPUT=.build/obj_aki27_cocot46plus_rp2040 VERBOSE=false COLOR=true SILENT=false QMK_BIN="qmk"
arm-none-eabi-gcc (Arm GNU Toolchain 13.3.Rel1 (Build arm-13.24)) 13.3.1 20240614
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compiling: quantum/keymap_introspection.c [OK]
Compiling: quantum/quantum.c [OK]
Compiling: quantum/bitwise.c [OK]
Compiling: quantum/led.c [OK]
Compiling: quantum/action.c [OK]
Compiling: quantum/action_layer.c [OK]
Compiling: quantum/action_tapping.c quantum/action_tapping.c:15:10: error: #error "IGNORE_MOD_TAP_INTERRUPT is no longer necessary as it is now the default behavior of mod-tap keys. Please remove it from your config."
15 | # error "IGNORE_MOD_TAP_INTERRUPT is no longer necessary as it is now the default behavior of mod-tap keys. Please remove it from your config."
| ^~~~~
[ERRORS]
|
|
|
gmake: *** [builddefs/common_rules.mk:373: .build/obj_aki27_cocot46plus_rp2040/quantum/action_tapping.o] Error 1
keyboards/aki27/cocot46plus/keymaps/rp2040/config.h
に当該マクロがあったので,これを削除して再ビルド.
ビルドログ
$ qmk compile -kb aki27/cocot46plus -km rp2040
Ψ Compiling keymap with gmake -r -R -f builddefs/build_keyboard.mk -s KEYBOARD=aki27/cocot46plus KEYMAP=rp2040 KEYBOARD_FILESAFE=aki27_cocot46plus TARGET=aki27_cocot46plus_rp2040 INTERMEDIATE_OUTPUT=.build/obj_aki27_cocot46plus_rp2040 VERBOSE=false COLOR=true SILENT=false QMK_BIN="qmk"
arm-none-eabi-gcc (Arm GNU Toolchain 13.3.Rel1 (Build arm-13.24)) 13.3.1 20240614
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compiling: keyboards/aki27/cocot46plus/matrix.c [OK]
Compiling: keyboards/aki27/cocot46plus/cocot46plus.c [OK]
Compiling: .build/obj_aki27_cocot46plus_rp2040/src/default_keyboard.c [OK]
Compiling: quantum/keymap_introspection.c [OK]
Compiling: quantum/quantum.c [OK]
Compiling: quantum/bitwise.c [OK]
Compiling: quantum/led.c [OK]
Compiling: quantum/action.c [OK]
Compiling: quantum/action_layer.c [OK]
Compiling: quantum/action_tapping.c [OK]
Compiling: quantum/action_util.c [OK]
Compiling: quantum/eeconfig.c [OK]
Compiling: quantum/keyboard.c [OK]
Compiling: quantum/keymap_common.c [OK]
Compiling: quantum/keycode_config.c [OK]
Compiling: quantum/sync_timer.c [OK]
Compiling: quantum/logging/debug.c [OK]
Compiling: quantum/logging/sendchar.c [OK]
Compiling: quantum/logging/print.c [OK]
Compiling: quantum/matrix_common.c [OK]
Compiling: quantum/debounce/sym_defer_g.c [OK]
Compiling: quantum/main.c [OK]
Compiling: lib/printf/src/printf/printf.c [OK]
Compiling: quantum/pointing_device/pointing_device.c [OK]
Compiling: quantum/pointing_device/pointing_device_drivers.c [OK]
Compiling: quantum/pointing_device/pointing_device_auto_mouse.c [OK]
Compiling: drivers/sensors/adns5050.c [OK]
Compiling: drivers/eeprom/eeprom_driver.c [OK]
Compiling: drivers/eeprom/eeprom_wear_leveling.c [OK]
Compiling: quantum/wear_leveling/wear_leveling.c [OK]
Compiling: platforms/chibios/drivers/wear_leveling/wear_leveling_rp2040_flash.c [OK]
Compiling: quantum/color.c [OK]
Compiling: quantum/rgblight/rgblight.c [OK]
Compiling: quantum/rgblight/rgblight_drivers.c [OK]
Compiling: quantum/process_keycode/process_rgb.c [OK]
Compiling: quantum/led_tables.c [OK]
Compiling: lib/fnv/qmk_fnv_type_validation.c [OK]
Compiling: lib/fnv/hash_32a.c [OK]
Compiling: lib/fnv/hash_64a.c [OK]
Compiling: drivers/oled/oled_driver.c [OK]
Compiling: quantum/encoder.c [OK]
Compiling: drivers/encoder/encoder_quadrature.c [OK]
Compiling: platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c [OK]
Compiling: quantum/bootmagic/bootmagic.c [OK]
Compiling: quantum/dynamic_keymap.c [OK]
Compiling: quantum/process_keycode/process_magic.c [OK]
Compiling: quantum/mousekey.c [OK]
Compiling: quantum/send_string/send_string.c [OK]
Compiling: quantum/process_keycode/process_space_cadet.c [OK]
Compiling: quantum/process_keycode/process_tri_layer.c [OK]
Compiling: quantum/tri_layer.c [OK]
Compiling: quantum/via.c [OK]
Compiling: tmk_core/protocol/host.c [OK]
Compiling: tmk_core/protocol/report.c [OK]
Compiling: tmk_core/protocol/usb_device_state.c [OK]
Compiling: tmk_core/protocol/usb_util.c [OK]
Compiling: platforms/suspend.c [OK]
Compiling: platforms/synchronization_util.c [OK]
Compiling: platforms/timer.c [OK]
Compiling: platforms/chibios/hardware_id.c [OK]
Compiling: platforms/chibios/platform.c [OK]
Compiling: platforms/chibios/suspend.c [OK]
Compiling: platforms/chibios/timer.c [OK]
Compiling: platforms/chibios/bootloaders/rp2040.c [OK]
Compiling: platforms/chibios/drivers/i2c_master.c [OK]
Archiving: .build/obj_aki27_cocot46plus_rp2040/i2c_master.o [OK]
Assembling: lib/chibios/os/common/startup/ARMCMx/compilers/GCC/crt0_v6m.S [OK]
Assembling: lib/chibios/os/common/startup/ARMCMx/compilers/GCC/vectors.S [OK]
Assembling: lib/chibios/os/common/ports/ARMv6-M-RP2/compilers/GCC/chcoreasm.S [OK]
Compiling: tmk_core/protocol/chibios/usb_main.c [OK]
Compiling: tmk_core/protocol/chibios/chibios.c [OK]
Compiling: tmk_core/protocol/usb_descriptor.c [OK]
Compiling: tmk_core/protocol/chibios/usb_driver.c [OK]
Compiling: tmk_core/protocol/chibios/usb_endpoints.c [OK]
Compiling: tmk_core/protocol/chibios/usb_report_handling.c [OK]
Compiling: tmk_core/protocol/chibios/usb_util.c [OK]
Compiling: lib/chibios/os/common/startup/ARMCMx/compilers/GCC/crt1.c [OK]
Compiling: lib/chibios/os/rt/src/chsys.c [OK]
Compiling: lib/chibios/os/rt/src/chrfcu.c [OK]
Compiling: lib/chibios/os/rt/src/chdebug.c [OK]
Compiling: lib/chibios/os/rt/src/chtrace.c [OK]
Compiling: lib/chibios/os/rt/src/chvt.c [OK]
Compiling: lib/chibios/os/rt/src/chschd.c [OK]
Compiling: lib/chibios/os/rt/src/chinstances.c [OK]
Compiling: lib/chibios/os/rt/src/chthreads.c [OK]
Compiling: lib/chibios/os/rt/src/chtm.c [OK]
Compiling: lib/chibios/os/rt/src/chstats.c [OK]
Compiling: lib/chibios/os/rt/src/chregistry.c [OK]
Compiling: lib/chibios/os/rt/src/chsem.c [OK]
Compiling: lib/chibios/os/rt/src/chmtx.c [OK]
Compiling: lib/chibios/os/rt/src/chcond.c [OK]
Compiling: lib/chibios/os/rt/src/chevents.c [OK]
Compiling: lib/chibios/os/rt/src/chmsg.c [OK]
Compiling: lib/chibios/os/rt/src/chdynamic.c [OK]
Compiling: lib/chibios/os/common/ports/ARMv6-M-RP2/chcore.c [OK]
Compiling: lib/chibios/os/hal/osal/rt-nil/osal.c [OK]
Compiling: lib/chibios/os/oslib/src/chmboxes.c [OK]
Compiling: lib/chibios/os/oslib/src/chmemcore.c [OK]
Compiling: lib/chibios/os/oslib/src/chmemheaps.c [OK]
Compiling: lib/chibios/os/oslib/src/chmempools.c [OK]
Compiling: lib/chibios/os/oslib/src/chpipes.c [OK]
Compiling: lib/chibios/os/oslib/src/chobjcaches.c [OK]
Compiling: lib/chibios/os/oslib/src/chdelegates.c [OK]
Compiling: lib/chibios/os/oslib/src/chfactory.c [OK]
Compiling: lib/chibios/os/hal/src/hal.c [OK]
Compiling: lib/chibios/os/hal/src/hal_st.c [OK]
Compiling: lib/chibios/os/hal/src/hal_buffers.c [OK]
Compiling: lib/chibios/os/hal/src/hal_queues.c [OK]
Compiling: lib/chibios/os/hal/src/hal_flash.c [OK]
Compiling: lib/chibios/os/hal/src/hal_mmcsd.c [OK]
Compiling: lib/chibios/os/hal/src/hal_adc.c [OK]
Compiling: lib/chibios/os/hal/src/hal_can.c [OK]
Compiling: lib/chibios/os/hal/src/hal_crypto.c [OK]
Compiling: lib/chibios/os/hal/src/hal_dac.c [OK]
Compiling: lib/chibios/os/hal/src/hal_efl.c [OK]
Compiling: lib/chibios/os/hal/src/hal_gpt.c [OK]
Compiling: lib/chibios/os/hal/src/hal_i2c.c [OK]
Compiling: lib/chibios/os/hal/src/hal_i2s.c [OK]
Compiling: lib/chibios/os/hal/src/hal_icu.c [OK]
Compiling: lib/chibios/os/hal/src/hal_mac.c [OK]
Compiling: lib/chibios/os/hal/src/hal_mmc_spi.c [OK]
Compiling: lib/chibios/os/hal/src/hal_pal.c [OK]
Compiling: lib/chibios/os/hal/src/hal_pwm.c [OK]
Compiling: lib/chibios/os/hal/src/hal_rtc.c [OK]
Compiling: lib/chibios/os/hal/src/hal_sdc.c [OK]
Compiling: lib/chibios/os/hal/src/hal_serial.c [OK]
Compiling: lib/chibios/os/hal/src/hal_serial_usb.c [OK]
Compiling: lib/chibios/os/hal/src/hal_sio.c [OK]
Compiling: lib/chibios/os/hal/src/hal_spi.c [OK]
Compiling: lib/chibios/os/hal/src/hal_trng.c [OK]
Compiling: lib/chibios/os/hal/src/hal_uart.c [OK]
Compiling: lib/chibios/os/hal/src/hal_usb.c [OK]
Compiling: lib/chibios/os/hal/src/hal_wdg.c [OK]
Compiling: lib/chibios/os/hal/src/hal_wspi.c [OK]
Compiling: lib/chibios/os/hal/ports/common/ARMCMx/nvic.c [OK]
Compiling: lib/chibios/os/hal/ports/RP/RP2040/rp_isr.c [OK]
Compiling: lib/chibios/os/hal/ports/RP/RP2040/hal_lld.c [OK]
Compiling: lib/chibios/os/hal/ports/RP/LLD/DMAv1/rp_dma.c [OK]
Compiling: lib/chibios/os/hal/ports/RP/LLD/GPIOv1/hal_pal_lld.c [OK]
Compiling: lib/chibios/os/hal/ports/RP/LLD/SPIv1/hal_spi_lld.c [OK]
Compiling: lib/chibios/os/hal/ports/RP/LLD/TIMERv1/hal_st_lld.c [OK]
Compiling: lib/chibios/os/hal/ports/RP/LLD/UARTv1/hal_sio_lld.c [OK]
Compiling: lib/chibios/os/hal/ports/RP/LLD/RTCv1/hal_rtc_lld.c [OK]
Compiling: lib/chibios/os/hal/ports/RP/LLD/WDGv1/hal_wdg_lld.c [OK]
Compiling: lib/chibios-contrib/os/hal/ports/RP/LLD/I2Cv1/hal_i2c_lld.c [OK]
Compiling: lib/chibios-contrib/os/hal/ports/RP/LLD/PWMv1/hal_pwm_lld.c [OK]
Compiling: lib/chibios-contrib/os/hal/ports/RP/LLD/ADCv1/hal_adc_lld.c [OK]
Compiling: lib/chibios-contrib/os/hal/ports/RP/LLD/USBDv1/hal_usb_lld.c [OK]
Compiling: lib/chibios/os/hal/boards/RP_PICO_RP2040/board.c [OK]
Compiling: lib/chibios/os/hal/lib/streams/chprintf.c [OK]
Compiling: lib/chibios/os/hal/lib/streams/chscanf.c [OK]
Compiling: lib/chibios/os/hal/lib/streams/memstreams.c [OK]
Compiling: lib/chibios/os/hal/lib/streams/nullstreams.c [OK]
Compiling: lib/chibios/os/hal/lib/streams/bufstreams.c [OK]
Compiling: lib/chibios/os/various/syscalls.c [OK]
Compiling: platforms/chibios/syscall-fallbacks.c [OK]
Compiling: platforms/chibios/wait.c [OK]
Compiling: platforms/chibios/synchronization_util.c [OK]
Compiling: platforms/chibios/interrupt_handlers.c [OK]
Compiling: lib/pico-sdk/src/rp2_common/hardware_clocks/clocks.c [OK]
Compiling: lib/pico-sdk/src/rp2_common/hardware_pll/pll.c [OK]
Compiling: lib/pico-sdk/src/rp2_common/hardware_pio/pio.c [OK]
Compiling: lib/pico-sdk/src/rp2_common/hardware_timer/timer.c [OK]
Compiling: lib/pico-sdk/src/rp2_common/hardware_flash/flash.c [OK]
Compiling: lib/pico-sdk/src/rp2_common/hardware_gpio/gpio.c [OK]
Compiling: lib/pico-sdk/src/rp2_common/hardware_claim/claim.c [OK]
Compiling: lib/pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c [OK]
Compiling: lib/pico-sdk/src/rp2_common/hardware_xosc/xosc.c [OK]
Compiling: lib/pico-sdk/src/rp2_common/pico_bootrom/bootrom.c [OK]
Compiling: platforms/chibios/vendors/RP/stage2_bootloaders.c [OK]
Compiling: platforms/chibios/vendors/RP/pico_sdk_shims.c [OK]
Assembling: lib/pico-sdk/src/rp2_common/pico_divider/divider.S [OK]
Assembling: lib/pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S [OK]
Linking: .build/aki27_cocot46plus_rp2040_promicro_rp2040.elf [WARNINGS]
|
| lto-wrapper: warning: using serial compilation of 2 LTRANS jobs
| lto-wrapper: note: see the '-flto' option documentation for more information
|
Creating UF2 file for deployment: .build/aki27_cocot46plus_rp2040_promicro_rp2040.uf2 [OK]
Copying aki27_cocot46plus_rp2040_promicro_rp2040.uf2 to qmk_firmware folder [OK]
リンカで警告が出たけどひとまず成功🎉 今日はここまで.
現状の成果物.
交換するマイコンボードに合わせてピン名称を変更する.そして,その状態でビルドすると他にも更新しないといけない箇所をエラーメッセージが全部教えてくれるので直す.
diff --git a/keyboards/aki27/cocot46plus/keyboard.json b/keyboards/aki27/cocot46plus/keyboard.json
index 8af90e23de..8a7025cbd0 100644
--- a/keyboards/aki27/cocot46plus/keyboard.json
+++ b/keyboards/aki27/cocot46plus/keyboard.json
@@ -35,8 +35,8 @@
},
"debounce": 5,
"matrix_pins": {
- "cols": ["F4", "F5", "F6", "F7", "B1", "B3"],
- "rows": ["D4", "C6", "D7", "E6", "NO_PIN"],
+ "cols": ["GP29", "GP28", "GP27", "GP26", "GP22", "GP20"],
+ "rows": ["GP4", "GP5", "GP6", "GP7", "NO_PIN"],
"custom": true,
"custom_lite": true,
"direct": [
ピン名称についてはここに記載がある.
To address individual pins on the RP2040, QMK uses the
GPx
abbreviation -- where thex
stands for the GPIO number of the pin. This number can likely be found on the official pinout diagram of your board.
新旧それぞれのデータシートはこちら:
なんとブランチを参考にさせてもらった人が当初のATmegaでのQMK最新版への追従だけでなく,RP2040への移植も終えた模様.
ちなみに新しいPro Microが届いた.
上記PRで作者が"I now have this keyboard working with RP2040"と言っている時点のコミットをチェックアウトするとコンパイルはできるけどなぜかマイコンに書き込めない(書き込もうとするとイジェクトされる)ので,レビュワーの指示に一旦従ってみる.
rules.mk
のCONVERT_TO
を消して,keyboard.json
にmatrix_pins
を書いたうえでビルドすると他の箇所でピン番号のエラーが出たので一旦ピン関連以外のエラーになるまで修正する.
rules.mk
diff --git a/keyboards/aki27/cocot46plus/rules.mk b/keyboards/aki27/cocot46plus/rules.mk
index 94a66b4ead..2fda4c7226 100644
--- a/keyboards/aki27/cocot46plus/rules.mk
+++ b/keyboards/aki27/cocot46plus/rules.mk
@@ -2,6 +2,3 @@ SRC += matrix.c
CUSTOM_MATRIX = lite
POINTING_DEVICE_DRIVER = adns5050
SPACE_CADET_ENABLE = no
-# A regular Pro Micro may work if this line is removed
-# but some features may need to be disabled for the firmware to fit in the storage.
-CONVERT_TO=promicro_rp2040
config.h
diff --git a/keyboards/aki27/cocot46plus/config.h b/keyboards/aki27/cocot46plus/config.h
index 684755a216..ecfc1db8c0 100644
--- a/keyboards/aki27/cocot46plus/config.h
+++ b/keyboards/aki27/cocot46plus/config.h
@@ -18,17 +18,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
// These do not seem to have keyboard.json support yet.
-#define ADNS5050_SCLK_PIN B2
-#define ADNS5050_SDIO_PIN B4
-#define ADNS5050_CS_PIN B5
+#define ADNS5050_SCLK_PIN GP23
+#define ADNS5050_SDIO_PIN GP8
+#define ADNS5050_CS_PIN GP9
/* key matrix size */
#define MATRIX_ROWS 10
#define MATRIX_COLS 6
-// wiring of each half
-#define MATRIX_ROW_PINS { D4, C6, D7, E6, NO_PIN }
-#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
#define POINTING_DEVICE_ROTATION_180
#define OLED_FONT_H "keyboards/aki27/cocot46plus/glcdfont.c"
keyboard.json
diff --git a/keyboards/aki27/cocot46plus/keyboard.json b/keyboards/aki27/cocot46plus/keyboard.json
index 9ed3db6a06..257136460a 100644
--- a/keyboards/aki27/cocot46plus/keyboard.json
+++ b/keyboards/aki27/cocot46plus/keyboard.json
@@ -8,7 +8,11 @@
"pid": "0x0003",
"vid": "0x1727"
},
- "development_board": "promicro",
+ "development_board": "promicro_rp2040",
+ "matrix_pins": {
+ "cols": ["GP29", "GP28", "GP27", "GP26", "GP22", "GP20"],
+ "rows": ["GP4", "GP5", "GP6", "GP7", "NO_PIN"]
+ },
"build": {
"lto": true
},
@@ -22,11 +26,12 @@
"rgblight": true
},
"ws2812": {
- "pin": "B6"
+ "pin": "GP7"
},
"encoder": {
"rotary": [
- { "pin_a": "D3", "pin_b": "D2"}
+ { "pin_a": "GP0", "pin_b": "GP0"}
]
},
"rgblight": {
これで以下のエラーが出るようになった.
$ qmk compile -kb aki27/cocot46plus -km default
Ψ Compiling keymap with gmake -r -R -f builddefs/build_keyboard.mk -s KEYBOARD=aki27/cocot46plus KEYMAP=default KEYBOARD_FILESAFE=aki27_cocot46plus TARGET=aki27_cocot46plus_default INTERMEDIATE_OUTPUT=.build/obj_aki27_cocot46plus_default VERBOSE=false COLOR=true SILENT=false QMK_BIN="qmk"
arm-none-eabi-gcc (Arm GNU Toolchain 13.3.Rel1 (Build arm-13.24)) 13.3.1 20240614
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Generating: .build/obj_aki27_cocot46plus_default/src/info_config.h [OK]
(中略)
Compiling: platforms/chibios/drivers/ws2812_bitbang.c platforms/chibios/drivers/ws2812_bitbang.c:18:14: error: #error "Please use `vendor` WS2812 driver for RP2040"
18 | # error "Please use `vendor` WS2812 driver for RP2040"
| ^~~~~
[ERRORS]
|
|
|
gmake: *** [builddefs/common_rules.mk:373: .build/obj_aki27_cocot46plus_default/ws2812_bitbang.o] Error 1
調べるとinfo.json
にはws2812.driver
というキーがあり,取る値の一つにvendor
があるらしい.
それを追記すると,ChibiOS内でエラー.
$ qmk compile -kb aki27/cocot46plus -km default
Ψ Compiling keymap with gmake -r -R -f builddefs/build_keyboard.mk -s KEYBOARD=aki27/cocot46plus KEYMAP=default KEYBOARD_FILESAFE=aki27_cocot46plus TARGET=aki27_cocot46plus_default INTERMEDIATE_OUTPUT=.build/obj_aki27_cocot46plus_default VERBOSE=false COLOR=true SILENT=false QMK_BIN="qmk"
arm-none-eabi-gcc (Arm GNU Toolchain 13.3.Rel1 (Build arm-13.24)) 13.3.1 20240614
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compiling: platforms/chibios/drivers/i2c_master.c In file included from ./lib/chibios/os/hal/include/hal_pal.h:174,
from ./lib/chibios/os/hal/include/hal.h:306,
from platforms/chibios/gpio.h:18,
from platforms/gpio.h:21,
from platforms/chibios/drivers/i2c_master.c:30:
platforms/chibios/drivers/i2c_master.c: In function 'i2c_init':
././platforms/chibios/boards/QMK_PM2040/configs/config.h:17:26: error: 'D0' undeclared (first use in this function)
17 | # define I2C1_SCL_PIN D0
| ^~
./lib/chibios/os/hal/ports/RP/LLD/GPIOv1/hal_pal_lld.h:389:32: note: in definition of macro 'pal_lld_setpadmode'
389 | __pal_lld_pad_set_mode(port, pad, mode)
| ^~~
./lib/chibios/os/hal/include/hal_pal.h:809:3: note: in expansion of macro 'palSetPadMode'
809 | palSetPadMode(PAL_PORT(line), PAL_PAD(line), mode)
| ^~~~~~~~~~~~~
./lib/chibios/os/hal/include/hal_pal.h:809:33: note: in expansion of macro 'PAL_PAD'
809 | palSetPadMode(PAL_PORT(line), PAL_PAD(line), mode)
| ^~~~~~~
platforms/chibios/drivers/i2c_master.c:138:9: note: in expansion of macro 'palSetLineMode'
138 | palSetLineMode(I2C1_SCL_PIN, PAL_MODE_INPUT);
| ^~~~~~~~~~~~~~
platforms/chibios/drivers/i2c_master.c:138:24: note: in expansion of macro 'I2C1_SCL_PIN'
138 | palSetLineMode(I2C1_SCL_PIN, PAL_MODE_INPUT);
| ^~~~~~~~~~~~
././platforms/chibios/boards/QMK_PM2040/configs/config.h:17:26: note: each undeclared identifier is reported only once for each function it appears in
17 | # define I2C1_SCL_PIN D0
| ^~
./lib/chibios/os/hal/ports/RP/LLD/GPIOv1/hal_pal_lld.h:389:32: note: in definition of macro 'pal_lld_setpadmode'
389 | __pal_lld_pad_set_mode(port, pad, mode)
| ^~~
./lib/chibios/os/hal/include/hal_pal.h:809:3: note: in expansion of macro 'palSetPadMode'
809 | palSetPadMode(PAL_PORT(line), PAL_PAD(line), mode)
| ^~~~~~~~~~~~~
./lib/chibios/os/hal/include/hal_pal.h:809:33: note: in expansion of macro 'PAL_PAD'
809 | palSetPadMode(PAL_PORT(line), PAL_PAD(line), mode)
| ^~~~~~~
platforms/chibios/drivers/i2c_master.c:138:9: note: in expansion of macro 'palSetLineMode'
138 | palSetLineMode(I2C1_SCL_PIN, PAL_MODE_INPUT);
| ^~~~~~~~~~~~~~
platforms/chibios/drivers/i2c_master.c:138:24: note: in expansion of macro 'I2C1_SCL_PIN'
138 | palSetLineMode(I2C1_SCL_PIN, PAL_MODE_INPUT);
| ^~~~~~~~~~~~
././platforms/chibios/boards/QMK_PM2040/configs/config.h:14:26: error: 'D1' undeclared (first use in this function)
14 | # define I2C1_SDA_PIN D1
| ^~
./lib/chibios/os/hal/ports/RP/LLD/GPIOv1/hal_pal_lld.h:389:32: note: in definition of macro 'pal_lld_setpadmode'
389 | __pal_lld_pad_set_mode(port, pad, mode)
| ^~~
./lib/chibios/os/hal/include/hal_pal.h:809:3: note: in expansion of macro 'palSetPadMode'
809 | palSetPadMode(PAL_PORT(line), PAL_PAD(line), mode)
| ^~~~~~~~~~~~~
./lib/chibios/os/hal/include/hal_pal.h:809:33: note: in expansion of macro 'PAL_PAD'
809 | palSetPadMode(PAL_PORT(line), PAL_PAD(line), mode)
| ^~~~~~~
platforms/chibios/drivers/i2c_master.c:139:9: note: in expansion of macro 'palSetLineMode'
139 | palSetLineMode(I2C1_SDA_PIN, PAL_MODE_INPUT);
| ^~~~~~~~~~~~~~
platforms/chibios/drivers/i2c_master.c:139:24: note: in expansion of macro 'I2C1_SDA_PIN'
139 | palSetLineMode(I2C1_SDA_PIN, PAL_MODE_INPUT);
| ^~~~~~~~~~~~
[ERRORS]
|
|
|
gmake: *** [builddefs/common_rules.mk:373: .build/obj_aki27_cocot46plus_default/i2c_master.o] Error 1
念のため確認したがD0, D1というピンは指定していない.
$ grep -Rn D0 keyboards/aki27/cocot46plus
keyboards/aki27/cocot46plus/glcdfont.c:137:0x00, 0x00, 0xC0, 0x60, 0xC0, 0xD0,
keyboards/aki27/cocot46plus/glcdfont.c:139:0x6C, 0x68, 0x68, 0x98, 0xD0, 0x60,
keyboards/aki27/cocot46plus/cocot46plus.c:220: 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4,
$ grep -Rn D1 keyboards/aki27/cocot46plus
keyboards/aki27/cocot46plus/cocot46plus.c:220: 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4,
エラーメッセージに従って修正を試みると動くファームウェアがビルドできた.
diff --git a/platforms/chibios/boards/QMK_PM2040/configs/config.h b/platforms/chibios/boards/QMK_PM2040/configs/config.h
index f8b46b7fe4..87554f6b83 100644
--- a/platforms/chibios/boards/QMK_PM2040/configs/config.h
+++ b/platforms/chibios/boards/QMK_PM2040/configs/config.h
@@ -11,10 +11,10 @@
# define I2C_DRIVER I2CD1
#endif
#ifndef I2C1_SDA_PIN
-# define I2C1_SDA_PIN D1
+# define I2C1_SDA_PIN GP2
#endif
#ifndef I2C1_SCL_PIN
-# define I2C1_SCL_PIN D0
+# define I2C1_SCL_PIN GP3
#endif
ただ,QMK本体を弄るのは正しくない気がするのでDiscordで質問中.
長くなってきたので,Vial対応は別のスクラップに.