velxio/frontend/src/utils
David Montero 734b7d0487 feat(esp32): pure ESP-IDF language mode for the ESP32 family (#139)
Adds a third entry to the board language selector next to Arduino C++
and MicroPython: ESP-IDF. In this mode the user writes a plain ESP-IDF
project — app_main() entry point, FreeRTOS + driver APIs — and the
backend compiles it through the same ESP-IDF toolchain it already uses
for ESP32 Arduino sketches, just without the arduino-esp32 component.

Backend:
- CompileRequest.language ('espidf') threaded through the sync + async
  compile paths and folded into the dedup job key (language='arduino'
  and omitted hash identically so old clients keep dedupping).
- espidf_compiler: pure_idf flag. User files are written into main/
  as-is (no Arduino.h wrap, no velxio_compat.h, Arduino library
  resolution skipped), ARDUINO_ESP32_PATH is dropped from the build env
  and VELXIO_PURE_SKETCH raised so the template CMake compiles the
  user's own sources via a glob branch. Pure builds get their own
  persistent build-dir variant through the eff_hash fold.
- QEMU WiFi compat for IDF-style code: esp_wifi.h/esp_wifi_init
  detection sets has_wifi, and literal #define SSID/PASS plus
  wifi_config_t designated initializers are normalized to the QEMU AP.
- CONFIG_ARDUINO_* lines are stripped from sdkconfig.defaults in pure
  mode (the symbols don't exist without the arduino component).

Frontend:
- LanguageMode gains 'espidf'; BOARD_SUPPORTS_ESPIDF covers the ESP32
  family (Xtensa, S3, C3). Toolbar shows the option only for those.
- Switching modes seeds a main.c blink skeleton (app_main + gpio
  driver), mirroring the MicroPython main.py flow.
- compileCode sends language='espidf'; run/stop paths are unchanged
  (the QEMU worker consumes the same merged flash image).
- New gallery example: esp32-idf-blink (LED + resistor on GPIO 2).

Tests: unit coverage for the build-env switch, IDF wifi normalization,
job-key variance, file-group seeding and the new example; verified
end-to-end in a container from the prod image (pure build produces a
bootable flash image; Arduino-mode build unchanged, same variant hash).
2026-07-24 06:37:01 +02:00
..
analytics.ts
boardPinMapping.ts feat(boards): add 6 STM32 boards (F4 Discovery, Olimex H405, Netduino 2/+2, Pill variants) 2026-05-31 03:19:26 -03:00
boardProtocols.ts fix(interconnect): classify Arduino Mega UART/I2C function-label pins 2026-06-12 08:29:03 +02:00
breadboardNets.ts feat: breadboard (full 830-point) + mini breadboard (170-point) parts 2026-07-15 21:50:36 +02:00
breadboardOccupancy.ts feat(breadboard): one-hole-one-wire selection rules + jumper colors 2026-07-21 05:49:23 +02:00
breadboardSnap.ts fix(breadboard): land agent-seated parts exactly under rotation 2026-07-19 22:01:41 +02:00
captureCanvasPreview.ts
compilationLogger.ts feat(editor): per-target compilation console — a section per board/chip 2026-06-04 07:56:54 +02:00
countryFlag.ts
esp32ImageParser.ts
exampleToBuildNetlistInput.ts
fatImage.ts feat(microsd): SD-over-SPI card storage for AVR, RP2040 and ESP32 2026-06-11 03:59:53 +02:00
firmwareLoader.ts
generateExamplePreview.tsx
hexParser.ts
importProject.ts
keyButtonBindings.ts feat(simulator): map pushbuttons to keyboard keys 2026-07-18 04:02:01 +02:00
loadExample.ts feat(esp32): pure ESP-IDF language mode for the ESP32 family (#139) 2026-07-24 06:37:01 +02:00
pinPositionCalculator.ts feat(breadboard): green dots on pins plugged into a breadboard 2026-07-20 04:48:16 +02:00
projectPayload.ts feat(library-manifest): per-board manifests + autocomplete 2026-06-07 06:07:48 +02:00
reservedUsernames.ts
sdCardFiles.ts feat(microsd): SD-over-SPI card storage for AVR, RP2040 and ESP32 2026-06-11 03:59:53 +02:00
useSEO.ts seo: emit trailing-slash canonical + sitemap URLs 2026-06-15 06:10:32 +02:00
useTouchDevice.ts
uuid.ts
vlxFile.ts fix(editor): sync URL after New workspace + sever project identity on .vlx import 2026-07-18 08:24:06 +02:00
wireAutoRoute.ts fix(router): escape corridors for endpoint-in-obstacle + checked-elbow parity 2026-07-20 21:35:58 +02:00
wireColors.ts
wireHitDetection.ts feat(breadboard): Wokwi-style parts-on-breadboard — hole snapping + invisible seating wires 2026-07-18 08:47:25 +02:00
wireUtils.ts feat(breadboard): one-hole-one-wire selection rules + jumper colors 2026-07-21 05:49:23 +02:00
wokwiZip.ts feat(breadboard): Wokwi-style parts-on-breadboard — hole snapping + invisible seating wires 2026-07-18 08:47:25 +02:00
workspaceDraft.ts feat(editor): preserve in-progress workspace across a login redirect 2026-07-17 06:27:28 +02:00