Skip to content

Initial Release

Choose a tag to compare

@genemichael genemichael released this 26 Jul 01:37
· 11 commits to hybrid-phone since this release
c4f5620

Gemini hybrid phone — portable flash bundle

Flash a LilyGo T-Deck Plus from any machine (Raspberry Pi, laptop)
with no source repo. Built 2026-07-24 from branch hybrid-phone (v0.2.8-4-gc0b7b30,
reproducible from that commit). Chip: ESP32-S3, 16MB flash.

What's here

File What it is Flash offset
gemini-release.bin Handout build. No serial debug harness. Apps embedded in firmware, self-extract on first boot. Each device generates its own identity. 0x0 (single file)
gemini-test.bin Dev/support build. Full T: serial harness (state, calls, identity export/import, file-push). Includes filesystem. 0x0 (single file)
flash.sh One-command wrapper. —

Both are merged single-file images — everything (bootloader,
partition table, firmware, and for test the filesystem) is inside one
.bin flashed at offset 0x0. No offset juggling.

One-time setup on the Pi / Linux

python3 -m pip install --user esptool        # or: sudo apt install esptool
sudo usermod -aG dialout "$USER"             # serial access; then log out/in

Find the port after plugging the device in (USB-C, powered on):

ls /dev/ttyACM* /dev/ttyUSB* 2>/dev/null      # Linux/Pi — usually ttyACM0
# (macOS: ls /dev/cu.usbmodem*)

Flash

chmod +x flash.sh          # first time only
./flash.sh release /dev/ttyACM0     # handout device
./flash.sh test    /dev/ttyACM0     # your own device (with debug harness)

release erases the chip first (clean, identity-free), then flashes;
first boot unpacks apps for a few minutes (don't power off), then
generates fresh RNS + MeshCore identities. Configure over the on-screen
UI (Wireless app for WiFi, Settings > Names).

test flashes directly (its image carries the filesystem).

Manual command (if you skip the script)

python3 -m esptool --chip esp32s3 --port /dev/ttyACM0 --baud 460800 \
    write_flash 0x0 gemini-release.bin

For a handout device, run ... erase_flash first. Newer esptool (v5+)
prefers write-flash/erase-flash (hyphens) but still accepts the
underscore forms with a warning.

Notes

  • release has no T: serial commands — no way to export/import an
    identity or push Lua over serial. That's deliberate (a handout device
    shouldn't leak its private key over USB). Updating it means reflashing.
  • test exposes the identity over serial (T:IDEXPORT). Fine for
    your own devices; do not hand one out expecting the key to be private.
  • If flashing fails to connect, hold BOOT, tap RST, release BOOT
    to force download mode, then retry.
  • These images do not include your identity or WiFi — each device
    starts fresh. To migrate a specific RNS identity onto a test device,
    use T:IDEXPORT on the source and T:IDIMPORT <hex> on the target
    over a serial monitor (115200 baud), then reboot.

What's new in the 2026-07-24 images

  • WiFi modem sleep disabled (reliable RNS traffic; BLE is force-locked
    OFF to keep this legal — toggle visible but disabled in Settings).

  • AutoInterface: link-local rebind fix (no more permanent errno=118
    wedge) + T:AUTO on|off (test build) to disable it entirely on
    congested networks. Default remains ON for fresh devices.

  • TCP interface: INFO-level logging (failures are now visible),
    forced reconnect on host/port resave.

  • RNS identity tools (test build): T:IDEXPORT / T:IDIMPORT /
    T:IDNEW. EXPORT AND SAVE THE KEY on every new device — an
    accidental erase_flash otherwise loses the persona permanently.

  • Settings > RNS now has an AutoInterface on/off toggle (all builds),
    so release devices on congested networks can go TCP-only from the
    UI. Reboot to apply.