No description
  • Rust 85.5%
  • Python 6.8%
  • C 3.6%
  • Nix 1.6%
  • Shell 1.2%
  • Other 1.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Daniel Flanagan 41860b155e chore(license): label the shell's harvested mecha-wayland crates and Lucide icons
The default mapping labelled everything under software/pinephone-shell
GPL-3.0-or-later, including code and art that is not ours:

- the 13 crates harvested from mecha-wayland and modified in place
  (software/pinephone-shell/NOTICE lists them): BSD-3-Clause, Mecha
  Systems. Our modifications stay under the upstream licence rather
  than relicensing the files; the shell's own crates beside them keep
  GPL-3.0-or-later.
- assets/icons: Lucide (atlas.toml says so), ISC with MIT for the
  Feather-derived icons, per lucide-icons/lucide LICENSE.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TpP3mMquPhtgUE612DFiEx
2026-10-02 13:52:56 -05:00
docs Merge branch 'pinephone-shell' 2026-10-02 13:51:14 -05:00
firmware Merge branch 'bench-and-decisions-2026-10' 2026-10-02 13:51:13 -05:00
hardware fix(pcb): keeb-test ready to order -- KiCad 9 layer IDs, clean DRC 2026-10-02 12:09:34 -05:00
LICENSES chore(license): label the shell's harvested mecha-wayland crates and Lucide icons 2026-10-02 13:52:56 -05:00
os chore(os): SPDX headers on the snowflake and the kernel patch 2026-10-02 13:51:14 -05:00
reference/mecha-comet docs(compute): SoC decision research and bench plans 2026-10-02 12:09:34 -05:00
reports fix(pcb,reports): consistency corrections — mini-PCIe RI is 3.3V, SoCs are USB-2-only 2026-07-13 23:35:42 -05:00
software/pinephone-shell fix(shell): the keyboard's exclusive zone is its height, not height plus margin 2026-08-19 16:59:06 -05:00
tools fix: no real phone numbers or device serials in tests and bench scripts 2026-10-02 13:51:14 -05:00
.gitignore fix(pcb): keeb-test ready to order -- KiCad 9 layer IDs, clean DRC 2026-10-02 12:09:34 -05:00
.pre-commit-config.yaml feat+docs: supervisor v0 LIVE on Pico 2 W; SSH-able-suspend + tethering modes budgeted 2026-07-13 11:38:37 -05:00
README.md chore(license): CERN-OHL-S-2.0 hardware, GPL-3.0+ code, CC-BY-SA-4.0 prose 2026-10-02 11:23:09 -05:00
REUSE.toml chore(license): label the shell's harvested mecha-wayland crates and Lucide icons 2026-10-02 13:52:56 -05:00
ROADMAP.md docs(compute): SoC decision research and bench plans 2026-10-02 12:09:34 -05:00

Cyberdeck: pocket phone-replacement — research synthesis

Date: 2026-07-12 · Status: research phase complete, direction proposed Full evidence: seven citation-heavy research reports in reports/ — this document is the synthesis; every claim here is sourced in a report.

TL;DR

  • Nothing off-the-shelf meets the hard requirements. Every shipping Linux keyboard device is a 3–5 h session machine with no working suspend; every multi-day-standby device lacks a keyboard or lacks Linux. (devices report)
  • The architecture that works is proven end-to-end, just never shipped in one box: a tiny always-on supervisor (MCU or on-die coprocessor) owns power/modem-wake/ notifications at milliwatts, while a Linux SoC sleeps in suspend-to-RAM and resumes in ~0.45 s on demand. Snapdragon W5+ ships this two-chip pattern commercially; MNT Pocket Reform, Precursor, and Chromebook ECs prove every layer in the open. (coprocessor report)
  • Voice is solvable but prescriptive: US voice = VoLTE only, carriers gate by IMEI. The way through is a pre-certified cellular module that terminates VoLTE internally (Quectel EG25-G — the PinePhone modem, proven on T-Mobile/MVNOs — or SIMCom A7670-class). Never expect mainline Linux to do IMS; it can't in 2026. T-Mobile (Daniel's current carrier) is the friendliest. Escape hatch: data-only
  • Compute is decided by suspend power, and only two chips clear the bar with headroom: TI AM62x (~1 mW deep sleep, on-die Cortex-M4F always-on domain) and NXP i.MX93 (7.6 mW documented, on-die Cortex-M33). RISC-V, x86, and Raspberry Pi are all eliminated by 5–30×. RK3588-class is the convergence tier (only clean mainline USB-C DP-altmode) but cannot sleep. (soc-landscape, edge-silicon)
  • Recommended path: staged build (proposed phases below), starting with a ~$100 proof of the two riskiest assumptions (VoLTE on our SIM through an EG25-G; SoC deep sleep + modem-ring wake), on a SoM-based carrier board so compute stays upgradeable (Framework-esque).

