add Claude instructions
Signed-off-by: Peter Siegmund <developer@mars3142.org>
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
ESP32 firmware for a model railway system control unit, targeting ESP32-S3 and ESP32-C6 microcontrollers. Built with ESP-IDF 5.4. Includes a Svelte 5 web UI (`website/`) and a REST/WebSocket/MQTT API.
|
||||
|
||||
## Build Commands
|
||||
|
||||
```bash
|
||||
# Firmware
|
||||
idf.py build
|
||||
idf.py -p <PORT> flash
|
||||
idf.py -p <PORT> flash monitor
|
||||
|
||||
# Release build (ESP32-C6 only)
|
||||
make release
|
||||
# Equivalent: idf.py -B build-release -DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release" -DIDF_TARGET=esp32c6 fullclean build size
|
||||
|
||||
# Web UI
|
||||
cd website && npm install && npm run build
|
||||
cd website && npm run test
|
||||
```
|
||||
|
||||
## Architecture
|
||||
|
||||
- `main/` — Firmware entry (`app_main()` in `main.cpp`, core app task in `app_task.cpp`)
|
||||
- `components/` — ESP-IDF components with isolated business logic:
|
||||
- **bifrost** (`api-server`) — HTTP REST + WebSocket server, mDNS, static file serving
|
||||
- **connectivity-manager** — WiFi, BLE, captive portal / DNS hijacking
|
||||
- **led-manager** — WS2812 strip control, effects, status LED
|
||||
- **message-manager** — Observer/broadcast bus for cross-component events
|
||||
- **persistence-manager** — NVS abstraction with namespace-scoped typed read/write
|
||||
- **mercedes** — Dynamic menu data model (C++ singleton, JSON-driven)
|
||||
- **hermes** — u8g2 display rendering (menu, splash, screensaver)
|
||||
- **heimdall** — Button/action manager with callback registration
|
||||
- **simulator** — Day/night light cycle simulation from CSV schedules
|
||||
- `storage/` — Runtime SPIFFS content: `menu.json`, `schema_*.csv`, `www/` (web assets)
|
||||
- `website/` — Svelte 5 + Vite + Tailwind web UI
|
||||
|
||||
### Multi-target Support
|
||||
|
||||
Two targets are supported with distinct pin assignments and `sdkconfig` defaults:
|
||||
- `sdkconfig.defaults` — base (shared)
|
||||
- `sdkconfig.defaults.esp32s3` — S3 overrides
|
||||
- `sdkconfig.defaults.esp32c6` — C6 overrides (includes WiFi enable/antenna GPIO)
|
||||
|
||||
Do not assume one target's pins or settings apply to the other.
|
||||
|
||||
### Task Structure
|
||||
|
||||
FreeRTOS tasks in priority order:
|
||||
1. `app_main()` — hardware init, starts `app_task`
|
||||
2. `app_task` — main logic on core 1, priority `tskIDLE_PRIORITY + 5`, 8KB stack
|
||||
3. `display_update_task` — async I2C display writes
|
||||
|
||||
## Conventions
|
||||
|
||||
### C/C++ Style
|
||||
- Braces on new line in C files; follow existing formatting per file.
|
||||
- Each source file has a local `static const char *TAG = "..."` for `ESP_LOGI/W/E`.
|
||||
- HTTP handlers must use `set_cors_headers`, `send_json_response`, and `send_error_response` for consistency.
|
||||
- Cross-component state changes go through `message_manager_post(...)`, not direct coupling.
|
||||
- Persist settings via `persistence_manager` with a dedicated namespace per feature.
|
||||
|
||||
### URI Handler Registration Order (api-server)
|
||||
1. Specific `/api/...` handlers
|
||||
2. Wildcard API handlers
|
||||
3. Captive-portal detection handlers
|
||||
4. `OPTIONS /api/*`
|
||||
5. Static fallback `/*` (last)
|
||||
|
||||
WebSocket handling must be initialized before API handler registration.
|
||||
|
||||
### Static Asset Serving
|
||||
Preserve correct HTTP headers: content-type, CORS, and `Content-Encoding: gzip` when serving `.gz` variants.
|
||||
|
||||
## Key Reference Files
|
||||
|
||||
- `README-API.md` — full REST API documentation
|
||||
- `README-menu.md` — `menu.json` schema
|
||||
- `README-captive.md` — captive portal behavior
|
||||
- `components/bifrost/src/api_server.c` — server setup and handler registration
|
||||
- `components/bifrost/src/api_handlers.c` — REST endpoint implementations
|
||||
- `components/message-manager/src/message_manager.c`
|
||||
- `components/persistence-manager/src/persistence_manager.c`
|
||||
- `partitions.csv` — flash layout (NVS 16KB, APP 2MB, SPIFFS 1.8MB)
|
||||
Reference in New Issue
Block a user