Files
HaloKeymind/test/fixtures/morse_rx_sample_cadence.cpp
T
mikecarper ca9caece53 Add bounded Morse receive and negotiated RS232 autosleep
Add native narrow-band CW capture, ACK-first remote sessions, retained LoRa-readable pages, checked restoration and transport-safe progress. Add stock-compatible negotiated heartbeat/autosleep and recovery. Include host regressions and identity-bound HIL runners; keep unverified faster tuning HIL-only and document outstanding hardware validation.
2026-10-13 01:24:39 -07:00

26 lines
1.4 KiB
C++

int main() {
static_assert(mesh::MorseRx::SampleIntervalMillis==EXPECTED_SAMPLE_MS,"HIL cadence must not leak into production");
constexpr uint32_t interval=mesh::MorseRx::SampleIntervalMillis;
for(uint32_t started : {100U,0xfffffff8U}) {
RadioLibWrapper w; g_mock_millis=started;
assert(w.startMorseRx(902.1f,25,60000)==mesh::MorseRxResult::Started);
assert(w.rssi_reads==1 && w._morse_rx_next_sample==uint32_t(started+interval));
advance(interval-1); w.serviceCarrierWave(); assert(w.rssi_reads==1);
advance(1); w.serviceCarrierWave(); assert(w.rssi_reads==2);
const auto reads=w.rssi_reads;
for(unsigned call=0;call<100;++call) w.serviceCarrierWave();
assert(w.rssi_reads==reads); // never catch up/burst merely by foreground calls
w.rssi_latency=3; advance(interval); w.serviceCarrierWave();
assert(w.rssi_reads==reads+1 && w._morse_rx_next_sample==uint32_t(g_mock_millis+interval));
advance(interval-1); w.serviceCarrierWave(); assert(w.rssi_reads==reads+1);
advance(1); w.serviceCarrierWave(); assert(w.rssi_reads==reads+2);
w.rssi_latency=0; advance(100); w.serviceCarrierWave();
const auto stalled=w.rssi_reads;
for(unsigned call=0;call<100;++call) w.serviceCarrierWave();
assert(w.rssi_reads==stalled);
mesh::MorseRxDiagnostics stats;
assert(w.morseRxDiagnostics(stats) && stats.max_sample_gap_ms>=100);
assert(w.stopMorseRx()==mesh::MorseRxResult::Stopped && w.isInRecvMode());
}
}