feat: hsmc statechart rewrite with wake/run/shutdown animations

- Pull the entire device lifecycle into a single hsmc 0.5.1 statechart;
  remove JIGGLE_FLAG, the Phase enum, the imperative main loop, and the
  separate led_task.
- Add wake-up (horizontal shake), running (3 fast circles), and
  pre-shutdown (inward spiral) mouse animations as during: activities.
- Tighten reset → wake-shake latency from ~2s to ~240ms; HID poll_ms
  60 → 8 so the host actually samples animation frames.
- Set RUN_DURATION = 3h50m, the math-optimum under the user's workday
  distribution for "screen sleeps during lunch on most days."

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-29 11:35:00 -06:00
co-authored by Claude Opus 4.7
parent 0032d01638
commit 3f75514d9c
4 changed files with 539 additions and 53 deletions
Generated
+35
View File
@@ -716,6 +716,30 @@ dependencies = [
"stable_deref_trait",
]
[[package]]
name = "hsmc"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "497ed9593e4baf6ef120b24aff80cb898f6832d32cdf01be9d90be0c06624e77"
dependencies = [
"embassy-futures",
"embassy-sync",
"embassy-time",
"heapless 0.8.0",
"hsmc-macros",
]
[[package]]
name = "hsmc-macros"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49d0b1413ed69ba168f9d0edbf4a8ea21569eaf352edf4e11335ae3d765ba004"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "ident_case"
version = "1.0.1"
@@ -748,11 +772,16 @@ dependencies = [
"cortex-m",
"cortex-m-rt",
"embassy-executor",
"embassy-futures",
"embassy-rp",
"embassy-sync",
"embassy-time",
"embassy-usb",
"hsmc",
"libm",
"panic-reset",
"portable-atomic",
"smart-leds",
"static_cell",
"usbd-hid",
]
@@ -810,6 +839,12 @@ version = "0.2.185"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f"
[[package]]
name = "libm"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
[[package]]
name = "litrs"
version = "1.0.0"