Skip to content

Latest commit

 

History

History
129 lines (101 loc) · 6.44 KB

File metadata and controls

129 lines (101 loc) · 6.44 KB

Dan's QMK Userspace

External QMK userspace for Dan's keyboards.

Keymaps

  • sofle/rev1:ddyo
  • bastardkb/charybdis/4x6/splinktegrated_rev1:ddyo

Charybdis changes

The ddyo keymap adapts an older Elite-C Charybdis shield to a Sea-Picro/Splinky RP2040 controller:

  • When changing keyboards/bastardkb/charybdis/4x6/keymaps/ddyo/keymap.c, ask whether matching changes should also be made in the Argos keymap.
  • Custom left/right matrix maps use the bottom GP12-GP16 pins, freeing GP26 for the optional FSR and GP21 for trackball CS.
  • Handedness on GP27 and USB VBUS detection on GP19.
  • The optional GP26 FSR uses selectable Sentinel detectors (v1–v3, Atlas) with console diagnostics.
  • Optional GP28 thumb witness is off by default (FSR_WITNESS_ENABLE to turn on).
  • Elite-C pin names map to the RP2040 controller so the old shield wiring still works.
  • Auto Mouse, precision, drag-scroll, and DPI state come from BastardKB's pointing-device module.

Modules

Pinned as Git submodules:

  • modules/bastardkb, containing BastardKB's Argos and pointing-device modules plus Dan's external VIA dispatch guard
  • modules/ddyo/fsr_layer, optional FSR Sentinel touch input with a QMK Auto Mouse bridge
  • srwi/keypeek_layer_notify

FSR layer

The keymap boots with FSR Sentinel v1 as its touch detector. Its technical evidence identifier remains run7-provisional-v1. WebHID can switch at runtime to the v2 signal envelope, v3 motion-assisted envelope, or experimental FSR Atlas Phase v1. Every selection or parameter change resets state and forces release; reboot returns to v1. The selected Sentinel drives is_fsr_touched() plus QMK Auto Mouse. V1–v3 use an approximately 20 ms observation cadence; Atlas uses its editable 1-to-20 ms cadence. See modules/ddyo/fsr_layer/README.md for parameters, evidence limits, resistor-tuning guidance, and rollback.

The FSR is sampled every 1 ms. The current keymap emits compact CSV every scan; the non-compact mode buffers samples and flushes on a configurable cadence. Each algorithm applies its own front-end filtering (median-of-three for v1–v3; selectable for Atlas). The current hardware's ADC value rises under touch.

FSR_CAL is an explicit reset, not a calibration. It releases active Sentinel touch and reinitializes the runtime.

If a touch remains active for FSR_TOUCH_TIMEOUT_SECONDS, the module prints a warning, resets the Sentinel from the current reading, and forces an FSR release. QMK then applies its normal Auto Mouse timeout. Set the timeout to 0 or lower to disable this recovery, although keeping it enabled is highly recommended.

  • FSR_CAL / FSRCAL: reset Sentinel and force release
  • FSR_TOG / FSRTOG: toggle FSR scanning

Live algorithm and parameter edits persist in the FSR/trackball half’s EEPROM (debounced ~0.5s after the last change) and restore on reboot, including the last selected algorithm. Tune them with tools/fsr-sentinel-web.

With FSR_MOUSE_LAYER defined, is_fsr_touched() is the sole activation signal for QMK Auto Mouse. The module observes pointing reports so motion-aware algorithms (v3, Atlas) can use trackball deltas. QMK keeps the layer active while the FSR remains touched, lets configured mouse keys keep it active afterward, and then removes it after AUTO_MOUSE_TIME or an eligible normal key. The current keymap uses a 300 ms hold and 5 ms Auto Mouse debounce. The FSR module does not call layer_on() or layer_off() itself.

Leave FSR_MOUSE_LAYER undefined to disable the bridge and use is_fsr_touched() for custom behavior. On a split keyboard, that state is not currently transported from the sensor half to the master; this keymap assumes the right sensor half is the master.

For a synchronized Borumi recording, run mise run capture-fsr. Full field docs and capture steps are in modules/ddyo/fsr_layer/LOGGING.md.

FSR tools

Local captures under fsr-recordings/ are gitignored.

Flash

git submodule update --init --recursive
qmk flash -kb sofle/rev1 -km ddyo
qmk flash # guarded Charybdis backup + both halves + restore

The Charybdis flash task waits for the normal right/trackball half, saves and commits an Argos-compatible JSON backup, flashes the right half and then the left half, then waits for the right half again to restore and verify Argos. A failed backup or commit aborts before QMK runs, and the task does not finish until restoration succeeds.

qmk flash            # backup, flash both halves, restore, verify
mise run flash       # alias: mise run qf
mise run flash-right # alias: mise run qfr
mise run flash-left  # alias: mise run qfl
mise run backup      # alias: mise run qb

The current backup is kept beside the keymap at keyboards/bastardkb/charybdis/4x6/keymaps/ddyo/argos.json. Every successful changed backup commits only that file as chore: update Argos backup; unchanged backups do not create empty commits. Unrelated staged and working-tree changes are left untouched. A custom --output must already be tracked inside this repository so the same safety guarantee applies. Close Argos and KeyPeek if another app consumes the Raw HID replies during backup. Use ./bin/flash-charybdis --no-backup only as an explicit emergency bypass.

Mise prepends a repository guard for qmk. In this userspace, qmk flash and an explicit Charybdis qmk flash -kb ... -km ddyo both route to the backup-first wrapper. Normal QMK commands and flashes for other keyboards pass through. The wrapper applies a scoped bypass only after the Argos export succeeds. It starts each compile without an input prompt and checks USB/HID state while waiting for the required half. Physical-half detection belongs to the ddyo keymap, not the Argos module. It uses VIA's custom-get-value request 08 00 DD and returns 1 for right or 0 for left at response offset 3. argosctl uses that keymap response for the wrapper's --require-right-half backup and restore guards.