- Add image/build.sh: Automated Pi image builder for ReticulumHF v1.0
- Add configs/: System configuration files (hostapd, dnsmasq, ALSA, radios DB)
- Add scripts/wait-for-port: Service dependency utility
- Update .gitignore: Exclude .claude/ and test files
This release includes the complete build infrastructure for creating
ReticulumHF Raspberry Pi images with pre-configured WiFi AP, web portal,
and Reticulum gateway services.
New features:
- Connection health monitor with live TCP checks for rigctld and modem
- RNS interface statistics display (TX/RX byte counts per interface)
- PWA support (installable app with service worker for offline caching)
- Auto-configure ALSA levels when Digirig/CM108 is plugged in (udev rule)
- CM108 GPIO PTT detection for hardware PTT support
- Added Kenwood TS-890S radio configuration
Bug fixes:
- Copy buttons now work over HTTP (not just HTTPS)
- CLI commands section shows correct audio card number
New endpoints:
- /api/rigctld-health - TCP health check with frequency display
- /api/rns-stats - Parsed interface statistics from rnstatus
Major architecture change:
- Use freedvtnc2-lfm fork (LFManifesto/freedvtnc2) with TCP command interface
- Mode changes instant via port 8002 (no service restart)
- Volume changes instant via port 8002 (no service restart)
- New endpoints: /api/modem-status, /api/modem-levels
- Added freedvtnc2_command() helper for command interface
- Updated build.sh to install from GitHub fork
- Added --cmd-port 8002 --cmd-address 0.0.0.0 to freedvtnc2 command
This eliminates the need to restart freedvtnc2 for configuration changes,
which was causing rnsd reconnection delays and perceived failures.
- Fix: Call set_audio_levels() during setup completion to initialize
ALSA mixer defaults (Speaker 80%, Mic Capture 75%, AGC off)
- Add CLI Commands section to status page with copyable commands for
alsamixer TUI, amixer controls, service status, and logs
- Update README and docstrings to reflect 0 dB TX default (was -6)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Document always building image after commits
- Include build machine details (pi2)
- Add architecture overview
- Include interface settings for Sideband/MeshChat
- Add troubleshooting guide
Co-Authored-By: Claude <noreply@anthropic.com>
Transport bridging:
- Change TCP interface mode from 'gateway' to 'boundary'
- Prevents high-speed TCP announces from flooding slow HF link
TX audio control:
- Add TX Audio Level slider on status page (-20 to 0 dB)
- Default changed from -3 to -6 dB (safer, avoids ALC)
- ALC warning when level > -4 dB
- Restarts modem when changed
Connection info improvements:
- Add interface setup directions for Sideband and MeshChat
- Fix MeshChat port (4242, not 8001)
- Add IFAC fields to MeshChat section
UI improvements:
- Add troubleshooting tips section
- Clarify that all apps use TCP Client Interface on port 4242
Co-Authored-By: Claude <noreply@anthropic.com>
Setup Page (6 steps):
- Streamlined wizard: Radio > Settings > Hardware > Test > Security > Start
- VOX mode checkbox for audio-only interfaces (Digirig Lite)
- Removed audio level testing (moved to status page)
- Radio-specific menu settings displayed during setup
Status Page:
- Real-time audio level monitoring with VU meter
- ALSA mixer controls (Mic/Speaker sliders)
- FreeDV mode selector with coordination warning
- Device busy detection when modem is running
- WiFi AP credentials display
- Version number (v0.1.0-alpha)
- Documentation link to GitHub
Backend:
- Audio device busy detection via fuser
- FreeDV mode change API with modem restart
- VOX mode handling (user choice OR radio default)
- Config-info returns current FreeDV mode
radios.json:
- Added audio_settings for all 25 radios
- Marked tested radios: G90, FT-818, truSDX
- Added ALSA recommendations and FreeDV notes
Critical Notes:
- All stations must use same FreeDV mode to communicate
- Audio target: -10 to -5 dB on signals, -30 to -60 dB noise floor
- WiFi: ReticulumHF / reticulumhf
- Added get_audio_controls() to enumerate available ALSA mixer controls
- Rewrote set_audio_levels() to try multiple control name patterns
- Now handles Digirig, SignaLink, and built-in radio USB audio
- Returns helpful message when no controls found (set levels in radio menu)
- Added /api/audio-controls/<card> endpoint for diagnostics
Fixes issue where Icom radios with built-in USB reported
"could not set input level (no Mic or Capture control)"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
High priority fixes:
- Add config backup before overwrite in complete-setup
- Add systemctl disable to reset-setup to prevent broken state
- Change freedvtnc2 Requires to Wants for VOX mode support
- Update tested status for FT-818 and truSDX
Medium priority fixes:
- Validate serial_port for non-VOX radios
- Add config validation before service start
- Increase freedvtnc2 startup timeout from 5s to 15s
- Add PTT method (RTS) to more radios in radios.json
Low priority / code quality:
- Extract common radio lookup to helper function
- Add type hints (Optional, Tuple) consistently
- Remove unused peers_config code
- Define path constants at module level
- Fix bare except in hardware.py
- Move time import to module level
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add -P RTS PTT method support for Digirig interfaces
- Change freedvtnc2 bind address from 127.0.0.1 to 0.0.0.0 for remote access
- Add VOX mode support for audio-only interfaces (rigctld-port 0)
- Remove --set-conf options that caused broken pipe errors
- Fix FT-818 hamlib model from 1041 to 1020 (use FT-817)
- Add ptt_method field to G90, FT-818, and truSDX in radios.json
- Add MeshChat connection instructions to status page (port 8001, KISS, bitrate)
- Complete web-based setup portal for radio configuration
- freedvtnc2 FreeDV modem integration (DATAC1/DATAC3/DATAC4)
- rigctld CAT/PTT control for multi-radio support
- WiFi AP mode for phone connectivity
- RNS TCP bridge for Sideband app
- Fixed service startup timing
- Fixed first-boot configuration flow
- Includes configs, services, and image build scripts