Product identity (Daniel, 2026-07-13)

A ThinkPad-utility that happens to fit in the pocket: remote terminal, hacker/workbench tool, and communications device. Explicitly NOT an entertainment slab — avoiding the doom-scroll is a feature, not a gap. Design consequences: keyboard-first, open-to-terminal-in-a-second is the hero interaction; the outer strip handles glances so the main screen never becomes a feed; folded-phone mode is occasional utility (QR, maps, a call), not a couch posture, so its 38 mm chunk is acceptable; terminal excellence outranks browser comfort in every tradeoff (RAM, GPU, panel choices).

Requirements & decisions

Hard: physical keyboard · pocket brick (thick OK, no dangly bits) · 1–2 day light-use battery · SIM with calls/SMS/data · notifications · basic GPS · audio media · BT · QR-grade camera · heavy SSH · durable printed shell · encryption at rest · remote nuke · hackable firmware. Nice: convergence dock · touchscreen · GPIO/LoRa/Meshtastic · blob-free.

Decisions captured 2026-07-11/12:

  • Voice: no dogma — "whatever can be made to work"; willing to switch carriers (≤$50/mo, month-long high-quality audio streaming must be viable).
  • Build path: off-the-shelf would be a win if it truly existed (it doesn't — see verdict table); otherwise staged toward custom.
  • Convergence: not required; investigate both paths, decide on data.
  • Budget: ~$2k if it actually comes to life; modular/upgradeable strongly preferred.
  • Battery: chunky is fine — thick pack, possibly multi-cell, silicon-carbon if obtainable.

The physics

The device is screen-off ~95% of the time, so standby draw dominates. Average power allowed for 48 h:

Pack 48 h average budget Notes
20 Wh 417 mW large-phone class (~5,400 mAh @ 3.7 V)
30 Wh 625 mW thick brick, still pocketable
40 Wh 833 mW "chunky is fine" tier; 2× 21700 ≈ 37 Wh already

Realistic daily energy = standby (46 h × standby-mW) + active (~1.5–2 h × 2–4 W). With a sleeping SoC at ≤10 mW + modem idle at ~10–50 mW, even a 20 Wh pack gives multiple days; at i.MX8MP-class ~150 mW suspend a 30–40 Wh pack still clears 2 days. What never clears it: anything that must stay idle-not-suspended (0.4–5 W).

Battery notes: silicon-carbon cells (the 2024–26 phone-density jump) are worth sourcing but availability in maker-friendly pouch formats needs verification — treat as a Phase-2 sourcing task, not a plan dependency. Multi-cell is fine if done as parallel same-model cells behind one proper charger/fuel-gauge (BQ25895 + BQ27427, or AXP2101); the PinePhone keyboard case is the cautionary tale for ad-hoc two-battery charging (see linux-phones report). uConsole's protected-18650 brownouts under LTE TX spikes are the other lesson: budget the modem's burst current.

The four hard walls (and how each is passed)

1. VoLTE + carrier certification

US 2G/3G are gone (T-Mobile's last 2G dies 2026-08-03); voice = VoLTE-over-IMS only, and carriers whitelist by IMEI/TAC. Mainline Linux cannot do IMS (81voltd is a PoC; pmOS was still fixing call audio routing in 2025). Pass: use a standalone module whose own baseband terminates VoLTE and carries a pre-certified IMEI — EG25-G is field-proven on T-Mobile/MVNOs via PinePhone; SIM7670G is on Verizon's approved-module list. Target T-Mobile first; AT&T/Verizon are strict. Fallback: data-only module + number ported to VoIP (JMP.chat-style). Details + citations: mcu-cellular §2/§c, linux-phones lesson 1.

2. Standby power is a software problem

Good silicon numbers ≠ working suspend: MNT Pocket Reform's i.MX8MP suspend is still broken/regressed in mainline; uConsole's CM4 has no true sleep at all. The suspend-to-RAM + wake path must be treated as a first-class engineering deliverable, not an assumed feature. Pass: pick the SoCs whose deep sleep is documented and measured (AM62x ~1 mW, i.MX93 7.6 mW), and prototype modem-RI → supervisor GPIO → PMIC → S2R-resume before designing anything else. Also: disable modem ADB (10→50 mW suspend penalty). Details: soc-landscape §1/§6, coprocessor §3, linux-phones lesson 2.

3. Nothing off-the-shelf does it

See verdict table below. The pragmatic community shortcut (reshell a real phone + keyboard) inherits cellular/battery/encryption for free but fails hackability and the no-Android goals. Details: devices report.

4. The blob ceiling

The baseband cannot be opened — even biktorgj's EG25-G firmware opens only modem userspace (and is minimally maintained since 2024-05). Pass: isolation, not liberation — modem on USB (no DMA), AT/QMI only, hardware kill switch, host-side firewall. SoC blob audit: Allwinner A64 cleanest (but slow), RK3588 cleanest-per-performance (one DDR blob), AM62x carries two TI firmware blobs, i.MX8M's HDMI blob is permanently unreplaceable (avoid HDMI; use MIPI-DSI). Nordic BLE is now fully open. WiFi: only ath9k_htc (USB, 2.4 GHz-n) is source-open; modern WiFi = host-loaded blob, accept it. Details: security report §2/§3/§7.

What survives the filter

Role Primary pick Alternate Rationale
Linux SoC TI AM62x SoM (quad-A53 + M4F AON) NXP i.MX93 SoM (dual-A55 + M33); TI AM62L (2025, <5 mW, no M4F) Only chips with ≤10 mW documented deep sleep; castellated SoMs (Verdin/Variscite/phyCORE) — no BGA. BeaglePlay = test vehicle only, NOT the deck's compute
Modem Quectel EG25-G (mini-PCIe, VoLTE proven on T-Mo, biktorgj fw, PinePhone ecosystem) SIMCom A7670/SIM7670G (Cat-1bis, cheaper, lower idle) Pre-certified IMEI, internal IMS, PCM audio out, RI wake line
Supervisor RP2040 or nRF5340 running Zephyr (or cros-ec/MNT fork) on-die M4F/M33 only (Architecture C) Owns PMIC, keyboard matrix, modem RI, RTC, notification state
Always-on display Sharp Memory LCD strip (~15 µW static) none (blank-when-asleep) Smartwatch trick: time/notifs without waking Linux
Main display DXQ 3.92" AMOLED 1080×1240 @90 Hz, 450 nits, MIPI-DSI touch (piBrick's panel; dark theme = power scales with lit pixels) 4" 720×720 TFT (HackberryPi's) MIPI-DSI avoids the i.MX HDMI blob entirely; ≥450 nits requirement
Keyboard Solder Party KeebDeck family: raw keypad ($1.77, in stock) scanned by our supervisor; assembled KeebDeck Basic when restocked Bench: ZitaoTech P9981 Pro (USB HID + trackpad, in stock); raw BB Q20 flex (22-pin, trackpad) BBQ20KBD is OOS everywhere/retired; KeebDeck = Solder Party's in-house successor, no salvage dependency (see docs/bom.md)
Audio ES8311 codec (+ ES7210 mics) + ESP-SR/soft AEC; modem PCM for calls — AEC is non-negotiable for speakerphone
GPS modem's integrated GNSS first; u-blox MAX-M10S (<25 mW) if standalone ATGM336H (cheap) duty-cycled by supervisor
LoRa SX1262 module (uMesh-style internal bay) — Meshtastic; nice-to-have bay, not core
Security LUKS2 aes-xts (ARMv8 AES) + SE050/ATECC608 two-secret unlock + duress PIN + Ed25519-signed remote nuke over SMS + escrowed header — security report's reference design; avoid CAAM/hw-XTS traps
OS postmarketOS (best FDE story) or mobile-nixos (hand-rolled encrypted image; fits NixOS-everywhere) custom Zephyr on supervisor side regardless supervisor firmware: Zephyr (ZSWatch/InfiniTime patterns to steal)

Reference architectures

From the coprocessor report (full mechanisms + citations there):

  • A — "Supervisor + Suspend" (fast, safe): RP2040-class supervisor + AM62x/i.MX93 in S2R (~1–10 mW) + modem-RI wake. One display; screen blank while asleep. Ships the soonest; this is MNT Pocket Reform tuned for battery.
  • B — "Watch-computer + Deck" (the dream): nRF5340 always-on computer with its own memory-LCD strip owning modem/BLE/notifications/call UI at single-digit mW, plus a gated Linux module for terminal/convergence. Multi-day standby with a live status display. Highest integration cost (two firmware stacks, sync protocol, antenna coex).
  • C — "SoC-with-integrated-SCP" (fewest chips): lean entirely on the AM62x M4F / i.MX93 M33 always-on domain; no external MCU. Least hardware, but bound to that SoC's suspend quality and the on-die core usually can't drive an always-on display.

Proposed trajectory: start C-flavored-A, evolve toward B. Phase 1 validates deep sleep + RI-wake using the on-die core (C); the custom carrier adds an external supervisor + memory-LCD strip (A→B) since we'll want a PMIC/keyboard owner anyway. Convergence: don't chase DP-altmode in v1 — it demands RK3588-class silicon that can't sleep. The SoM socket keeps the door open (RK3688 modules in 2027, or a "dock brain" later); interim convergence = SSH/waypipe into the deck from any screen.

Off-the-shelf verdict

Device Ships? Pocket Kbd Cellular 2-day batt Linux Verdict
Mecha Comet ~Oct'26 ✅ 225 g ✅ QMK ✅ M.2+SIM ⚠️ claimed 7-day susp, unproven (i.MX8MP!) ✅ new Watch closely; closest intent-match
Furi FLX1s ✅ $550 ✅ slab ❌ ✅ VoLTE T-Mo, measured 3.9–7.2-day standby, SSH-alive ✅ ✅ Debian/Halium Best reference design; no keyboard
piBrick PocketCM5 ✅ $240 kit ✅ ✅ BBQ20 ❌ ❌ CM5 no suspend ✅ Best form-factor donor/chassis lessons
HackberryPi CM5 ✅ $168 ⚠️ 306 g ✅ ❌ ❌ 3–4 h ✅ Best buy-today kbd brick; wrong compute
uConsole ⚠️ made-to-order ❌ slab ✅ ⚠️ data-only, brownouts ❌ ✅ LTE-bay + swap-cell engineering reference
Unihertz Titan 2 ✅ ~$400 ✅ ✅ ✅ (Android) ✅ ❌ Android/Termux Pragmatic interim daily-driver option
MNT Pocket Reform ✅ €1099 ❌ 1.1 kg ✅✅ ⚠️ M.2 ⚠️ ~7–10 h ✅✅ Gold-standard open supervisor design to copy
Precursor ✅ ~$512 ✅ 96 g ✅ ❌ ✅ 100 h ❌ Xous Trust-anchor companion / security lessons
T-Deck Pro A7682E ✅ $94 ✅ ✅ ✅ 4G voice ✅ e-ink ❌ MCU Scale-model of the right industrial design
Pilet / Liberux NEXX / Planet ❌ — — — — — Avoid (refund campaign / failed funding / scam-adjacent)

Proposed roadmap (~$2k ceiling) — living plan in ROADMAP.md + docs/

Phase 0 — kill the two risks (~$145, weeks): (rewritten 2026-07-12 around Daniel's existing PinePhone — see docs/phase0-runbook.md for the divergent plan)

  1. PinePhone ($0): the VoLTE-vs-2G diagnostic on the actual T-Mobile SIM (before the 2026-08-03 2G sunset), then Branch A (VoLTE works → lock EG25-G, reuse PinePhone as wake-chain testbed) or Branch B (remediation ladder → data-only + VoIP floor). Exact AT recipes in the runbook.
  2. BeaglePlay ($101, AM62x test vehicle — NOT the deck's compute): prove the unpublished trio — 100+-cycle suspend reliability, resume latency, AON-GPIO wake. Fallback: FRDM-IMX93. SoM candidates for the real deck: AM625 / AM62L / i.MX93, chosen at the Phase 1 exit gate.

Phase 1 — ugly-but-working bench prototype (~$300): see docs/phase1-plan.md — BeaglePlay + modem + P9981 Pro keyboard (BBQ20KBD is OOS/retired; KeebDeck Basic restock = the real successor) + RP2040 supervisor (Zephyr; protocol in docs/supervisor-protocol.md) + charger/gauge breakouts + ~10 Ah LiPo pouch (pouch-primary decision — see hardware/dimensions.md). Goal: the five milestones, led by the keystone wake loop. PPK2 purchased only when µA tuning starts.

Phase 2 — carrier PCB + shell (~$400–600): custom carrier for the chosen SoM (this is where "fab a PCB" is justified: PMIC/power domains, modem socket, keyboard matrix (KeebDeck raw pad), codec+AEC, SE050, USB-C, memory-LCD strip, DXQ 3.92" AMOLED). Printed PETG/PA shell around the dummy-brick-validated envelope (slim/mid likely — pouch-primary). One respin budgeted. Power targets + audit protocol: docs/power-budget.md.

Phase 3 — software depth (mostly time): FDE + duress + signed remote-nuke; notification pipeline (supervisor as source of truth, InfiniTime ANS patterns); call UX; GPS; QR camera; Meshtastic bay; power tuning to the 2-day target.

Deferred decisions: interim daily-driver purchase (FLX1s $550 or Titan 2 ~$400 — would consume budget but de-risks the "life happens meanwhile" problem); convergence module; LoRa bay; camera choice.

Open questions

  1. AM625 vs AM62L vs i.MX93 after Phase-0 measurements (suspend maturity vs CPU headroom vs the AM62L's <5 mW floor).
  2. Cat-4 EG25-G vs Cat-1bis A7670 (idle power vs ecosystem/biktorgj; audio-stream bandwidth for the "month-long high-quality audio" requirement favors Cat-4/Cat-1 over anything LPWA — LTE-M is ruled out for this reason and no voice).
  3. mobile-nixos vs postmarketOS as the Linux userland (NixOS-everywhere pull vs FDE installer maturity).
  4. Si-C cell sourcing in pouch form; final pack topology (2P vs single big pouch).
  5. Whether Mecha Comet (Oct'26) ships and validates its 7-day-suspend claim — if it does, it may become the Phase-1/2 chassis instead of full custom.
  6. Camera: cheap DVP/CSI module for QR on the Linux side vs supervisor-side.
  7. Display interface (found 2026-07-13): AM625 has no MIPI-DSI — AM625 + DPI→DSI bridge vs AM62P (native DSI, unverified sleep) vs i.MX93 (native DSI, 7.6 mW documented). Decides whether the DXQ AMOLED order unlocks.

Reports index

Report Scope
devices.md Every pocket Linux/cyberdeck device shipping or announced, with the comparative table
linux-phones.md PinePhone/Librem 5/FLX1s/pmOS; the VoLTE + standby lessons, measured power numbers
soc-landscape.md Compute by suspend power + mainline; the power-budget math; shortlist
edge-silicon.md Mid-2026 bleeding edge: Panther/Wildcat Lake, RK3688, Qualcomm upstream-first, RISC-V reality
mcu-cellular.md MCU-class route, cellular module ecosystem, VoLTE/carrier certification analysis
coprocessor.md Multi-computer architectures, wake/peripheral-sharing mechanisms, reference architectures A/B/C
security.md Modem isolation, blob audit, FDE, secure elements, remote-nuke design, Precursor/Baochip

License

Hardware under CERN-OHL-S-2.0, firmware and software under GPL-3.0-or-later, prose under CC-BY-SA-4.0. Per-file mapping, including vendored third-party files, is in REUSE.toml (reuse lint checks it).