交換可能なキークラスタ(ISO Enter、スペース周りのキー数など)を、 VariantGroup / Variant の2ノードでPHYの木に表す。全バリアントのキーを 同時に持ち、単一の配置を要求する出力のときだけ1つ選んで畳む。 ELCは選択に関係なくsupersetを配線する。排他キー同士は同じ接続先を共有してよい。 IDXはキー番号の空間を1つに保ち、同じ接続先に配線された排他キーは `order` の配列要素として同じ番号を共有する。 Journal: journal/2026-09-21-multi-layout.md Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JPCpuPv6hDN76RgNe2PsRR
164 lines
8.0 KiB
Markdown
164 lines
8.0 KiB
Markdown
# ELCレイヤー
|
|
|
|
## 概要
|
|
|
|
ELCレイヤーは、マイコンのピンと各キーの端子がどう対応するかを提供する。
|
|
|
|
扱うのは配線だけとする。読んだ値をどう解釈するか(アナログ値から押下深さを出す変換、
|
|
キーごとのキャリブレーション)は持たない。キャリブレーションは実機ごとの実測値であって
|
|
設計データではなく、センサの品種はPCB設計ツール側の選択だからである。
|
|
|
|
## 構造
|
|
|
|
### ピンとピン提供者
|
|
|
|
ELCが扱う「ピン」は物理的なマイコンピンに限らない。**ピン提供者(provider)が提供する論理ピン**とする。
|
|
|
|
マルチプレクサ・シフトレジスタ・GPIOエキスパンダは、いずれも「少ないピンを多くのピンに増やす装置」である。
|
|
これらを提供者として扱うと、キーの側からは直結もmux経由も同じ「ピンに繋がっている」だけになる。
|
|
|
|
提供者は、自分が消費する上位ピンを宣言する。上位ピンには別の提供者の論理ピンを書けるので、
|
|
多段の接続は入れ子として表せる。分割キーボードの各半身は、それぞれ別の提供者として置く。
|
|
|
|
ピンの参照は `<提供者ID>.<ピン名>` の形とする。`VCC` と `GND` は電源レールを指す予約名で、提供者を持たない。
|
|
|
|
現時点で具体形を定めるのは、マイコンとアナログマルチプレクサの2種別。
|
|
デジタル側でピンを増やす部品も提供者として扱うが、種別ごとの記述は必要になった時点で定める。
|
|
|
|
### キーの端子
|
|
|
|
キーは検出方式(detect)を持ち、検出方式ごとに端子の構成が決まる。各端子は接続先の論理ピンを持つ。
|
|
|
|
- 接点(contact): a, b の2端子。端子は無極性で、a と b に順序の意味はない
|
|
- アナログ(analog): out 1端子。加えて電源の vcc, gnd。ホールセンサがこれにあたる
|
|
|
|
光学スイッチの端子構成は未定 [推測:P-1]。
|
|
|
|
### 配線トポロジを区分として持たない
|
|
|
|
マトリクス・direct・charlieplexing を列挙して選ばせることはしない。
|
|
これらは端子の接続先の組み合わせとして表れるものであって、設計者が選ぶ区分ではない。
|
|
|
|
- 両端子がそれぞれ別のマイコンピンを指す → マトリクスまたはcharlieplexing
|
|
- 片方の端子が電源レールを指す → direct
|
|
- out がマルチプレクサの論理ピンを指す → mux経由のアナログ読み
|
|
|
|
row / col はELCの正本に含めない。charlieplexing で便宜的に行と列の形で書くことはあるが、
|
|
それは表記の都合であって配線の事実ではない。QMKなどが要求する row / col は、出力時に割り当てる派生情報とする。
|
|
|
|
### ダイオード
|
|
|
|
接点キーはダイオードの向きを持つ。向きは端子名で表す(`a-to-b` はアノードがa側)。省略時はダイオードなし。
|
|
|
|
### LEDの識別番号
|
|
|
|
LEDの番号はELCが持つ。設計者が恣意的に決めてよいが、決めた順序はそのまま配線の指示になるため、
|
|
配線の情報として扱う。
|
|
|
|
チェーンごとに、データピンと、LEDの並びを持つ。並びの各要素はPHYのノードIDで、
|
|
per-key LEDを載せたキーか、LEDの部品ノードを指す。並びの位置がそのLEDの番号になる。
|
|
チェーンは複数持てる。
|
|
|
|
現時点で定めるのはチェーン方式(WS2812系)のみとする。ドライバICでアドレスを与える方式は未定。
|
|
|
|
### レイアウトバリアント
|
|
|
|
PHYがレイアウトバリアントを持つ場合も、ELCは選択に関係なく全バリアントのキーを配線する。
|
|
基板上のフットプリントは選ばれなかった側も実在するため。
|
|
|
|
互いに排他なキーは、同じ接続先の組を共有してよい。排他でないキー同士が同じ接続先の組を持つのは
|
|
設計エラーとする。接点マトリクスなら、どちらが押されたかを区別できないため。
|
|
排他かどうかはPHYの木から判る。
|
|
|
|
### 他レイヤーへの参照
|
|
|
|
キーとLEDの参照には、PHYのノードIDをそのまま使う。ELCはIDXを参照しない。
|
|
|
|
### 持たないもの
|
|
|
|
- センサの品種、出力特性、キャリブレーション値
|
|
- フットプリント、部品の実配置、基板の層構成
|
|
- キーの物理的な位置とサイズ(PHYが持つ)
|
|
|
|
## 保存形式
|
|
|
|
```ts
|
|
type PinRef = string // "<提供者ID>.<ピン名>" | "VCC" | "GND"
|
|
|
|
type Provider =
|
|
| {
|
|
id: string,
|
|
kind: "mcu",
|
|
part: string, // 品番。ピン名の解釈に使う
|
|
}
|
|
| {
|
|
id: string,
|
|
kind: "analog-mux",
|
|
channels: number, // 提供する論理ピン数。ピン名は "0".."channels-1"
|
|
select: PinRef[], // 選択ピン。下位ビットから順
|
|
common: PinRef, // 共通ピン
|
|
enable?: PinRef,
|
|
}
|
|
|
|
type KeyWiring =
|
|
| {
|
|
key: string, // PHYのキーID
|
|
detect: "contact",
|
|
terminals: { a: PinRef, b: PinRef }, // 無極性
|
|
diode?: "a-to-b" | "b-to-a", // 省略時はダイオードなし
|
|
}
|
|
| {
|
|
key: string,
|
|
detect: "analog",
|
|
terminals: { out: PinRef, vcc: PinRef, gnd: PinRef },
|
|
}
|
|
|
|
type LEDChain = {
|
|
id: string,
|
|
data: PinRef,
|
|
order: string[] // PHYのノードID。並びの位置が番号になる
|
|
}
|
|
|
|
type ELC = {
|
|
providers: Provider[],
|
|
keys: KeyWiring[],
|
|
ledChains?: LEDChain[]
|
|
}
|
|
```
|
|
|
|
## 検討済み・非採用
|
|
|
|
- `matrix.type` による配線方式の列挙 (journal/2026-09-20-elc-pin-provider.md)
|
|
- キーが row / col を正本として持つ (journal/2026-09-20-elc-pin-provider.md)
|
|
- センサの出力特性・キャリブレーション値をELCが持つ (journal/2026-09-20-elc-scope.md)
|
|
|
|
## 未確認事項
|
|
|
|
### P-1 光学スイッチの端子構成
|
|
|
|
- 位置づけ: 本文「キーの端子」が扱えていない残り
|
|
- 現状の認識: 発光側と受光側が独立した端子を持つのか、接点と同じ2端子として扱えるのかが分からない
|
|
- 格上げ条件: 光学スイッチを使った実在のPCBの回路図を読み、端子数と配線の形を確認する
|
|
|
|
### P-2 複数マルチプレクサ構成の作り
|
|
|
|
- 位置づけ: 本文「ピンとピン提供者」が前提にしている。`select` を提供者ごとに持たせてよいかに関わる
|
|
- 現状の認識: 選択ピンを複数のmuxで共有して共通ピンだけ分ける形と、イネーブルピンで切り替える形が考えられるが、
|
|
どちらが一般的か確認していない。前者なら同じ `PinRef` が複数の提供者の `select` に現れる
|
|
- 格上げ条件: 複数muxを使った実在のキーボードの配線を確認し、共有の形を確かめる
|
|
|
|
### P-3 駆動側と検出側の役割をELCが明示的に持つ必要があるか
|
|
|
|
- 位置づけ: 本文「配線トポロジを区分として持たない」の残り
|
|
- 現状の認識: 接点マトリクスではダイオードの向きから、directでは電源レールの参照から、
|
|
どちらを駆動しどちらを検出するかが決まりそうに見えるが、全方式で導出できるか確かめていない
|
|
- 格上げ条件: 各方式について、端子の接続先とダイオードの向きだけから走査手順が一意に決まるかを確認する
|
|
|
|
### P-4 LEDチェーンがレイアウトバリアントをまたぐ場合
|
|
|
|
- 位置づけ: 本文「LEDの識別番号」がレイアウトバリアントを考慮していない
|
|
- 現状の認識: 選ばれなかったバリアントのキーにper-key LEDが載らないと、チェーンがそこで切れる。
|
|
基板側でバイパスする話であればBeyond KLEの範囲外だが、チェーンの並びをバリアントごとに分ける必要が
|
|
あるかもしれない
|
|
- 格上げ条件: レイアウトバリアントとper-key LEDを両方持つ実在のPCBで、チェーンがどう配線されているかを確認する
|