Skip to content

radioserver: report the DIO1 routing mask - #15

Merged
A13xB0 merged 1 commit into
mainfrom
report-dio1-mask
Sep 3, 2026
Merged

A13xB0 merged 1 commit into
mainfrom
report-dio1-mask

Conversation

@A13xB0

@A13xB0 A13xB0 commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator

The stats record carried the IRQ enable mask but not the DIO1 routing mask.

Those are two different fields of SetDioIrqParams, and confusing them is the
fault that made an emulated board hear every advert and relay about one in
three: the chip model read the enable mask where the routing mask belongs, so
HeaderValid raised DIO1 twelve symbols into the carrier. The pin was then
already high when RxDone arrived, which is no rising edge, and RadioLib
attaches DIO1 on the rising edge, so MeshCore's recvRaw never ran.

Nothing outside the chip could see which mask was which, which is why that had
to be found by reading the datasheet against the source rather than by looking
at a running node. This makes it readable from one.

Two bytes appended. The host reads this record on length, so an older host
ignores them and a newer one can tell "did not say" from "said zero".

🤖 Generated with Claude Code

https://claude.ai/code/session_01Q9HbD44EKWWTRYgxbFGxf6

The record already carried the IRQ enable mask. It did not carry the DIO1
routing mask, which is the narrower set SetDioIrqParams wires out to the pin,
and the difference is not academic: reading the enable mask where the routing
mask belongs is the fault that made an emulated board hear every advert and
relay one in three. HeaderValid raised DIO1 part-way through a carrier, the pin
was still high when RxDone arrived, and RadioLib attaches that pin on the rising
edge, so recvRaw never ran.

Nothing outside the chip could see which mask was which, so the fault had to be
found by reading the datasheet against the source rather than by looking at a
running node. Now it can be read off a node: RadioLib's receive default is
RxDone alone against an enable mask that also carries Timeout, CrcErr,
HeaderValid and HeaderErr, so the two being equal is a sign rather than a normal
reading.

Appended to the record, because the host reads it on length: an older host
ignores the two new bytes and a newer host tells "did not say" from "said zero".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q9HbD44EKWWTRYgxbFGxf6
@A13xB0
A13xB0 merged commit e8e7f81 into main Sep 3, 2026
2 checks passed
@A13xB0
A13xB0 deleted the report-dio1-mask branch September 3, 2026 16:15
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