BLE Micro Pro 標準ファームウェア
欲しい機能・抜けてる機能があったら適当に追記していってください
やりたいこと
方法
Bootloaderを拡張してBLEなどの機能のAPIを用意する
QMKからはAPIを呼び出すだけなのでnRFライブラリを用意しなくてもビルドできる
ライセンス的な問題が解決するので標準ファームウェアのバイナリの頒布ができる(はず
Mass Storage Deviceとして認識させてマトリクス、キーマップなどを書き換えられるようにする
jsonをドラッグアンドドロップしたら書き換え完了
uf2を利用してファームウェアもドラッグアンドドロップで書き換えられるようになった
(WIP) Web bluetoothでも書き換えられるようにすることにした(modulo, sisoなどを見据えて)
BootloaderがAPI経由で提供する機能
BLE, USB, GPIO
LED
ちゃんとスレーブと同期するようにした
I2C, SPI
キーマップの保存
QMK configuratorのjsonをそのまま読み込める
KC_を省略した形にも対応
JISにも対応したいけどincludeで切り替えだからファーム書き換え前提?
各種設定の保存
VID, PID, 名前, BLEのConnection interval, マトリクスのピン配置, QMKでいうLAYOUTマクロにあたるもの
code: helix_5row_config.json
{"config":
{
"device_info":{"pid":"0x0000","vid":"0x0000",
"name":"Helix BLE","manufacture":"gonnoc","description":"with BMP"},
"matrix":{"rows":10,"cols":7,"device_rows":5, "device_cols":7,
"debounce":1,"is_left_hand":1,"diode_direction":0,
"layout":[
1,2,3,4,5,6,41,40,39,38,37,36,0,
8,9,10,11,12,13,48,47,46,45,44,43,0,
15,16,17,18,19,20,55,54,53,52,51,50,0,
22,23,24,25,26,27,28,63,62,61,60,59,58,57,0,
29,30,31,32,33,34,35,70,69,68,67,66,65,64,255 ]},
"mode":"SPLIT_MASTER",
"peripheral":{"max_interval":60,"min_interval":30,"slave_latency":7},
"central":{"max_interval":60,"min_interval":30,"slave_latency":7},
"led":{"pin":1, "num":32}
}}
TAPPING_TERM_PER_KEYの保存
TAPPING_TERMの設定くらいは書き換えられるようにしたいよね
EEPROMエミュレーション
必要?
LEDの設定, keyboard_configの保存に使われるはず
QMKに追加する機能
APIを経由するように再実装
文字列<->quantum_keycode変換
QMK Configurator形式 記号とかはだいたい省略形
記号に関しては % \" $ とか直接入力しても変換できるようにした
直接入力で保存しても読み出すときはQMK Configurator形式
なんちゃってJSON parser
QMK ConfiguratorのJSONをキーマップに変換
各種設定を書いたJSONを変換
結局リソース余りまくったのでparson使えばよかった
それでもなおファームウェアをビルドしないとできないこと
マクロの設定
BMP用のマクロとよく使われるレイヤ切り替え(tri_layer_updateでLOWER, RAISE, ADJUST切り替えるやつ)は標準ファームウェアに入れておく
QMKのdefineで色々切り替える系のやつ
標準ファームウェアはどれでビルドしよう? よく使われている設定を知りたい
とりあえずPERMISSIVE_HOLD, TAPPING_TERM_PER_KEY とかは入れといて損はない?
せめてtapping termだけは書き換えられるようにしたい
I2CとかSPIを使うやつ
LCDとか左右有線通信とか
modulo用はそのうち用意するかも
new_keyboard.sh
プロジェクトテンプレートが欲しい
用意しましたsekigon-gonnoc.icon
BLEMICROPROドライブのカスタマイズ
INDEX.HTMでジャンプするページをファームウェアで指定できるとうれしいかも。
拡張キーコード
カスタムキーコードで対応してきた部分をコンフィグで設定できるようにする→拡張キーコード(仮)
LT(layer, kc) でkcに基本キーコード以外のkcを指定する
タップダンスをキーマップに直接書く
update_tri_layerやらなんやら
動作種別
LTE
LT(layer, kc) の拡張。IME切り替え + レイヤ切り替え とかやりたい人は多い気がする
TLT (layer1, layer2, layer3, kc)
update_tri_layer とLT を組み合わせたもの
タップでkc
ホールドでlayer1に移動。ただしlayer2がオンのときはlayer3に移動する
TDD(kc1, kc2)
タップダンスデュアル。タップとダブルタップで切り替え
TDH(jc1, kc2)
タップダンスホールド。タップとホールドで切り替え
今後のアップデート予定 要望など募集中ですsekigon-gonnoc.icon
ユーザー・キーボード開発者がファームのビルドをする状況をもっと減らす
エンコーダー用コンフィグを用意する
ピン、分解能、実行コマンド
実行コマンドは典型的な使用例を調べて用意しておく
例)ボリューム、スクロール、拡大縮小、ウィンドウ切り替え... ほか募集中
拡張キーコードの内部表現
keymap[][]のなかでは16bitのカスタムキーコード
カスタムキーコードに対応する動作を6バイトの構造体に変換して別に保存しておく
最大で32個くらいあればいい?
table:拡張キーコードの構造
1 - 2 byte 動作種別 , layer
3 - 4 byte キーコード1, or layer 2, 3
5 - 6 byte キーコード2