Micron Document
Got a Cardputer

The cardputer arrived today. I flashed it with ratcom (a reticulum client) from the ratspeak.org website (there's a flasher located at Downloads).

After configuring the WiFi Settings I had to add a TCP interface through the WiFi menu. Kind of an odd place for it, but it has to live somewhere, I guess. Kudos to them for supporting more than one, the Sideband app only supports a single TCP bridge.

Another oddity with it: I had to reboot the device to get the TCP endpoint to work. It wouldn't show up on the network nor see others on the network without the reboot, despite it reporting everything was fine. On successive reflashes I discovered it actually instructs the user to reboot after making this change -- and the online docs say to as well.

The display is quite small and I had to turn the brightness down in order for my old eyes to be able to make out the text on it. At full brightness it soon blurs my vision and I can't read it. But looking away for a few minutes after lowering the brightness fixed that.

I'm going to see if I can build it from source and maybe get it to use a larger font.

│ Update: Ultimately I was able to make the font larger but I had to eliminate
│ the nearly-persistent banner at the top of the screen and shove the buttons
│ nearly off the bottom of the screen. But the end result is very visible and
│ very usable. I've ordered the LoRa expansion for it so I can use it in the
│ woods when I'm too far from WiFi. I'm wondering if I could modify it and
│ build it for the tlora pager. I expect the real devs will do it before I even
│ start, though.

Notes from my tinkering

The ramblings that follow are the notes I took while messing with the source, reflashing, and seeing what my changes did.


I cheated a little bit by using my meshtastic config to set up the environment. It uses platformio, and that's probably the only actual thing I needed from my meshtastic setup, so I'll have to try with just that later to see if it still works.

I'm not a frequent user of T383838pio so I entered an invalid environment name to get it to cough up the real one. The environment is T383838ratcom_915 so to build:

pio run -e ratcom_915

That dumps a T383838ratcom-merged.bin in the root of the project.

I think I can just do this:

esptool --port /dev/ttyACM0 write-flash 0x00 ./ratcom-merged.bin

I was doing this with anothrer device plugged in at T383838/dev/ttyUSB0.

It boots fine after flashing!

Though it forget all the settings from the last run.

Time to look at the fonts in source...

rg FONT_
src/ui/assets/BootLogo.h
4:// (Large font "RATSPEAK" + ".ORG" subtitle, no border lines needed)

src/ui/Theme.h
37:constexpr const lgfx::GFXfont* FONT_SMALL = nullptr; // Built-in 6x8

Hmm, that first second bit looks like how I've seen other embedded things set a font from a resource, so I probably need to look at that.

Looking a little closer:

// --- Font ---
constexpr const lgfx::GFXfont* FONT_SMALL = nullptr; // Built-in 6x8
constexpr int FONT_SIZE = 1;
constexpr int CHAR_W = 6;
constexpr int CHAR_H = 8;

So maybe I can replace that size, width, and height to whatever font I point T383838FONT_SMALL at?

Though that other file (the first grep result):

cat src/ui/assets/BootLogo.h
#pragma once

// Boot branding — rendering is now handled directly by BootScreen.cpp
// (Large font "RATSPEAK" + ".ORG" subtitle, no border lines needed)

Hmm, what's BootScreen.cpp have... looking at T383838nvim src/ui/screens/BootScreen.cpp I see something interesting:

// "RATSPEAK" in large text (size 2 = 12x16 chars)◀
canvas.setTextSize(2);◀
canvas.setTextColor(Theme::PRIMARY);◀
const char* title = "RATSPEAK";◀
int titleW = strlen(title) * 12; // size 2 = 12px wide◀
canvas.setCursor((Theme::SCREEN_W - titleW) / 2, 20);◀
canvas.print(title);◀
// ".ORG" in normal text below◀
canvas.setTextSize(Theme::FONT_SIZE);◀
canvas.setTextColor(Theme::SECONDARY);◀
const char* subtitle = ".ORG";◀
int subW = strlen(subtitle) * Theme::CHAR_W;◀
canvas.setCursor((Theme::SCREEN_W - subW) / 2, 40);◀
canvas.print(subtitle);◀

Oh, wait, do I not need to do anything other than pick a better T383838FONT_SIZE?

I opened up T383838src/ui/Theme.h and found the line with T383838FONT_SIZE = 1 and boldly changed it to a T3838383.

The rebuild was fine. Flashing worked fine.

The boot screen looked a little off. And then all the menus were crazy big text beginning at the wrong line offset. They overlap eachother at the original text borders.

Some dialogs are fixed to font size 1 still, but most elements are super big.

Pushing that down to a two... rebuild & flash and of course the sizes are still wrong. I naively calculate the T383838CHAR_W and T383838CHAR_H off the T383838FONT_SIZE and those starting values. The code probably doesn't account for line wrapping and probably positions everything absolutely.

The dialog for entering the display name overlaps the wrapped line for the input text and the text input. The settings menu draws fine, but anything that causes line wrap is over-written by anything calculated to land beneath it.

It is, however, fairly usable this way.

Save my changes to a new branch, switch back to main, rebuild & reflash for comparison.

• Pick lists or menus do the right thing.
• TCP connections end up scrolling off the screen or perhaps being clipped on the next line, not sure
• The message screen does the right thing with reflowing incoming/outgoing messages
• The message screen does not do the right thing with the input box

I found a few more places where heights are calculated and I've put in some conditional logic to pretty much eliminate a few UI elements when the font is largyer than size 1.

Tags: mesh, index, reticulum

Tags
Navigation





created: 2026-04-13

(re)generated: 2026-07-17