Move UART command handlers into main/cmd/ for clearer layout.
Add cmd/ to CMake include paths and update documentation paths. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
95d5a9747a
commit
16c521f71c
@ -26,8 +26,8 @@ sequenceDiagram
|
||||
| Schema UART | `main/proto/uart_messages.proto` | `MessageType`, Request/Response für Host ↔ Master |
|
||||
| Schema ESP-NOW | `main/proto/esp_now_messages.proto` | Master ↔ Slave (ohne UART) |
|
||||
| Transport UART | `main/uart.c`, `goTool/uart/` | Rahmen `0xAA … 0xCC`, Byte 0 = Command-ID |
|
||||
| Dispatch | `main/cmd_handler.c`, `main/uart_cmd.c` | Queue + `uart_cmd_register()` |
|
||||
| Master-Logik | `main/cmd_*.c` | Decode, Registry, ESP-NOW senden |
|
||||
| Dispatch | `main/cmd/cmd_handler.c`, `main/uart_cmd.c` | Queue + `uart_cmd_register()` |
|
||||
| Master-Logik | `main/cmd/cmd_*.c` | Decode, Registry, ESP-NOW senden |
|
||||
| ESP-NOW | `main/esp_now_comm.c` | Encode/Decode, Send, Slave-`recv_cb` |
|
||||
| Geräte-Funktion | z.B. `main/led_ring.c` | Wiederverwendbare Aktion (Master + Slave) |
|
||||
| Host | `goTool/cmd_*.go`, `api_serve.go`, `webui/` | CLI, HTTP, UI |
|
||||
@ -46,8 +46,8 @@ sequenceDiagram
|
||||
|
||||
**Find me:** UART `FIND_ME` mit `client_id`; `0` = Master-Ring, `>0` = Unicast `ESPNOW_FIND_ME` an die Slave-MAC aus der Registry.
|
||||
|
||||
Referenz für **nur ESP-NOW-Weiterleitung ohne lokale Wirkung:** `cmd_espnow_unicast_test.c`
|
||||
Referenz für **Master lokal + Slave + `client_id`:** `cmd_espnow_find_me.c`, `cmd_accel_deadzone.c`
|
||||
Referenz für **nur ESP-NOW-Weiterleitung ohne lokale Wirkung:** `main/cmd/cmd_espnow_unicast_test.c`
|
||||
Referenz für **Master lokal + Slave + `client_id`:** `main/cmd/cmd_espnow_find_me.c`, `main/cmd/cmd_accel_deadzone.c`
|
||||
|
||||
---
|
||||
|
||||
@ -129,13 +129,13 @@ Funktion, die auf **Master und Slave** gleich wirken soll, gehört **nicht** in
|
||||
Find me:
|
||||
|
||||
- `led_ring_find_me()` in `led_ring.c` — sequenz `LED_CMD_FIND_ME` (3× rot/grün/blau, volle Helligkeit)
|
||||
- Optional separater UART-Pfad nur für Ring-Steuerung: `LED_RING` mode `4` in `cmd_led_ring.c` (ohne ESP-NOW)
|
||||
- Optional separater UART-Pfad nur für Ring-Steuerung: `LED_RING` mode `4` in `main/cmd/cmd_led_ring.c` (ohne ESP-NOW)
|
||||
|
||||
---
|
||||
|
||||
## Schritt 4 — UART-Command-Handler (nur Master)
|
||||
|
||||
Neue Dateien: `main/cmd_espnow_find_me.c`, `main/cmd_espnow_find_me.h`
|
||||
Neue Dateien: `main/cmd/cmd_espnow_find_me.c`, `main/cmd/cmd_espnow_find_me.h`
|
||||
|
||||
Muster (gekürzt):
|
||||
|
||||
@ -191,8 +191,8 @@ Hilfs-APIs (`uart_cmd.h`):
|
||||
cmd_espnow_find_me_register();
|
||||
```
|
||||
|
||||
**Build:** `main/CMakeLists.txt` → `"cmd_espnow_find_me.c"`
|
||||
**Logging-Namen:** `main/cmd_handler.c` → `case alox_MessageType_FIND_ME: return "FIND_ME";`
|
||||
**Build:** `main/CMakeLists.txt` → `"cmd/cmd_espnow_find_me.c"`
|
||||
**Logging-Namen:** `main/cmd/cmd_handler.c` → `case alox_MessageType_FIND_ME: return "FIND_ME";`
|
||||
|
||||
### Ablauf UART intern
|
||||
|
||||
@ -324,7 +324,7 @@ idf.py build
|
||||
- [ ] Geräte-Modul (z.B. `led_ring_*`)
|
||||
- [ ] `cmd_*.c` + `uart_cmd_register`
|
||||
- [ ] `esp_now_comm`: `send_*` + Slave-`recv` case
|
||||
- [ ] `CMakeLists.txt`, `powerpod.c`, `cmd_handler.c` Name
|
||||
- [ ] `CMakeLists.txt`, `powerpod.c`, `cmd/cmd_handler.c` Name
|
||||
- [ ] goTool: CLI, `client_api`, optional `api_serve` + WebUI
|
||||
- [ ] README aktualisieren
|
||||
- [ ] Master + Slave flashen bei ESP-NOW-Proto-Änderung
|
||||
@ -337,7 +337,7 @@ idf.py build
|
||||
|---------|--------|
|
||||
| UART Proto | `main/proto/uart_messages.proto` |
|
||||
| ESP-NOW Proto | `main/proto/esp_now_messages.proto` |
|
||||
| UART Handler | `main/cmd_espnow_find_me.c` |
|
||||
| UART Handler | `main/cmd/cmd_espnow_find_me.c` |
|
||||
| ESP-NOW | `main/esp_now_comm.c`, `main/esp_now_comm.h` |
|
||||
| LED | `main/led_ring.c`, `main/led_ring.h` |
|
||||
| Host CLI | `goTool/cmd_find_me.go` |
|
||||
@ -345,7 +345,7 @@ idf.py build
|
||||
|
||||
Ähnliche Features zum Abgucken:
|
||||
|
||||
- **Nur Master, kein ESP-NOW:** `cmd_version.c`, `cmd_led_ring.c`
|
||||
- **Nur Slave per ESP-NOW (Master leitet nur durch):** `cmd_espnow_unicast_test.c`
|
||||
- **Master + alle Slaves / Filter:** `cmd_accel_deadzone.c`
|
||||
- **Großer ESP-NOW-Fluss mit Status:** `ota_espnow.c`, `cmd_ota.c`
|
||||
- **Nur Master, kein ESP-NOW:** `main/cmd/cmd_version.c`, `main/cmd/cmd_led_ring.c`
|
||||
- **Nur Slave per ESP-NOW (Master leitet nur durch):** `main/cmd/cmd_espnow_unicast_test.c`
|
||||
- **Master + alle Slaves / Filter:** `main/cmd/cmd_accel_deadzone.c`
|
||||
- **Großer ESP-NOW-Fluss mit Status:** `ota_espnow.c`, `main/cmd/cmd_ota.c`
|
||||
|
||||
@ -14,17 +14,17 @@ idf_component_register(
|
||||
"uart.c"
|
||||
"uart_proto.c"
|
||||
"uart_cmd.c"
|
||||
"cmd_handler.c"
|
||||
"cmd_version.c"
|
||||
"cmd_client_info.c"
|
||||
"cmd_accel_deadzone.c"
|
||||
"cmd_espnow_unicast_test.c"
|
||||
"cmd_espnow_find_me.c"
|
||||
"cmd_restart.c"
|
||||
"cmd/cmd_handler.c"
|
||||
"cmd/cmd_version.c"
|
||||
"cmd/cmd_client_info.c"
|
||||
"cmd/cmd_accel_deadzone.c"
|
||||
"cmd/cmd_espnow_unicast_test.c"
|
||||
"cmd/cmd_espnow_find_me.c"
|
||||
"cmd/cmd_restart.c"
|
||||
"pod_reboot.c"
|
||||
"cmd_led_ring.c"
|
||||
"cmd_ota.c"
|
||||
"cmd_ota_slave_progress.c"
|
||||
"cmd/cmd_led_ring.c"
|
||||
"cmd/cmd_ota.c"
|
||||
"cmd/cmd_ota_slave_progress.c"
|
||||
"ota_uart.c"
|
||||
"ota_espnow.c"
|
||||
"client_registry.c"
|
||||
@ -40,6 +40,7 @@ idf_component_register(
|
||||
"proto/pb_common.c"
|
||||
INCLUDE_DIRS
|
||||
"."
|
||||
"cmd"
|
||||
"proto"
|
||||
REQUIRES
|
||||
esp_wifi
|
||||
|
||||
@ -203,20 +203,20 @@ Host and master speak nanopb-encoded `UartMessage` inside UART frames (byte 0 =
|
||||
|
||||
| ID | Name | Status |
|
||||
|----|------|--------|
|
||||
| 3 | `VERSION` | Implemented (`cmd_version.c`) |
|
||||
| 4 | `CLIENT_INFO` | Implemented (`cmd_client_info.c`) — slave list from registry |
|
||||
| 3 | `VERSION` | Implemented (`cmd/cmd_version.c`) |
|
||||
| 4 | `CLIENT_INFO` | Implemented (`cmd/cmd_client_info.c`) — slave list from registry |
|
||||
| 5 | `CLIENT_INPUT` | Planned |
|
||||
| 6 | `ACCEL_DEADZONE` | Implemented (`cmd_accel_deadzone.c`) — get/set accel filter LSB |
|
||||
| 7 | `ESPNOW_UNICAST_TEST` | Implemented (`cmd_espnow_unicast_test.c`) |
|
||||
| 8 | `LED_RING` | Implemented (`cmd_led_ring.c`) — ring progress bar (0–100 %, RGB, intensity) |
|
||||
| 16 | `OTA_START` | Implemented (`cmd_ota.c`) — begin UART OTA on inactive slot |
|
||||
| 6 | `ACCEL_DEADZONE` | Implemented (`cmd/cmd_accel_deadzone.c`) — get/set accel filter LSB |
|
||||
| 7 | `ESPNOW_UNICAST_TEST` | Implemented (`cmd/cmd_espnow_unicast_test.c`) |
|
||||
| 8 | `LED_RING` | Implemented (`cmd/cmd_led_ring.c`) — ring progress bar (0–100 %, RGB, intensity) |
|
||||
| 16 | `OTA_START` | Implemented (`cmd/cmd_ota.c`) — begin UART OTA on inactive slot |
|
||||
| 17 | `OTA_PAYLOAD` | Implemented — up to 200 B per frame; device buffers 4 KiB |
|
||||
| 18 | `OTA_END` | Implemented — flush, `esp_ota_end`, push image to slaves via ESP-NOW, set boot |
|
||||
| 19 | `OTA_STATUS` | Device → host (prepare/ready/block ACK/success/failed) |
|
||||
| 20 | `OTA_START_ESPNOW` | Implemented — re-distribute staged image to slaves only |
|
||||
| 21 | `OTA_SLAVE_PROGRESS` | Implemented (`cmd_ota_slave_progress.c`) — query per-slave ESP-NOW OTA progress |
|
||||
| 22 | `FIND_ME` | Implemented (`cmd_espnow_find_me.c`) — `client_id=0` local ring, `>0` ESP-NOW to slave |
|
||||
| 23 | `RESTART` | Implemented (`cmd_restart.c`) — `client_id=0` reboot master, `>0` ESP-NOW reboot slave |
|
||||
| 21 | `OTA_SLAVE_PROGRESS` | Implemented (`cmd/cmd_ota_slave_progress.c`) — query per-slave ESP-NOW OTA progress |
|
||||
| 22 | `FIND_ME` | Implemented (`cmd/cmd_espnow_find_me.c`) — `client_id=0` local ring, `>0` ESP-NOW to slave |
|
||||
| 23 | `RESTART` | Implemented (`cmd/cmd_restart.c`) — `client_id=0` reboot master, `>0` ESP-NOW reboot slave |
|
||||
|
||||
Regenerate C code:
|
||||
|
||||
@ -264,7 +264,7 @@ During OTA the LED ring shows progress at ~5 % brightness: **blue** while the im
|
||||
|
||||
`OTA_START_ESPNOW` (type `20`): re-run ESP-NOW distribution from the last staged image without a new UART upload (no-op if nothing staged).
|
||||
|
||||
Implementation: `ota_uart.c` (4 KiB buffer, `esp_ota_write`), `ota_espnow.c`, `cmd_ota.c`.
|
||||
Implementation: `ota_uart.c` (4 KiB buffer, `esp_ota_write`), `ota_espnow.c`, `cmd/cmd_ota.c`.
|
||||
|
||||
Host upload:
|
||||
|
||||
@ -446,19 +446,19 @@ Target: ESP32-S3. Close serial monitor on the UART adapter port before running `
|
||||
| `esp_now_comm.c/h` | WiFi, ESP-NOW, discover / slave info / OTA send |
|
||||
| `ota_uart.c/h` | Shared 4 KiB OTA flash buffer (UART + ESP-NOW) |
|
||||
| `ota_espnow.c/h` | Master: distribute staged image to slaves |
|
||||
| `cmd_ota.c/h` | UART OTA command handlers (master only) |
|
||||
| `cmd/cmd_ota.c/h` | UART OTA command handlers (master only) |
|
||||
| `uart.c/h` | Framed UART RX/TX |
|
||||
| `uart_proto.c/h` | Encode/send `UartMessage` |
|
||||
| `cmd_handler.c/h` | Command queue and dispatch |
|
||||
| `cmd/cmd_handler.c/h` | Command queue and dispatch |
|
||||
| `uart_cmd.c/h` | Shared UART decode/send helpers for handlers |
|
||||
| `cmd_version.c/h` | VERSION handler |
|
||||
| `cmd_client_info.c/h` | CLIENT_INFO handler |
|
||||
| `cmd/cmd_version.c/h` | VERSION handler |
|
||||
| `cmd/cmd_client_info.c/h` | CLIENT_INFO handler |
|
||||
| `client_registry.c/h` | Registered slave table |
|
||||
| `bosch456.c/h` | BMA456H I2C driver, accel poll, tap INT, deadzone filter |
|
||||
| `board_input.c/h` | Taster GPIO12, LiPo ADC on GPIO1 / GPIO12 |
|
||||
| `pod_settings.c/h` | NVS persistence (accel deadzone, …) |
|
||||
| `led_ring.c/h` | LED ring (digit display, progress bar) |
|
||||
| `cmd_led_ring.c` | UART `LED_RING` progress command |
|
||||
| `cmd/cmd_led_ring.c` | UART `LED_RING` progress command |
|
||||
| `proto/uart_messages.proto` | UART protocol schema |
|
||||
| `proto/esp_now_messages.proto` | ESP-NOW protocol schema |
|
||||
| `esp_now_proto.c/h` | Encode/decode `EspNowMessage` |
|
||||
@ -475,7 +475,7 @@ Short checklist:
|
||||
|
||||
1. Add or extend messages in `uart_messages.proto` (and `esp_now_messages.proto` if slaves are involved); run `make proto_generate` and `make gotool-proto`.
|
||||
2. Implement device logic in a shared module (e.g. `led_ring.c`), not only in the UART handler.
|
||||
3. Create `cmd_*.c`, register with `uart_cmd_register()`; decode with `uart_cmd_decode()` / `UART_CMD_REQ()`; reply with `uart_cmd_init_response()` + `uart_cmd_send()`.
|
||||
3. Create `cmd/cmd_*.c`, register with `uart_cmd_register()`; decode with `uart_cmd_decode()` / `UART_CMD_REQ()`; reply with `uart_cmd_init_response()` + `uart_cmd_send()`.
|
||||
4. Master → slave: `esp_now_comm_send_*()` + slave branch in `espnow_recv_cb`.
|
||||
5. Extend `goTool` (CLI, optional `/api/…` and web UI).
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@ typedef enum {
|
||||
OTA_UART_ST_BLOCK_ACK = 3,
|
||||
OTA_UART_ST_SUCCESS = 4,
|
||||
OTA_UART_ST_FAILED = 5,
|
||||
/** ESP-NOW slave distribution in progress (see OTA_DIST_* in cmd_ota.c). */
|
||||
/** ESP-NOW slave distribution in progress (see OTA_DIST_* in cmd/cmd_ota.c). */
|
||||
OTA_UART_ST_DISTRIBUTING = 6,
|
||||
} ota_uart_status_t;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user