- Create separate build-heltec-v3 and build-seeed-xiao jobs
- Both build jobs run in parallel after verify completes
- Explicit job dependencies ensure guaranteed parallelization
- Each job has its own PlatformIO cache key for better hit rates
- Merge lint and test into single 'verify' job for guaranteed sequential execution
- Build job runs in parallel for each target, but waits for verify to complete
- Ensures order: verify (lint → test) → build (parallel) → publish-packages
- Fixes Gitea Actions job dependency handling
- Upload firmware binaries as build artifacts (5-day retention)
- Add publish-packages job to collect, rename with timestamp, and publish to Gitea
- Firmware named as: board-<unix-timestamp>.bin
- Publishes to Gitea generic package registry only on main branch push
- Include package publishing in CI summary status check
- Reorder CI jobs to run sequentially: lint, then test, then build
- Remove all unimplemented build targets, keeping only heltec_v3 and seeed_xiao_s3_wio_sx1262
- Update job dependencies with 'needs' to ensure proper execution order
- test/kiss_client.py: Full-featured KISS modem client library
Supports all 14 config commands, KISS frame encoding/decoding,
signal quality reporting, packet send/receive
Can communicate over serial ports or file-like objects (stdin/stdout)
- test/test_integration.py: Integration test suite using kiss_client.py
Tests radio configuration, parameter setting, KISS frame encoding/decoding
Designed to run against modem or simulator
Run with: python3 test/test_integration.py
- test/main_simulator.cpp: Hardware simulator scaffold for native platform
Mocks SX126X radio with configurable state
Communicates via stdin/stdout for easy testing
Note: Full compilation requires Arduino.h mock (future work)
Verified: seeed_xiao_s3_wio_sx1262 and heltec_v3 still build without errors
- Add test/test_kiss.cpp: Unit tests for KISS protocol encoder/decoder
Tests: frame decoding with/without escape sequences, port extraction,
round-trip encoding/decoding, signal quality encoding, buffer overflow handling
- Add test/test_commands.cpp: Unit tests for config command parsing
Tests: big-endian encoding/decoding, frequency frame parsing, type byte decoding
- Configure PlatformIO native test environment with GoogleTest framework
- Tests currently build but require linking stubs for full integration
Note: Full end-to-end testing requires mocking Serial I/O and radio functions,
which would be handled by integration tests on actual hardware or with a
more sophisticated test harness (e.g., CMake + GoogleTest).
- Add complete KISS protocol Port 2 command handler supporting all 14 commands:
GET/SET_RADIO, GET/SET_FREQUENCY, GET/SET_BANDWIDTH, GET/SET_SF,
GET/SET_CR, GET/SET_POWER, GET/SET_SYNCWORD
- Commands return RES_OK (0x01) or RES_ERROR (0x02) with appropriate payloads
- Responses encoded as KISS frames on Port 2
- All parameters use big-endian encoding per PROJECT.md specification
- Preserves syncword when setting other parameters via SET_RADIO
Verified: Both seeed_xiao_s3_wio_sx1262 and heltec_v3 build without warnings.
- radio.cpp: Add custom SPI bus initialization for boards with non-default pins (conditional on LORA_PIN_SCLK definition). Pass lora_spi object to Module instantiation for SX1262/LR1110.
- radio.cpp: Add TCXO voltage to SX1262/LR1110 chip_begin() as 8th parameter (using SX126X_DIO3_TCXO_VOLTAGE macro or 0 if undefined).
- radio.cpp: Add post-begin SX126X configuration: setDio2AsRfSwitch(), setCurrentLimit(), setRxBoostedGainMode() (conditional on build macros).
- radio.cpp: Fix radio_tx() const conversion for RadioLib transmit() API compatibility.
- config.h: Add LORA_TX_POWER → LORA_POWER_DBM alias for boards like Heltec V3 that define power via LORA_TX_POWER. Use #ifndef guard to avoid redefinition warnings.
- platformio.ini: Add -Wall -Werror to treat warnings as fatal in our code (excluding SDK/framework).
- platformio.ini: Add -std=c99 build flag for KISS C99 support.
- src/kiss.c → src/kiss.cpp: Rename to .cpp so Arduino framework compiles it.
Verified: Builds cleanly for seeed_xiao_s3_wio_sx1262 and heltec_v3 with no warnings.