Skip to content

bridge: a frame the receiver locked onto and lost reaches the chip - #29

Merged
A13xB0 merged 2 commits into
mainfrom
failed-frames-reach-the-chip
Oct 24, 2026
Merged

A13xB0 merged 2 commits into
mainfrom
failed-frames-reach-the-chip

Conversation

@A13xB0

@A13xB0 A13xB0 commented Oct 16, 2026 •

Copy link
Copy Markdown
Collaborator

The node half of MeshBench/meshbench#757.

The engine now sends kind 0x0A, [failure][frame...], for a frame this node locked onto and lost. The bridge hands it to deliverFrameFailed, which the pinned chip model (v1.3.3) already has: HeaderErr alone for a header it could not read, or RxDone beside CrcErr with the corrupt bytes in the buffer for a payload it could not.

The radio stats record grows from 47 bytes to 48. Byte 47, bit 0 says this bridge takes 0x0A. It has to be said: today's bridge ends its connection on any kind it does not know (default: goto done), so the engine only sends 0x0A to a node that sets the bit. Every engine reads the record on length, so an older MeshBench ignores the extra byte.

Until now every lost frame reached the firmware as nothing, so MeshCore's handling of HeaderErr and CrcErr never ran in a simulation.

Checked: simple_repeater builds cleanly against MeshCore dev (07a833bb) on Linux amd64. The engine side, including the capability bit, is tested in #757 over a real bridge. Not yet run end to end in a mesh.

The engine sends kind 0x0A, [failure][frame...], for a frame this node's
receiver locked onto and could not trust. The chip raises HeaderErr for a
header it could not read, or RxDone beside CrcErr for a payload it could not,
which is what lets the firmware's error paths run at all.
Byte 47, bit 0. The engine sends kind 0x0A only to a node that says so,
because a bridge without that case ends its connection on a kind it does not
know and the engine has no other way to tell the two apart.

@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. The stats record grows to 48 bytes with the capability bit, and engines read it by length, so older engines are fine.

@A13xB0
A13xB0 merged commit 809fc8d into main Oct 24, 2026
1 check passed
@A13xB0
A13xB0 deleted the failed-frames-reach-the-chip branch October 24, 2026 10:52
@A13xB0
A13xB0 restored the failed-frames-reach-the-chip branch October 24, 2026 10:52
@A13xB0
A13xB0 deleted the failed-frames-reach-the-chip 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