-
d2c2d97fb7
feat(ota): harden OTA apply flow + bump firmware to 1.0.1
main
Peter Woolery
2026-05-14 12:21:52 -07:00
-
5ec678dfa3
fix: tighten version parsing, propagate HMAC sign failure, add deployment docs
Peter Woolery
2026-05-11 11:26:44 -07:00
-
5cf122b922
feat(firmware): wire OTA updater into main loop with 6-hour polling task
Peter Woolery
2026-05-11 11:22:29 -07:00
-
a21dcfa349
feat(firmware): implement OTA download, ECDSA verify, and flash
Peter Woolery
2026-05-11 11:18:44 -07:00
-
66e6808e13
feat(firmware): implement ECDSA P-256 signature verification in OTA library
Peter Woolery
2026-05-11 11:15:52 -07:00
-
8b1fd10db7
feat(firmware): add OTA updater library skeleton with version comparison
Peter Woolery
2026-05-11 06:59:02 -07:00
-
f37e0d6b07
feat(tools): add firmware deploy tool (sign + stage for server)
Peter Woolery
2026-05-11 06:55:44 -07:00
-
81bcc12f2f
fix(server): add error handling for malformed OTA manifest and missing sig file
Peter Woolery
2026-05-11 06:54:26 -07:00
-
d9a242a5fa
feat(server): add OTA check and firmware download endpoints
Peter Woolery
2026-05-11 06:52:46 -07:00
-
87b30a64b2
fix(tools): add key type validation and tighten test assertions in sign_firmware
Peter Woolery
2026-05-11 06:50:51 -07:00
-
031426e364
feat(tools): add ECDSA P-256 firmware signing tool
Peter Woolery
2026-05-11 06:49:15 -07:00
-
437f73739f
feat(tools): add ECDSA P-256 key generation tool and public key header
Peter Woolery
2026-05-11 06:47:10 -07:00
-
21a3c646aa
docs(firmware): document FW_VERSION format constraint for OTA version compare
Peter Woolery
2026-05-11 06:45:53 -07:00
-
81dc96b100
feat(firmware): add FW_VERSION constant
Peter Woolery
2026-05-11 06:44:59 -07:00
-
56fc58b843
fix(tools): reject CSV metacharacters in flash_device.py inputs
Peter Woolery
2026-05-01 15:44:57 -07:00
-
641ab29277
fix(server): reject inverted period_start/period_end in CameraRecord
Peter Woolery
2026-05-01 15:44:57 -07:00
-
8342904488
fix(firmware/lib): wrap-safe millis() comparison in net_guard reconnect timer
Peter Woolery
2026-05-01 15:36:06 -07:00
-
ef00afb14e
fix(firmware/lib): validate HMAC secret length and hex format before signing
Peter Woolery
2026-05-01 15:36:06 -07:00
-
96ede7c999
chore: gitignore secrets, pycache, and adversarial-review artifacts
Peter Woolery
2026-05-01 13:21:15 -07:00
-
e2dbe6a2d5
fix(server): COALESCE diagnostic columns so v1.0 heartbeats don't clear v1.1 data
Peter Woolery
2026-05-01 13:19:23 -07:00
-
2226c1b4ca
fix(tools): validate flash_device.py HMAC secret format before flashing
Peter Woolery
2026-05-01 13:19:16 -07:00
-
a0eee0e6d4
fix(firmware): preserve buffered records appended during flush POST
Peter Woolery
2026-05-01 13:19:11 -07:00
-
a585a56cff
fix(firmware): upgrade NimBLE to 2.x + DNS fallback for unreliable resolvers
Peter Woolery
2026-05-01 11:34:17 -07:00
-
461ed7d888
docs(readme): add HMAC secret generation command to operator setup
Peter Woolery
2026-04-27 14:45:08 -07:00
-
259256a550
docs: retailer packet — setup guide (.docx) + repo QR code
Peter Woolery
2026-04-27 14:38:22 -07:00
-
be44299d3e
docs(readme): add quick-start, hardware sources, power draw + latency notes
Peter Woolery
2026-04-27 14:26:45 -07:00
-
268b595340
Merge branch 'feat/network-resilience'
Peter Woolery
2026-04-23 14:12:40 -07:00
-
-
a795cfa0ad
fix(firmware): reboot on FATAL failures + emit NTP_SYNC + server-coord warning
Peter Woolery
2026-04-23 14:10:32 -07:00
-
d943b3df5a
feat(firmware): log reason before FATAL hang loops
Peter Woolery
2026-04-23 14:03:57 -07:00
-
2d95069bd1
docs: network-resilience firmware 1.1 deployment + field diagnostic guide
Peter Woolery
2026-04-23 14:02:09 -07:00
-
867e90b1f6
feat(server): heartbeat-diagnostics stub + migration for real server import
Peter Woolery
2026-04-23 13:59:31 -07:00
-
5c9f5df0ce
feat(firmware): include diagnostics in heartbeat payload
Peter Woolery
2026-04-23 13:54:55 -07:00
-
f08f70a8fb
feat(firmware): software heartbeat-miss watchdog reboots after 6h offline
Peter Woolery
2026-04-23 13:52:07 -07:00
-
7b546d0ed7
feat(firmware): enable task watchdog on camera/reporter/loop tasks
Peter Woolery
2026-04-23 13:49:05 -07:00
-
8f8ad0b1b0
fix(firmware): add HTTP timeouts + 3-try retry, report heartbeat status
Peter Woolery
2026-04-23 13:44:17 -07:00
-
57129ba078
fix(firmware): net_guard silent-wifi-death fallback + header hygiene
Peter Woolery
2026-04-23 13:41:53 -07:00
-
af3067d481
refactor(firmware): drive WiFi reconnect from net_guard events
Peter Woolery
2026-04-23 13:36:29 -07:00
-
cfa0d2563f
fix(firmware): event_log bounded mutex wait, skip on contention
Peter Woolery
2026-04-23 13:31:54 -07:00
-
84d9ba349b
fix(firmware): net_guard boot-state seed + no spurious disconnect
Peter Woolery
2026-04-23 13:31:47 -07:00
-
9f293b4639
feat(firmware): event-driven WiFi reconnect with exponential backoff
Peter Woolery
2026-04-23 13:26:10 -07:00
-
95724bf3ff
feat(firmware): log boot and reboot reason to event log
Peter Woolery
2026-04-23 13:21:23 -07:00
-
9eb1e19651
test(firmware): event_log boot recovery — partial fill and post-wrap
Peter Woolery
2026-04-23 13:18:08 -07:00
-
95f91d3656
fix(firmware): event_log thread safety and NVS wear
Peter Woolery
2026-04-23 13:13:21 -07:00
-
9232766e60
feat(firmware): add NVS-backed event log ring buffer
Peter Woolery
2026-04-23 13:06:38 -07:00
-
-
a37207b6ff
feat: event-based walker detector tuned to real 7' overhead mount
Peter Woolery
2026-04-17 16:03:36 -07:00
-
3b471992f2
feat(cv): directional once-per-track counting + detection LED blinks
Peter Woolery
2026-04-17 09:46:59 -07:00
-
24aaae6ff2
docs: add Troubleshooting section + serial_monitor.py diagnostic tool
Peter Woolery
2026-04-17 07:05:21 -07:00
-
62931e26ff
fix(cv): add per-direction crossing cooldown to suppress track-churn double-counts
Peter Woolery
2026-04-17 06:33:11 -07:00
-
cbbdd25ebb
docs(spec): document server-push runtime tuning in design spec
feature/server-push-config
Peter Woolery
2026-04-16 22:06:59 -07:00
-
e5eeea2b47
fix(reporter,docs): save config before applying; correct README trust-model
Peter Woolery
2026-04-16 17:47:41 -07:00
-
bcb02b6d73
docs(readme): document server-push config + roadmap entry for gated local portal
Peter Woolery
2026-04-16 17:43:00 -07:00
-
b4b3a56019
fix(reporter): accept int JSON for max_move + reject malformed config fields
Peter Woolery
2026-04-16 17:41:22 -07:00
-
21f3bc77d1
feat(reporter): apply server-pushed CV tuning from heartbeat response
Peter Woolery
2026-04-16 17:34:34 -07:00
-
94d74e425c
refactor(cv): read thresholds from runtime tuning + load from NVS on boot
Peter Woolery
2026-04-16 15:55:35 -07:00
-
a992bfe391
fix(config): make cv_ver atomic commit marker in config_save_tuning
Peter Woolery
2026-04-16 15:49:41 -07:00
-
e28a4c1863
feat(cv): add CVTuning struct and NVS persistence scaffolding
Peter Woolery
2026-04-16 15:45:53 -07:00
-
-
9d5b588231
feat: production-ready firmware with BLE memory management, device_id fixes, and docs
Peter Woolery
2026-04-16 11:13:50 -07:00
-
4b671843b3
fix: three stack overflows crashing firmware on TimerCamera-F
Peter Woolery
2026-04-15 10:58:06 -07:00
-
265fb727ab
fix: flash_device.py — correct nvs_partition_gen module name
Peter Woolery
2026-04-14 19:21:08 -07:00
-
135eb3b46c
fix: HMAC format — match server POST\npath\ntimestamp\nsha256(body) scheme
Peter Woolery
2026-04-14 10:47:13 -07:00
-
6d41529570
feat: door counter firmware — camera CV, BLE, HMAC reporting, captive portal
Peter Woolery
2026-04-14 10:35:31 -07:00
-
-
8a00665e4c
fix: ArduinoOTA init, reporter mutex, BLE lock scope, NVS type
Peter Woolery
2026-04-14 10:33:23 -07:00
-
883b72be77
feat: ota_push.py operator firmware update script
Peter Woolery
2026-04-14 10:28:28 -07:00
-
36f4becbe9
fix: camera downscale — centered crop, explicit PSRAM frame buffer
Peter Woolery
2026-04-14 09:30:20 -07:00
-
e19ae22915
feat: camera module — OV3660 init and 96x96 grayscale capture
Peter Woolery
2026-04-14 09:27:16 -07:00
-
b3c8d1c044
feat: flash_device.py operator NVS provisioning script
Peter Woolery
2026-04-14 07:40:03 -07:00
-
a8f036f25f
fix: CameraRecord — reject negative entries/exits via Pydantic Field(ge=0)
Peter Woolery
2026-04-14 07:02:51 -07:00
-
910508194a
feat: camera batch endpoint implementation and tests
Peter Woolery
2026-04-14 07:01:40 -07:00
-
a432813444
feat: camera_records table migration
Peter Woolery
2026-04-14 06:59:52 -07:00
-
121f7a0a0a
fix: main.cpp — static frame buffer, mutex for cv state, NTP init guard
Peter Woolery
2026-04-14 06:59:09 -07:00
-
49da51bc05
feat: main.cpp — FreeRTOS tasks, LED indicators, factory reset
Peter Woolery
2026-04-14 06:56:59 -07:00
-
29737d735a
feat: WiFiManager captive portal provisioning
Peter Woolery
2026-04-14 06:44:06 -07:00
-
988443f207
fix: reporter — correct re-buffer on POST failure, NTP guard, TLS note
Peter Woolery
2026-04-14 06:33:00 -07:00
-
244426ec8b
feat: reporter — HMAC-signed hourly POST with 24-record offline buffer
Peter Woolery
2026-04-14 06:28:24 -07:00
-
6422e052df
fix: ble_scanner sha256_prefix — guard mbedTLS null info and setup failure
Peter Woolery
2026-04-14 06:26:20 -07:00
-
ccbbf689cf
feat: BLE passive scanner with RSSI bucketing and MAC hashing
Peter Woolery
2026-04-14 06:24:49 -07:00
-
29808e07a6
fix: camera — null-check sensor handle before set_vflip/set_hmirror
Peter Woolery
2026-04-13 17:34:38 -07:00
-
99756bdbaf
feat: camera module — OV3660 init and 96x96 grayscale capture
Peter Woolery
2026-04-13 17:33:10 -07:00
-
0a6470a096
feat: CV line-crossing entry/exit detection with tests
Peter Woolery
2026-04-13 15:10:01 -07:00
-
655abc914b
fix: CV find_centroids — static fg_copy to prevent 9KB stack allocation
Peter Woolery
2026-04-13 14:41:11 -07:00
-
b664753596
feat: CV blob detection and centroid tracking
Peter Woolery
2026-04-13 14:39:23 -07:00
-
136b22bc1b
fix: cv_init — replace memset with value-init to avoid UB on std::vector
Peter Woolery
2026-04-13 14:33:12 -07:00
-
e6843584cf
feat: CV module — frame diff + threshold (blob tracking TODO)
Peter Woolery
2026-04-13 14:26:34 -07:00
-
7662fc4c25
fix: HMAC module — mbedTLS error handling, hex guard, test docs
Peter Woolery
2026-04-13 14:24:48 -07:00
-
47f3f6afef
feat: HMAC-SHA256 signing module with native tests
Peter Woolery
2026-04-13 14:20:24 -07:00
-
74bff0912b
fix: config_save_wifi — always write both credentials
Peter Woolery
2026-04-13 14:05:26 -07:00
-
d5afd0bd87
feat: config module — NVS read/write via Preferences
Peter Woolery
2026-04-13 14:02:28 -07:00
-
f4d9e1b2a5
fix: update platformio.ini — OTA partitions, NimBLE, PSRAM flags
Peter Woolery
2026-04-13 13:52:33 -07:00
-
6c46ea26ab
chore: init PlatformIO project for TimerCamera-F
Peter Woolery
2026-04-13 13:31:38 -07:00
-
-
46c0908798
chore: ignore .worktrees directory
Peter Woolery
2026-04-13 13:05:21 -07:00
-
95d9c7ef4c
chore: initial commit — spec and implementation plan
Peter Woolery
2026-04-13 13:04:55 -07:00