From 8c47e547b423f2f448465215cd5e906e9a1dc118 Mon Sep 17 00:00:00 2001 From: EwdErna Date: Sun, 20 Sep 2026 21:48:43 +0900 Subject: [PATCH] =?UTF-8?q?layers:=20=E3=83=AC=E3=82=A4=E3=83=A4=E3=83=BC?= =?UTF-8?q?=E6=A7=8B=E9=80=A0=E3=82=92=E7=A2=BA=E5=AE=9A=E3=81=97=E3=81=9F?= =?UTF-8?q?=E4=BB=95=E6=A7=98=E3=81=AB=E8=BF=BD=E5=BE=93=E3=81=95=E3=81=9B?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ELCがPHYのノードIDを直接参照すると決めたので、IDX→ELCの直列フローを PHY→ELC / PHY→IDX の並列に改めた。row/colとLED番号をIDXの出力から外し、 KLEをビュワーとして扱う記述に合わせた。ツール名2つが捨てたモデルを 含んでいたため改名。アナログ値の解釈を持つ層が未定なのでP-1に立てた。 Co-Authored-By: Claude Opus 5 --- keyboard-design-layers.md | 74 ++++++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 29 deletions(-) diff --git a/keyboard-design-layers.md b/keyboard-design-layers.md index a0cb139..26a97b6 100644 --- a/keyboard-design-layers.md +++ b/keyboard-design-layers.md @@ -11,30 +11,38 @@ ### 設計思想 - 「Better KLE」ではなく「Beyond KLE」: UIではなくデータモデルとワークフロー全体の再設計 -- UNIX哲想の適用: 小さな役割のツールがそれぞれしっかり機能する +- UNIX哲学の適用: 小さな役割のツールがそれぞれしっかり機能する - 統合環境(IDE)の提供: 独立したツール群をオーケストレート ## レイヤー構造 +レイヤーは一列に積み上がらない。ELCとIDXはそれぞれ独立にPHYを参照する。 +ELCはIDXを参照せず、IDXもELCを参照しない。 +他レイヤーからキーや部品を指す参照には、PHYのノードIDを使う。 + ### 1. PHYレイヤー (物理配置) -- **役割**: キーの物理的な位置、サイズ、回転 +- **役割**: キーと部品の物理的な位置、サイズ、回転 - **対応ツール**: PCBエディタ、KLE -- **出力**: 座標とキーサイズの配列 +- **出力**: 相対座標の木(キー・クラスター・部品ノード)。各ノードはIDを持つ ### 2. ELCレイヤー (電気配線) -- **役割**: マイコンのpinと各キーの対応 +- **役割**: ピン提供者が提供する論理ピンと、各キーの端子・LEDの対応 +- **入力**: PHYのノードID - **対応ツール**: 回路図エディタ、ファームウェア -- **出力**: ピン配列定義、マトリックス配線情報 -- **備考**: charlieplexingなど非標準的な実装にも対応 +- **出力**: 提供者定義、キーごとの端子の接続先、LEDチェーン +- **備考**: 配線方式(マトリクス / direct / charlieplexing)を区分として選ばせず、端子の接続先の組み合わせとして表すため、非標準的な実装も同じ形で書ける +- **備考**: row / col は正本に持たない。QMKなどが要求する形は出力時に割り当てる ### 3. IDXレイヤー (キー識別) -- **役割**: 物理位置と"キー番号"の対応付け +- **役割**: PHYのキーと"キー番号"の対応付け +- **入力**: PHYのキーID - **重要性**: 物理世界と論理世界を繋ぐ最も重要な抽象化層 -- **出力**: `{x, y, matrix:[row,col], label}[]` +- **出力**: キーIDとキー番号の対応 - **備考**: 現状のエコシステムで最も欠けている層 +- **備考**: マトリックス座標とLEDの識別番号はIDXが持たない(どちらも配線で決まるためELCが持つ) ### 4. MAPレイヤー (キーマップ) @@ -55,26 +63,25 @@ #### PHY Editor - 物理配置の視覚的編集 -- KLE互換フォーマット対応 +- KLE JSONの読み込み・書き出し - 出力: PHY JSON -#### Matrix Mapper +#### Key Indexer -- PHY Editorの出力を入力 -- キーにrow/colを割り当て -- 視覚的にマトリックス配線を確認 +- PHY JSONを入力 +- キーにキー番号を割り当て - 出力: IDX JSON -#### Pin Configurator +#### Wiring Editor -- マトリックス定義を入力 -- マイコンのピン配置を指定 -- 配線図を出力 +- PHY JSONを入力 +- ピン提供者(マイコン、マルチプレクサ等)を置き、各キーの端子の接続先を指定 +- 視覚的に配線を確認 - 出力: ELC JSON #### Keymap Designer -- キー識別子リストを入力 +- キー番号のリストを入力 - レイヤー別キーコード割り当て - VIA/Remapとの互換性 - 出力: MAP JSON @@ -82,6 +89,7 @@ #### Firmware Generator - 全レイヤーの情報を統合 +- row / col など、ターゲットが要求する派生情報をここで割り当てる - QMK/VIA/KMK等へ変換 - 出力: ターゲット固有の設定ファイル @@ -97,17 +105,17 @@ ### レイヤー間インターフェース ```txt -PHY → IDX - Input: KLE JSON (or compatible) - Output: Augmented layout (coordinates + key IDs) +PHY → ELC + Input: ノードID + 配置 + Output: 提供者定義 + 端子の接続先 + LEDチェーン -IDX → ELC - Input: Key ID list - Output: Matrix definition + Pin mapping +PHY → IDX + Input: キーID + 配置 + Output: キーIDとキー番号の対応 IDX → MAP - Input: Key ID list - Output: Keymap arrays + Input: キー番号のリスト + Output: レイヤー別キーコード配列 All → Firmware Output: QMK keyboard.json / VIA JSON / KMK .py @@ -124,7 +132,7 @@ All → Firmware ### Phase 1: プロトコル策定 - JSON Schemaでフォーマット定義 -- TypeScriptでリファレンス実装 +- リファレンス実装(言語・構成は `implementation-plan.md` で選定) - CLIツールとして動作確認 ### Phase 2: 個別ツール開発 @@ -141,7 +149,7 @@ All → Firmware ## 既存ツールとの関係 -- **KLE**: PHY Editorの一実装、インポート対応 +- **KLE**: PHYデータを表示できる既存のビュワー。KLE JSONの読み書きで連携する - **VIA/Remap**: MAP Layerクライアントとして連携 - **QMK Configurator**: Firmware Generatorのターゲット @@ -155,7 +163,7 @@ All → Firmware ### 互換性 -- 既存KLE JSONの完全サポート +- 既存KLE JSONの読み込み(PHYデータがなくても読める) - 段階的移行パスの提供 - レガシーツールとの共存 @@ -165,3 +173,11 @@ All → Firmware 2. GitHubでRFCリポジトリ立ち上げ 3. 小規模コミュニティでフィードバック収集 4. リファレンス実装の開発 + +## 未確認事項 + +### P-1 アナログ値の解釈をどの層が持つか + +- 位置づけ: 未解決の問い。ELCは配線だけを持つと決めたため、生値から押下深さを出す変換の置き場が空いている +- 現状の認識: センサの品種と出力特性はPCB設計ツール側、キャリブレーションは実機ごとの実測値で設計データではない、とまでは決まっている。残りをMAPに寄せるか、別の層を立てるかは未定 +- 格上げ条件: アナログ入力のキーボードを1つ通しで設計し、変換に必要な情報と、それを置く層をユーザーが決める