- Gate capture on SD_IsReady() after successful SD_Init; avoid false 'insert SD' when SD.cardType() lies after WiFi on shared SPI with LCD - SD_Init: LCD CS high, SD.end() on empty card; HandshakeCapture save path retries SD_Init before discard - FAT filename sanitize, discard deadlocks, WPA3 scan labels, docs (README, PRODUCTION, IMPROVEMENTS), firmware version 1.0.1 Made-with: Cursor
17 lines
1.1 KiB
Markdown
17 lines
1.1 KiB
Markdown
# Production notes
|
|
|
|
This file summarizes behavior locked in for a **shippable** build. Detailed design history lives in `PLAN.md` / `IMPROVEMENTS.md`.
|
|
|
|
## Correctness & robustness
|
|
|
|
- **4-way only:** `HANDSHAKE_EAPOL_FRAMES` in `HandshakeCapture.h` — SD write only when count is reached; `stopCapture()` only queues save if threshold met.
|
|
- **No SD deadlock:** If the card is missing or open/write fails, the pending buffer is **dropped** and the slot cleared so the state machine and UI keep progressing.
|
|
- **FAT filenames:** Non-portable characters in paths are replaced before `SD.open`.
|
|
- **Concurrency:** Promiscuous callback uses short critical sections; SD I/O only in `handshakeCaptureProcessPending()` on the main loop.
|
|
|
|
## Operational
|
|
|
|
- **Version:** `HANDSHAKE_FIRMWARE_VERSION` — change on every release; matches serial banner.
|
|
- **Capture gating:** Main sketch calls `SD_Init()` / requires `SD_IsReady()` before `startMultiCapture()` (not `SD.cardType()` alone — shared SPI + WiFi).
|
|
- **Authorization:** Operator must comply with local law and organizational policy.
|