v3.10.0 — Device-tree board description, bridge software flow control, ntpd daemon, flash_install reliability
Kernel + userdata + host-tooling release. No bootloader or rootfs change — existing installs upgrade with flash_install_rtl8196e.sh (your config is preserved); the flashing fixes arrive with a plain git pull. Issue #99 soak boxes: stay on v3.8.3 (frozen baseline).
Device tree now describes the board wiring (#122/#123/#124)
Board facts move out of code and into the DTS, so porting to an RTL8196E twin (e.g. Sengled G4, #119) no longer means patching drivers:
gpio-line-namesnames the SoC GPIO lines (reset-button,status-led,efr32-nrston the Lidl board).- New optional
/radio-bridgenode seeds the UART-bridge defaults at boot:nrst-gpiosandflow-control = "hw" | "sw" | "none"(module parameters and runtime sysfs still override). - One dtb per board:
BOARD=<board> ./build_kernel.sh(defaultlidl); the add-a-board recipe is documented in the dts Makefile and Kconfig.
uart-bridge v1.2 — software flow control (#123)
flow_control is now tri-state: 0/none, 1/hw (RTS/CTS, default), 2/sw (XON/XOFF). In sw mode the bridge strips bare XON/XOFF from the radio stream and gates the TCP→UART direction (pause on XOFF, resume on XON, bounded 1 s fail-open); remote hosts see a clean ASH stream. New xoff/xon/tx_pause_timeouts counters in parameters/stats. Sysfs readback stays numeric — existing tooling unaffected. During an EFR32 flash, flow control must be 0 in all modes.
s40button v2 — button via the GPIO cdev (#122)
The front-panel button daemon no longer pokes GPIO registers through /dev/mem: it claims its line through /dev/gpiochip0 (uAPI v2, no libgpiod), found by DTS name (reset-button), with fallback to line 9 and a -p <line> override. Claiming through the kernel also applies the pad-mux for pads B2–B6 — the bug that kept a B6-wired button dead on other boards. Press logic unchanged (5 s long-press → EFR32 recovery).
S20time — ntpd runs as a daemon (#125)
The one-shot ntpd -q behind a ping gate is gone: if the gateway booted without internet, the clock stayed at the 1970 epoch forever (no RTC). ntpd now runs as a daemon — it retries until internet appears, steps the clock, and keeps disciplining it (no more drift on month-long uptimes). Measured cost: ~100–200 kB private RSS, ~0.03 % CPU in its busiest phase, one 48-byte UDP exchange per poll interval.
flash_install — no more false "manual flash required" (#115)
Bootloader detection after boothold now requires the bootloader's TFTP server to ACK a write probe (a shutting-down Linux answering ARP could fool the old check), the boothold path no longer runs the Tuya/ICMP classification at all, and the auto-flash confirmation is dual-channel: the bootloader's UDP:9999 notification or the gateway coming back up on SSH — a host firewall can no longer turn a successful flash into a scary message. Failure paths now state explicitly that nothing was written, and that pre-V2.7 bootloaders ignore --boot-ip (they always come up at 192.168.1.6).
Documentation
READMEs synced with the above: uart-bridge pages (flow control, DT seeding, stats), kernel build page (BOARD=), userdata page, EFR32 flashing page.
Upgrade: ./flash_install_rtl8196e.sh <gateway-ip> — full image, config preserved. Kernel and userdata both changed in this release.