Say which check failed, and read a byte from either end
Their diagnosis came back and the radio end is faultless. Every burst is textbook: four sync pulses at 612 microseconds, then 216 and 403 microsecond data pulses with gaps that complete each bit period, six of them a second, sliced cleanly at the right lengths. The pulses this had been failing to read were being recovered perfectly all along and the fault is in the arithmetic after them. Two things follow from that, and neither is a guess about their sensors. The first is that "nothing framed" is not a diagnosis, it is the absence of one, and it was all this could say. A message whose checksum holds and whose parity fails is a different fault from one where neither holds, and both differ again from a burst that never lined up on a byte boundary -- three faults, three fixes, one message. So the diagnosis now reports the closest framing it found, which of its checks held, and the bytes themselves in hexadecimal, which is what any question about a format is actually about and saves asking somebody to read numbers off a screen. The second is that this still assumed something it had no business assuming: which end of a byte goes down the air first. Both orders are tried now and the checksums say which, like everything else here. That one has a fingerprint worth knowing and worth having said in the manual: reversing the bits of a byte does not change how many of them are set, so odd parity survives it and a checksum does not -- a message read from the wrong end shows every parity holding and every sum failing, on every copy, which is a signature rather than a coincidence. Also fixed, and found by building their burst from the timings they sent: a real transmitter closes the last bit with a terminating pulse, so a message of fifty-six bits arrives as sixty-one pulses rather than sixty. Nothing here had ever seen one, the simulator not sending it, and every test in this file was therefore one pulse short of what comes off the air. It happens to be handled correctly, which is luck rather than design, so it is now what the tests are written against. Full suite 2339 passed. Sixty seconds of receiver noise still yields nothing, and four hundred seconds of the invented garden still yields no sensor that is not there, both rechecked after adding the second byte order. Built as 2026-09-07_04. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016PsWPTweCT6pwxKngvVxcg
This commit is contained in:
parent
706c632f47
commit
dfea5cb2f2
7 changed files with 275 additions and 36 deletions
22
README.md
22
README.md
|
|
@ -1981,8 +1981,12 @@ block with one loud sensor in it yields exactly one sensor however many are out
|
|||
there.
|
||||
|
||||
**Slicing the envelope into bits never measures anything against a clock**,
|
||||
and assumes as little as it can about how a bit is drawn. Nor about how long
|
||||
the silences in it are: the gaps inside one message range from 200 µs on the
|
||||
and assumes as little as it can about how a bit is drawn — nor about which end
|
||||
of a byte goes first, both orders being tried and the checksums saying which.
|
||||
(There is a fingerprint for that one: reversing the bits of a byte does not
|
||||
change how many are set, so parity survives it and a sum does not. A message
|
||||
read from the wrong end shows every parity holding and every checksum failing.)
|
||||
Nor about how long the silences in it are: the gaps inside one message range from 200 µs on the
|
||||
newer sensors to 4000 µs on the oldest, so what belongs to one transmission is
|
||||
settled from each burst's own widest gap rather than from a figure that would
|
||||
have to suit every model at once. Anything that comes out longer than the
|
||||
|
|
@ -2133,7 +2137,19 @@ transmitting over each other.
|
|||
|
||||
**Bursts with clean pulse lengths and `nothing framed`.** The radio is fine
|
||||
and the message is from a model this does not read, or reads differently.
|
||||
That line of pulse lengths is exactly what is needed to add it.
|
||||
Under it comes the closest thing to a message that was found and which of its
|
||||
checks held:
|
||||
|
||||
```
|
||||
61 pulses pulses 216×36 403×21 612×4 gaps 209×21 395×35 601×4
|
||||
nothing framed 8 ways of reading it tried
|
||||
closest: 7 bytes at bit 4: ✓sum ✗parity ✓type ✗plausible DA 2B C4 B0 89 BF C1
|
||||
```
|
||||
|
||||
Which check fails says what kind of fault it is. A sum that holds and a parity
|
||||
that does not is a different thing from neither holding, and the bytes are
|
||||
printed so the arithmetic can be done by hand. That line and the pulse lengths
|
||||
above it are between them everything needed to add a format.
|
||||
|
||||
**`framed, but this model needs the same message twice`.** It was read
|
||||
correctly and arrived once. The two older models are only believed on a second
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue