Commit Graph

1005 Commits

Author SHA1 Message Date
Jakub
c7009140ce refactor: rename firmware from Plus to Solo
- FIRMWARE_VERSION: v1.15-plus.1 → v1.15-solo.1
- FIRMWARE_PLUS_BUILD → FIRMWARE_SOLO_BUILD in all platformio.ini and UITask.cpp
- docs/plus_features/ → docs/solo_features/ (all sub-docs moved)
- README: update all doc links plus new Documentation section
- GitHub Actions: extract GIT_TAG_VERSION in each build job (was missing,
  causing empty FIRMWARE_VERSION in builds); rename output files to
  solo-VERSION-oled.uf2 / solo-VERSION-eink.uf2; release title → "Solo VERSION"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 12:25:34 +02:00
Jakub
7d9d5f847d feat(screenshot): extend e-ink screenshot support via GxEPD2 patch
- Add lib/GxEPD2-patch/src/GxEPD2_BW.h: local patched copy of GxEPD2_BW.h
  that exposes getBuffer()/getBufferSize() under ENABLE_SCREENSHOT guard.
  Include guard (_GxEPD2_BW_H_) prevents double-inclusion of the installed
  library version.

- GxEPDDisplay.h: use patched header via relative include when
  ENABLE_SCREENSHOT so the patch takes precedence over the installed lib
  (PlatformIO adds library paths before -I build_flags).

- DisplayDriver.h: add virtual getBuffer()/getBufferSize()/getDisplayType()
  defaults (nullptr/0/0) under ENABLE_SCREENSHOT.

- SH1106Display.h / SSD1306Display.h / GxEPDDisplay.h: add concrete overrides;
  getDisplayType() returns 0 (OLED) or 1 (e-ink).

- MyMesh.cpp/h: replace fragile C-cast with virtual dispatch in
  handleScreenshotRequest(); extend 5-byte header to 6 bytes by appending
  display_type so the host tool can decode the correct pixel layout.

- tools/screenshot.py: parse 6-byte header; add eink_buffer_to_image()
  that decodes the row-major MSB-first GxEPD2 buffer with DISPLAY_ROTATION=1
  (phys_x = 127-ly, phys_y = lx); dispatch on display_type.

- variants/wio-tracker-l1-eink/platformio.ini: add
  [env:WioTrackerL1Eink_companion_dual_dev] with ENABLE_SCREENSHOT.
- variants/wio-tracker-l1/platformio.ini: unchanged (OLED env already exists).

Builds verified: WioTrackerL1Eink_companion_dual_dev SUCCESS,
                 WioTrackerL1Eink_companion_radio_ble SUCCESS (unaffected).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 01:03:47 +02:00
Jakub
34fcab6bd5 feat(ui): show MeshCore version large and plus version in splash bar
Add MESHCORE_VERSION build flag ("1.15") to companion base configs.
Splash screen now shows MESHCORE_VERSION in the large text and the
plus firmware version (stripped of commit hash) in the Plus bar,
e.g. "1.15" large + "Plus v1.11 for Wio" below.

Change CI tag pattern to v* and simplify version extraction so tag
v1.11 maps directly to FIRMWARE_VERSION=v1.11.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 00:35:07 +02:00
Jakub
137b0234d5 ci: rename dual envs and fix tag-triggered builds for OLED and e-ink
Rename WioTrackerL1_companion_radio_dual_settings → WioTrackerL1_companion_dual
and WioTrackerL1Eink_companion_radio_dual → WioTrackerL1Eink_companion_dual.

Fix CI workflow: remove hardcoded branch refs so both build jobs check out
the tagged commit; add version extraction to each build job (previously
GIT_TAG_VERSION was only set in the release job, leaving FIRMWARE_VERSION
empty during builds); update build commands to use new env names.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 00:13:34 +02:00
Jakub
0b6aaff49b refactor(eink): collapse landscape/portrait build targets into one per serial mode
Display rotation is now a runtime setting (Settings → Rotation), so separate
build targets for landscape/portrait are redundant. Collapsed four envs into two:

  WioTrackerL1Eink_companion_radio_ble   — BLE only
  WioTrackerL1Eink_companion_radio_dual  — BLE + USB (DUAL_SERIAL)

