Skip to content

Receive only what the receiver was listening for - #30

Merged
A13xB0 merged 4 commits into
mainfrom
strict-receive
Oct 24, 2026
Merged

A13xB0 merged 4 commits into
mainfrom
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

@A13xB0 A13xB0 left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Merge after virtual-sx1262#7.

@A13xB0
A13xB0 deleted the branch failed-frames-reach-the-chip October 24, 2026 10:52
@A13xB0 A13xB0 closed this Oct 24, 2026
@A13xB0 A13xB0 reopened this Oct 24, 2026
@A13xB0
A13xB0 changed the base branch from failed-frames-reach-the-chip to main October 24, 2026 10:53
@A13xB0
A13xB0 merged commit b513ab3 into main Oct 24, 2026
2 checks passed
@A13xB0
A13xB0 deleted the strict-receive branch October 24, 2026 10:53
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