Skip to content

fix(kgui,tools): What the end-of-line station needed: icon memory, --discover, and NFC and RFID writes that prove themselves - #70

Open
luismiKode wants to merge 7 commits into
developfrom
fix/station-icons-and-discover
Open

luismiKode wants to merge 7 commits into
developfrom
fix/station-icons-and-discover

Conversation

@luismiKode

@luismiKode luismiKode commented Nov 13, 2026 •

Copy link
Copy Markdown

Three fixes from tonight's runs of the end-of-line station (E5) with a DVT in the fixture, and the SDK branch that carries four more.

fix(kgui): Take an icon's PSRAM when its row first has an icon

The launcher took its 128 icon slots at start: 6 MB of PSRAM held for good since the icons went to 128 px, where it was 1.5 MB. The station's camera part takes 18 MB when it wakes and the OV5640 another 4.9 MB for its frame buffers; on a fresh boot 4.82 MB were left, the camera never opened ("no PSRAM for 3 frame buffers"), the placement ended as a badly seated Kode and the memory row failed. A slot is now taken the first time an icon is written to its row, and kept; a row whose slot cannot be had draws the apps glyph, as before.

On the board: 27.3 MB free at rest where there were 23.0, 9.2 MB after the station's wake where there were 4.82; placement and the six camera and LED rows PASS. The launcher with four apps installed shows their icons (an app with no icon of its own keeps its letters); two captures of it are with the station's validation notes. There is no capture of the same board before the change.

fix(tools): Wait for the C5's link before the station's --discover sweep

--discover asked for the C5 as soon as the port opened, which resets the board, and found it not linked yet: radio ok=0 why=link and no channels. It waits for the link first: radio ok=1 seen24=1 seen5=1 with the channels written.

fix(tools): Make the station's NFC and RFID steps prove a write of this run, and count NFC

The RFID step wrote the ID made from the MAC and passed when what it read was what it wrote: the same Kode back at the station finds its ID already on the tag and passes with a dead write. The Kode's own match=yes was printed and not used, and with an unreadable MAC any ID passed. The NFC step wrote the serial the Kode's own row had just left on the tag. Both steps now write something else first (the ID with its bytes reversed; "KODE E5") and then what counts; RFID asks for match=yes on both writes, with one retry a write; an unreadable MAC is a FAIL; and NFC is no longer optional.

The bench operator presses at most one wrong button a pass (it could press three and fail a good board).

fix(tools): Hold the station's NFC and RFID steps until both of the Kode's rows are in

With the two writes in, the PC's NFC step failed 3 passes of 11 when it ran beside the operator's rows. It was not the buttons: the step started as soon as the Kode's own NFC row answered, and the Kode was then running its RFID row, with the 125 kHz carrier up on an antenna that sits beside the NFC one. The PC's two steps now wait until both of the Kode's rows are in, and run beside the operator's rows again: 20 passes with the writes on and no failure of either.

chore(sdk): the RFID decoder, injected buttons and touch, the sd row, the C5 card's bus, the mag row and the NFC reader's SPI

The pointer is on kode-sdk's fix/station-rfid-and-inject (kodediy/kode-sdk#127), at 10ca19d. It has to move to develop's commit once that one is merged; #66 moves the same pointer to e446c67, which this branch sits on.

What was run

  • The build with its four checks: size (7 % of the slot left, the warning develop already gives), internal RAM 409 356 of 417 000, starts, MISRA with none past the baseline.
  • tools/factory's own tests with the change (test_factory.py, test_dot_parallel.py).
  • tools/tool_tests.sh: all but test_kble.py, which fails on this Mac for macOS's Bluetooth permission and is not touched here.
  • On a DVT in the E5 fixture, the station's programme with --operator-sim and the NFC and RFID writes on. With this branch's binary (sha256 4e232fcd…a971): 20 of 20 passes with all 29 rows PASS, 27 to 31 s, with the PC's NFC and RFID steps beside the operator's rows. Earlier in the night, with the commits up to the NFC and RFID writes: 3 of 3 passes; and with the first two only: 45 passes in which the faults they fix did not come back. Not run in any of them: the four pad rows (charge, delivery, GND, data loop).

🤖 Generated with Claude Code

https://claude.ai/code/session_01UAYt4sNGU1gkMrcPpLheZ3

luismiKode and others added 3 commits November 13, 2026 19:27
The launcher took its 128 icon slots at start. At 48 KB a slot since the
icons went to 128 px that is 6 MB of PSRAM held for good by a board that
may have three apps, where it was 1.5 MB. The final station's camera
part takes 18 MB when it wakes and the OV5640 another 4.9 MB for its
three frame buffers: on a fresh boot 4.82 MB were left, the camera never
opened ("no PSRAM for 3 frame buffers"), the placement ended as a badly
seated Kode and the memory row failed on the refused allocations.