Default DISPLAY_ROTATION=1 (landscape, 250×122) moved to the shared base
section; users adjust orientation via the in-app Settings screen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 17:04:12 +02:00
Jakub
cffe960f3f feat: rework GxEPDDisplay for rotation support and integrate e-ink build
- Remove fixed 128×128 virtual space and scaling; use 1:1 pixel mapping
- Display dimensions derived from panel native size + DISPLAY_ROTATION
- setCursor compensates for GFX font baseline offset (ascender per font size)
- Add getLineHeight() / getCharWidth() overrides for FreeSans fonts
- New envs: landscape (250×122) and portrait (122×250), BLE and dual variants
- Integrate all wio-tracker-l1-improvements features into e-ink build

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 09:53:55 +02:00
Jakub
72c07df8b3 fix: code review corrections in DualSerialInterface and NearbyScreen
- DualSerialInterface: guard writeFrame/isWriteBusy/isBLEConnected with
  _ble_enabled to avoid BLE-after-disable race
- NearbyScreen: initialize all fields in constructor; promote D_* layout
  constants to class scope; clamp _dscroll on result count change;
  replace hardcoded 2 with D_VISIBLE in scroll logic; allow re-scan
  from detail view via KEY_CONTEXT_MENU/KEY_ENTER
- variant.cpp: fix inconsistent indentation in initVariant()

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 22:08:28 +02:00
Jakub
5828600d48 feat: dual BLE+USB serial — single firmware replaces separate BLE/USB builds
- DualSerialInterface: enable()/disable() control BLE only, USB always on;
  USB state machine not read while BLE connected to avoid partial-frame
  corruption; reset USB on BLE disconnect for clean reconnect
- Fix -UBLE_DEBUG_LOGGING (no space) to avoid PlatformIO SCons parse error
- build.sh: drop separate USB/BLE builds, dual_settings only
- wio-tracker-l1-eink: enable DUAL_SERIAL in companion_radio_ble build

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 14:16:07 +02:00
Jakub
9427fa1999 fix: correct dual serial interface — routing, UI state, debug logging
- isConnected() returns true always (USB always available, mesh can send)
- isBLEConnected() added to BaseSerialInterface for BLE-specific UI/buzzer state
- MyMesh uses isBLEConnected() to update UITask connection indicator
- Disable BLE_DEBUG_LOGGING in dual build (would corrupt USB stream)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 18:24:55 +02:00
Jakub
1787752e82 feat: add dual BLE+USB serial interface for Wio Tracker L1
BLE takes priority when connected; USB is always ready as fallback.
Both state machines run continuously — no BLE disconnect on USB connect.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 18:20:10 +02:00
Jakub
ef24bb8554 Enable joystick up/down in all WioTrackerL1 companion builds
Moved UI_HAS_JOYSTICK_UPDOWN=1 from _settings-only variants to the
WioTrackerL1CompanionBLE and WioTrackerL1CompanionUSB base configs.
The hardware always had the up/down buttons; the flag was only in
_settings as a temporary testing boundary.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:09:47 +02:00
Jakub
d5a2e1170a Enable sensors page for Wio Tracker companion builds
UI_SENSORS_PAGE=1 activates the existing sensor display screen in
HomeScreen — shows temperature, pressure, humidity, voltage and other
LPP-formatted sensor data from connected I2C sensors (BME280, etc.).
BME280 support is already included via sensor_base build flags.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:09:47 +02:00
Jakub
81c69f89c6 Splash screen: show unofficial build marker for Plus builds
Add FIRMWARE_PLUS_BUILD compile flag to both companion sections in
platformio.ini. When set, SplashScreen shows "+ unofficial build" in
yellow below the build date. Avoids runtime string parsing — the
existing version stripping logic (cuts at first dash) is unchanged.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:09:47 +02:00
Jakub
3f7293c657 Fix FIRMWARE_VERSION: append -Plus in build.sh, not platformio.ini
build.sh sets FIRMWARE_VERSION via PLATFORMIO_BUILD_FLAGS — hardcoding
it in platformio.ini caused a macro redefinition conflict. Instead,
build_wio_tracker_l1_firmwares() now appends "-Plus" to the env var
before calling build_firmware(), so the final version string becomes
e.g. v1.15.0-Plus-abcdef.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:09:47 +02:00
Jakub
87aafce88f Set custom FIRMWARE_VERSION for Wio Tracker companion builds
Override the upstream FIRMWARE_VERSION define via build_flags so all
companion radio builds (USB and BLE) show "v1.15.0-Plus" on the splash
screen. The #ifndef guard in MyMesh.h makes this override automatic.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:09:47 +02:00
Jakub
4d46abb2c1 feat(wio-tracker-l1): energy optimizations
- CPU sleep: board.sleep(0) in main loop puts NRF52 into WFE/sd_app_evt_wait
  between iterations; wakes on any interrupt (radio, BLE, timer). Largest
  power saving of the three changes.

