Skip to content

Receive only what the receiver was listening for - #30

Open
A13xB0 wants to merge 3 commits into
failed-frames-reach-the-chipfrom
strict-receive
Open

A13xB0 wants to merge 3 commits into
failed-frames-reach-the-chipfrom
strict-receive

Conversation

@A13xB0

@A13xB0 A13xB0 commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator

Moves vendor/virtual-sx1262 to strict receive (MeshBench/virtual-sx1262#7, ABI 1.7) and turns it on in the bridge.

This build's clock is the engine's, so the chip can work out when a frame began. It refuses any frame its receiver was not listening for, from a detectable preamble through to the end: in standby, in CAD or transmitting part-way through. Its detection flags also stay set after the carrier ends until the firmware clears them. Silicon behaves the same way. The inbox grace delivered such frames anyway, and the flags were cleared with the carrier, which hid any firmware that re-arms mid-frame or times out a stale flag.

Stats byte 47 bit 1 (kCapNoLock) tells the engine that this chip reads failed-frame code 3, "detected and never locked onto". A chip older than ABI 1.7 reads 3 as a CRC error, which is why the engine needs to be told.

--lenient-receive brings the old behaviour back, for reproducing a run made before this change. Older builds ignore the flag, so the simulator can pass it to any build.

Stacked on #29, whose capability byte this extends. Depends on MeshBench/virtual-sx1262#7 being merged; the submodule points at that branch's head until then.

…ent-receive to restore the grace

Moves virtual-sx1262 to strict receive (ABI 1.7) and turns it on: this build's clock is the engine's, so the chip can tell when a frame began and refuse one its receiver was in standby, in CAD or transmitting for, as silicon does. --lenient-receive brings the inbox grace back, for reproducing an earlier run.
…tion flags under strict receive

Moves virtual-sx1262 to the head of strict receive, where the detection flags stay latched past the carrier and failure 3 withdraws a header the receiver never locked onto. Stats byte 47 bit 1 tells the engine this chip reads failure 3, because an older one reads it as a CRC error.
@A13xB0
A13xB0 changed the base branch from main to failed-frames-reach-the-chip October 17, 2026 04:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants