Steno engine with BLE split-storage architecture
Full steno engine: chord detection, MPHF/trie dict lookup, Plover formatter (18 commands), undo (ring buffer), HID + Unicode output. Split-storage specific: - BLE GATT service for dict queries (query/prefix/batch) - LRU cache on central side (CONFIG_STENO_SPLIT_CACHE_SIZE) - Dict embedded on peripheral, engine runs on central - 3-way dispatch: split_dict / MPHF / simple trie Build system: auto-fetch Plover dict, MPHF compiler with block compression (~56K entries in 420KB), CMake integration.
This commit is contained in:
parent
234bc8d731
commit
2af45eafce
36 changed files with 5969 additions and 0 deletions
30
README.md
Normal file
30
README.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# zmk-steno-engine
|
||||
|
||||
Clean-room steno engine for ZMK keyboards. Split-storage architecture: full dictionary on peripheral (right) half, queried over BLE from central (left) half.
|
||||
|
||||
**Status:** Early development — not yet functional.
|
||||
|
||||
## Architecture
|
||||
|
||||
ZMK splits run two nRF52840 halves connected via BLE. The right (peripheral) half has ~533KB free flash — enough for a full steno dictionary. The left (central) half runs the steno engine.
|
||||
|
||||
```
|
||||
┌─────────────┐ BLE GATT query ┌──────────────┐
|
||||
│ Left half │ ───────────────► │ Right half │
|
||||
│ (central) │ ◄─────────────── │ (peripheral) │
|
||||
│ │ translation │ │
|
||||
│ Steno engine│ │ Dictionary │
|
||||
│ LRU cache │ │ (~533KB) │
|
||||
└─────────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
**Key design decisions:**
|
||||
|
||||
- Dictionary stored on peripheral → no flash pressure on central
|
||||
- BLE GATT custom service for stroke→translation queries
|
||||
- LRU cache on central side → reduces BLE round-trips for common words
|
||||
- Orthographic rules run on central after dictionary lookup
|
||||
|
||||
## License
|
||||
|
||||
[PolyForm Noncommercial 1.0.0](LICENSE)
|
||||
Loading…
Add table
Add a link
Reference in a new issue