IDX: キー番号の正本としてIDXレイヤーを確定し、MAPの参照をPHYへ移す
キー番号はPHYの幾何からもELCの配線からも導出できない決めごとなので、IDXが正本を持つ。 公開した基板のキー番号は他人のキーマップが依存する公開インターフェースであり、 出力のたびに生成し直さず固定する。 「最も重要な抽象化層」「最も欠けている層」という位置づけは誤りだったので落とした。 QMKのLAYOUTマクロの引数順、ZMKのmatrix transformのmap、KMKのcoord_mappingとして 既に存在していて、形式化されていないだけである。 あわせて2点。MAPはキー番号ではなくPHYのキーIDを参照する(IDXへの挿入でMAPがずれないため)。 IDXの保存形式は order: string[] とし、ELCのLEDChain.orderと同じく並びの位置を番号とする。 phase1-json-schema.md の P-1 を解消。 Journal: journal/2026-09-21-idx-necessity.md Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+26
-38
@@ -5,11 +5,11 @@
|
||||
```txt
|
||||
PHY (物理配置)
|
||||
├─→ ELC (電気配線)
|
||||
└─→ IDX (キー識別)
|
||||
└─→ MAP (キーマップ)
|
||||
├─→ IDX (キー識別)
|
||||
└─→ MAP (キーマップ)
|
||||
```
|
||||
|
||||
ELCとIDXはどちらもPHYを参照する。ELCはIDXを参照しない。
|
||||
ELC・IDX・MAPはどれもPHYを参照する。ELCはIDXを参照せず、MAPもIDXを参照しない。
|
||||
ファームウェアやVIA/Remap向けの出力は、各レイヤーの情報を統合して生成する。
|
||||
他レイヤーからキーや部品を指す参照には、PHYのノードIDを使う。
|
||||
|
||||
@@ -316,9 +316,10 @@ ELCとIDXはどちらもPHYを参照する。ELCはIDXを参照しない。
|
||||
|
||||
## 2. IDXレイヤー JSON Schema
|
||||
|
||||
IDXが持つのは、PHYのキーとキー番号の対応だけとする [推測:P-1]。
|
||||
マトリックス座標(row/col)とLEDの識別番号はここに置かない。どちらも配線で決まる情報で、
|
||||
row/col はELCの配線から導く派生情報、LEDの番号はELCが正本を持つ。
|
||||
各フィールドの意味は `IDXレイヤー.md` を正とする。
|
||||
|
||||
番号を振るキーの並びだけを持つ。並びの位置がキー番号になるため、欠番・重複・番号の飛びは
|
||||
構造として起こらない。
|
||||
|
||||
### 基本構造
|
||||
|
||||
@@ -327,9 +328,9 @@ row/col はELCの配線から導く派生情報、LEDの番号はELCが正本を
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://beyond-kle.org/schemas/idx-layer.json",
|
||||
"title": "IDX Layer - Key Identification",
|
||||
"description": "Mapping between PHY keys and key numbers",
|
||||
"description": "Ordered list of PHY keys; the position in the list is the key number",
|
||||
"type": "object",
|
||||
"required": ["version", "phyReference", "keyMap"],
|
||||
"required": ["version", "phyReference", "order"],
|
||||
"properties": {
|
||||
"version": { "type": "string" },
|
||||
"phyReference": {
|
||||
@@ -340,27 +341,12 @@ row/col はELCの配線から導く派生情報、LEDの番号はELCが正本を
|
||||
"checksum": { "type": "string" }
|
||||
}
|
||||
},
|
||||
"keyMap": {
|
||||
"order": {
|
||||
"type": "array",
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"$ref": "#/$defs/keyMapping"
|
||||
}
|
||||
}
|
||||
},
|
||||
"$defs": {
|
||||
"keyMapping": {
|
||||
"type": "object",
|
||||
"required": ["keyId", "index"],
|
||||
"properties": {
|
||||
"keyId": {
|
||||
"type": "string",
|
||||
"description": "Reference to PHY layer key ID"
|
||||
},
|
||||
"index": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"description": "Key number"
|
||||
}
|
||||
"type": "string",
|
||||
"description": "Reference to PHY layer key ID"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -518,6 +504,9 @@ row/col はELCの配線から導く派生情報、LEDの番号はELCが正本を
|
||||
|
||||
## 4. MAPレイヤー JSON Schema
|
||||
|
||||
キーの参照にはPHYのキーIDを使う。キー番号は参照しない。
|
||||
配列としての並べ替えは、ファームウェア出力時にIDXの並び順で行う。
|
||||
|
||||
### 基本構造
|
||||
|
||||
```json
|
||||
@@ -527,10 +516,10 @@ row/col はELCの配線から導く派生情報、LEDの番号はELCが正本を
|
||||
"title": "MAP Layer - Keymap Configuration",
|
||||
"description": "Key code assignments and layers",
|
||||
"type": "object",
|
||||
"required": ["version", "idxReference", "layers"],
|
||||
"required": ["version", "phyReference", "layers"],
|
||||
"properties": {
|
||||
"version": { "type": "string" },
|
||||
"idxReference": {
|
||||
"phyReference": {
|
||||
"type": "object",
|
||||
"required": ["source", "checksum"],
|
||||
"properties": {
|
||||
@@ -562,9 +551,12 @@ row/col はELCの配線から導く派生情報、LEDの番号はELCが正本を
|
||||
},
|
||||
"keyAssignment": {
|
||||
"type": "object",
|
||||
"required": ["keyIndex", "keycode"],
|
||||
"required": ["keyId", "keycode"],
|
||||
"properties": {
|
||||
"keyIndex": { "type": "integer" },
|
||||
"keyId": {
|
||||
"type": "string",
|
||||
"description": "Reference to PHY layer key ID"
|
||||
},
|
||||
"keycode": { "type": "string" }
|
||||
}
|
||||
}
|
||||
@@ -577,7 +569,7 @@ row/col はELCの配線から導く派生情報、LEDの番号はELCが正本を
|
||||
### PHY → IDX変換
|
||||
|
||||
1. PHYレイヤーからキーのリストを取得
|
||||
2. 各キーにキー番号を割り当て
|
||||
2. 番号を振るキーを選び、並び順を決める
|
||||
|
||||
### PHY → ELC変換
|
||||
|
||||
@@ -588,7 +580,7 @@ row/col はELCの配線から導く派生情報、LEDの番号はELCが正本を
|
||||
### IDX + ELC + MAP → ファームウェア出力
|
||||
|
||||
1. ELCの配線から、ターゲットが要求する row / col を割り当て
|
||||
2. キー番号の配列とキーマップ配列の生成
|
||||
2. IDXの並び順に従って、MAPのキーコードを配列へ並べ替え
|
||||
3. VIA/QMK形式への出力
|
||||
|
||||
## 次のステップ
|
||||
@@ -600,8 +592,4 @@ row/col はELCの配線から導く派生情報、LEDの番号はELCが正本を
|
||||
|
||||
## 未確認事項
|
||||
|
||||
### P-1 IDXがキー番号以外に持つものがあるか
|
||||
|
||||
- 位置づけ: 本文「2. IDXレイヤー JSON Schema」が前提にしている。IDXには仕様ドキュメントがなく、
|
||||
決定済みの情報(row/col と LEDの番号はELC)から引き算した最小形として書いている
|
||||
- 格上げ条件: IDXレイヤーの仕様をユーザーと決め、`IDXレイヤー.md` に書く
|
||||
(なし)
|
||||
|
||||
Reference in New Issue
Block a user