Skip to content

Draw the RAK4631's SSD1306 under Renode, the last board whose panel is not modelled #602

Description

@A13xB0

The two SPI panels are done: a Heltec T114 and a T096 draw under Renode, on
the controller the boards actually use (the Arduino core's SPI1, not the
radio's). Verified on a T114 booting its published image - "Please wait..."
at boot, then the repeater's own status screen.

The RAK4631 is the one left, and it is a different problem rather than a
smaller one. Its SSD1306 is on I2C, and NRF52840_TWIM in
tools/renode/peripherals/ has no notion of a slave at all: it answers every
address with a NACK, deliberately, because until now no board under Renode had
anything on that bus and firmware probing an empty bus has to get an answer
rather than hang.

What is needed

  1. A slave registry on the TWIM. Address in, bytes in and out, NACK for
    an address nobody claims - which has to stay the default, because that
    behaviour is what stops a firmware probing for a sensor from spinning.
  2. An SSD1306 model behind it: 128x64, one bit a pixel, page-addressed.
    The frame it sends is the same shape the two colour panels send, and the
    Go side already reads it (peripheral.PanelListener, bpp: 1).

Already in place

  • peripheral.ListenPanelTCP - the loopback frame channel Renode can dial.
  • MeshBenchPanel.cs - the frame header and sender, and the "nothing drawn is
    not black" rule, which an SSD1306 model can follow rather than reinvent.
  • engine.ScreenModelled - the one rule that decides whether the window says
    a panel is drawn or says the gap is ours. It already excludes exactly this
    case, so the window is honest about it today.

Not this

Do not settle for drawing something plausible. A panel showing a picture the
firmware did not draw is worse than an empty frame that says why it is empty.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions