mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-11-01 18:31:58 +00:00
- CMD_GET_SCREENSHOT on colour screens: display type 2 (RGB565 LE), 32-bit payload size; ui-lvgl captureFrame() shared with the SD BMP - ENABLE_SCREENSHOT in the L2 build; tools/screenshot.py decodes type 2 - docs and READMEs point to solo.marekzegarek.com/#pc-tools - USB popup: "Keep card" instead of "Charge only" (only the card is lent; charging and USB serial work either way) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
95 lines
3.1 KiB
Markdown
95 lines
3.1 KiB
Markdown
# Host-side tools
|
||
|
||
Helper scripts that run on your computer, not on the device.
|
||
|
||
| Tool | Purpose |
|
||
| ---- | ------- |
|
||
| `screenshot.py` | capture the device display over USB serial and save it as a PNG |
|
||
| `trail_export.py` | capture a GPX track from the device over USB serial |
|
||
| `gpx-downloader/index.html` | the same GPX capture in a browser, via Web Serial |
|
||
| `bdf2gfx.py` | convert a BDF bitmap font to an Adafruit-GFX header |
|
||
|
||
Python dependencies are managed with [uv](https://docs.astral.sh/uv/) — run the
|
||
scripts with `uv run tools/<script>.py` from the repository root.
|
||
|
||
> [!TIP]
|
||
> The [USB tools on the Solo site](https://solo.marekzegarek.com/#pc-tools) do both screenshots and GPX
|
||
> export with nothing to install (Chrome or Edge), and are the easiest option
|
||
> for most people. The scripts here are the offline equivalents.
|
||
|
||
> [!IMPORTANT]
|
||
> USB serial is suspended while a BLE connection is active, so disconnect the
|
||
> companion app from BLE before using any of these. If the app is connected over
|
||
> USB, disconnect it too — the raw stream would otherwise disrupt its frame
|
||
> protocol.
|
||
|
||
---
|
||
|
||
## Display screenshot
|
||
|
||
All solo firmware environments are built with `-D ENABLE_SCREENSHOT`, so no
|
||
special build is needed. On other environments (repeater, room server, the
|
||
non-solo companion builds) add the flag yourself:
|
||
|
||
```sh
|
||
PLATFORMIO_BUILD_FLAGS="-D ENABLE_SCREENSHOT" pio run -e <env> -t upload
|
||
```
|
||
|
||
**Usage:**
|
||
|
||
1. Connect the device over USB, with no companion app attached
|
||
2. Run the tool:
|
||
|
||
```sh
|
||
uv run tools/screenshot.py
|
||
```
|
||
|
||
Options:
|
||
- `--port PORT` — serial port to use (default: auto-detect)
|
||
- `--scale SCALE` — upscale factor for the output image (1 = none; default: 1)
|
||
|
||
3. Press **S** in the tool's interactive menu to capture
|
||
4. The PNG lands in `tools/pngs/` with a timestamped filename
|
||
|
||
**How it works:**
|
||
|
||
- The tool sends `CMD_GET_SCREENSHOT` (66) to the device
|
||
- The device replies with `RESP_CODE_SCREENSHOT` (29) carrying the framebuffer
|
||
- The framebuffer arrives in chunks (a 128 × 64 display is 1024 bytes, split
|
||
across several frames), which the tool reassembles into a PNG
|
||
- A colour screen (Wio Tracker L2) sends a freshly rendered frame as RGB565
|
||
(display type 2): 320 × 240 is 150 KB, about a second over USB
|
||
|
||
---
|
||
|
||
## GPX trail export
|
||
|
||
1. Connect the device over USB, with no companion app attached
|
||
2. Start the listener:
|
||
|
||
```sh
|
||
uv run tools/trail_export.py
|
||
```
|
||
|
||
Options:
|
||
- `--port PORT` — serial port to use (default: auto-detect)
|
||
- `--out OUT` — output file (default: a timestamped file in `tools/gpx/`)
|
||
|
||
3. On the device: **Tools › Trail › Hold Enter › Export (live)** or
|
||
**Export (saved)**
|
||
4. The script captures the GPX 1.1 XML stream and writes it to disk
|
||
|
||
---
|
||
|
||
## Font conversion
|
||
|
||
```sh
|
||
uv run tools/bdf2gfx.py <font.bdf> <first_hex> <last_hex> <VarPrefix> > out.h
|
||
```
|
||
|
||
Emits a contiguous glyph table over the given codepoint range, with empty
|
||
placeholders for codepoints the BDF does not define, so the renderer can index
|
||
by `cp - first`. This is how [`src/helpers/ui/MiscFixedFont.h`](../src/helpers/ui/MiscFixedFont.h)
|
||
— the unified 6×9 Latin/Greek/Cyrillic display font — was generated from
|
||
`6x9.bdf`.
|