## Exercise 07: SD Startup Watcher

This exercise is derived from `Exercise 05` and keeps that original exercise intact.
The focus here is isolating reusable SD startup and hot-insert watcher logic into a library-style structure.

This exercise now has two parts:

1. A reusable SD startup/watcher library in `lib/startup_sd`.
2. A harness app in `src/main.cpp` that demonstrates how to use that library.

Watcher behavior:

1. Initializes PMU and enables SD power rail (AXP2101 BLDO1).
2. Polls for card changes with debounced state transitions.
3. Emits events only on change:
   - `EVENT: card inserted/mounted`
   - `EVENT: card removed/unavailable`
   - `EVENT: no card detected`
4. On mount event, emits callback status (`SdEvent`) and runs SD write workflow.
5. Every 15 seconds while mounted, runs a periodic write/permission check.
6. Uses fast preferred probe (`HSPI @ 400k`) and occasional full fallback scan.

Status callback usage:

- `SdEvent::NO_CARD` -> show "Missing SD card / Please insert card to proceed"
- `SdEvent::CARD_MOUNTED` -> card ready
- `SdEvent::CARD_REMOVED` -> card removed, wait for insert

Files used in this exercise:
- `/Exercise_07_test.txt`
- `/test/testsub1/testsubsub1/Exercise_07_test.txt`

## Build

```bash
source /home/jlpoole/rnsenv/bin/activate
pio run -e node_a
```

## Upload

```bash
source /home/jlpoole/rnsenv/bin/activate
pio run -e node_a -t upload --upload-port /dev/ttyACM0
```

## Monitor

```bash
screen /dev/ttyACM0 115200
```
