Link Search Menu Expand Document

ファームウェアのビルドと書き込み

ベースはQMKファームウェアです。QMK自体の使い方については公式ドキュメントを参照してください。最新のQMKと乖離している場合があるため、Quantizer用リポジトリのdoc/フォルダ以下も参照することをおすすめします。

  1. 環境構築
  2. 編集する
  3. ビルドする
    1. uf2ファイルを生成する
    2. nrfutilで書き込む
  4. 自分でレポートパーサを実装する
    1. サンプル
    2. 編集するファイルと関数
    3. keymap.c
    4. レポートの形式を調べる

環境構築

QMKの導入手順にしたがって必要ソフトをインストールしてください。 Pro Microを使う場合とは異なり、arm-none-eabi-gccとその関連ソフトも必須です。

  • BLE Micro Pro用のQMK Firmwareをqmk_firmware_bmp_vialという名前でclone
    git clone --depth 1 -b dev/ble-micro-pro https://github.com/sekigon-gonnoc/vial-qmk.git qmk_firmware_bmp_vial
    
  • ビルドに必要なツールをインストール
    cd qmk_firmware_bmp
    ./util/qmk_install.sh
    
  • uf2ブートローダを使わない場合、nrfutil もインストール(要Python3.6–3.8)
    pip install nrfutil --user
    

編集する

ファームウェアを編集する場合、keyboards/sekigon/quantizer/kqb/ 以下を編集してください

ビルドする

uf2ファイルを生成する

事前にUF2ブートローダを書き込んでいないとこの方法は使えません

uf2ブートローダの書き込み

uf2ブートローダが起動するとQuantizerがマスストレージとして認識されます。uf2ファイルをこのドライブにコピーすることでファームウェアを更新できます。

以下のコマンドでuf2ファイルが生成されます。

  make sekigon/keyboard_quantizer/kqb:default:uf2

CLIからdfuコマンドでブートローダを起動し、KQB_BOOTという名前のドライブが表示されたらuf2ファイルをコピーしてください。

nrfutilで書き込む

以下のコマンドでnrfutil用のzipファイルを生成し、書き込み待機状態になったらQuantizerをPCに接続してください。

  make <keyboard>:<keymap>:nrfutil

自分でレポートパーサを実装する

サンプル

  • Thinkpad trackpoint keyboard専用のパーサを実装したサンプル

編集するファイルと関数

  • 自分で用意したパーサを使用するにはkeymap.cへの関数の実装が必要です

keymap.c

  • void report_descriptor_parser_user(uint8_t interface, uint8_t const* desc, uint16_t len)
    • 受信したレポートディスクリプタを解析する
    • サンプルでは特定のキーボードの種類を想定しているのでレポートディスクリプタは解析不要のため、空の関数
  • void on_disconnect_device_user(uint8_t device)
    • Quantizerからデバイスを抜いたときに実行する関数
    • サンプルではキーが押しっぱなしにならないように受信したデータをクリアしている
  • bool report_parser_user(uint8_t const* buf, uint16_t len, matrix_row_t* current_matrix)
    • 受信したレポートを解析しキーマトリクスを更新する。戻り値はマトリクスの更新の有無
    • サンプルではVID:PIDがトラックポイントキーボードと一致した場合は専用の関数を、それ以外では6KROキーボード用の関数を呼び出している

レポートの形式を調べる

CLIのデバッグ機能を使ってどんなレポートが送られてくるか調べられます。CLIからQuantizerに接続したらdebug onを送信し、Quantizerに接続したキーボードやマウスを動かしてください。ホストICがデバイスを認識できていれば下記のようなメッセージが表示されます。

  • キーを押したりマウスを操作したときのレポートを確認
    • 先頭10バイトはホストICが付加したヘッダ
    • サンプルの場合以下の三種類
    # Aキーを押したとき
    Receive: device:0, ep:1
    08 00 04 06 00 01 EF 17 47 60 00 00 04 00 00 00 00 00
    #<------    header     ----->|<-------report-------->
    
    # カーソルを動かしたとき
    Receive: device:1, ep:2
    06 00 04 02 01 02 EF 17 47 60 01 00 00 02 00 00
    #<------    header     ----->|<----report----->
    
    # 横スクロールしたとき
    Receive: device:1, ep:2
    03 00 04 02 01 02 EF 17 47 60 16 FF 00
    #<------    header     ----->|<report>
    
    • device0はキーボード
    • device1のID0はマウス(横スクロールは除く、xyは8bit)、ID0x16は横スクロール