From a389a733d7d78113948de8456965258cece4a2bd Mon Sep 17 00:00:00 2001 From: Jakub <106778416+MarekZegare4@users.noreply.github.com> Date: Thu, 27 Aug 2026 00:49:37 +0200 Subject: [PATCH] refactor(solo): move solo build configs into their own solo/ folder; one build per board; document all build flags Solo's `_solo_dual` env for each board lived inside variants//, mixed in with the shared upstream board configs (repeater, room server, plain companion) that every MeshCore fork carries. Split them out into their own top-level solo// folder -- each still `extends` the board base defined in its original variants//platformio.ini, just no longer interleaved with it file-wise. - platformio.ini: extra_configs picks up solo/*/platformio.ini alongside variants/*/platformio.ini. - build-solo-firmwares.yml: env-discovery grep now scans solo/ instead of variants/ (the release matrix is unchanged -- same 8 envs, same names). - pr-build-check.yml: solo/** added to the trigger paths. - GAT562 30S Mesh Kit: dropped the separate solo_ble env -- solo_dual is a strict superset (BLE still works, plus USB), and every other board only ever had one solo build to begin with. - GAT562 Mesh Watch13: renamed solo_ble -> solo_dual (added DUAL_SERIAL=1) to match. No comment anywhere recorded whether this board's USB data lines are actually broken out to a connector -- DUAL_SERIAL compiles and works over BLE regardless, so worst case the USB half goes unused. - Removed a dead AUTO_SHUTDOWN_MILLIVOLTS from the three solo envs that set it (Heltec V3/V4, T-Echo Lite+KeyShield): that macro is only ever read in the old ui-tiny UITask, never ui-new, which every solo build (these included) uses -- it did nothing on any of them. Left alone everywhere else it's set (non-solo companion envs elsewhere use ui-tiny/ui-orig, or the flag is legitimately read); out of scope here. - Added docs/solo_features/build_flags.md: every optional -D flag a solo build understands (GPIO, CardKB/joystick, Hall-sensor cover lock, buzzer/ vibration, GPS switch, display/battery tuning), verified against the code rather than the existing per-board comments, with what's already baked into every solo build kept separate from what's opt-in. - README: doc index + Building from source section link to the new page; path references to the moved solo files updated to solo//. All 8 solo_dual envs rebuilt clean after the move; native test suite (40 cases) unaffected. Co-Authored-By: Claude Sonnet 5 --- .github/workflows/build-solo-firmwares.yml | 2 +- .github/workflows/pr-build-check.yml | 2 + README.md | 9 +- docs/solo_features/build_flags.md | 98 +++++++++++++++++++ docs/solo_features/external_keyboard.md | 7 +- platformio.ini | 1 + solo/gat562_30s_mesh_kit/platformio.ini | 52 ++++++++++ solo/gat562_mesh_watch13/platformio.ini | 50 ++++++++++ solo/heltec_v3/platformio.ini | 89 +++++++++++++++++ solo/heltec_v4/platformio.ini | 96 ++++++++++++++++++ solo/lilygo_techo_lite/platformio.ini | 43 ++++++++ solo/m5stack_cardputer_adv/platformio.ini | 34 +++++++ solo/wio-tracker-l1-eink/platformio.ini | 19 ++++ solo/wio-tracker-l1/platformio.ini | 19 ++++ variants/gat562_30s_mesh_kit/platformio.ini | 85 ---------------- variants/gat562_mesh_watch13/platformio.ini | 39 -------- variants/heltec_v3/platformio.ini | 85 ---------------- variants/heltec_v4/platformio.ini | 92 ----------------- variants/lilygo_techo_lite/platformio.ini | 39 -------- variants/m5stack_cardputer_adv/platformio.ini | 29 ------ variants/wio-tracker-l1-eink/platformio.ini | 14 --- variants/wio-tracker-l1/platformio.ini | 14 --- 22 files changed, 516 insertions(+), 402 deletions(-) create mode 100644 docs/solo_features/build_flags.md create mode 100644 solo/gat562_30s_mesh_kit/platformio.ini create mode 100644 solo/gat562_mesh_watch13/platformio.ini create mode 100644 solo/heltec_v3/platformio.ini create mode 100644 solo/heltec_v4/platformio.ini create mode 100644 solo/lilygo_techo_lite/platformio.ini create mode 100644 solo/m5stack_cardputer_adv/platformio.ini create mode 100644 solo/wio-tracker-l1-eink/platformio.ini create mode 100644 solo/wio-tracker-l1/platformio.ini diff --git a/.github/workflows/build-solo-firmwares.yml b/.github/workflows/build-solo-firmwares.yml index 3938bc01..5194facc 100644 --- a/.github/workflows/build-solo-firmwares.yml +++ b/.github/workflows/build-solo-firmwares.yml @@ -26,7 +26,7 @@ jobs: - name: List solo_dual envs id: list-envs run: | - envs=$(grep -rh '^\[env:' platformio.ini variants/ \ + envs=$(grep -rh '^\[env:' solo/ \ | sed 's/\[env://;s/\]//' \ | grep '_solo_dual$' \ | jq -R -s -c 'split("\n") | map(select(length > 0))') diff --git a/.github/workflows/pr-build-check.yml b/.github/workflows/pr-build-check.yml index 2ef40448..5d1b6e98 100644 --- a/.github/workflows/pr-build-check.yml +++ b/.github/workflows/pr-build-check.yml @@ -7,6 +7,7 @@ on: - 'src/**' - 'examples/**' - 'variants/**' + - 'solo/**' - 'platformio.ini' - '.github/workflows/pr-build-check.yml' push: @@ -15,6 +16,7 @@ on: - 'src/**' - 'examples/**' - 'variants/**' + - 'solo/**' - 'platformio.ini' - '.github/workflows/pr-build-check.yml' diff --git a/README.md b/README.md index 54e1bc7c..76d506f1 100644 --- a/README.md +++ b/README.md @@ -136,7 +136,7 @@ Each joystick contact simply shorts its pin to GND — the firmware enables the Either device is enough on its own — unwired pins read as not-pressed, and a missing CardKB just isn't detected at boot. For **CardKB-only**, wire just SDA/SCL and set Settings › Keyboard › **Ext. KB = Compact**, which needs no joystick at all. -These are only defaults, set in the `[env:Heltec_v3_companion_solo_dual]` / `[env:heltec_v4_companion_solo_dual]` blocks in [`variants/heltec_v3/platformio.ini`](./variants/heltec_v3/platformio.ini) and [`variants/heltec_v4/platformio.ini`](./variants/heltec_v4/platformio.ini) — comments there list which GPIOs are already claimed. Full details in [External Keyboard & Joystick](./docs/solo_features/external_keyboard.md). +These are only defaults, set in the `[env:Heltec_v3_companion_solo_dual]` / `[env:heltec_v4_companion_solo_dual]` blocks in [`solo/heltec_v3/platformio.ini`](./solo/heltec_v3/platformio.ini) and [`solo/heltec_v4/platformio.ini`](./solo/heltec_v4/platformio.ini) — comments there list which GPIOs are already claimed. Full details in [External Keyboard & Joystick](./docs/solo_features/external_keyboard.md). --- @@ -153,6 +153,7 @@ These are only defaults, set in the `[env:Heltec_v3_companion_solo_dual]` / `[en | [Screen Lock](./docs/solo_features/screen_lock/screen_lock.md) | Lock/unlock sequence, lock screen, auto-lock | | [Tools Screen](./docs/solo_features/tools_screen/tools_screen.md) | GPS trail & waypoints, compass, navigation, nearby nodes, ringtone editor, remote bot, auto-advert, live location sharing, locator, diagnostics, repeater, remote admin | | [External Keyboard & Joystick](./docs/solo_features/external_keyboard.md) | CardKB shortcuts, Full vs Compact mode, wired joystick, Heltec V3/V4 wiring | +| [Build Flags](./docs/solo_features/build_flags.md) | Every optional `-D` build flag a solo build understands — GPIO, Hall sensor, buzzer/vibration, GPS switch, display/battery tuning | | [Solo UI framework](./docs/design/solo_ui_framework.md) | **Developer guide** — the reusable building blocks (screens, lists, popups, mini-icons, geo/persistence helpers) and how to add a new feature | | [Feature roadmap](./docs/development/roadmap.md) | **Developer notes** — planned / done / rejected features and the code-audit backlog | @@ -217,6 +218,11 @@ FIRMWARE_VERSION=v1.0.0 bash build.sh build-firmware # release artifacts i The last command runs the same path CI does: a `.uf2` + DFU `.zip` on nRF52, or an app-only `.bin` plus a `-merged.bin` on ESP32. Releases carry the `.uf2`, the `.zip` and the `-merged.bin` only. +Every environment above builds as-is with no extra hardware required. If you've +wired up something extra — CardKB, a joystick, GPIO, a magnetic cover sensor, +a buzzer — see [Build Flags](./docs/solo_features/build_flags.md) for the full +list of optional `-D` flags to add to your own `solo//platformio.ini`. + ### Releasing Pushing a `v*` tag runs [Build Solo Firmwares](./.github/workflows/build-solo-firmwares.yml), which discovers every `*_solo_dual` environment automatically, builds them all and opens a **draft** release with the artifacts attached. Write the notes from `release-notes.md` and publish it. See [RELEASE.md](./RELEASE.md) for the upstream companion/repeater/room-server tags. @@ -228,6 +234,7 @@ Pushing a `v*` tag runs [Build Solo Firmwares](./.github/workflows/build-solo-fi | `examples/companion_radio/ui-new/` | the solo UI — screens, widgets, `UITask` | | `src/helpers/ui/` | display drivers, fonts, buttons, buzzer | | `variants//` | per-board `platformio.ini`, `target.h`, `target.cpp` | +| `solo//` | that board's solo (`*_solo_dual`) environment — kept separate from `variants/` so this fork's Solo-specific additions don't mix into configs upstream/other forks also carry | | `docs/solo_features/` | user documentation for this fork | | `docs/design/`, `docs/development/` | developer notes and the feature roadmap | | `tools/` | host-side helpers (screenshot, GPX export, font conversion) | diff --git a/docs/solo_features/build_flags.md b/docs/solo_features/build_flags.md new file mode 100644 index 00000000..655a1cdb --- /dev/null +++ b/docs/solo_features/build_flags.md @@ -0,0 +1,98 @@ +## Build Flags + +[Go back](../../README.md) + +Reference for the `-D` build flags a Solo build understands beyond the +per-board defaults already set in `solo//platformio.ini`. Add any of +these to your own board's `build_flags` (in `solo//platformio.ini`) to +enable optional hardware you've wired up yourself, or to tune a default. +Everything below is a no-op when left unset — adding a flag for hardware that +isn't there costs nothing and can't brick a build; the exceptions (pin +conflicts, wrong polarity) are called out per flag. + +None of this needs touching to get a board running — see the +[environment table](../../README.md#building-from-source) for the flag-free +default build for each supported board. + +--- + +### Already part of every solo build + +Set once per board in `solo//platformio.ini`, not usually touched +per-user. Listed here so the rest of this page can assume them. + +| Flag | Meaning | +| --- | --- | +| `FIRMWARE_SOLO_BUILD=1` | Marks the build as Solo (full on-device UI) rather than a companion-only firmware. | +| `DUAL_SERIAL=1` | The companion app can attach over BLE *or* USB serial, whichever it finds; BLE wins if both are live. Every solo build sets this — Solo standardises on one build per board rather than splitting BLE-only / USB-only variants. | +| `MAX_CONTACTS=` | Size of the contact table. Default is 32 if unset; solo builds set 350. | +| `MAX_GROUP_CHANNELS=` | Size of the channel list. Required for channel support to compile in at all — not optional the way the rest of this page is. | +| `OFFLINE_QUEUE_SIZE=` | How many messages queue for later delivery while the phone app is disconnected. Default 16; solo builds set 256. | +| `UI_SENSORS_PAGE=1` | Enables the on-device sensors dashboard page. | +| `BLE_PIN_CODE=` | See below — not a plain fixed value in practice. | +| `DISPLAY_CLASS=` | Selects the display driver (e.g. `SSD1306Display`, `GxEPDDisplay`, `ST7789Display` — see `src/helpers/ui/` for the full set). Fixed by whatever panel the board actually has; only relevant if you're wiring on a *different* display than stock, in which case the matching driver's `.cpp` also needs adding to `build_src_filter`. | + +**`BLE_PIN_CODE`** has a special case baked in: if it's left at the literal +value `123456` *and* the board has a display, pairing uses a random 6-digit +PIN generated fresh each session and shown on-device, rather than a fixed one. +Any other numeric value is used as a static PIN instead. Leaving the flag out +entirely disables the PIN prompt (BLE pairing is unauthenticated). + +--- + +### Input hardware add-ons + +Each of these assumes you're wiring something up yourself — check pins are +actually free on your board first (see the board's `variant.h` and its +existing `solo//platformio.ini` for what's already claimed). + +| Flag | Adds | +| --- | --- | +| `ENV_PIN_SDA` / `ENV_PIN_SCL` | CardKB (M5Stack I2C keyboard, addr `0x5F`) on a second I2C bus. Probed at boot — harmless with nothing plugged in. See [External Keyboard & Joystick](./external_keyboard.md). | +| `UI_HAS_JOYSTICK=1` + `UI_HAS_JOYSTICK_UPDOWN=1` (optional) + `JOYSTICK_UP` / `JOYSTICK_DOWN` / `JOYSTICK_LEFT` / `JOYSTICK_RIGHT` + `PIN_USER_BTN` + `PIN_BACK_BTN` | A wired joystick (four direction contacts + a press contact for Enter). Replaces single-button navigation entirely once enabled. See [External Keyboard & Joystick](./external_keyboard.md). | +| `PIN_GPIO1` .. `PIN_GPIO4` | Up to four general-purpose pins, each independently switchable between Off / Input / Output (GPIO1/GPIO2 also get an Analog step, if wired to an ADC-capable pin) from Tools › GPIO, and via the `!gpio1`..`!gpio4` bot commands. Not restricted to any particular board — works anywhere the pins are actually free. See [Tools Screen › GPIO](./tools_screen/tools_screen.md#gpio). | +| `PIN_HALL_SENSOR` + `HALL_ACTIVE_HIGH=1` (optional) | A Hall-effect or reed sensor for a magnetic flip cover: closing locks and blanks the screen instantly, opening unlocks and wakes it, no combo either way. `HALL_ACTIVE_HIGH` is only for a module wired to pull the pin high (rather than low) when the magnet is near. See [Screen Lock › Magnetic cover](./screen_lock/screen_lock.md#magnetic-cover-hall-sensor). | +| `PIN_GPS_SWITCH` | A physical on/off switch for GPS power, read alongside the software GPS toggle — the Tools screen shows `gps off(hw)` / `gps off(sw)` when the two disagree, instead of silently trusting one over the other. | + +--- + +### Output / feedback hardware + +| Flag | Adds | +| --- | --- | +| `PIN_BUZZER` (+ `PIN_BUZZER_EN`, optional) | A passive piezo buzzer, driven by direct PWM (nRF52) or the `NonBlockingRtttl` library (everything else) for RTTTL ringtones and UI beeps. `PIN_BUZZER_EN` is an optional enable line some boards wire separately from the signal pin. | +| `PIN_VIBRATION` | A vibration motor for haptic notification, via `GenericVibration`. | + +--- + +### GPS + +| Flag | Meaning | +| --- | --- | +| `ENV_INCLUDE_GPS=1` | Compiles in GPS support (NMEA parsing, location provider) at all. | +| `GPS_BAUD_RATE=` | Baud rate for the GPS module's serial link (`Serial1`). Match your module's default. | + +`PIN_GPS_SWITCH` (above) is independent of both — it's a hardware kill switch +layered on top of GPS support, not a requirement for it. + +--- + +### Display & battery tuning + +| Flag | Meaning | +| --- | --- | +| `OLED_MISC_FIXED_FONT=1` | Pulls in a full Latin/Greek/Cyrillic 6×9 fixed font (~14 KB flash) so typed text in those alphabets renders as itself instead of block placeholders. Worth it on any board with a keyboard; skip it on space-constrained builds without one. | +| `DISPLAY_ROTATION=<0-3>` | Rotates the panel in 90° steps, for a board mounted sideways or upside down. | +| `ENABLE_SCREENSHOT` | Lets Solo Tools read the framebuffer over USB to capture a screenshot. | +| `KEEP_DISPLAY_ON_USB` | Refreshes the auto-off deadline continuously while externally (USB) powered, so the auto-off timer only starts counting once power is actually removed. Off by default because OLED panels burn in quickly with a permanently-lit screen — only worth enabling for an LCD/e-ink target, or a display you don't mind replacing. | +| `AUTO_OFF_MILLIS=` | How long the display stays on before auto-off. Default 15000 (15s); `0` disables auto-off entirely. | +| `UI_RECENT_LIST_SIZE=` | How many entries the recent-activity lists show before scrolling. Default 4. | + +--- + +### Misc + +| Flag | Meaning | +| --- | --- | +| `ADVERT_NAME='"name"'` | Sets the default node name baked into a fresh device, instead of the hex of the first 4 bytes of its public key. Note the doubled quoting — it's a C string literal passed through a build flag. | +| `MESHCORE_VERSION='"x.y"'` | Overrides the upstream MeshCore base-version string shown in diagnostics, for boards whose port hasn't been rebased onto the latest yet. Cosmetic only — doesn't change protocol behaviour. | diff --git a/docs/solo_features/external_keyboard.md b/docs/solo_features/external_keyboard.md index 05d36e5c..56f3978a 100644 --- a/docs/solo_features/external_keyboard.md +++ b/docs/solo_features/external_keyboard.md @@ -115,8 +115,8 @@ hardware**; still worth checking against your own V3 module before soldering. Everything above lives in the `[env:Heltec_v3_companion_solo_dual]` / `[env:heltec_v4_companion_solo_dual]` blocks in -[`variants/heltec_v3/platformio.ini`](../../variants/heltec_v3/platformio.ini) -and [`variants/heltec_v4/platformio.ini`](../../variants/heltec_v4/platformio.ini), +[`solo/heltec_v3/platformio.ini`](../../solo/heltec_v3/platformio.ini) +and [`solo/heltec_v4/platformio.ini`](../../solo/heltec_v4/platformio.ini), with comments explaining which pins are safe to reuse. To build a CardKB-only device, comment out the joystick block and set Ext. KB to Compact. @@ -134,4 +134,5 @@ independent of the CardKB code — a board can have either, or neither. Neither keypad follows CardKB's exact Fn-shortcut table (Fn+Enter, Fn+letter accent popups, Tab, Fn+Esc lock) — see each board's own -`platformio.ini` / keyboard driver under `variants/` for its current keymap. +keyboard driver under `variants/` and its solo `platformio.ini` under `solo/` +for its current keymap. diff --git a/platformio.ini b/platformio.ini index e78124a4..57d37a7d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -11,6 +11,7 @@ [platformio] extra_configs = variants/*/platformio.ini + solo/*/platformio.ini platformio.local.ini [arduino_base] diff --git a/solo/gat562_30s_mesh_kit/platformio.ini b/solo/gat562_30s_mesh_kit/platformio.ini new file mode 100644 index 00000000..2d83aaac --- /dev/null +++ b/solo/gat562_30s_mesh_kit/platformio.ini @@ -0,0 +1,52 @@ +; Solo build for GAT562 30S Mesh Kit -- extends the board base defined in +; variants/gat562_30s_mesh_kit/platformio.ini. Solo configs live in their own +; top-level solo/ folder, separate from the shared upstream board variants in +; variants/, so this repo's Solo-specific additions don't get mixed in with +; configs other MeshCore forks/upstream also carry. +; +; Dual (BLE+USB) only -- the previous BLE-only solo_ble env was dropped since +; dual is a strict superset (BLE still works, plus USB) and Solo standardises +; on one build per board. +[env:GAT562_30S_Mesh_Kit_solo_dual] +extends = GAT562_30S_Mesh_Kit +board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld +board_upload.maximum_size = 712704 +; Optimise for size, not speed: the nRF52 Arduino core defaults to -Ofast +; (≈ -O3 + -ffast-math), which bloats flash by ~200 KB on this feature-rich +; solo build. -Os keeps every feature, fits comfortably, and is actually safer +; for float (no fast-math reassociation). Speed is irrelevant for the UI/mesh. +build_unflags = -Ofast +build_flags = + ${GAT562_30S_Mesh_Kit.build_flags} + -I examples/companion_radio/ui-new + -D DISPLAY_CLASS=SSD1306Display + -D MAX_CONTACTS=350 + -D MAX_GROUP_CHANNELS=40 + -D BLE_PIN_CODE=123456 + -D OFFLINE_QUEUE_SIZE=256 + -D FIRMWARE_SOLO_BUILD=1 + -D MESHCORE_VERSION='"1.17"' + -D UI_SENSORS_PAGE=1 + -D UI_HAS_JOYSTICK_UPDOWN=1 + -D ADVERT_NAME='"@@MAC"' + -D ENV_INCLUDE_GPS=1 + ; misc-fixed 6x9 OLED font (full Latin/Greek/Cyrillic), same as the Wio L1 + ; builds. Solo only: it costs ~14 KB of flash and the repeater/companion + ; builds have no keyboard to type those alphabets on. + -D OLED_MISC_FIXED_FONT=1 + -D DUAL_SERIAL=1 + -D ENABLE_SCREENSHOT + -Os + ; QSPIFLASH disabled: QSPI IO0/IO2 pins (P0.30/P0.28) conflict with joystick LEFT/UP + ; -D MESH_PACKET_LOGGING=1 + ; -D MESH_DEBUG=1 +build_src_filter = ${GAT562_30S_Mesh_Kit.build_src_filter} + + + + + +<../examples/companion_radio/*.cpp> + +<../examples/companion_radio/ui-new/*.cpp> +lib_deps = + ${GAT562_30S_Mesh_Kit.lib_deps} + adafruit/RTClib @ ^2.1.3 + densaugeo/base64 @ ~1.4.0 + end2endzone/NonBlockingRTTTL@^1.3.0 diff --git a/solo/gat562_mesh_watch13/platformio.ini b/solo/gat562_mesh_watch13/platformio.ini new file mode 100644 index 00000000..e8413143 --- /dev/null +++ b/solo/gat562_mesh_watch13/platformio.ini @@ -0,0 +1,50 @@ +; Solo build for GAT562 Mesh Watch13 -- extends the board base defined in +; variants/gat562_mesh_watch13/platformio.ini. Solo configs live in their own +; top-level solo/ folder, separate from the shared upstream board variants in +; variants/, so this repo's Solo-specific additions don't get mixed in with +; configs other MeshCore forks/upstream also carry. +; +; Renamed from the previous BLE-only solo_ble to solo_dual (DUAL_SERIAL added +; below) to match every other board's single solo build. This board has no +; comment anywhere recording whether its USB data lines are actually broken +; out to a connector (only charging pins might be) -- DUAL_SERIAL compiles +; and works over BLE regardless, so worst case the USB half just goes unused. +[env:GAT562_Mesh_Watch13_solo_dual] +extends = GAT562_Mesh_Watch13 +board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld +board_upload.maximum_size = 712704 +build_flags = + ${GAT562_Mesh_Watch13.build_flags} + -I examples/companion_radio/ui-new + -D DISPLAY_CLASS=SSD1306Display + -D MAX_CONTACTS=350 + -D MAX_GROUP_CHANNELS=40 + -D BLE_PIN_CODE=123456 + -D OFFLINE_QUEUE_SIZE=256 + -D DUAL_SERIAL=1 + -D FIRMWARE_SOLO_BUILD=1 + -D MESHCORE_VERSION='"1.17"' + -D UI_SENSORS_PAGE=1 + -D ADVERT_NAME='"@@MAC"' + ; GPS — re-enable (base undefines it); Serial1 pins 15/16 from variant + -D ENV_INCLUDE_GPS=1 + -D GPS_BAUD_RATE=9600 + ; Buzzer available on IO3 (pin 21) — uncomment to enable +; -D PIN_BUZZER=21 +; -D PIN_VIBRATION=36 +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +build_src_filter = ${GAT562_Mesh_Watch13.build_src_filter} + + + + + + + +<../examples/companion_radio/*.cpp> + +<../examples/companion_radio/ui-new/*.cpp> +; If PIN_BUZZER is enabled above, also add: +; + +lib_deps = + ${GAT562_Mesh_Watch13.lib_deps} + adafruit/RTClib @ ^2.1.3 + densaugeo/base64 @ ~1.4.0 +; If PIN_BUZZER is enabled, also add: +; end2endzone/NonBlockingRTTTL@^1.3.0 diff --git a/solo/heltec_v3/platformio.ini b/solo/heltec_v3/platformio.ini new file mode 100644 index 00000000..bd6703eb --- /dev/null +++ b/solo/heltec_v3/platformio.ini @@ -0,0 +1,89 @@ +; Solo build for Heltec LoRa32 V3 -- extends the board base defined in +; variants/heltec_v3/platformio.ini. Solo configs live in their own top-level +; solo/ folder, separate from the shared upstream board variants in variants/, +; so this repo's Solo-specific additions don't get mixed in with configs +; other MeshCore forks/upstream also carry. +; +; Solo build: the full standalone on-device UI (message history, contacts, map, +; tools) rather than a screen that only mirrors the phone app. Dual transport -- +; the companion app can attach over BLE or USB serial, whichever it finds, and +; BLE wins while both are live. +; +; This firmware needs a real input device: the solo UI cannot be driven from the +; PRG button alone. Both supported ones are wired up in target.cpp and enabled +; below, so either is enough on its own and having both is fine. The pins are +; defaults picked from what this board leaves free -- change them to match how +; the device is actually built. Pins with nothing attached read as not-pressed, +; so the unused half costs nothing. +; +; * CardKB (M5Stack I2C keyboard, addr 0x5F) on a second I2C bus. Any two free +; GPIOs -- NOT 17/18, the OLED already owns those on Wire. It's probed at +; boot, so a build with these set still runs fine with nothing plugged in. +; Pair it with Settings > Keyboard > Ext. KB = Compact, which is designed to +; need no joystick at all. The same bus is scanned for environment sensors. +; +; * Wired joystick: four direction pins plus a fifth "press" contact. The +; press contact drives Enter (your thumb's already on the stick) via +; PIN_USER_BTN -- overridden below (a later -D wins, no -U needed: this whole +; project builds with -w) from the PRG-button default +; the base env sets, since PRG's GPIO0 can't be moved to the stick. PRG +; becomes Back instead (PIN_BACK_BTN), so it no longer needs its own +; separately-wired button. Each contact just shorts its pin to GND; +; target.cpp enables the internal pull-ups. Drop +; UI_HAS_JOYSTICK_UPDOWN for a left/right-only stick. JOYSTICK_ROTATION (0-3) +; rotates the mapping if the stick is mounted sideways -- it's also a runtime +; setting, so leave it out unless you want a different default. +; Comment the whole block out for a CardKB-only build. UI_HAS_JOYSTICK +; replaces the single-button handling rather than adding to it (UITask.cpp +; dispatches on '#if UI_HAS_JOYSTICK ... #elif defined(PIN_USER_BTN)'), which +; costs nothing here -- that fallback only feeds KEY_NEXT/KEY_PREV, which the +; solo screens don't act on. +; +; V3 and V4 are pin-compatible per Heltec's own docs, so the defaults below are +; carried over from the heltec_v4_companion_solo_dual env, where this exact +; CardKB + joystick combination is confirmed working on real hardware -- still +; worth checking against your own V3 module before soldering, but not a blind +; guess like the earlier SDA 41/SCL 42 default was. PIN_GPS_RX=47/TX=48/EN=26 +; above are dead defines on V3 (ENV_INCLUDE_GPS is never set to 1 in this file), +; so they don't conflict with reusing 47/48 here despite the name. +[env:Heltec_v3_companion_solo_dual] +extends = Heltec_lora32_v3 +build_flags = + ${Heltec_lora32_v3.build_flags} + -I examples/companion_radio/ui-new + -D MAX_CONTACTS=350 + -D MAX_GROUP_CHANNELS=40 + -D DISPLAY_CLASS=SSD1306Display + -D BLE_PIN_CODE=123456 ; dynamic, random PIN + -D DUAL_SERIAL=1 ; companion app over BLE *or* USB serial + -D OFFLINE_QUEUE_SIZE=256 + -D FIRMWARE_SOLO_BUILD=1 + -D UI_SENSORS_PAGE=1 + -D OLED_MISC_FIXED_FONT=1 ; full Latin/Greek/Cyrillic 6x9 font, ~14 KB flash + -D ENABLE_SCREENSHOT ; same as the other solo builds — Solo Tools reads the framebuffer over USB + ; CardKB on the second I2C bus. Harmless with nothing plugged in. + -D ENV_PIN_SDA=3 + -D ENV_PIN_SCL=4 + ; Wired joystick — comment the block out for a CardKB-only build. The + ; press contact (Enter) overrides PIN_USER_BTN from its PRG default; + ; PRG becomes Back (PIN_BACK_BTN) instead. + -D UI_HAS_JOYSTICK=1 + -D UI_HAS_JOYSTICK_UPDOWN=1 + -D JOYSTICK_UP=23 + -D JOYSTICK_DOWN=6 + -D JOYSTICK_LEFT=47 + -D JOYSTICK_RIGHT=48 + -D PIN_BACK_BTN=0 ; PRG button + -D PIN_USER_BTN=33 ; joystick press contact -- Enter, overrides the PRG default above +; -D PIN_BUZZER= +build_src_filter = ${Heltec_lora32_v3.build_src_filter} + + + + + + + + + +<../examples/companion_radio/*.cpp> + +<../examples/companion_radio/ui-new/*.cpp> +lib_deps = + ${Heltec_lora32_v3.lib_deps} + densaugeo/base64 @ ~1.4.0 + end2endzone/NonBlockingRTTTL@^1.3.0 diff --git a/solo/heltec_v4/platformio.ini b/solo/heltec_v4/platformio.ini new file mode 100644 index 00000000..525f470b --- /dev/null +++ b/solo/heltec_v4/platformio.ini @@ -0,0 +1,96 @@ +; Solo build for Heltec LoRa32 V4 -- extends the board base defined in +; variants/heltec_v4/platformio.ini. Solo configs live in their own top-level +; solo/ folder, separate from the shared upstream board variants in variants/, +; so this repo's Solo-specific additions don't get mixed in with configs +; other MeshCore forks/upstream also carry. +; +; Solo build: the full standalone on-device UI (message history, contacts, map, +; tools) rather than a screen that only mirrors the phone app. Dual transport -- +; the companion app can attach over BLE or USB serial, whichever it finds, and +; BLE wins while both are live. OLED board only -- the TFT variant would need +; its own DISPLAY_CLASS. +; +; This firmware needs a real input device: the solo UI cannot be driven from the +; PRG button alone. Both supported ones are wired up in target.cpp and enabled +; below, so either is enough on its own and having both is fine. The pins are +; defaults picked from what this board leaves free -- change them to match how +; the device is actually built. Pins with nothing attached read as not-pressed, +; so the unused half costs nothing. +; +; * CardKB (M5Stack I2C keyboard, addr 0x5F) on a second I2C bus. Any two free +; GPIOs -- NOT 17/18, the OLED already owns those on Wire. It's probed at +; boot, so a build with these set still runs fine with nothing plugged in. +; Pair it with Settings > Keyboard > Ext. KB = Compact, which is designed to +; need no joystick at all. The same bus is scanned for environment sensors. +; Defaults below: SDA 3, SCL 4 -- the pins heltec_v4_sensor and +; heltec_v4_expansionkit_repeater already use for their second I2C bus, i.e. +; the expansion kit's. (Those envs disagree on the order: two say SDA 3 / +; SCL 4, one says the reverse. 3/4 is the pair either way; swap them if the +; keyboard doesn't answer.) +; +; * Wired joystick: four direction pins plus a fifth "press" contact. The +; press contact drives Enter (your thumb's already on the stick) via +; PIN_USER_BTN -- overridden below (a later -D wins, no -U needed: this whole +; project builds with -w) from the PRG-button default +; the base env sets, since PRG's GPIO0 can't be moved to the stick. PRG +; becomes Back instead (PIN_BACK_BTN), so it no longer needs its own +; separately-wired button. Each contact just shorts its pin to GND; +; target.cpp enables the internal pull-ups. Drop +; UI_HAS_JOYSTICK_UPDOWN for a left/right-only stick. JOYSTICK_ROTATION (0-3) +; rotates the mapping if the stick is mounted sideways -- it's also a runtime +; setting, so leave it out unless you want a different default. +; Comment the whole block out for a CardKB-only build. UI_HAS_JOYSTICK +; replaces the single-button handling rather than adding to it (UITask.cpp +; dispatches on '#if UI_HAS_JOYSTICK ... #elif defined(PIN_USER_BTN)'), which +; costs nothing here -- that fallback only feeds KEY_NEXT/KEY_PREV, which the +; solo screens don't act on. +; +; Free on this board, per its pinout: 3, 4, 6, 23, 33, 43, 44, 45, 46, 47, 48. +; Two of those can't take an I2C pull-up: 45 selects VDD_SPI at boot, so held +; high the chip comes up expecting 1.8V flash and won't boot at all, and 46 is +; the boot-mode strap. 3 is a strapping pin too, but it only picks the JTAG +; source -- and it's what this board's own expansion kit uses for I2C anyway. +; 43/44 are UART0: unused by this build, since ARDUINO_USB_CDC_ON_BOOT (set in +; boards/heltec_v4.json) makes Serial the native USB port, but a USB-UART bridge +; may still be wired to them, so they're left alone. +[env:heltec_v4_companion_solo_dual] +extends = heltec_v4_oled +build_flags = + ${heltec_v4_oled.build_flags} + -I examples/companion_radio/ui-new + -D MAX_CONTACTS=350 + -D MAX_GROUP_CHANNELS=40 + -D DISPLAY_CLASS=SSD1306Display + -D BLE_PIN_CODE=123456 ; dynamic, random PIN + -D DUAL_SERIAL=1 ; companion app over BLE *or* USB serial + -D OFFLINE_QUEUE_SIZE=256 + -D FIRMWARE_SOLO_BUILD=1 + -D UI_SENSORS_PAGE=1 + -D OLED_MISC_FIXED_FONT=1 ; full Latin/Greek/Cyrillic 6x9 font, ~14 KB flash + -D ENABLE_SCREENSHOT ; same as the other solo builds — Solo Tools reads the framebuffer over USB + ; CardKB on the second I2C bus. Harmless with nothing plugged in. + -D ENV_PIN_SDA=3 + -D ENV_PIN_SCL=4 + ; Wired joystick — comment the block out for a CardKB-only build. The + ; press contact (Enter) overrides PIN_USER_BTN from its PRG default; + ; PRG becomes Back (PIN_BACK_BTN) instead. + -D UI_HAS_JOYSTICK=1 + -D UI_HAS_JOYSTICK_UPDOWN=1 + -D JOYSTICK_UP=23 + -D JOYSTICK_DOWN=6 + -D JOYSTICK_LEFT=47 + -D JOYSTICK_RIGHT=48 + -D PIN_BACK_BTN=0 ; PRG button + -D PIN_USER_BTN=33 ; joystick press contact -- Enter, overrides the PRG default above +; -D PIN_BUZZER= +build_src_filter = ${heltec_v4_oled.build_src_filter} + + + + + + + + + +<../examples/companion_radio/*.cpp> + +<../examples/companion_radio/ui-new/*.cpp> +lib_deps = + ${heltec_v4_oled.lib_deps} + densaugeo/base64 @ ~1.4.0 + end2endzone/NonBlockingRTTTL@^1.3.0 diff --git a/solo/lilygo_techo_lite/platformio.ini b/solo/lilygo_techo_lite/platformio.ini new file mode 100644 index 00000000..fccfdc27 --- /dev/null +++ b/solo/lilygo_techo_lite/platformio.ini @@ -0,0 +1,43 @@ +; Solo build for LilyGO T-Echo Lite + KeyShield -- extends the board base +; defined in variants/lilygo_techo_lite/platformio.ini. Solo configs live in +; their own top-level solo/ folder, separate from the shared upstream board +; variants in variants/, so this repo's Solo-specific additions don't get +; mixed in with configs other MeshCore forks/upstream also carry. +; +[env:LilyGo_T-Echo-Lite_keyshield_companion_solo_dual] +extends = LilyGo_T-Echo-Lite +board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld +board_upload.maximum_size = 712704 +; Optimise for size, not speed: the nRF52 Arduino core defaults to -Ofast +; (≈ -O3 + -ffast-math), which bloats flash by ~200 KB on this feature-rich +; solo build. -Os keeps every feature, fits comfortably, and is actually safer +; for float (no fast-math reassociation). Speed is irrelevant for the UI/mesh. +build_unflags = -Ofast +build_flags = + ${LilyGo_T-Echo-Lite.build_flags} + -I src/helpers/ui + -I examples/companion_radio/ui-new + -D LILYGO_TECHO_LITE_KEYSHIELD + -D MAX_CONTACTS=350 + -D MAX_GROUP_CHANNELS=40 + ; -D QSPIFLASH=1 + -D BLE_PIN_CODE=123456 + ; -D BLE_DEBUG_LOGGING=1 + -D OFFLINE_QUEUE_SIZE=256 + -D UI_RECENT_LIST_SIZE=9 + -D UI_SENSORS_PAGE=1 + ; -D MESH_PACKET_LOGGING=1 + ; -D MESH_DEBUG=1 + -D ENV_USE_TCA8418=1 + -D FIRMWARE_SOLO_BUILD=1 + -D MESHCORE_VERSION='"1.17"' + -D ENABLE_SCREENSHOT + -Os +build_src_filter = ${LilyGo_T-Echo-Lite.build_src_filter} + + + +<../examples/companion_radio/*.cpp> + +<../examples/companion_radio/ui-new/*.cpp> +lib_deps = + ${LilyGo_T-Echo-Lite.lib_deps} + densaugeo/base64 @ ~1.4.0 + ;https://github.com/lewisxhe/SensorLib.git diff --git a/solo/m5stack_cardputer_adv/platformio.ini b/solo/m5stack_cardputer_adv/platformio.ini new file mode 100644 index 00000000..42201b93 --- /dev/null +++ b/solo/m5stack_cardputer_adv/platformio.ini @@ -0,0 +1,34 @@ +; Solo build for M5Stack Cardputer ADV -- extends the board base defined in +; variants/m5stack_cardputer_adv/platformio.ini. Solo configs live in their own +; top-level solo/ folder, separate from the shared upstream board variants in +; variants/, so this repo's Solo-specific additions don't get mixed in with +; configs other MeshCore forks/upstream also carry. +; +[env:M5Stack_Cardputer_ADV_companion_solo_dual] +extends = M5Stack_Cardputer_ADV +build_flags = + ${M5Stack_Cardputer_ADV.build_flags} + -I examples/companion_radio/ui-new + -D MAX_CONTACTS=350 + -D MAX_GROUP_CHANNELS=40 + -D BLE_PIN_CODE=123456 + -D DUAL_SERIAL=1 + -D OFFLINE_QUEUE_SIZE=256 + -D FIRMWARE_SOLO_BUILD=1 + -D MESHCORE_VERSION='"1.17"' + -D UI_SENSORS_PAGE=1 + ; misc-fixed 6x9 font (full Latin/Greek/Cyrillic), same as the Wio L1/Heltec + ; solo builds. Solo only: it costs ~14 KB of flash, and this board's own + ; QWERTY keyboard is exactly the case that benefits from typing those + ; alphabets and having them render as themselves instead of blocks. + -D OLED_MISC_FIXED_FONT=1 +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +build_src_filter = ${M5Stack_Cardputer_ADV.build_src_filter} + + + + + +<../examples/companion_radio/*.cpp> + +<../examples/companion_radio/ui-new/*.cpp> +lib_deps = + ${M5Stack_Cardputer_ADV.lib_deps} + densaugeo/base64 @ ~1.4.0 diff --git a/solo/wio-tracker-l1-eink/platformio.ini b/solo/wio-tracker-l1-eink/platformio.ini new file mode 100644 index 00000000..3dd6d146 --- /dev/null +++ b/solo/wio-tracker-l1-eink/platformio.ini @@ -0,0 +1,19 @@ +; Solo build for Seeed Wio Tracker L1 (E-ink) -- extends WioTrackerL1Eink, +; defined in variants/wio-tracker-l1-eink/platformio.ini. Solo configs live in +; their own top-level solo/ folder, separate from the shared upstream board +; variants in variants/, so this repo's Solo-specific additions don't get +; mixed in with configs other MeshCore forks/upstream also carry. +; +; Dual BLE+USB with added Solo +[env:WioTrackerL1Eink_companion_solo_dual] +extends = WioTrackerL1Eink +; Optimise for size, not speed: the nRF52 Arduino core defaults to -Ofast +; (≈ -O3 + -ffast-math), which bloats flash by ~200 KB on this feature-rich +; solo build. -Os keeps every feature, fits comfortably, and is actually safer +; for float (no fast-math reassociation). Speed is irrelevant for the UI/mesh. +build_unflags = -Ofast +build_flags = ${WioTrackerL1Eink.build_flags} + -D DUAL_SERIAL=1 + -D ENABLE_SCREENSHOT + -Os +extra_scripts = post:create-uf2.py diff --git a/solo/wio-tracker-l1/platformio.ini b/solo/wio-tracker-l1/platformio.ini new file mode 100644 index 00000000..e727680f --- /dev/null +++ b/solo/wio-tracker-l1/platformio.ini @@ -0,0 +1,19 @@ +; Solo build for Seeed Wio Tracker L1 (OLED) -- extends WioTrackerL1CompanionDual, +; defined in variants/wio-tracker-l1/platformio.ini. Solo configs live in their +; own top-level solo/ folder, separate from the shared upstream board variants +; in variants/, so this repo's Solo-specific additions don't get mixed in with +; configs other MeshCore forks/upstream also carry. +; +[env:WioTrackerL1_companion_solo_dual] +extends = WioTrackerL1CompanionDual +; Optimise for size, not speed: the nRF52 Arduino core defaults to -Ofast +; (≈ -O3 + -ffast-math), which bloats flash by ~200 KB on this feature-rich +; solo build. -Os keeps every feature, fits comfortably, and is actually safer +; for float (no fast-math reassociation). Speed is irrelevant for the UI/mesh. +build_unflags = -Ofast +build_flags = ${WioTrackerL1CompanionDual.build_flags} + -D UI_HAS_JOYSTICK_UPDOWN=1 + -D ENABLE_SCREENSHOT + -D DUAL_SERIAL=1 + -Os +extra_scripts = post:create-uf2.py diff --git a/variants/gat562_30s_mesh_kit/platformio.ini b/variants/gat562_30s_mesh_kit/platformio.ini index 7fe96f5c..ef6e9f6d 100644 --- a/variants/gat562_30s_mesh_kit/platformio.ini +++ b/variants/gat562_30s_mesh_kit/platformio.ini @@ -113,91 +113,6 @@ lib_deps = densaugeo/base64 @ ~1.4.0 end2endzone/NonBlockingRTTTL@^1.3.0 -[env:GAT562_30S_Mesh_Kit_solo_ble] -extends = GAT562_30S_Mesh_Kit -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 712704 -; Optimise for size, not speed: the nRF52 Arduino core defaults to -Ofast -; (≈ -O3 + -ffast-math), which bloats flash by ~200 KB on this feature-rich -; solo build. -Os keeps every feature, fits comfortably, and is actually safer -; for float (no fast-math reassociation). Speed is irrelevant for the UI/mesh. -build_unflags = -Ofast -build_flags = - ${GAT562_30S_Mesh_Kit.build_flags} - -I examples/companion_radio/ui-new - -D DISPLAY_CLASS=SSD1306Display - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D OFFLINE_QUEUE_SIZE=256 - -D FIRMWARE_SOLO_BUILD=1 - -D MESHCORE_VERSION='"1.17"' - -D UI_SENSORS_PAGE=1 - -D UI_HAS_JOYSTICK_UPDOWN=1 - -D ADVERT_NAME='"@@MAC"' - -D ENV_INCLUDE_GPS=1 - ; misc-fixed 6x9 OLED font (full Latin/Greek/Cyrillic), same as the Wio L1 - ; builds. Solo only: it costs ~14 KB of flash and the repeater/companion - ; builds have no keyboard to type those alphabets on. - -D OLED_MISC_FIXED_FONT=1 - -Os - ; QSPIFLASH disabled: QSPI IO0/IO2 pins (P0.30/P0.28) conflict with joystick LEFT/UP - ; -D MESH_PACKET_LOGGING=1 - ; -D MESH_DEBUG=1 -build_src_filter = ${GAT562_30S_Mesh_Kit.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${GAT562_30S_Mesh_Kit.lib_deps} - adafruit/RTClib @ ^2.1.3 - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 - -[env:GAT562_30S_Mesh_Kit_solo_dual] -extends = GAT562_30S_Mesh_Kit -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 712704 -; Optimise for size, not speed: the nRF52 Arduino core defaults to -Ofast -; (≈ -O3 + -ffast-math), which bloats flash by ~200 KB on this feature-rich -; solo build. -Os keeps every feature, fits comfortably, and is actually safer -; for float (no fast-math reassociation). Speed is irrelevant for the UI/mesh. -build_unflags = -Ofast -build_flags = - ${GAT562_30S_Mesh_Kit.build_flags} - -I examples/companion_radio/ui-new - -D DISPLAY_CLASS=SSD1306Display - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D OFFLINE_QUEUE_SIZE=256 - -D FIRMWARE_SOLO_BUILD=1 - -D MESHCORE_VERSION='"1.17"' - -D UI_SENSORS_PAGE=1 - -D UI_HAS_JOYSTICK_UPDOWN=1 - -D ADVERT_NAME='"@@MAC"' - -D ENV_INCLUDE_GPS=1 - ; misc-fixed 6x9 OLED font (full Latin/Greek/Cyrillic), same as the Wio L1 - ; builds. Solo only: it costs ~14 KB of flash and the repeater/companion - ; builds have no keyboard to type those alphabets on. - -D OLED_MISC_FIXED_FONT=1 - -D DUAL_SERIAL=1 - -D ENABLE_SCREENSHOT - -Os - ; QSPIFLASH disabled: QSPI IO0/IO2 pins (P0.30/P0.28) conflict with joystick LEFT/UP - ; -D MESH_PACKET_LOGGING=1 - ; -D MESH_DEBUG=1 -build_src_filter = ${GAT562_30S_Mesh_Kit.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${GAT562_30S_Mesh_Kit.lib_deps} - adafruit/RTClib @ ^2.1.3 - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 [env:GAT562_30S_Mesh_Kit_kiss_modem] extends = GAT562_30S_Mesh_Kit diff --git a/variants/gat562_mesh_watch13/platformio.ini b/variants/gat562_mesh_watch13/platformio.ini index 13fd3e16..f3510b74 100644 --- a/variants/gat562_mesh_watch13/platformio.ini +++ b/variants/gat562_mesh_watch13/platformio.ini @@ -87,45 +87,6 @@ lib_deps = ${GAT562_Mesh_Watch13.lib_deps} densaugeo/base64 @ ~1.4.0 -[env:GAT562_Mesh_Watch13_solo_ble] -extends = GAT562_Mesh_Watch13 -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 712704 -build_flags = - ${GAT562_Mesh_Watch13.build_flags} - -I examples/companion_radio/ui-new - -D DISPLAY_CLASS=SSD1306Display - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D OFFLINE_QUEUE_SIZE=256 - -D FIRMWARE_SOLO_BUILD=1 - -D MESHCORE_VERSION='"1.17"' - -D UI_SENSORS_PAGE=1 - -D ADVERT_NAME='"@@MAC"' - ; GPS — re-enable (base undefines it); Serial1 pins 15/16 from variant - -D ENV_INCLUDE_GPS=1 - -D GPS_BAUD_RATE=9600 - ; Buzzer available on IO3 (pin 21) — uncomment to enable -; -D PIN_BUZZER=21 -; -D PIN_VIBRATION=36 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${GAT562_Mesh_Watch13.build_src_filter} - + - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -; If PIN_BUZZER is enabled above, also add: -; + -lib_deps = - ${GAT562_Mesh_Watch13.lib_deps} - adafruit/RTClib @ ^2.1.3 - densaugeo/base64 @ ~1.4.0 -; If PIN_BUZZER is enabled, also add: -; end2endzone/NonBlockingRTTTL@^1.3.0 - [env:GAT562_Mesh_Watch13_kiss_modem] extends = GAT562_Mesh_Watch13 build_src_filter = ${GAT562_Mesh_Watch13.build_src_filter} diff --git a/variants/heltec_v3/platformio.ini b/variants/heltec_v3/platformio.ini index b1515020..65e636eb 100644 --- a/variants/heltec_v3/platformio.ini +++ b/variants/heltec_v3/platformio.ini @@ -180,91 +180,6 @@ lib_deps = ${Heltec_lora32_v3.lib_deps} densaugeo/base64 @ ~1.4.0 -; Solo build: the full standalone on-device UI (message history, contacts, map, -; tools) rather than a screen that only mirrors the phone app. Dual transport -- -; the companion app can attach over BLE or USB serial, whichever it finds, and -; BLE wins while both are live. -; -; This firmware needs a real input device: the solo UI cannot be driven from the -; PRG button alone. Both supported ones are wired up in target.cpp and enabled -; below, so either is enough on its own and having both is fine. The pins are -; defaults picked from what this board leaves free -- change them to match how -; the device is actually built. Pins with nothing attached read as not-pressed, -; so the unused half costs nothing. -; -; * CardKB (M5Stack I2C keyboard, addr 0x5F) on a second I2C bus. Any two free -; GPIOs -- NOT 17/18, the OLED already owns those on Wire. It's probed at -; boot, so a build with these set still runs fine with nothing plugged in. -; Pair it with Settings > Keyboard > Ext. KB = Compact, which is designed to -; need no joystick at all. The same bus is scanned for environment sensors. -; -; * Wired joystick: four direction pins plus a fifth "press" contact. The -; press contact drives Enter (your thumb's already on the stick) via -; PIN_USER_BTN -- overridden below (a later -D wins, no -U needed: this whole -; project builds with -w) from the PRG-button default -; the base env sets, since PRG's GPIO0 can't be moved to the stick. PRG -; becomes Back instead (PIN_BACK_BTN), so it no longer needs its own -; separately-wired button. Each contact just shorts its pin to GND; -; target.cpp enables the internal pull-ups. Drop -; UI_HAS_JOYSTICK_UPDOWN for a left/right-only stick. JOYSTICK_ROTATION (0-3) -; rotates the mapping if the stick is mounted sideways -- it's also a runtime -; setting, so leave it out unless you want a different default. -; Comment the whole block out for a CardKB-only build. UI_HAS_JOYSTICK -; replaces the single-button handling rather than adding to it (UITask.cpp -; dispatches on '#if UI_HAS_JOYSTICK ... #elif defined(PIN_USER_BTN)'), which -; costs nothing here -- that fallback only feeds KEY_NEXT/KEY_PREV, which the -; solo screens don't act on. -; -; V3 and V4 are pin-compatible per Heltec's own docs, so the defaults below are -; carried over from the heltec_v4_companion_solo_dual env, where this exact -; CardKB + joystick combination is confirmed working on real hardware -- still -; worth checking against your own V3 module before soldering, but not a blind -; guess like the earlier SDA 41/SCL 42 default was. PIN_GPS_RX=47/TX=48/EN=26 -; above are dead defines on V3 (ENV_INCLUDE_GPS is never set to 1 in this file), -; so they don't conflict with reusing 47/48 here despite the name. -[env:Heltec_v3_companion_solo_dual] -extends = Heltec_lora32_v3 -build_flags = - ${Heltec_lora32_v3.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D DISPLAY_CLASS=SSD1306Display - -D BLE_PIN_CODE=123456 ; dynamic, random PIN - -D DUAL_SERIAL=1 ; companion app over BLE *or* USB serial - -D AUTO_SHUTDOWN_MILLIVOLTS=3400 - -D OFFLINE_QUEUE_SIZE=256 - -D FIRMWARE_SOLO_BUILD=1 - -D UI_SENSORS_PAGE=1 - -D OLED_MISC_FIXED_FONT=1 ; full Latin/Greek/Cyrillic 6x9 font, ~14 KB flash - -D ENABLE_SCREENSHOT ; same as the other solo builds — Solo Tools reads the framebuffer over USB - ; CardKB on the second I2C bus. Harmless with nothing plugged in. - -D ENV_PIN_SDA=3 - -D ENV_PIN_SCL=4 - ; Wired joystick — comment the block out for a CardKB-only build. The - ; press contact (Enter) overrides PIN_USER_BTN from its PRG default; - ; PRG becomes Back (PIN_BACK_BTN) instead. - -D UI_HAS_JOYSTICK=1 - -D UI_HAS_JOYSTICK_UPDOWN=1 - -D JOYSTICK_UP=23 - -D JOYSTICK_DOWN=6 - -D JOYSTICK_LEFT=47 - -D JOYSTICK_RIGHT=48 - -D PIN_BACK_BTN=0 ; PRG button - -D PIN_USER_BTN=33 ; joystick press contact -- Enter, overrides the PRG default above -; -D PIN_BUZZER= -build_src_filter = ${Heltec_lora32_v3.build_src_filter} - + - + - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${Heltec_lora32_v3.lib_deps} - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 - [env:Heltec_v3_companion_radio_wifi] extends = Heltec_lora32_v3 build_flags = diff --git a/variants/heltec_v4/platformio.ini b/variants/heltec_v4/platformio.ini index 65fb8fc7..d718c006 100644 --- a/variants/heltec_v4/platformio.ini +++ b/variants/heltec_v4/platformio.ini @@ -223,98 +223,6 @@ lib_deps = ${heltec_v4_oled.lib_deps} densaugeo/base64 @ ~1.4.0 -; Solo build: the full standalone on-device UI (message history, contacts, map, -; tools) rather than a screen that only mirrors the phone app. Dual transport -- -; the companion app can attach over BLE or USB serial, whichever it finds, and -; BLE wins while both are live. OLED board only -- the TFT variant would need -; its own DISPLAY_CLASS. -; -; This firmware needs a real input device: the solo UI cannot be driven from the -; PRG button alone. Both supported ones are wired up in target.cpp and enabled -; below, so either is enough on its own and having both is fine. The pins are -; defaults picked from what this board leaves free -- change them to match how -; the device is actually built. Pins with nothing attached read as not-pressed, -; so the unused half costs nothing. -; -; * CardKB (M5Stack I2C keyboard, addr 0x5F) on a second I2C bus. Any two free -; GPIOs -- NOT 17/18, the OLED already owns those on Wire. It's probed at -; boot, so a build with these set still runs fine with nothing plugged in. -; Pair it with Settings > Keyboard > Ext. KB = Compact, which is designed to -; need no joystick at all. The same bus is scanned for environment sensors. -; Defaults below: SDA 3, SCL 4 -- the pins heltec_v4_sensor and -; heltec_v4_expansionkit_repeater already use for their second I2C bus, i.e. -; the expansion kit's. (Those envs disagree on the order: two say SDA 3 / -; SCL 4, one says the reverse. 3/4 is the pair either way; swap them if the -; keyboard doesn't answer.) -; -; * Wired joystick: four direction pins plus a fifth "press" contact. The -; press contact drives Enter (your thumb's already on the stick) via -; PIN_USER_BTN -- overridden below (a later -D wins, no -U needed: this whole -; project builds with -w) from the PRG-button default -; the base env sets, since PRG's GPIO0 can't be moved to the stick. PRG -; becomes Back instead (PIN_BACK_BTN), so it no longer needs its own -; separately-wired button. Each contact just shorts its pin to GND; -; target.cpp enables the internal pull-ups. Drop -; UI_HAS_JOYSTICK_UPDOWN for a left/right-only stick. JOYSTICK_ROTATION (0-3) -; rotates the mapping if the stick is mounted sideways -- it's also a runtime -; setting, so leave it out unless you want a different default. -; Comment the whole block out for a CardKB-only build. UI_HAS_JOYSTICK -; replaces the single-button handling rather than adding to it (UITask.cpp -; dispatches on '#if UI_HAS_JOYSTICK ... #elif defined(PIN_USER_BTN)'), which -; costs nothing here -- that fallback only feeds KEY_NEXT/KEY_PREV, which the -; solo screens don't act on. -; -; Free on this board, per its pinout: 3, 4, 6, 23, 33, 43, 44, 45, 46, 47, 48. -; Two of those can't take an I2C pull-up: 45 selects VDD_SPI at boot, so held -; high the chip comes up expecting 1.8V flash and won't boot at all, and 46 is -; the boot-mode strap. 3 is a strapping pin too, but it only picks the JTAG -; source -- and it's what this board's own expansion kit uses for I2C anyway. -; 43/44 are UART0: unused by this build, since ARDUINO_USB_CDC_ON_BOOT (set in -; boards/heltec_v4.json) makes Serial the native USB port, but a USB-UART bridge -; may still be wired to them, so they're left alone. -[env:heltec_v4_companion_solo_dual] -extends = heltec_v4_oled -build_flags = - ${heltec_v4_oled.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D DISPLAY_CLASS=SSD1306Display - -D BLE_PIN_CODE=123456 ; dynamic, random PIN - -D DUAL_SERIAL=1 ; companion app over BLE *or* USB serial - -D AUTO_SHUTDOWN_MILLIVOLTS=3400 - -D OFFLINE_QUEUE_SIZE=256 - -D FIRMWARE_SOLO_BUILD=1 - -D UI_SENSORS_PAGE=1 - -D OLED_MISC_FIXED_FONT=1 ; full Latin/Greek/Cyrillic 6x9 font, ~14 KB flash - -D ENABLE_SCREENSHOT ; same as the other solo builds — Solo Tools reads the framebuffer over USB - ; CardKB on the second I2C bus. Harmless with nothing plugged in. - -D ENV_PIN_SDA=3 - -D ENV_PIN_SCL=4 - ; Wired joystick — comment the block out for a CardKB-only build. The - ; press contact (Enter) overrides PIN_USER_BTN from its PRG default; - ; PRG becomes Back (PIN_BACK_BTN) instead. - -D UI_HAS_JOYSTICK=1 - -D UI_HAS_JOYSTICK_UPDOWN=1 - -D JOYSTICK_UP=23 - -D JOYSTICK_DOWN=6 - -D JOYSTICK_LEFT=47 - -D JOYSTICK_RIGHT=48 - -D PIN_BACK_BTN=0 ; PRG button - -D PIN_USER_BTN=33 ; joystick press contact -- Enter, overrides the PRG default above -; -D PIN_BUZZER= -build_src_filter = ${heltec_v4_oled.build_src_filter} - + - + - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${heltec_v4_oled.lib_deps} - densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 - [env:heltec_v4_companion_radio_wifi] extends = heltec_v4_oled build_flags = diff --git a/variants/lilygo_techo_lite/platformio.ini b/variants/lilygo_techo_lite/platformio.ini index cb45ff41..a0b833c8 100644 --- a/variants/lilygo_techo_lite/platformio.ini +++ b/variants/lilygo_techo_lite/platformio.ini @@ -45,45 +45,6 @@ lib_deps = debug_tool = jlink upload_protocol = nrfutil -[env:LilyGo_T-Echo-Lite_keyshield_companion_solo_dual] -extends = LilyGo_T-Echo-Lite -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 712704 -; Optimise for size, not speed: the nRF52 Arduino core defaults to -Ofast -; (≈ -O3 + -ffast-math), which bloats flash by ~200 KB on this feature-rich -; solo build. -Os keeps every feature, fits comfortably, and is actually safer -; for float (no fast-math reassociation). Speed is irrelevant for the UI/mesh. -build_unflags = -Ofast -build_flags = - ${LilyGo_T-Echo-Lite.build_flags} - -I src/helpers/ui - -I examples/companion_radio/ui-new - -D LILYGO_TECHO_LITE_KEYSHIELD - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - ; -D QSPIFLASH=1 - -D BLE_PIN_CODE=123456 - ; -D BLE_DEBUG_LOGGING=1 - -D OFFLINE_QUEUE_SIZE=256 - -D UI_RECENT_LIST_SIZE=9 - -D UI_SENSORS_PAGE=1 - ; -D MESH_PACKET_LOGGING=1 - ; -D MESH_DEBUG=1 - -D AUTO_SHUTDOWN_MILLIVOLTS=3300 - -D ENV_USE_TCA8418=1 - -D FIRMWARE_SOLO_BUILD=1 - -D MESHCORE_VERSION='"1.17"' - -D ENABLE_SCREENSHOT - -Os -build_src_filter = ${LilyGo_T-Echo-Lite.build_src_filter} - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${LilyGo_T-Echo-Lite.lib_deps} - densaugeo/base64 @ ~1.4.0 - ;https://github.com/lewisxhe/SensorLib.git - [env:LilyGo_T-Echo-Lite_repeater] extends = LilyGo_T-Echo-Lite build_src_filter = ${LilyGo_T-Echo-Lite.build_src_filter} diff --git a/variants/m5stack_cardputer_adv/platformio.ini b/variants/m5stack_cardputer_adv/platformio.ini index 465dedbb..83955333 100644 --- a/variants/m5stack_cardputer_adv/platformio.ini +++ b/variants/m5stack_cardputer_adv/platformio.ini @@ -97,35 +97,6 @@ lib_deps = ${M5Stack_Cardputer_ADV.lib_deps} densaugeo/base64 @ ~1.4.0 -[env:M5Stack_Cardputer_ADV_companion_solo_dual] -extends = M5Stack_Cardputer_ADV -build_flags = - ${M5Stack_Cardputer_ADV.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D DUAL_SERIAL=1 - -D OFFLINE_QUEUE_SIZE=256 - -D FIRMWARE_SOLO_BUILD=1 - -D MESHCORE_VERSION='"1.17"' - -D UI_SENSORS_PAGE=1 - ; misc-fixed 6x9 font (full Latin/Greek/Cyrillic), same as the Wio L1/Heltec - ; solo builds. Solo only: it costs ~14 KB of flash, and this board's own - ; QWERTY keyboard is exactly the case that benefits from typing those - ; alphabets and having them render as themselves instead of blocks. - -D OLED_MISC_FIXED_FONT=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${M5Stack_Cardputer_ADV.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${M5Stack_Cardputer_ADV.lib_deps} - densaugeo/base64 @ ~1.4.0 - [env:M5Stack_Cardputer_ADV_repeater] extends = M5Stack_Cardputer_ADV build_flags = diff --git a/variants/wio-tracker-l1-eink/platformio.ini b/variants/wio-tracker-l1-eink/platformio.ini index 9a10923e..c4fb4834 100644 --- a/variants/wio-tracker-l1-eink/platformio.ini +++ b/variants/wio-tracker-l1-eink/platformio.ini @@ -70,20 +70,6 @@ build_flags = ${WioTrackerL1Eink.build_flags} -D DUAL_SERIAL=1 extra_scripts = post:create-uf2.py -; Dual BLE+USB with added Solo -[env:WioTrackerL1Eink_companion_solo_dual] -extends = WioTrackerL1Eink -; Optimise for size, not speed: the nRF52 Arduino core defaults to -Ofast -; (≈ -O3 + -ffast-math), which bloats flash by ~200 KB on this feature-rich -; solo build. -Os keeps every feature, fits comfortably, and is actually safer -; for float (no fast-math reassociation). Speed is irrelevant for the UI/mesh. -build_unflags = -Ofast -build_flags = ${WioTrackerL1Eink.build_flags} - -D DUAL_SERIAL=1 - -D ENABLE_SCREENSHOT - -Os -extra_scripts = post:create-uf2.py - ; Dual BLE+USB with screenshot support (development/debug) [env:WioTrackerL1Eink_companion_dual_dev] extends = WioTrackerL1Eink diff --git a/variants/wio-tracker-l1/platformio.ini b/variants/wio-tracker-l1/platformio.ini index 7a336a77..c77ec713 100644 --- a/variants/wio-tracker-l1/platformio.ini +++ b/variants/wio-tracker-l1/platformio.ini @@ -150,20 +150,6 @@ build_flags = ${WioTrackerL1CompanionDual.build_flags} -D UI_HAS_JOYSTICK_UPDOWN=1 extra_scripts = post:create-uf2.py -[env:WioTrackerL1_companion_solo_dual] -extends = WioTrackerL1CompanionDual -; Optimise for size, not speed: the nRF52 Arduino core defaults to -Ofast -; (≈ -O3 + -ffast-math), which bloats flash by ~200 KB on this feature-rich -; solo build. -Os keeps every feature, fits comfortably, and is actually safer -; for float (no fast-math reassociation). Speed is irrelevant for the UI/mesh. -build_unflags = -Ofast -build_flags = ${WioTrackerL1CompanionDual.build_flags} - -D UI_HAS_JOYSTICK_UPDOWN=1 - -D ENABLE_SCREENSHOT - -D DUAL_SERIAL=1 - -Os -extra_scripts = post:create-uf2.py - [env:WioTrackerL1_companion_dual_dev] extends = WioTrackerL1CompanionDual build_flags = ${WioTrackerL1CompanionDual.build_flags}