# kvida-os Fastvare for Kvida — en konfigurerbar automasjonsplattform (ESP32-C6) fra Xylon. Visjon og arkitektur er beskrevet i meta-repoet [`kvida`](../kvida/AGENTS.md). Dette repoet inneholder kun fastvaren, bygget på ESP-IDF (C++17). ## Forutsetninger - Docker - WSL2 - `usbipd-win` (for å videresende ESP32-C6 sin USB-seriellport fra Windows til WSL2 ved flashing) ## Arkitektur Lagdelt: `drivers` -> `sensors` -> `profiles` -> `lua_runtime` -> `transport`, se komponent-READMEene under `components/` og `AGENTS.md` for detaljer. Bruker konfigurerer enheten visuelt (Blockly -> Lua), ikke ved å skrive/kompilere fastvare. ## Quickstart ```sh # Bygg toolchain-imaget (Espressif sitt offisielle ESP-IDF v6.0.2-image) docker compose build # Velg target (kjøres én gang; genererer sdkconfig) docker compose run --rm build idf.py set-target esp32c6 # Bygg fastvaren docker compose run --rm build idf.py build # Flash + monitor (krever seriellport videresendt via usbipd-win til WSL2) docker compose run --rm build idf.py -p flash monitor ``` Prosjektet er pinnet til ESP-IDF `v6.0.2` (se `docker/Dockerfile`). ## Testing Host-baserte enhetstester ligger per komponent, under `/test_apps/host/`, bygget mot ESP-IDFs `linux`-target (ikke behov for kort) — se `components/sensors/test_apps/host/` for et fungerende eksempel (verifisert i en ren kjøring: bygger, 4 tester passerer). ```sh docker run --rm -v "$(pwd)":/project -w /project/components/sensors/test_apps/host espressif/idf:v6.0.2 \ bash -lc 'idf.py --preview set-target linux && idf.py build && ./build/test_sensor_host.elf' ``` (Imagets entrypoint aktiverer ESP-IDF-miljøet automatisk — ikke `source export.sh` selv.) > **Merk:** under gjentatte, raske kjøringer mot denne `test_apps/*/build`-mappen observerte jeg periodisk `FileExistsError` fra `idf.py` (og enkelte ganger `ls`/`rm` som var uenige om mappen fantes) — både via `docker compose run` og ren `docker run`. Mistenkelig likt kjent metadata-cache-lag i WSL2s DrvFs (`/mnt/*`) under raske create/delete-sykluser på tvers av containergrenser, ikke en feil i selve kodebasen (en ren, isolert kjøring bygger og består alltid). Hvis du støter på dette: slett `build`/`sdkconfig` i mappen fra Windows/PowerShell-siden og vent et par sekunder før du prøver igjen. ## Status `main/` bygger og logger oppstart. `components/sensors` har et reelt `Sensor`-grensesnitt (`include/sensor.h`, Zephyr-inspirert: fetch/get-splitt, fixed-point verdier, finkornet kanal-enum, trigger-API) med et verifisert host-testoppsett. Resten av `components/*` inneholder foreløpig bare README-er som beskriver ansvar per lag. `partitions.csv` har et A/B OTA + LittleFS-oppsett med plassholder-størrelser (4MB flash) som bør justeres når ekte flash-størrelse/image-størrelse er kjent.