Commit Graph

5 Commits

Author SHA1 Message Date
griffin 1d2fc51790
fix(macos-rssi-bridge): make `make start` show data flow + figure actually move
Two debuggability fixes:

* `make start` now passes `--verbose` to both the bridge and the presence
  injector so you can see `[bridge] seq=… max_var=…` and `[presence] aps=…
  weight=… motion=… posted=…` lines while running. Previously start was
  silent and you couldn't tell whether data was flowing or where the
  pipeline was stuck.

* `presence_to_pose.py` sway amplitudes bumped ~3x (e.g. lateral sway
  6 cm → 20 cm at full motion, knee bend 5 cm → 18 cm, head turn 4 cm →
  12 cm). The old values were tuned for a close-up viewer; at the
  Observatory's orbit camera distance (~5–10 m) they were imperceptible,
  so a real-motion figure looked frozen even though the data was live.
  Still seeded purely by RSSI variance — same intent as before, just
  visible.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 09:54:05 -07:00
griffin 672be201f4
fix(macos-rssi-bridge): make `make start` launch the presence injector too
The 3D Observatory needs an explicit POST to /api/v1/pose/external to
render a single coherent figure — without it the UI shows the placeholder
five-skeleton fallback that doesn't respond to real RSSI variance, which
manifests as a "frozen" figure even when the bridge is emitting frames
and the sensing-server is processing them. presence_to_pose.py is the
component that closes that loop (polls /aps, POSTs one pose at 10 Hz).

`make start` now manages all three children (server, bridge, presence
injector) under one trap, and `make stop` kills the trio. New `make
run-presence` target for running the injector standalone against an
already-running stack.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 09:50:44 -07:00
griffin 82f15c112a
fix(macos-rssi-bridge): pin sensing-server to --source esp32 in `make start`
The server's --source=auto probes for ESP32 frames *before* the bridge
starts emitting and falls back to `simulate` if it sees none. Simulate
mode never binds UDP, so the bridge then gets ECONNREFUSED on every
send and the UI displays fake (simulated) motion instead of real RSSI
data. Pin --source esp32 explicitly — the bridge IS the ESP32 source.

Also call `make stop` at the top of `make start` so re-running doesn't
collide with a stale instance.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 09:47:31 -07:00
griffin 5f8471a7ed
feat(macos-rssi-bridge): add `make start` one-shot orchestration
`make start` builds both binaries, launches the v2 sensing-server and the
bridge under a single process group, opens both UIs (sensing UI on :8080
and the tomography dashboard on :9090/dashboard), and tears both down
cleanly on Ctrl-C via a TRAP. Adds `make stop` for stray-process cleanup
and `make build-server` so the sensing-server build can be invoked
independently. README updated to point at the one-command flow.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 09:44:48 -07:00
griffin e325082e6d
feat(macos-rssi-bridge): Mac WiFi card → sensing-server bridge
Swift CoreWLAN helper + Rust UDP emitter that turns any Mac into a
"node 0" for RuView's sensing-server while waiting on ESP32 hardware.
Wraps multi-BSSID scans into ESP32 CSI frame format (magic 0xC511_0001)
with per-AP RSSI as pseudo-subcarrier amplitude and rolling variance
as the Q channel — pipeline runs unmodified.

Standalone Cargo project (not a v2 workspace member, so the main build
is unaffected). Handles macOS 14.4+ BSSID redaction by synthesizing
stable per-AP identifiers from (channel, RSSI bucket, ordinal).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 09:22:37 -07:00