A slot is now taken the first time an icon is written to its row, and
kept. A row whose slot cannot be had draws the apps glyph, as before.
With it the same board has 27.3 MB free at rest and 9.2 MB after the
station's wake, and the camera opens.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UAYt4seiRecKrhvsophR8u
test_dot_final.py --discover opens the port, which resets the board,
and asked for the radio sweep at once. The C5 takes a few seconds to
link after a reset, so the sweep ended immediately with why=link and no
channel was ever written to the station's settings. The sweep now waits
for info to show the C5 recognised, 15 s at most.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UAYt4seiRecKrhvsophR8u
The end-of-line station's RFID row failed with its disc in the nest, and
its buttons and touch rows could not be run with nobody at the station.
Both are the SDK's: kode-sdk fix/station-rfid-and-inject (f82bf0a), to be
merged there first. The pointer is on that branch and moves to develop's
commit once it is in.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UAYt4sNGU1gkMrcPpLheZ3
@github-actions

github-actions Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

kodeOS build

Check Result
Image size kodeos.bin 3872768 of 4194304 bytes, 321536 left (7%)
Internal RAM kodeos.elf 35 statics of 2048 bytes or more in internal RAM, all listed
Starts starts: 23 Active Objects and 6 door set-ups, each beside what it starts
MISRA MISRA: 1823 findings in 187 files, none past the baseline
::warning::kodeos.bin is within 10% of its ceiling (321536 bytes, 7% left of 4194304)

luismiKode and others added 2 commits November 13, 2026 21:49
…is run, and count NFC

The RFID step wrote an ID made from the Kode's MAC and passed when the
tag read it back. The same Kode back at the station found its ID already
on the tag, so the step passed with the write path dead; the Kode's own
check of its clone was only printed. The NFC step wrote the serial the
Kode's own row had just left on the tag, and its result did not count:
NFC was optional, and a Kode with a dead reader left the station passed.

Both steps now write something else first and then what counts, and need
every write taken (RFID: read back by the Kode, with one more try for a
clone it could not read back, which happens about once in thirty on the
bench). A Kode whose MAC cannot be read fails RFID where it used to pass
on any well-formed ID. NFC decides the verdict like every other step.

The template leaves NFC and RFID out of what runs beside the operator:
written while the buttons and touch steps ran, NFC failed in two runs of
five; after the operator, in none of twenty-four. It costs about three
seconds a Kode until the cause is found.

The bench operator draws one wrong button a run at most: it could draw
a third and fail a good Kode by itself.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UAYt4seiRecKrhvsophR8u
The station's sd row passed a board whose slot cannot write, and its radio
card passed a link on one data line. Both are the SDK's: kode-sdk
fix/station-rfid-and-inject, now at fae2d93. The pointer stays on that
branch and moves to develop's commit once it is in.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UAYt4sNGU1gkMrcPpLheZ3
@luismiKode luismiKode changed the title fix(kgui,tools): What the end-of-line station needed: the launcher's icon memory and --discover fix(kgui,tools): What the end-of-line station needed: icon memory, --discover, and NFC and RFID writes that prove themselves Nov 13, 2026
luismiKode and others added 2 commits November 14, 2026 01:32
…ode's rows are in

The PC's NFC step started as soon as the Kode's NFC row came back with
the lane free. The Kode's RFID row follows its NFC row at once, with its
125 kHz carrier on beside the same tag, and an nfc_write sent into it
answered "opened, but carries no NDEF message" or found no tag: three
runs in eleven on the bench. The two steps now wait for both rows.

With that they go back beside the operator in the template, where they
had been taken out of for this: twenty runs with them there and not a
failure, at 27 to 30 s a run where after the operator it was 29 to 33.

The bench operator is also served between the exchanges of the two
steps: a release held back three seconds by them read as a stuck button.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UAYt4seiRecKrhvsophR8u
… DMA

The station's reader stopped seeing its tag for the rest of a boot about
one boot in ten, and lost single windows in between: a read over DMA from
PSRAM could hold what the chip never sent. The mag row passed on an
identity and one conversion. Both are the SDK's: kode-sdk
fix/station-rfid-and-inject, now at 10ca19d. The pointer stays on that
branch and moves to develop's commit once it is in.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UAYt4sNGU1gkMrcPpLheZ3

This branch has not been deployed

No deployments
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