- VBAT_ENABLE gating: voltage divider now powered only during ADC read
  (HIGH for 10ms, then LOW). Previously stayed HIGH continuously.
  Fixed in both variant.cpp (init) and WioTrackerL1Board::getBattMilliVolts().

- LED off with display: PIN_LED is cleared when auto-off triggers and
  restored (handed back to userLedHandler) when display wakes. Avoids
  idle LED current draw during screen-off periods.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:09:46 +02:00
Jakub
c3846ba9f5 feat(wio-tracker-l1): add settings screen and companion radio improvements
Settings screen (UI_HAS_JOYSTICK_UPDOWN build variant):
- Display brightness (5 levels, contrast curve tuned for SH1106 non-linearity)
- Buzzer on/off (respected at startup, no more forced unmute)
- TX power (2–22 dBm)
- Auto-off delay (5s / 15s / 30s / 60s / never)
- GPS update interval (off / 30s / 1min / 5min / 15min / 30min)
- Timezone offset (UTC-12..+14) for clock screen
- Low battery auto-shutdown threshold (off / 3.0–3.5V, default 3.4V)
- Battery display mode (icon / % / voltage)

Battery:
- EMA filter (alpha=0.2) on ADC readings to smooth voltage spikes from uneven load
- Battery % calculated using low_batt_mv as 0% anchor
- Mute icon repositions dynamically based on battery display width

Clock screen on HomeScreen showing time/date with timezone support.

Build:
- _settings variants added for USB and BLE companion radio builds
- Automatic UF2 generation on every build via create-uf2.py post-script
- UI_HAS_JOYSTICK_UPDOWN flag guards joystick_up/down to avoid breaking other boards

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:09:46 +02:00
OhYou-0
68360157ec Add LilyGo T-ETH Elite board support 2026-04-24 10:16:19 -07:00
ripplebiz
35b5548c0c Merge pull request #2328 from recrof/xiao_c3-companion-fix
fix: remove sensors from xiao c3 companion because of bootloops
2026-04-18 20:44:15 +10:00
Liam Cottle
54a48da6b5 Merge pull request #2306 from petrkr/otaupdate2
SDK3.x: Fix OTA includes, bump Async version
2026-04-18 19:56:56 +12:00
Rastislav Vysoky
0899f66034 fix: remove sensors from xiao c3 companion because of bootloops 2026-04-18 09:42:27 +02:00
jirogit
230c9af87b feat: add USB Companion Radio env for Heltec Wireless Paper 2026-04-15 19:43:51 -07:00
Petr Kracik
e6c6282d40 Variants: Enable ElegantOTA on ESP32-C6 devices 2026-04-14 15:40:31 +02:00
Rastislav Vysoky
bd05eca9f5 Add OFFLINE_QUEUE_SIZE=256 for xiao nrf52 companion usb 2026-04-13 21:09:56 +02:00
Huw Duddy
49221fc159 Merge pull request #2298 from TheMalkavien/fix/waveshare-rp2040-rx-sensitivity
Fixes #2294 : RX path not enabled on Waveshare RP2040
2026-04-14 01:36:26 +10:00
Liam Cottle
748f9cfdda Merge pull request #2072 from robekl/fix-t1000e-pin-comments
Fix T1000-E pin comments
2026-04-13 02:27:19 +12:00
Liam Cottle
3ff8b17660 Merge pull request #1833 from olanwe/set-wifi-offline-queue-sizes
Set OFFLINE_QUEUE_SIZE=256 for missing WiFi companion environments
2026-04-13 01:41:07 +12:00
liamcottle
7d8d66c3e6 fix compilation error in wifi variants due to not enough ram 2026-04-13 01:03:32 +12:00
Malkavien
8056344b86 fix(waveshare-rp2040): add SX126X_RXEN=17 to restore RX sensitivity
The Waveshare RP2040-LoRa board has an RF switch with two complementary
control lines:
- DIO2 (CTRL)  -- driven automatically by the SX1262 chip: HIGH on TX,
  LOW on RX
- GPIO17 (!CTRL) -- was not configured in MeshCore, so it floated and
  the switch never properly selected the LNA/RX path

Without this pin driven, the RF switch never switches to RX mode,
resulting in completely degraded reception. TX was unaffected because
DIO2 alone is sufficient to activate the TX path.

Adding SX126X_RXEN=17 lets RadioLib drive GPIO17 as the complement of
DIO2, so the switch correctly routes the signal to the LNA on receive.

