{% extends "base.html" %} {% block main %} {% set latest = load_data(url=config.extra.api ~ "/releases/latest", format="json", required=false) %} {% set apps = load_data(path="data/apps.toml", format="toml") %} {% set screens = load_data(path="data/screens.toml", format="toml") %} {% set px = [0,1,1,1,0, 1,0,0,0,1, 1,0,0,0,1, 0,1,1,1,1, 0,0,0,0,1, 0,0,0,0,1, 0,1,1,1,0] %}
Open firmware · GPL-3.0{% if latest %} · {{ latest.tag_name }}{% endif %}

Open firmware for a pocket computer.

roro9stack is firmware for the M5Stack Cardputer ADV with the Cap LoRa-1262: a LoRa scanner that reads Meshtastic and MeshCore traffic, GNSS with a compass, an SSH client, a Gemini browser, IRC, Wi-Fi tools, notes, games and more.

  • GPL-3.0
  • Docker-only build
  • Signed updates
{% include "illustrations/sweep.html" %}
{% include "illustrations/sky.html" %}

Drawings of the LoRa Scanner's Sweep view and the GNSS sky view, not screenshots: the real screens are further down.

Where it stands

Early software{% if latest %}, {{ latest.tag_name }}{% endif %}. The radio listens; it doesn't transmit yet. Sending and reading mesh messages is planned and waits for a second node to test with. The milestones show what's done and what's next.

Before you start

What you need.

What's inside

Apps for the radio, the network, the card and the evening.

{% for a in apps.app %}{% if a.featured %} {% endif %}{% endfor %}

All {{ apps.app | length - 1 }} Apps, with their screens

Also on every screen: a key that lists the keys, and a key that takes a screenshot. Every App has a page in the user guide.

On the device

The real screens.

{% for s in screens.screen %}
{{ s.alt }}
{{ s.caption }}
{% endfor %}
Updates

Update over Wi-Fi. It rolls back if it fails.

Install a new release from the project's server in Settings, from the SD card, or push one from your computer. Every update is signed: the device checks the signature before it writes anything, restarts, and runs the new firmware on Probation. If it crashes, or can't reconnect Wi-Fi, it goes back to the previous firmware and says so.

$ scripts/flash.sh --ota 10.39.39.12
60 s

The longest the device waits for you to stop typing before it restarts into an update.

3 min

How long new firmware has to reconnect Wi-Fi on Probation before it rolls back.

3

Crash restarts in a row, and it starts in Safe Mode: only Wi-Fi, updates and the Debug Console, so a fix can still be pushed.

Build and flash

Only Docker needed.

PlatformIO and the ESP32 toolchain run in a container. The first build downloads about 1 GB; after that, builds take under a minute.

If the upload can't connect, hold G0, the button next to the screen, while plugging in USB, then retry.

Prefer a ready-made build? Install it from your browser, or take the factory image and the signed update file from the downloads.

# run the tests, then build
$ scripts/ci.sh
# flash over USB-C
$ scripts/flash.sh
# or update over Wi-Fi
$ scripts/flash.sh --ota 10.39.39.12

Open source, GPL-3.0.

Read the code, flash it, send a patch.

{% endblock main %}