Firmware

ファームウェア設計概要

QMKをベースに、RP2040、MCP系I/Oエキスパンダ、Mirrorレイヤー、RAW HID連携を組み合わせた分割キーボード用ファームウェアの考え方をまとめます。

Overview

制御プログラムの全体像

このファームウェアは、Take&Clock Works製分割キーボード向けに設計したQMKベースの制御プログラムです。RP2040を中心に、左右それぞれのキーマトリクスをI2C接続のMCP系I/Oエキスパンダで読み取り、4行×14列の分割キーボードとして動作します。 通常の日本語配列入力に加え、Fnレイヤー、記号レイヤー、片手入力用のミラーレイヤーを備えています。左右分割キーボードでありながら、片手だけでも主要キーを扱えるよう、右手側の配置を左手側へ反転して使える構成にしています。

ファームウェア設計概要図

Features

主な特徴

  • RP2040 + QMK Firmware によるキーボード制御
  • 左右7列ずつ、合計4行×14列のキーマトリクス
  • I2C接続のMCP I/Oエキスパンダで左右のキーをスキャン
  • 日本語配列向けの Base / Fn1 / Fn2 レイヤー
  • 片手入力に対応する Mirror レイヤー
  • Fnキーの短押し・長押しを使い分ける独自操作
  • RAW HIDによる外部アプリ向けレイヤー状態通知

Layers

レイヤー設計

キーマップは6つのレイヤーで構成しています。内部的には、現在の入力状態を Base / Fn1 / Fn2 のスロットと、通常 / Mirror のモードに分けて管理します。これにより、通常入力と片手入力を同じ考え方で切り替えられるようにしています。

  • Base: 通常の日本語QWERTY入力
  • Fn1: 数字、ファンクションキー、ナビゲーションキー
  • Fn2: 記号入力
  • Base Mirror: 片手入力用の通常入力ミラー
  • Fn1 Mirror: 片手入力用の数字・機能キー
  • Fn2 Mirror: 片手入力用の記号キー

Fn Keys

Fnキーの操作設計

3つの独自Fnキーを用意し、短押しと長押しで役割を分けています。短押しではキーボード本体の入力レイヤーを切り替え、1秒以上の長押しではF21〜F23を送信します。これにより、キーボード単体の操作と、PC側アプリケーションとの連携操作を同じキーで扱える設計にしています。

  • FN1: 短押しでFn1レイヤー切替、長押しでF21送信
  • FN2: 短押しでFn2レイヤー切替、長押しでF22送信
  • FN3: 短押しでMirrorモード切替、長押しでF23送信

Integration

外部連携

RAW HIDを使い、現在のキーボード状態を外部アプリへ通知します。通知には、Mirrorモードの有無、現在のレイヤースロット、実際に有効なレイヤー番号が含まれます。 これにより、PC側のアプリやWeb UIで「今どのレイヤーを使っているか」を表示したり、キーボードの状態に合わせた補助表示を行うことができます。専用のレイヤー表示常駐アプリとの連携にも対応できるよう、キーボード側から状態を通知する前提で設計しています。

Hardware

ハードウェア制御

キーマトリクスの読み取りは独自の matrix.c で実装しています。左側I/Oエキスパンダを 0x20、右側を 0x21 として扱い、列を順番にLowへ落として行入力を読む方式です。 右側ユニットが起動時に見つからない場合でも、一定間隔で再接続を試みるため、分割キーボードとしての扱いやすさと復帰性も考慮しています。

専用のレイヤー表示常駐アプリについては別途説明ページを準備予定です。実際のキー割り当て、行列番号、I2Cアドレスは、配線図、keymap.c、matrix.c、config.h をセットで確認します。