Update LED status patterns and add SVG representations for visual indicators
24
README.md
@@ -125,27 +125,21 @@ If you want to dig deeper: commands are mapped via the `CommandManager` under `c
|
||||
### LED Status / Error Patterns
|
||||
The firmware uses a small set of LED patterns to indicate status and blocking errors. When `LED_DEBUG_ENABLE` is disabled and `LED_EXTERNAL_AS_DEBUG` is enabled the external IR LED mirrors ONLY error patterns (0%/50% duty). Non‑error patterns are not mirrored.
|
||||
|
||||
| State | Category | Repeat | Pattern (ON/OFF ms) | Meaning |
|
||||
|-------|----------|--------|---------------------|---------|
|
||||
| LedStateNone | idle | no | (off) | No activity / heartbeat window waiting |
|
||||
| LedStateStreaming | active | yes | steady on | Streaming running (UVC or Wi‑Fi) |
|
||||
| LedStateStoppedStreaming | inactive | yes | steady off | Streaming intentionally stopped |
|
||||
| CameraError | error | yes | 300/300 300/700 | Camera init/runtime failure (check sensor, ribbon, power) |
|
||||
| WiFiStateConnecting | transitional | yes | 400/400 | Wi‑Fi associating / DHCP pending |
|
||||
| WiFiStateConnected | notification | no | 150/150 x3 then off | Wi‑Fi connected successfully |
|
||||
| WiFiStateError | error | yes | 200/100 500/300 | Wi‑Fi failed (auth timeout or no AP) |
|
||||
| State | Visual | Category | Repeat | Timing Pattern (ms) | Meaning |
|
||||
|-------|--------|----------|--------|----------------------|---------|
|
||||
| LedStateNone |  | idle | no | (off) | No activity / heartbeat window waiting |
|
||||
| LedStateStreaming |  | active | yes | steady on | Streaming running (UVC or Wi‑Fi) |
|
||||
| LedStateStoppedStreaming |  | inactive | yes | steady off | Streaming intentionally stopped |
|
||||
| CameraError |  | error | yes | 300/300 300/700 | Camera init/runtime failure (check sensor, ribbon, power) |
|
||||
| WiFiStateConnecting |  | transitional | yes | 400/400 | Wi‑Fi associating / DHCP pending |
|
||||
| WiFiStateConnected |  | notification | no | 150/150 x3 then off | Wi‑Fi connected successfully |
|
||||
| WiFiStateError |  | error | yes | 200/100 500/300 | Wi‑Fi failed (auth timeout or no AP) |
|
||||
|
||||
Guidelines for adding new patterns:
|
||||
- Keep error patterns short, distinctive, and repeating.
|
||||
- Reserve long holds (>600ms ON) for critical failures.
|
||||
- Use non-repeating patterns to acknowledge one-shot events (e.g. successful connection).
|
||||
|
||||
Potential future additions (not implemented yet):
|
||||
- StorageError: two long ON pulses (e.g. NVS/flash failure).
|
||||
- ConfigError: triple short pulses repeating (invalid configuration / preferences corrupt).
|
||||
- ThermalWarning: slow ramp or alternating duty (would require PWM pattern support).
|
||||
- FirmwareUpdate: progressive heartbeat (increasing ON time) while updating OTA.
|
||||
|
||||
- UVC doesn’t appear on the host?
|
||||
- Switch mode to UVC via CLI tool, replug USB and wait 20s.
|
||||
|
||||
|
||||
5
docs/led_patterns/camera_error.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg width="60" height="60" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle id="dot" cx="50" cy="50" r="30" fill="#ff2d55">
|
||||
<animate attributeName="fill-opacity" values="1;0;1;0;1;0" keyTimes="0;0.1875;0.375;0.5625;0.75;1" dur="1.6s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 300 B |
3
docs/led_patterns/idle.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="60" height="60" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="50" cy="50" r="30" fill="#444"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 139 B |
3
docs/led_patterns/stopped.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="60" height="60" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="50" cy="50" r="30" fill="#222"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 139 B |
3
docs/led_patterns/streaming.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="60" height="60" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="50" cy="50" r="30" fill="#ffd60a"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 142 B |
5
docs/led_patterns/wifi_connected.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg width="60" height="60" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle id="dot" cx="50" cy="50" r="30" fill="#34c759">
|
||||
<animate attributeName="fill-opacity" values="1;0;1;0;1;0;0" keyTimes="0;0.166;0.333;0.5;0.666;0.833;1" dur="1.2s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 305 B |
5
docs/led_patterns/wifi_connecting.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg width="60" height="60" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle id="dot" cx="50" cy="50" r="30" fill="#007aff">
|
||||
<animate attributeName="fill-opacity" values="1;0;1" dur="0.8s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 254 B |
5
docs/led_patterns/wifi_error.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg width="60" height="60" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle id="dot" cx="50" cy="50" r="30" fill="#ff9500">
|
||||
<animate attributeName="fill-opacity" values="1;0;1;0;1;0" keyTimes="0;0.181;0.454;0.545;0.909;1" dur="1.1s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 299 B |