Reference: https://files.waveshare.com/wiki/RP2040-LoRa/Rp2040-lora-sch.pdf
2026-04-12 14:49:42 +02:00
Liam Cottle
a9de5bfc0c Merge pull request #1612 from weebl2000/default-button-low
Default button polarity to active-LOW across all firmware types
2026-04-12 23:30:28 +12:00
Liam Cottle
f2b61f1ce5 Merge pull request #1425 from thomasabbott/tcxo_voltage_fix_rp2040
RP2040 Update SX126X_DIO3_TCXO_VOLTAGE to 1.8 V
2026-04-12 22:45:00 +12:00
Snayler
d360931aa7 Merge branch 'meshcore-dev:dev' into dev 2026-04-10 18:31:52 +01:00
me
d9cfd075a5 fix: remove real WiFi credentials from ThinkNode M5 variant
variants/thinknode_m5/platformio.ini contained actual WiFi SSID and
password credentials (Livebox-633C) committed by mistake. Replaced
with placeholder values consistent with other variants (myssid/mypwd).
2026-04-05 22:50:59 -07:00
Wessel Nieboer
057542625b Fix T1000E press=high 2026-04-04 13:19:13 +02:00
Wessel Nieboer
0a13ac7fc7 Default button polarity to active-LOW across all firmware types
Nearly all LoRa boards use a boot button that pulls to ground when
pressed.
2026-04-04 13:19:13 +02:00
Liam Cottle
0afd5a9336 Merge pull request #2244 from jirogit/fix/generic-espnow-advert-name
fix: correct ADVERT_NAME for Generic ESPNow room server (was 'Heltec Room')
2026-04-04 17:24:50 +13:00
jirogit
6769b74df6 fix: correct ADVERT_NAME for Generic ESPNow room server (was 'Heltec Room')
env:Generic_ESPNOW_room_svr was using 'Heltec Room' as ADVERT_NAME,
causing Generic ESPNow room server nodes to advertise with the wrong
device name on the mesh.
2026-04-03 19:08:15 -07:00
jirogit
ce32d91ecb fix: correct ADVERT_NAME for ThinkNode M5 (was M2)
Repeater and Room Server environments in variants/thinknode_m5/platformio.ini
were using 'Thinknode M2' as the ADVERT_NAME, causing M5 nodes to advertise
with the wrong device name on the mesh.

- env:ThinkNode_M5_Repeater: 'Thinknode M2 Repeater' -> 'Thinknode M5 Repeater'
- env:ThinkNode_M5_room_server: 'Thinknode M2 Room Server' -> 'Thinknode M5 Room Server'
2026-04-03 18:55:39 -07:00
KPrivitt
27f732653b Added RAK12035 Soil Moisture and Temperature Sensor (#2223) 2026-04-03 22:54:24 +13:00
Liam Cottle
d0450bca99 Merge pull request #2228 from liamcottle/refactor/gat562-mesh-watch
Refactor GAT562 Mesh Watch
2026-04-02 17:19:12 +13:00
Liam Cottle
b934daa990 Merge pull request #2007 from khudson/r1neo
Muzi Works R1 Neo support
2026-04-02 00:36:44 +13:00
Liam Cottle
fcad0dc7ed Apply suggestion from @weebl2000
Co-authored-by: Wessel <wessel@weebl.me>
2026-04-02 00:27:58 +13:00
Liam Cottle
8fc9e1736c Apply suggestion from @weebl2000
Co-authored-by: Wessel <wessel@weebl.me>
2026-04-02 00:23:52 +13:00
liamcottle
b37201db89 double press top button to go back on gat562 mesh watch 2026-04-01 21:51:32 +13:00
liamcottle
1a897a3b5f use top button to wake hibernated gat562 mesh watch 2026-04-01 21:50:33 +13:00
Liam Cottle
856df241ee Merge pull request #2138 from MGJ520/dev_GAT562_Mesh_Watch13
Support for GAT562 Mesh Watch13 device
2026-03-31 21:54:38 +13:00
Snayler
bfdd5fb571 Fix formatting of ADC_MULTIPLIER definition 2026-03-27 01:23:04 +00:00
Snayler
4b25f0a3df Add correct ADC_MULTIPLIER definition to Heltec Wireless Paper 2026-03-27 01:19:46 +00:00
Snayler
50e9456f28 Define ADC_MULTIPLIER for adjustable ADC calculation 2026-03-27 01:17:39 +00:00
MGJ
76be69dcde Reduce unnecessary compilation time 2026-03-26 16:32:00 +08:00