- 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.