Firmware and management software for my wearables
  • Rust 92.7%
  • Kotlin 5%
  • Nix 0.9%
  • Linker Script 0.7%
  • Just 0.4%
  • Other 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Daniel Flanagan e1685d0643 feat: one-step updates, transfer rate and signal on watch and phone, Bluetooth tile
Firmware 0.2.2 and the matching companion changes, after lytewatch's
own update path passed verify, write and install on hardware
(0.1.0 -> 0.2.1 from the Android app):

- Every update now checks, writes, reads back and installs in one
  pass. The verify-only and write-without-activating modes stay in
  lytewatch-core's receiver for tests; the System screen's mode button
  is gone. Each transfer gets a fresh receiver once the previous one
  ends.
- lytewatch-core gains transfer_progress (no_std): a rate estimator
  over the last 5 s on a fixed ring of samples, time remaining, and a
  SignalQuality rating from RSSI (strong > -65, good > -75, weak >
  -85, otherwise "move closer"). The watch's receiving screen shows
  KiB sent of total with the percentage, the rate with time left, and
  the signal, in full-width lines redrawn in place. The Android app
  shows the same text through bridge functions that reuse the watch's
  wording, plus its own RSSI sampled every 2 s.
- The watch samples the link's RSSI every 2 s on a deadline in the
  Bluetooth loop (so a stream of firmware packets cannot postpone it),
  which also carries the silent-phone check.
- A Bluetooth launcher tile shows link state, signal in dBm, counters
  and the last disconnect reason, with a full-width Restart Bluetooth
  button; System is information only again. The app's post-upload
  text no longer tells the wearer to validate on the watch, which is
  InfiniTime's flow.

Tested: workspace tests, clippy for the workspace and firmware, the
Android build, and new tests for the estimator, signal bands and the
shared wording. Not yet run on hardware.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019kmdSBYKun9uULj871sEvp
2026-10-20 21:28:43 -05:00
.forgejo/workflows build(android): release the companion into the lytedev F-Droid repository 2026-10-20 18:39:19 -05:00
apps feat: one-step updates, transfer rate and signal on watch and phone, Bluetooth tile 2026-10-20 21:28:43 -05:00
crates feat: one-step updates, transfer rate and signal on watch and phone, Bluetooth tile 2026-10-20 21:28:43 -05:00
firmware/pinetime feat: one-step updates, transfer rate and signal on watch and phone, Bluetooth tile 2026-10-20 21:28:43 -05:00
issues docs(issues): why lytewatch's own firmware update is shaped as it is 2026-10-20 17:17:00 -05:00
tools feat: one-step updates, transfer rate and signal on watch and phone, Bluetooth tile 2026-10-20 21:28:43 -05:00
.envrc feat(core): quiet hours, current time and alert notification parsing 2026-10-20 11:42:27 -05:00
.gitignore build(nix): reproducible firmware build, flake checks, BLE flashing tools 2026-10-20 12:14:57 -05:00
Cargo.lock feat: one-step updates, transfer rate and signal on watch and phone, Bluetooth tile 2026-10-20 21:28:43 -05:00
Cargo.toml feat(simulator): run lytewatch-ui in a desktop window or headless 2026-10-20 14:50:51 -05:00
flake.lock feat(core): quiet hours, current time and alert notification parsing 2026-10-20 11:42:27 -05:00
flake.nix build(android): release the companion into the lytedev F-Droid repository 2026-10-20 18:39:19 -05:00
justfile feat(android): companion app over the Rust bridge 2026-10-20 14:50:50 -05:00
rust-toolchain.toml build(nix): reproducible firmware build, flake checks, BLE flashing tools 2026-10-20 12:14:57 -05:00