diff --git a/.github/actions/setup-base/action.yml b/.github/actions/setup-base/action.yml
index 7b97e1753..7e57f6a31 100644
--- a/.github/actions/setup-base/action.yml
+++ b/.github/actions/setup-base/action.yml
@@ -5,7 +5,7 @@ runs:
using: "composite"
steps:
- name: Checkout code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
submodules: "recursive"
ref: ${{github.event.pull_request.head.ref}}
@@ -30,12 +30,12 @@ runs:
sudo apt-get install -y libyaml-cpp-dev
- name: Setup Python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.x
- name: Cache python libs
- uses: actions/cache@v3
+ uses: actions/cache@v4
id: cache-pip # needed in if test
with:
path: ~/.cache/pip
diff --git a/.github/workflows/build_esp32.yml b/.github/workflows/build_esp32.yml
index 31f0dd5a0..4cbb4c7a4 100644
--- a/.github/workflows/build_esp32.yml
+++ b/.github/workflows/build_esp32.yml
@@ -11,13 +11,13 @@ jobs:
build-esp32:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Build base
id: base
uses: ./.github/actions/setup-base
- name: Pull web ui
- uses: dsaltares/fetch-gh-release-asset@a40c8b4a0471f9ab81bdf73a010f74cc51476ad4
+ uses: dsaltares/fetch-gh-release-asset@master
with:
repo: meshtastic/web
file: build.tar
@@ -41,7 +41,7 @@ jobs:
run: bin/build-esp32.sh ${{ inputs.board }}
- name: Pull OTA Firmware
- uses: dsaltares/fetch-gh-release-asset@a40c8b4a0471f9ab81bdf73a010f74cc51476ad4
+ uses: dsaltares/fetch-gh-release-asset@master
with:
repo: meshtastic/firmware-ota
file: firmware.bin
@@ -54,9 +54,10 @@ jobs:
id: version
- name: Store binaries as an artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: firmware-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip
+ overwrite: true
path: |
release/*.bin
release/*.elf
diff --git a/.github/workflows/build_esp32_c3.yml b/.github/workflows/build_esp32_c3.yml
index a30cf33f1..07727d711 100644
--- a/.github/workflows/build_esp32_c3.yml
+++ b/.github/workflows/build_esp32_c3.yml
@@ -13,13 +13,13 @@ jobs:
build-esp32-c3:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Build base
id: base
uses: ./.github/actions/setup-base
- name: Pull web ui
- uses: dsaltares/fetch-gh-release-asset@a40c8b4a0471f9ab81bdf73a010f74cc51476ad4
+ uses: dsaltares/fetch-gh-release-asset@master
with:
repo: meshtastic/web
file: build.tar
@@ -41,7 +41,7 @@ jobs:
run: bin/build-esp32.sh ${{ inputs.board }}
- name: Pull OTA Firmware
- uses: dsaltares/fetch-gh-release-asset@a40c8b4a0471f9ab81bdf73a010f74cc51476ad4
+ uses: dsaltares/fetch-gh-release-asset@master
with:
repo: meshtastic/firmware-ota
file: firmware-c3.bin
@@ -54,9 +54,10 @@ jobs:
id: version
- name: Store binaries as an artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: firmware-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip
+ overwrite: true
path: |
release/*.bin
release/*.elf
diff --git a/.github/workflows/build_esp32_s3.yml b/.github/workflows/build_esp32_s3.yml
index f603a6a31..10773833e 100644
--- a/.github/workflows/build_esp32_s3.yml
+++ b/.github/workflows/build_esp32_s3.yml
@@ -11,13 +11,13 @@ jobs:
build-esp32-s3:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Build base
id: base
uses: ./.github/actions/setup-base
- name: Pull web ui
- uses: dsaltares/fetch-gh-release-asset@a40c8b4a0471f9ab81bdf73a010f74cc51476ad4
+ uses: dsaltares/fetch-gh-release-asset@master
with:
repo: meshtastic/web
file: build.tar
@@ -39,7 +39,7 @@ jobs:
run: bin/build-esp32.sh ${{ inputs.board }}
- name: Pull OTA Firmware
- uses: dsaltares/fetch-gh-release-asset@a40c8b4a0471f9ab81bdf73a010f74cc51476ad4
+ uses: dsaltares/fetch-gh-release-asset@master
with:
repo: meshtastic/firmware-ota
file: firmware-s3.bin
@@ -52,9 +52,10 @@ jobs:
id: version
- name: Store binaries as an artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: firmware-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip
+ overwrite: true
path: |
release/*.bin
release/*.elf
diff --git a/.github/workflows/build_nrf52.yml b/.github/workflows/build_nrf52.yml
index 33ee4d00c..eb1779963 100644
--- a/.github/workflows/build_nrf52.yml
+++ b/.github/workflows/build_nrf52.yml
@@ -11,7 +11,7 @@ jobs:
build-nrf52:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Build base
id: base
uses: ./.github/actions/setup-base
@@ -24,9 +24,10 @@ jobs:
id: version
- name: Store binaries as an artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: firmware-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip
+ overwrite: true
path: |
release/*.uf2
release/*.elf
diff --git a/.github/workflows/build_raspbian.yml b/.github/workflows/build_raspbian.yml
index 7a25892bc..cef61bb21 100644
--- a/.github/workflows/build_raspbian.yml
+++ b/.github/workflows/build_raspbian.yml
@@ -11,7 +11,7 @@ jobs:
runs-on: [self-hosted, linux, ARM64]
steps:
- name: Checkout code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
submodules: recursive
ref: ${{github.event.pull_request.head.ref}}
@@ -37,9 +37,10 @@ jobs:
id: version
- name: Store binaries as an artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: firmware-raspbian-${{ steps.version.outputs.version }}.zip
+ overwrite: true
path: |
release/meshtasticd_linux_aarch64
bin/config-dist.yaml
diff --git a/.github/workflows/build_rpi2040.yml b/.github/workflows/build_rpi2040.yml
index 76ca2c20e..6e258fe2a 100644
--- a/.github/workflows/build_rpi2040.yml
+++ b/.github/workflows/build_rpi2040.yml
@@ -11,7 +11,7 @@ jobs:
build-rpi2040:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Build base
id: base
uses: ./.github/actions/setup-base
@@ -24,9 +24,10 @@ jobs:
id: version
- name: Store binaries as an artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: firmware-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip
+ overwrite: true
path: |
release/*.uf2
release/*.elf
diff --git a/.github/workflows/main_matrix.yml b/.github/workflows/main_matrix.yml
index 9ca0764b5..7affd8fc1 100644
--- a/.github/workflows/main_matrix.yml
+++ b/.github/workflows/main_matrix.yml
@@ -8,7 +8,7 @@ on:
branches: [master, develop]
paths-ignore:
- "**.md"
- - "version.properties"
+ - version.properties
# Note: This is different from "pull_request". Need to specify ref when doing checkouts.
pull_request_target:
@@ -20,128 +20,90 @@ on:
workflow_dispatch:
jobs:
- check:
+ setup:
strategy:
fail-fast: false
matrix:
- include:
- - board: rak11200
- - board: tlora-v2-1-1_6
- - board: tbeam
- - board: heltec-v2_1
- - board: meshtastic-diy-v1
- - board: rak4631
- - board: t-echo
- - board: station-g2
- - board: m5stack-coreink
- - board: tbeam-s3-core
- - board: tlora-t3s3-v1
- - board: t-watch-s3
- - board: t-deck
- #- board: rak11310
+ arch: [esp32, esp32s3, esp32c3, nrf52840, rp2040, check]
+ runs-on: ubuntu-latest
+ steps:
+ - id: checkout
+ uses: actions/checkout@v4
+ name: Checkout base
+ - id: jsonStep
+ run: |
+ TARGETS=$(./bin/generate_ci_matrix.py ${{matrix.arch}})
+ echo "$TARGETS"
+ echo "${{matrix.arch}}=$(jq -cn --argjson environments "$TARGETS" '{board: $environments}')" >> $GITHUB_OUTPUT
+ outputs:
+ esp32: ${{ steps.jsonStep.outputs.esp32 }}
+ esp32s3: ${{ steps.jsonStep.outputs.esp32s3 }}
+ esp32c3: ${{ steps.jsonStep.outputs.esp32c3 }}
+ nrf52840: ${{ steps.jsonStep.outputs.nrf52840 }}
+ rp2040: ${{ steps.jsonStep.outputs.rp2040 }}
+ check: ${{ steps.jsonStep.outputs.check }}
+
+ check:
+ needs: setup
+ strategy:
+ fail-fast: false
+ matrix: ${{ fromJson(needs.setup.outputs.check) }}
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Build base
id: base
uses: ./.github/actions/setup-base
- name: Trunk Check
if: ${{ github.event_name != 'workflow_dispatch' }}
- uses: trunk-io/trunk-action@782e83f803ca6e369f035d64c6ba2768174ba61b
+ uses: trunk-io/trunk-action@v1
- name: Check ${{ matrix.board }}
run: bin/check-all.sh ${{ matrix.board }}
build-esp32:
+ needs: setup
strategy:
fail-fast: false
- matrix:
- include:
- - board: rak11200
- - board: tlora-v2
- - board: tlora-v1
- - board: tlora_v1_3
- - board: tlora-v2-1-1_6
- - board: tlora-v2-1-1_6-tcxo
- - board: tlora-v2-1-1_8
- - board: tbeam
- - board: heltec-v2_0
- - board: heltec-v2_1
- - board: tbeam0_7
- - board: meshtastic-diy-v1
- - board: hydra
- - board: meshtastic-dr-dev
- - board: nano-g1
- - board: station-g1
- - board: m5stack-core
- - board: m5stack-coreink
- - board: nano-g1-explorer
- - board: chatter2
+ matrix: ${{ fromJson(needs.setup.outputs.esp32) }}
uses: ./.github/workflows/build_esp32.yml
with:
board: ${{ matrix.board }}
build-esp32-s3:
+ needs: setup
strategy:
fail-fast: false
- matrix:
- include:
- - board: heltec-v3
- - board: heltec-wsl-v3
- - board: heltec-wireless-tracker
- - board: heltec-wireless-tracker-V1-0
- - board: heltec-wireless-paper-v1_0
- - board: heltec-wireless-paper #v1.1
- - board: tbeam-s3-core
- - board: tlora-t3s3-v1
- - board: t-watch-s3
- - board: t-deck
- - board: picomputer-s3
- - board: station-g2
- - board: unphone
+ matrix: ${{ fromJson(needs.setup.outputs.esp32s3) }}
uses: ./.github/workflows/build_esp32_s3.yml
with:
board: ${{ matrix.board }}
build-esp32-c3:
+ needs: setup
strategy:
fail-fast: false
- matrix:
- include:
- - board: heltec-ht62-esp32c3-sx1262
+ matrix: ${{ fromJson(needs.setup.outputs.esp32c3) }}
uses: ./.github/workflows/build_esp32_c3.yml
with:
board: ${{ matrix.board }}
build-nrf52:
+ needs: setup
strategy:
fail-fast: false
- matrix:
- include:
- - board: rak4631
- - board: rak4631_eink
- - board: monteops_hw1
- - board: t-echo
- - board: canaryone
- - board: pca10059_diy_eink
- - board: feather_diy
- - board: nano-g2-ultra
+ matrix: ${{ fromJson(needs.setup.outputs.nrf52840) }}
uses: ./.github/workflows/build_nrf52.yml
with:
board: ${{ matrix.board }}
build-rpi2040:
+ needs: setup
strategy:
fail-fast: false
- matrix:
- include:
- - board: pico
- - board: picow
- - board: rak11310
- - board: senselora_rp2040
- - board: rp2040-lora
+ matrix: ${{ fromJson(needs.setup.outputs.rp2040) }}
uses: ./.github/workflows/build_rpi2040.yml
with:
board: ${{ matrix.board }}
@@ -158,7 +120,7 @@ jobs:
build-native:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Build base
id: base
uses: ./.github/actions/setup-base
@@ -181,27 +143,27 @@ jobs:
id: version
- name: Store binaries as an artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: firmware-native-${{ steps.version.outputs.version }}.zip
+ overwrite: true
path: |
release/device-*.sh
release/device-*.bat
- name: Docker login
if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }}
- uses: docker/login-action@v2
+ uses: docker/login-action@v3
with:
username: meshtastic
password: ${{ secrets.DOCKER_TOKEN }}
-
- name: Docker setup
if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }}
- uses: docker/setup-buildx-action@v2
+ uses: docker/setup-buildx-action@v3
- name: Docker build and push tagged versions
if: ${{ github.event_name == 'workflow_dispatch' }}
- uses: docker/build-push-action@v3
+ uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
@@ -210,7 +172,7 @@ jobs:
- name: Docker build and push
if: ${{ github.ref == 'refs/heads/master' && github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }}
- uses: docker/build-push-action@v3
+ uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
@@ -222,7 +184,7 @@ jobs:
needs: [check]
steps:
- name: Checkout code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
@@ -245,14 +207,15 @@ jobs:
]
steps:
- name: Checkout code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- - uses: actions/download-artifact@v3
+ - uses: actions/download-artifact@v4
with:
path: ./
+ merge-multiple: true
- name: Display structure of downloaded files
run: ls -R
@@ -262,25 +225,30 @@ jobs:
id: version
- name: Move files up
- run: mv -b -t ./ ./*tbeam-2*/littlefs*.bin ./*tbeam-2*/bleota.bin ./*tbeam-s3*/bleota-s3.bin ./*esp32c3*/bleota-c3.bin ./**/firmware*.bin ./*t-echo*/Meshtastic_nRF52_factory_erase_v2.uf2 ./**/firmware-*.uf2 ./**/firmware-*-ota.zip ./**/*.elf ./*native*/*device-*.sh ./*native*/*device-*.bat ./firmware-raspbian-*/release/meshtasticd_linux_aarch64 ./firmware-raspbian-*/bin/config-dist.yaml
+ run: mv -b -t ./ ./release/meshtasticd_linux_aarch64 ./bin/config-dist.yaml
- name: Repackage in single firmware zip
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: firmware-${{ steps.version.outputs.version }}
+ overwrite: true
path: |
- ./*.bin
- ./*.uf2
+ ./firmware-*.bin
+ ./firmware-*.uf2
./firmware-*-ota.zip
./device-*.sh
./device-*.bat
- ./meshtasticd_linux_arm64
+ ./meshtasticd_linux_*64
./config-dist.yaml
+ ./littlefs-*.bin
+ ./bleota*bin
+ ./Meshtastic_nRF52_factory_erase*.uf2
retention-days: 90
- - uses: actions/download-artifact@v3
+ - uses: actions/download-artifact@v4
with:
name: firmware-${{ steps.version.outputs.version }}
+ merge-multiple: true
path: ./output
# For diagnostics
@@ -296,9 +264,10 @@ jobs:
run: zip -j -9 -r ./firmware-${{ steps.version.outputs.version }}.zip ./output
- name: Repackage in single elfs zip
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: debug-elfs-${{ steps.version.outputs.version }}.zip
+ overwrite: true
path: ./*.elf
retention-days: 30
@@ -320,10 +289,10 @@ jobs:
needs: [gather-artifacts, after-checks]
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Setup Python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: 3.x
@@ -331,13 +300,15 @@ jobs:
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version
- - uses: actions/download-artifact@v3
+ - uses: actions/download-artifact@v4
with:
name: firmware-${{ steps.version.outputs.version }}
+ merge-multiple: true
path: ./output
- - uses: actions/download-artifact@v3
+ - uses: actions/download-artifact@v4
with:
+ merge-multiple: true
name: artifact-deb
- name: Display structure of downloaded files
@@ -351,9 +322,10 @@ jobs:
- name: Zip firmware
run: zip -j -9 -r ./firmware-${{ steps.version.outputs.version }}.zip ./output
- - uses: actions/download-artifact@v3
+ - uses: actions/download-artifact@v4
with:
name: debug-elfs-${{ steps.version.outputs.version }}.zip
+ merge-multiple: true
path: ./elfs
- name: Zip Elfs
@@ -411,7 +383,7 @@ jobs:
bin/bump_version.py
- name: Create version.properties pull request
- uses: peter-evans/create-pull-request@v3
+ uses: peter-evans/create-pull-request@v6
with:
add-paths: |
version.properties
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index da59bc0fd..e249823a7 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -11,7 +11,7 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Trunk Check
uses: trunk-io/trunk-action@782e83f803ca6e369f035d64c6ba2768174ba61b
diff --git a/.github/workflows/package_raspbian.yml b/.github/workflows/package_raspbian.yml
index 81ff6ee25..367f90c56 100644
--- a/.github/workflows/package_raspbian.yml
+++ b/.github/workflows/package_raspbian.yml
@@ -17,14 +17,14 @@ jobs:
needs: build-raspbian
steps:
- name: Checkout code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
submodules: recursive
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- name: Pull web ui
- uses: dsaltares/fetch-gh-release-asset@a40c8b4a0471f9ab81bdf73a010f74cc51476ad4
+ uses: dsaltares/fetch-gh-release-asset@master
with:
repo: meshtastic/web
file: build.tar
@@ -36,9 +36,10 @@ jobs:
id: version
- name: Download artifacts
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
name: firmware-raspbian-${{ steps.version.outputs.version }}.zip
+ merge-multiple: true
- name: Display structure of downloaded files
run: ls -R
@@ -68,8 +69,9 @@ jobs:
depends: libyaml-cpp0.7, openssl, libulfius2.7
desc: Native Linux Meshtastic binary.
- - uses: actions/upload-artifact@v3
+ - uses: actions/upload-artifact@v4
with:
name: artifact-deb
+ overwrite: true
path: |
./*.deb
diff --git a/.github/workflows/sec_sast_flawfinder.yml b/.github/workflows/sec_sast_flawfinder.yml
index 2c7e751af..99cc72190 100644
--- a/.github/workflows/sec_sast_flawfinder.yml
+++ b/.github/workflows/sec_sast_flawfinder.yml
@@ -16,7 +16,7 @@ jobs:
steps:
# step 1
- name: clone application source code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
# step 2
- name: flawfinder_scan
@@ -27,14 +27,15 @@ jobs:
# step 3
- name: save report as pipeline artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: flawfinder_report.sarif
+ overwrite: true
path: flawfinder_report.sarif
# step 4
- name: publish code scanning alerts
- uses: github/codeql-action/upload-sarif@v2
+ uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: flawfinder_report.sarif
category: flawfinder
diff --git a/.github/workflows/sec_sast_semgrep_cron.yml b/.github/workflows/sec_sast_semgrep_cron.yml
index cdd2c3c37..2a0361f5e 100644
--- a/.github/workflows/sec_sast_semgrep_cron.yml
+++ b/.github/workflows/sec_sast_semgrep_cron.yml
@@ -17,7 +17,7 @@ jobs:
steps:
# step 1
- name: clone application source code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
# step 2
- name: full scan
@@ -29,14 +29,15 @@ jobs:
# step 3
- name: save report as pipeline artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: report.sarif
+ overwrite: true
path: report.sarif
# step 4
- name: publish code scanning alerts
- uses: github/codeql-action/upload-sarif@v2
+ uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: report.sarif
category: semgrep
diff --git a/.github/workflows/sec_sast_semgrep_pull.yml b/.github/workflows/sec_sast_semgrep_pull.yml
index 1697ffb1b..b6c288494 100644
--- a/.github/workflows/sec_sast_semgrep_pull.yml
+++ b/.github/workflows/sec_sast_semgrep_pull.yml
@@ -11,7 +11,7 @@ jobs:
steps:
# step 1
- name: clone application source code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 0
diff --git a/.github/workflows/trunk-check.yml b/.github/workflows/trunk-check.yml
index e35b91cb9..6ed905bc8 100644
--- a/.github/workflows/trunk-check.yml
+++ b/.github/workflows/trunk-check.yml
@@ -16,7 +16,7 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Trunk Check
uses: trunk-io/trunk-action@v1
diff --git a/.github/workflows/update_protobufs.yml b/.github/workflows/update_protobufs.yml
index 30f9b3578..4402a280e 100644
--- a/.github/workflows/update_protobufs.yml
+++ b/.github/workflows/update_protobufs.yml
@@ -7,7 +7,7 @@ jobs:
steps:
- name: Checkout code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
submodules: true
@@ -26,7 +26,7 @@ jobs:
./bin/regen-protos.sh
- name: Create pull request
- uses: peter-evans/create-pull-request@v3
+ uses: peter-evans/create-pull-request@v6
with:
add-paths: |
protobufs
diff --git a/arch/nrf52/nrf52.ini b/arch/nrf52/nrf52.ini
index 0af49fc80..0f060ecf8 100644
--- a/arch/nrf52/nrf52.ini
+++ b/arch/nrf52/nrf52.ini
@@ -9,6 +9,7 @@ build_flags =
-DSERIAL_BUFFER_SIZE=1024
-Wno-unused-variable
-Isrc/platform/nrf52
+ -DLFS_NO_ASSERT ; Disable LFS assertions , see https://github.com/meshtastic/firmware/pull/3818
build_src_filter =
${arduino_base.build_src_filter} - - - - - - - - - -
diff --git a/bin/generate_ci_matrix.py b/bin/generate_ci_matrix.py
index 2501e83c1..46398dd59 100755
--- a/bin/generate_ci_matrix.py
+++ b/bin/generate_ci_matrix.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-"""Generate the CI matrix"""
+"""Generate the CI matrix."""
import configparser
import json
@@ -34,5 +34,10 @@ for subdir, dirs, files in os.walk(rootdir):
outlist.append(section)
else:
outlist.append(section)
+ if "board_check" in config[config[c].name]:
+ if (config[config[c].name]["board_check"] == "true") & (
+ "check" in options
+ ):
+ outlist.append(section)
print(json.dumps(outlist))
diff --git a/src/DebugConfiguration.h b/src/DebugConfiguration.h
index f0686b811..ca908197e 100644
--- a/src/DebugConfiguration.h
+++ b/src/DebugConfiguration.h
@@ -36,7 +36,7 @@
#define LOG_CRIT(...) SEGGER_RTT_printf(0, __VA_ARGS__)
#define LOG_TRACE(...) SEGGER_RTT_printf(0, __VA_ARGS__)
#else
-#ifdef DEBUG_PORT
+#if defined(DEBUG_PORT) && !defined(DEBUG_MUTE)
#define LOG_DEBUG(...) DEBUG_PORT.log(MESHTASTIC_LOG_LEVEL_DEBUG, __VA_ARGS__)
#define LOG_INFO(...) DEBUG_PORT.log(MESHTASTIC_LOG_LEVEL_INFO, __VA_ARGS__)
#define LOG_WARN(...) DEBUG_PORT.log(MESHTASTIC_LOG_LEVEL_WARN, __VA_ARGS__)
diff --git a/src/FSCommon.cpp b/src/FSCommon.cpp
index d5ca72142..96aad1a9a 100644
--- a/src/FSCommon.cpp
+++ b/src/FSCommon.cpp
@@ -205,6 +205,62 @@ void rmDir(const char *dirname)
#endif
}
+bool fsCheck()
+{
+#if defined(ARCH_NRF52)
+ size_t write_size = 0;
+ size_t read_size = 0;
+ char buf[32] = {0};
+
+ Adafruit_LittleFS_Namespace::File file(FSCom);
+ const char *text = "meshtastic fs test";
+ size_t text_length = strlen(text);
+ const char *filename = "/meshtastic.txt";
+
+ LOG_DEBUG("Try create file .\n");
+ if (file.open(filename, FILE_O_WRITE)) {
+ write_size = file.write(text);
+ } else {
+ LOG_DEBUG("Open file failed .\n");
+ goto FORMAT_FS;
+ }
+
+ if (write_size != text_length) {
+ LOG_DEBUG("Text bytes do not match .\n");
+ file.close();
+ goto FORMAT_FS;
+ }
+
+ file.close();
+
+ if (!file.open(filename, FILE_O_READ)) {
+ LOG_DEBUG("Open file failed .\n");
+ goto FORMAT_FS;
+ }
+
+ read_size = file.readBytes(buf, text_length);
+ if (read_size != text_length) {
+ LOG_DEBUG("Text bytes do not match .\n");
+ file.close();
+ goto FORMAT_FS;
+ }
+
+ if (memcmp(buf, text, text_length) != 0) {
+ LOG_DEBUG("The written bytes do not match the read bytes .\n");
+ file.close();
+ goto FORMAT_FS;
+ }
+ return true;
+FORMAT_FS:
+ LOG_DEBUG("Format FS ....\n");
+ FSCom.format();
+ FSCom.begin();
+ return false;
+#else
+ return true;
+#endif
+}
+
void fsInit()
{
#ifdef FSCom
@@ -219,15 +275,29 @@ void fsInit()
* nRF52840 has a certain chance of automatic formatting failure.
* Try to create a file after initializing the file system. If the creation fails,
* it means that the file system is not working properly. Please format it manually again.
+ * To check the normality of the file system, you need to disable the LFS_NO_ASSERT assertion.
+ * Otherwise, the assertion will be entered at the moment of reading or opening, and the FS will not be formatted.
* */
- Adafruit_LittleFS_Namespace::File file(FSCom);
- const char *filename = "/meshtastic.txt";
- if (!file.open(filename, FILE_O_WRITE)) {
- LOG_DEBUG("Format ....");
- FSCom.format();
- FSCom.begin();
- } else {
- file.close();
+ bool ret = false;
+ uint8_t retry = 3;
+
+ while (retry--) {
+ ret = fsCheck();
+ if (ret) {
+ LOG_DEBUG("File system check is OK.\n");
+ break;
+ }
+ delay(10);
+ }
+
+ // It may not be possible to reach this step.
+ // Add a loop here to prevent unpredictable situations from happening.
+ // Can add a screen to display error status later.
+ if (!ret) {
+ while (1) {
+ LOG_ERROR("The file system is damaged and cannot proceed to the next step.\n");
+ delay(1000);
+ }
}
#else
LOG_DEBUG("Filesystem files:\n");
diff --git a/src/graphics/EInkDisplay2.cpp b/src/graphics/EInkDisplay2.cpp
index 04915fe07..bbc12521a 100644
--- a/src/graphics/EInkDisplay2.cpp
+++ b/src/graphics/EInkDisplay2.cpp
@@ -62,12 +62,19 @@ bool EInkDisplay::forceDisplay(uint32_t msecLimit)
return false;
// FIXME - only draw bits have changed (use backbuf similar to the other displays)
+ const bool flipped = config.display.flip_screen;
for (uint32_t y = 0; y < displayHeight; y++) {
for (uint32_t x = 0; x < displayWidth; x++) {
// get src pixel in the page based ordering the OLED lib uses FIXME, super inefficient
auto b = buffer[x + (y / 8) * displayWidth];
auto isset = b & (1 << (y & 7));
- adafruitDisplay->drawPixel(x, y, isset ? GxEPD_BLACK : GxEPD_WHITE);
+
+ // Handle flip here, rather than with setRotation(),
+ // Avoids issues when display width is not a multiple of 8
+ if (flipped)
+ adafruitDisplay->drawPixel((displayWidth - 1) - x, (displayHeight - 1) - y, isset ? GxEPD_BLACK : GxEPD_WHITE);
+ else
+ adafruitDisplay->drawPixel(x, y, isset ? GxEPD_BLACK : GxEPD_WHITE);
}
}
diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp
index 8cbeb8dd4..b79911a3e 100644
--- a/src/mesh/NodeDB.cpp
+++ b/src/mesh/NodeDB.cpp
@@ -273,7 +273,7 @@ void NodeDB::installDefaultConfig()
// FIXME: Default to bluetooth capability of platform as default
config.bluetooth.enabled = true;
config.bluetooth.fixed_pin = defaultBLEPin;
-#if defined(ST7735_CS) || defined(USE_EINK) || defined(ILI9341_DRIVER) || defined(ST7789_CS)
+#if defined(ST7735_CS) || defined(USE_EINK) || defined(ILI9341_DRIVER) || defined(ST7789_CS) || defined(HX8357_CS)
bool hasScreen = true;
#elif ARCH_PORTDUINO
bool hasScreen = false;
diff --git a/variants/CDEBYTE_EoRa-S3/platformio.ini b/variants/CDEBYTE_EoRa-S3/platformio.ini
index 1ff54de88..88845a50c 100644
--- a/variants/CDEBYTE_EoRa-S3/platformio.ini
+++ b/variants/CDEBYTE_EoRa-S3/platformio.ini
@@ -1,8 +1,9 @@
[env:CDEBYTE_EoRa-S3]
extends = esp32s3_base
board = CDEBYTE_EoRa-S3
+board_level = extra
build_flags =
${esp32s3_base.build_flags}
-D CDEBYTE_EORA_S3
-I variants/CDEBYTE_EoRa-S3
- -D GPS_POWER_TOGGLE
+ -D GPS_POWER_TOGGLE
\ No newline at end of file
diff --git a/variants/Dongle_nRF52840-pca10059-v1/platformio.ini b/variants/Dongle_nRF52840-pca10059-v1/platformio.ini
index b1608770e..2d14f1ca1 100644
--- a/variants/Dongle_nRF52840-pca10059-v1/platformio.ini
+++ b/variants/Dongle_nRF52840-pca10059-v1/platformio.ini
@@ -1,7 +1,6 @@
[env:pca10059_diy_eink]
extends = nrf52840_base
board = nordic_pca10059
-board_level = extra
build_flags = ${nrf52840_base.build_flags} -Ivariants/Dongle_nRF52840-pca10059-v1 -D NORDIC_PCA10059
-L "${platformio.libdeps_dir}/${this.__env__}/BSEC2 Software Library/src/cortex-m4/fpv4-sp-d16-hard"
-DEINK_DISPLAY_MODEL=GxEPD2_420_M01
@@ -11,4 +10,4 @@ build_src_filter = ${nrf52_base.build_src_filter} +<../variants/Dongle_nRF52840-
lib_deps =
${nrf52840_base.lib_deps}
zinggjm/GxEPD2@^1.4.9
-debug_tool = jlink
+debug_tool = jlink
\ No newline at end of file
diff --git a/variants/betafpv_900_tx_nano/platformio.ini b/variants/betafpv_900_tx_nano/platformio.ini
index 68e1a469b..3bea16f6b 100644
--- a/variants/betafpv_900_tx_nano/platformio.ini
+++ b/variants/betafpv_900_tx_nano/platformio.ini
@@ -1,6 +1,7 @@
[env:betafpv_900_tx_nano]
extends = esp32_base
board = esp32doit-devkit-v1
+board_level = extra
build_flags =
${esp32_base.build_flags}
-D BETAFPV_900_TX_NANO
@@ -13,4 +14,4 @@ upload_protocol = esptool
;upload_port = /dev/ttyUSB0
upload_speed = 460800
lib_deps =
- ${esp32_base.lib_deps}
+ ${esp32_base.lib_deps}
\ No newline at end of file
diff --git a/variants/chatter2/platformio.ini b/variants/chatter2/platformio.ini
index 0856debfc..1f086cf07 100644
--- a/variants/chatter2/platformio.ini
+++ b/variants/chatter2/platformio.ini
@@ -2,7 +2,6 @@
[env:chatter2]
extends = esp32_base
board = esp32doit-devkit-v1
-board_level = extra
build_flags =
${esp32_base.build_flags}
-D CHATTER_2
diff --git a/variants/diy/platformio.ini b/variants/diy/platformio.ini
index 5fb0f6421..94d59553d 100644
--- a/variants/diy/platformio.ini
+++ b/variants/diy/platformio.ini
@@ -2,7 +2,7 @@
[env:meshtastic-diy-v1]
extends = esp32_base
board = esp32doit-devkit-v1
-board_level = extra
+board_check = true
build_flags =
${esp32_base.build_flags}
-D DIY_V1
@@ -26,7 +26,6 @@ build_flags =
[env:meshtastic-dr-dev]
extends = esp32_base
board = esp32doit-devkit-v1
-board_level = extra
board_upload.maximum_size = 4194304
board_upload.maximum_ram_size = 532480
build_flags =
@@ -39,7 +38,6 @@ build_flags =
[env:hydra]
extends = esp32_base
board = esp32doit-devkit-v1
-board_level = extra
build_flags =
${esp32_base.build_flags}
-D DIY_V1
diff --git a/variants/feather_diy/platformio.ini b/variants/feather_diy/platformio.ini
index 924f9098d..47c864b8e 100644
--- a/variants/feather_diy/platformio.ini
+++ b/variants/feather_diy/platformio.ini
@@ -2,7 +2,6 @@
[env:feather_diy]
extends = nrf52840_base
board = adafruit_feather_nrf52840
-board_level = extra
build_flags = ${nrf52840_base.build_flags} -Ivariants/feather_diy -Dfeather_diy
-L "${platformio.libdeps_dir}/${this.__env__}/BSEC2 Software Library/src/cortex-m4/fpv4-sp-d16-hard"
build_src_filter = ${nrf52_base.build_src_filter} +<../variants/feather_diy>
diff --git a/variants/heltec_esp32c3/platformio.ini b/variants/heltec_esp32c3/platformio.ini
index c9c80213e..6fe5c3c69 100644
--- a/variants/heltec_esp32c3/platformio.ini
+++ b/variants/heltec_esp32c3/platformio.ini
@@ -1,7 +1,6 @@
[env:heltec-ht62-esp32c3-sx1262]
extends = esp32c3_base
board = esp32-c3-devkitm-1
-board_level = extra
build_flags =
${esp32_base.build_flags}
-D HELTEC_HT62
diff --git a/variants/heltec_v2.1/platformio.ini b/variants/heltec_v2.1/platformio.ini
index 7d4daecc9..5aa04fc58 100644
--- a/variants/heltec_v2.1/platformio.ini
+++ b/variants/heltec_v2.1/platformio.ini
@@ -2,7 +2,6 @@
;build_type = debug ; to make it possible to step through our jtag debugger
extends = esp32_base
board = heltec_wifi_lora_32_V2
-board_level = extra
build_flags =
${esp32_base.build_flags} -D HELTEC_V2_1 -I variants/heltec_v2.1
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
\ No newline at end of file
diff --git a/variants/heltec_v2/platformio.ini b/variants/heltec_v2/platformio.ini
index 3289f4e68..cee1537d0 100644
--- a/variants/heltec_v2/platformio.ini
+++ b/variants/heltec_v2/platformio.ini
@@ -2,6 +2,5 @@
;build_type = debug ; to make it possible to step through our jtag debugger
extends = esp32_base
board = heltec_wifi_lora_32_V2
-board_level = extra
build_flags =
${esp32_base.build_flags} -D HELTEC_V2_0 -I variants/heltec_v2
\ No newline at end of file
diff --git a/variants/heltec_v3/platformio.ini b/variants/heltec_v3/platformio.ini
index 58ee0b5ba..e8f73e1ef 100644
--- a/variants/heltec_v3/platformio.ini
+++ b/variants/heltec_v3/platformio.ini
@@ -1,6 +1,7 @@
[env:heltec-v3]
extends = esp32s3_base
board = heltec_wifi_lora_32_V3
+board_check = true
# Temporary until espressif creates a release with this new target
build_flags =
${esp32s3_base.build_flags} -D HELTEC_V3 -I variants/heltec_v3
diff --git a/variants/m5stack_core/platformio.ini b/variants/m5stack_core/platformio.ini
index 84fb9f251..95f5aea9f 100644
--- a/variants/m5stack_core/platformio.ini
+++ b/variants/m5stack_core/platformio.ini
@@ -1,7 +1,6 @@
[env:m5stack-core]
extends = esp32_base
board = m5stack-core-esp32
-board_level = extra
monitor_filters = esp32_exception_decoder
build_src_filter =
${esp32_base.build_src_filter}
@@ -26,4 +25,4 @@ lib_ignore =
m5stack-core
lib_deps =
${esp32_base.lib_deps}
- lovyan03/LovyanGFX@^1.1.8
+ lovyan03/LovyanGFX@^1.1.8
\ No newline at end of file
diff --git a/variants/m5stack_coreink/platformio.ini b/variants/m5stack_coreink/platformio.ini
index dfb078a0a..c0c8bd30e 100644
--- a/variants/m5stack_coreink/platformio.ini
+++ b/variants/m5stack_coreink/platformio.ini
@@ -1,7 +1,7 @@
[env:m5stack-coreink]
extends = esp32_base
board = m5stack-coreink
-board_level = extra
+board_check = true
build_src_filter =
${esp32_base.build_src_filter}
build_flags =
@@ -24,4 +24,4 @@ lib_ignore =
monitor_filters = esp32_exception_decoder
board_build.f_cpu = 240000000L
upload_protocol = esptool
-upload_port = /dev/ttyACM0
+upload_port = /dev/ttyACM0
\ No newline at end of file
diff --git a/variants/rak10701/platformio.ini b/variants/rak10701/platformio.ini
index 37f785e84..ae43b1906 100644
--- a/variants/rak10701/platformio.ini
+++ b/variants/rak10701/platformio.ini
@@ -1,6 +1,7 @@
; The very slick RAK wireless RAK10701 Field Tester device. Note you will have to flash to Arduino bootloader to use this firmware. Be aware touch is not currently working.
[env:rak10701]
extends = nrf52840_base
+board_level = extra
board = wiscore_rak4631
build_flags = ${nrf52840_base.build_flags} -Ivariants/rak10701 -D RAK_4631
-L "${platformio.libdeps_dir}/${this.__env__}/BSEC2 Software Library/src/cortex-m4/fpv4-sp-d16-hard"
diff --git a/variants/rak11200/platformio.ini b/variants/rak11200/platformio.ini
index f653adeb2..eddc3458e 100644
--- a/variants/rak11200/platformio.ini
+++ b/variants/rak11200/platformio.ini
@@ -1,7 +1,7 @@
[env:rak11200]
extends = esp32_base
-board_level = extra
board = wiscore_rak11200
+board_check = true
build_flags =
${esp32_base.build_flags} -D RAK_11200 -I variants/rak11200
-upload_speed = 115200
+upload_speed = 115200
\ No newline at end of file
diff --git a/variants/rak4631/platformio.ini b/variants/rak4631/platformio.ini
index b1bc2d9b5..115e96967 100644
--- a/variants/rak4631/platformio.ini
+++ b/variants/rak4631/platformio.ini
@@ -2,6 +2,7 @@
[env:rak4631]
extends = nrf52840_base
board = wiscore_rak4631
+board_check = true
build_flags = ${nrf52840_base.build_flags} -Ivariants/rak4631 -D RAK_4631
-L "${platformio.libdeps_dir}/${this.__env__}/BSEC2 Software Library/src/cortex-m4/fpv4-sp-d16-hard"
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
@@ -17,4 +18,4 @@ lib_deps =
rakwireless/RAKwireless NCP5623 RGB LED library@^1.0.2
debug_tool = jlink
; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm)
-;upload_protocol = jlink
+;upload_protocol = jlink
\ No newline at end of file
diff --git a/variants/rpipico-slowclock/platformio.ini b/variants/rpipico-slowclock/platformio.ini
index eec76ca0f..0b94eb9c6 100644
--- a/variants/rpipico-slowclock/platformio.ini
+++ b/variants/rpipico-slowclock/platformio.ini
@@ -1,6 +1,7 @@
[env:pico_slowclock]
extends = rp2040_base
board = rpipico
+board_level = extra
upload_protocol = jlink
# debug settings for external openocd with RP2040 support (custom build)
debug_tool = custom
@@ -25,4 +26,4 @@ lib_deps =
${rp2040_base.lib_deps}
debug_build_flags = ${rp2040_base.build_flags}
-g
- -DNO_USB
+ -DNO_USB
\ No newline at end of file
diff --git a/variants/rpipicow/platformio.ini b/variants/rpipicow/platformio.ini
index 29b5c8bcb..91ec964d9 100644
--- a/variants/rpipicow/platformio.ini
+++ b/variants/rpipicow/platformio.ini
@@ -1,7 +1,6 @@
[env:picow]
extends = rp2040_base
board = rpipicow
-board_level = extra
upload_protocol = picotool
# add our variants files to the include and src paths
diff --git a/variants/station-g2/platformio.ini b/variants/station-g2/platformio.ini
index b39136684..e96c0ab88 100755
--- a/variants/station-g2/platformio.ini
+++ b/variants/station-g2/platformio.ini
@@ -1,6 +1,7 @@
[env:station-g2]
extends = esp32s3_base
board = station-g2
+board_check = true
board_build.mcu = esp32s3
upload_protocol = esptool
;upload_port = /dev/ttyACM0
diff --git a/variants/t-deck/platformio.ini b/variants/t-deck/platformio.ini
index 3b5a7516e..f37e3b239 100644
--- a/variants/t-deck/platformio.ini
+++ b/variants/t-deck/platformio.ini
@@ -3,6 +3,7 @@
extends = esp32s3_base
board = t-deck
board_build.partitions = default_16MB.csv ; just for test
+board_check = true
upload_protocol = esptool
build_flags = ${esp32_base.build_flags} -fno-omit-frame-pointer
-D T_DECK
diff --git a/variants/t-echo/platformio.ini b/variants/t-echo/platformio.ini
index c036a39a2..aa8177b33 100644
--- a/variants/t-echo/platformio.ini
+++ b/variants/t-echo/platformio.ini
@@ -2,6 +2,7 @@
[env:t-echo]
extends = nrf52840_base
board = t-echo
+board_check = true
debug_tool = jlink
# add -DCFG_SYSVIEW if you want to use the Segger systemview tool for OS profiling.
@@ -17,9 +18,10 @@ build_flags = ${nrf52840_base.build_flags} -Ivariants/t-echo
-DEINK_LIMIT_RATE_RESPONSIVE_SEC=1 ; Minimum interval between RESPONSIVE updates
; -DEINK_LIMIT_GHOSTING_PX=2000 ; (Optional) How much image ghosting is tolerated
-DEINK_BACKGROUND_USES_FAST ; (Optional) Use FAST refresh for both BACKGROUND and RESPONSIVE, until a limit is reached.
+
build_src_filter = ${nrf52_base.build_src_filter} +<../variants/t-echo>
lib_deps =
${nrf52840_base.lib_deps}
https://github.com/meshtastic/GxEPD2#55f618961db45a23eff0233546430f1e5a80f63a
lewisxhe/PCF8563_Library@^1.0.1
-;upload_protocol = fs
+;upload_protocol = fs
\ No newline at end of file
diff --git a/variants/t-watch-s3/platformio.ini b/variants/t-watch-s3/platformio.ini
index 5d5904b30..1f5fc278b 100644
--- a/variants/t-watch-s3/platformio.ini
+++ b/variants/t-watch-s3/platformio.ini
@@ -2,6 +2,7 @@
[env:t-watch-s3]
extends = esp32s3_base
board = t-watch-s3
+board_check = true
upload_protocol = esptool
build_flags = ${esp32_base.build_flags}
diff --git a/variants/tbeam-s3-core/platformio.ini b/variants/tbeam-s3-core/platformio.ini
index 99d315a69..e50d506b9 100644
--- a/variants/tbeam-s3-core/platformio.ini
+++ b/variants/tbeam-s3-core/platformio.ini
@@ -2,6 +2,7 @@
[env:tbeam-s3-core]
extends = esp32s3_base
board = tbeam-s3-core
+board_check = true
lib_deps =
${esp32s3_base.lib_deps}
diff --git a/variants/tbeam/platformio.ini b/variants/tbeam/platformio.ini
index 76a03d126..85e66c2dd 100644
--- a/variants/tbeam/platformio.ini
+++ b/variants/tbeam/platformio.ini
@@ -2,9 +2,10 @@
[env:tbeam]
extends = esp32_base
board = ttgo-t-beam
+board_check = true
lib_deps =
${esp32_base.lib_deps}
build_flags =
${esp32_base.build_flags} -D TBEAM_V10 -I variants/tbeam
-DGPS_POWER_TOGGLE ; comment this line to disable double press function on the user button to turn off gps entirely.
-upload_speed = 921600
+upload_speed = 921600
\ No newline at end of file
diff --git a/variants/tbeam_v07/platformio.ini b/variants/tbeam_v07/platformio.ini
index 5428b0e2a..105d65912 100644
--- a/variants/tbeam_v07/platformio.ini
+++ b/variants/tbeam_v07/platformio.ini
@@ -2,6 +2,5 @@
[env:tbeam0_7]
extends = esp32_base
board = ttgo-t-beam
-board_level = extra
build_flags =
${esp32_base.build_flags} -D TBEAM_V07 -I variants/tbeam_v07
\ No newline at end of file
diff --git a/variants/tlora_t3s3_v1/platformio.ini b/variants/tlora_t3s3_v1/platformio.ini
index fd3d393d9..002b2f224 100644
--- a/variants/tlora_t3s3_v1/platformio.ini
+++ b/variants/tlora_t3s3_v1/platformio.ini
@@ -1,6 +1,7 @@
[env:tlora-t3s3-v1]
extends = esp32s3_base
board = tlora-t3s3-v1
+board_check = true
upload_protocol = esp-builtin
build_flags =
diff --git a/variants/tlora_v1_3/platformio.ini b/variants/tlora_v1_3/platformio.ini
index 739f76268..9d9f41a7c 100644
--- a/variants/tlora_v1_3/platformio.ini
+++ b/variants/tlora_v1_3/platformio.ini
@@ -1,6 +1,5 @@
[env:tlora_v1_3]
extends = esp32_base
-board_level = extra
board = ttgo-lora32-v1
build_flags =
${esp32_base.build_flags} -D TLORA_V1_3 -I variants/tlora_v1_3
\ No newline at end of file
diff --git a/variants/tlora_v2/platformio.ini b/variants/tlora_v2/platformio.ini
index 25ae3a360..8710068af 100644
--- a/variants/tlora_v2/platformio.ini
+++ b/variants/tlora_v2/platformio.ini
@@ -1,6 +1,5 @@
[env:tlora-v2]
extends = esp32_base
board = ttgo-lora32-v1
-board_level = extra
build_flags =
${esp32_base.build_flags} -D TLORA_V2 -I variants/tlora_v2
\ No newline at end of file
diff --git a/variants/tlora_v2_1_16/platformio.ini b/variants/tlora_v2_1_16/platformio.ini
index 167f6c37c..351f71676 100644
--- a/variants/tlora_v2_1_16/platformio.ini
+++ b/variants/tlora_v2_1_16/platformio.ini
@@ -1,6 +1,7 @@
[env:tlora-v2-1-1_6]
extends = esp32_base
board = ttgo-lora32-v21
+board_check = true
build_flags =
${esp32_base.build_flags} -D TLORA_V2_1_16 -I variants/tlora_v2_1_16
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
\ No newline at end of file
diff --git a/variants/tracksenger/internal/pins_arduino.h b/variants/tracksenger/internal/pins_arduino.h
new file mode 100644
index 000000000..5c0b529b0
--- /dev/null
+++ b/variants/tracksenger/internal/pins_arduino.h
@@ -0,0 +1,80 @@
+#ifndef Pins_Arduino_h
+#define Pins_Arduino_h
+
+#include "soc/soc_caps.h"
+#include
+
+#define WIFI_LoRa_32_V3 true
+#define DISPLAY_HEIGHT 80
+#define DISPLAY_WIDTH 160
+
+#define USB_VID 0x303a
+#define USB_PID 0x1001
+
+#define EXTERNAL_NUM_INTERRUPTS 46
+#define NUM_DIGITAL_PINS 48
+#define NUM_ANALOG_INPUTS 20
+
+static const uint8_t LED_BUILTIN = 18;
+#define BUILTIN_LED LED_BUILTIN // backward compatibility
+#define LED_BUILTIN LED_BUILTIN
+
+#define analogInputToDigitalPin(p) (((p) < 20) ? (analogChannelToDigitalPin(p)) : -1)
+#define digitalPinToInterrupt(p) (((p) < 48) ? (p) : -1)
+#define digitalPinHasPWM(p) (p < 46)
+
+static const uint8_t TX = 43;
+static const uint8_t RX = 44;
+
+static const uint8_t SDA = 45;
+static const uint8_t SCL = 46;
+
+static const uint8_t SS = 8;
+static const uint8_t MOSI = 10;
+static const uint8_t MISO = 11;
+static const uint8_t SCK = 9;
+
+static const uint8_t A0 = 1;
+static const uint8_t A1 = 2;
+static const uint8_t A2 = 3;
+static const uint8_t A3 = 4;
+static const uint8_t A4 = 5;
+static const uint8_t A5 = 6;
+static const uint8_t A6 = 7;
+static const uint8_t A7 = 8;
+static const uint8_t A8 = 9;
+static const uint8_t A9 = 10;
+static const uint8_t A10 = 11;
+static const uint8_t A11 = 12;
+static const uint8_t A12 = 13;
+static const uint8_t A13 = 14;
+static const uint8_t A14 = 15;
+static const uint8_t A15 = 16;
+static const uint8_t A16 = 17;
+static const uint8_t A17 = 18;
+static const uint8_t A18 = 19;
+static const uint8_t A19 = 20;
+
+static const uint8_t T1 = 1;
+static const uint8_t T2 = 2;
+static const uint8_t T3 = 3;
+static const uint8_t T4 = 4;
+static const uint8_t T5 = 5;
+static const uint8_t T6 = 6;
+static const uint8_t T7 = 7;
+static const uint8_t T8 = 8;
+static const uint8_t T9 = 9;
+static const uint8_t T10 = 10;
+static const uint8_t T11 = 11;
+static const uint8_t T12 = 12;
+static const uint8_t T13 = 13;
+static const uint8_t T14 = 14;
+
+static const uint8_t Vext = 36;
+static const uint8_t LED = 18;
+
+static const uint8_t RST_LoRa = 12;
+static const uint8_t BUSY_LoRa = 13;
+static const uint8_t DIO0 = 14;
+
+#endif /* Pins_Arduino_h */
diff --git a/variants/tracksenger/internal/variant.h b/variants/tracksenger/internal/variant.h
new file mode 100644
index 000000000..e63cecd7b
--- /dev/null
+++ b/variants/tracksenger/internal/variant.h
@@ -0,0 +1,90 @@
+#define LED_PIN 18
+
+#define HELTEC_TRACKER_V1_X
+
+// TRACKSENGER builtin LCD
+
+// I2C
+#define I2C_SDA SDA
+#define I2C_SCL SCL
+
+// ST7735S TFT LCD
+#define ST7735S 1 // there are different (sub-)versions of ST7735
+#define ST7735_CS 38
+#define ST7735_RS 40 // DC
+#define ST7735_SDA 42 // MOSI
+#define ST7735_SCK 41
+#define ST7735_RESET 39
+#define ST7735_MISO -1
+#define ST7735_BUSY -1
+#define ST7735_BL_V05 21 /* V1.1 PCB marking */
+#define ST7735_SPI_HOST SPI3_HOST
+#define SPI_FREQUENCY 40000000
+#define SPI_READ_FREQUENCY 16000000
+#define SCREEN_ROTATE
+#define TFT_HEIGHT DISPLAY_WIDTH
+#define TFT_WIDTH DISPLAY_HEIGHT
+#define TFT_OFFSET_X 26
+#define TFT_OFFSET_Y -1
+#define SCREEN_TRANSITION_FRAMERATE 3 // fps
+#define DISPLAY_FORCE_SMALL_FONTS
+
+#define VEXT_ENABLE_V05 3 // active HIGH, powers the lora antenna boost
+#define BUTTON_PIN 0
+
+#define BATTERY_PIN 1 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
+#define ADC_CHANNEL ADC1_GPIO1_CHANNEL
+#define ADC_ATTENUATION ADC_ATTEN_DB_2_5 // lower dB for high resistance voltage divider
+#define ADC_MULTIPLIER 4.9
+#define ADC_CTRL 2 // active HIGH, powers the voltage divider. Only on 1.1
+#define ADC_CTRL_ENABLED HIGH
+
+#undef GPS_RX_PIN
+#undef GPS_TX_PIN
+#define GPS_RX_PIN 33
+#define GPS_TX_PIN 34
+#define PIN_GPS_RESET 35
+#define PIN_GPS_PPS 36
+
+#define GPS_RESET_MODE LOW
+#define GPS_UC6580
+
+#define USE_SX1262
+#define LORA_DIO0 -1 // a No connect on the SX1262 module
+#define LORA_RESET 12
+#define LORA_DIO1 14 // SX1262 IRQ
+#define LORA_DIO2 13 // SX1262 BUSY
+#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262, if DIO3 is high the TXCO is enabled
+
+#define LORA_SCK 9
+#define LORA_MISO 11
+#define LORA_MOSI 10
+#define LORA_CS 8
+
+#define SX126X_CS LORA_CS
+#define SX126X_DIO1 LORA_DIO1
+#define SX126X_BUSY LORA_DIO2
+#define SX126X_RESET LORA_RESET
+
+#define SX126X_DIO2_AS_RF_SWITCH
+#define SX126X_DIO3_TCXO_VOLTAGE 1.8
+
+// Picomputer gets a white on black display
+#define TFT_MESH COLOR565(0xFF, 0xFF, 0xFF)
+
+// keyboard changes
+
+#define PIN_BUZZER 43
+#define CANNED_MESSAGE_MODULE_ENABLE 1
+
+#define INPUTBROKER_MATRIX_TYPE 1
+
+#define KEYS_COLS \
+ { \
+ 44, 45, 46, 4, 5, 6 \
+ }
+#define KEYS_ROWS \
+ { \
+ 26, 37, 17, 16, 15, 7 \
+ }
+// #end keyboard
\ No newline at end of file
diff --git a/variants/tracksenger/lcd/pins_arduino.h b/variants/tracksenger/lcd/pins_arduino.h
new file mode 100644
index 000000000..5c0b529b0
--- /dev/null
+++ b/variants/tracksenger/lcd/pins_arduino.h
@@ -0,0 +1,80 @@
+#ifndef Pins_Arduino_h
+#define Pins_Arduino_h
+
+#include "soc/soc_caps.h"
+#include
+
+#define WIFI_LoRa_32_V3 true
+#define DISPLAY_HEIGHT 80
+#define DISPLAY_WIDTH 160
+
+#define USB_VID 0x303a
+#define USB_PID 0x1001
+
+#define EXTERNAL_NUM_INTERRUPTS 46
+#define NUM_DIGITAL_PINS 48
+#define NUM_ANALOG_INPUTS 20
+
+static const uint8_t LED_BUILTIN = 18;
+#define BUILTIN_LED LED_BUILTIN // backward compatibility
+#define LED_BUILTIN LED_BUILTIN
+
+#define analogInputToDigitalPin(p) (((p) < 20) ? (analogChannelToDigitalPin(p)) : -1)
+#define digitalPinToInterrupt(p) (((p) < 48) ? (p) : -1)
+#define digitalPinHasPWM(p) (p < 46)
+
+static const uint8_t TX = 43;
+static const uint8_t RX = 44;
+
+static const uint8_t SDA = 45;
+static const uint8_t SCL = 46;
+
+static const uint8_t SS = 8;
+static const uint8_t MOSI = 10;
+static const uint8_t MISO = 11;
+static const uint8_t SCK = 9;
+
+static const uint8_t A0 = 1;
+static const uint8_t A1 = 2;
+static const uint8_t A2 = 3;
+static const uint8_t A3 = 4;
+static const uint8_t A4 = 5;
+static const uint8_t A5 = 6;
+static const uint8_t A6 = 7;
+static const uint8_t A7 = 8;
+static const uint8_t A8 = 9;
+static const uint8_t A9 = 10;
+static const uint8_t A10 = 11;
+static const uint8_t A11 = 12;
+static const uint8_t A12 = 13;
+static const uint8_t A13 = 14;
+static const uint8_t A14 = 15;
+static const uint8_t A15 = 16;
+static const uint8_t A16 = 17;
+static const uint8_t A17 = 18;
+static const uint8_t A18 = 19;
+static const uint8_t A19 = 20;
+
+static const uint8_t T1 = 1;
+static const uint8_t T2 = 2;
+static const uint8_t T3 = 3;
+static const uint8_t T4 = 4;
+static const uint8_t T5 = 5;
+static const uint8_t T6 = 6;
+static const uint8_t T7 = 7;
+static const uint8_t T8 = 8;
+static const uint8_t T9 = 9;
+static const uint8_t T10 = 10;
+static const uint8_t T11 = 11;
+static const uint8_t T12 = 12;
+static const uint8_t T13 = 13;
+static const uint8_t T14 = 14;
+
+static const uint8_t Vext = 36;
+static const uint8_t LED = 18;
+
+static const uint8_t RST_LoRa = 12;
+static const uint8_t BUSY_LoRa = 13;
+static const uint8_t DIO0 = 14;
+
+#endif /* Pins_Arduino_h */
diff --git a/variants/tracksenger/lcd/variant.h b/variants/tracksenger/lcd/variant.h
new file mode 100644
index 000000000..0f3423d52
--- /dev/null
+++ b/variants/tracksenger/lcd/variant.h
@@ -0,0 +1,114 @@
+#define LED_PIN 18
+
+#define HELTEC_TRACKER_V1_X
+
+// TRACKSENGER 2.8" IPS 320x240
+
+// I2C
+// #define I2C_SDA 42
+// #define I2C_SCL 41
+// #define HAS_SCREEN 1
+// #define USE_SSD1306
+
+// Default SPI1 will be mapped to the display
+#define ST7789_SDA 42
+#define ST7789_SCK 41
+#define ST7789_CS 38
+#define ST7789_RS 40
+#define ST7789_BL 21
+// P#define ST7735_BL_V05 21 /* V1.1 PCB marking */
+
+#define ST7789_RESET -1
+#define ST7789_MISO -1
+#define ST7789_BUSY -1
+#define ST7789_SPI_HOST SPI3_HOST
+#define ST7789_BACKLIGHT_EN 21
+#define SPI_FREQUENCY 40000000
+#define SPI_READ_FREQUENCY 16000000
+#define TFT_HEIGHT 320
+#define TFT_WIDTH 240
+#define TFT_OFFSET_X 0
+#define TFT_OFFSET_Y 0
+#define TFT_OFFSET_ROTATION 0
+#define SCREEN_ROTATE
+
+// ST7735S TFT LCD
+// #define ST7735S 1 // there are different (sub-)versions of ST7735
+// #define ST7735_CS 38
+// #define ST7735_RS 40 // DC
+// #define ST7735_SDA 42 // MOSI
+// #define ST7735_SCK 41
+// #define ST7735_RESET 39
+// #define ST7735_MISO -1
+// #define ST7735_BUSY -1
+#define ST7735_BL_V05 21 /* V1.1 PCB marking */
+// #define ST7735_SPI_HOST SPI3_HOST
+// #define SPI_FREQUENCY 40000000
+// #define SPI_READ_FREQUENCY 16000000
+// #define SCREEN_ROTATE
+// #define TFT_HEIGHT DISPLAY_WIDTH
+// #define TFT_WIDTH DISPLAY_HEIGHT
+// #define TFT_OFFSET_X 26
+// #define TFT_OFFSET_Y -1
+#define SCREEN_TRANSITION_FRAMERATE 3 // fps
+// #define DISPLAY_FORCE_SMALL_FONTS
+
+#define VEXT_ENABLE_V05 3 // active HIGH, powers the lora antenna boost
+#define BUTTON_PIN 0
+
+#define BATTERY_PIN 1 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
+#define ADC_CHANNEL ADC1_GPIO1_CHANNEL
+#define ADC_ATTENUATION ADC_ATTEN_DB_2_5 // lower dB for high resistance voltage divider
+#define ADC_MULTIPLIER 4.9
+#define ADC_CTRL 2 // active HIGH, powers the voltage divider. Only on 1.1
+#define ADC_CTRL_ENABLED HIGH
+
+#undef GPS_RX_PIN
+#undef GPS_TX_PIN
+#define GPS_RX_PIN 33
+#define GPS_TX_PIN 34
+#define PIN_GPS_RESET 35
+#define PIN_GPS_PPS 36
+
+#define GPS_RESET_MODE LOW
+#define GPS_UC6580
+
+#define USE_SX1262
+#define LORA_DIO0 -1 // a No connect on the SX1262 module
+#define LORA_RESET 12
+#define LORA_DIO1 14 // SX1262 IRQ
+#define LORA_DIO2 13 // SX1262 BUSY
+#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262, if DIO3 is high the TXCO is enabled
+
+#define LORA_SCK 9
+#define LORA_MISO 11
+#define LORA_MOSI 10
+#define LORA_CS 8
+
+#define SX126X_CS LORA_CS
+#define SX126X_DIO1 LORA_DIO1
+#define SX126X_BUSY LORA_DIO2
+#define SX126X_RESET LORA_RESET
+
+#define SX126X_DIO2_AS_RF_SWITCH
+#define SX126X_DIO3_TCXO_VOLTAGE 1.8
+
+// Picomputer gets a white on black display
+#define TFT_MESH COLOR565(0xFF, 0xFF, 0xFF)
+
+// keyboard changes
+
+#define PIN_BUZZER 43
+#define CANNED_MESSAGE_MODULE_ENABLE 1
+
+#define INPUTBROKER_MATRIX_TYPE 1
+
+#define KEYS_COLS \
+ { \
+ 44, 45, 46, 4, 5, 6 \
+ }
+#define KEYS_ROWS \
+ { \
+ 26, 37, 17, 16, 15, 7 \
+ }
+// #end keyboard
\ No newline at end of file
diff --git a/variants/tracksenger/oled/pins_arduino.h b/variants/tracksenger/oled/pins_arduino.h
new file mode 100644
index 000000000..5c0b529b0
--- /dev/null
+++ b/variants/tracksenger/oled/pins_arduino.h
@@ -0,0 +1,80 @@
+#ifndef Pins_Arduino_h
+#define Pins_Arduino_h
+
+#include "soc/soc_caps.h"
+#include
+
+#define WIFI_LoRa_32_V3 true
+#define DISPLAY_HEIGHT 80
+#define DISPLAY_WIDTH 160
+
+#define USB_VID 0x303a
+#define USB_PID 0x1001
+
+#define EXTERNAL_NUM_INTERRUPTS 46
+#define NUM_DIGITAL_PINS 48
+#define NUM_ANALOG_INPUTS 20
+
+static const uint8_t LED_BUILTIN = 18;
+#define BUILTIN_LED LED_BUILTIN // backward compatibility
+#define LED_BUILTIN LED_BUILTIN
+
+#define analogInputToDigitalPin(p) (((p) < 20) ? (analogChannelToDigitalPin(p)) : -1)
+#define digitalPinToInterrupt(p) (((p) < 48) ? (p) : -1)
+#define digitalPinHasPWM(p) (p < 46)
+
+static const uint8_t TX = 43;
+static const uint8_t RX = 44;
+
+static const uint8_t SDA = 45;
+static const uint8_t SCL = 46;
+
+static const uint8_t SS = 8;
+static const uint8_t MOSI = 10;
+static const uint8_t MISO = 11;
+static const uint8_t SCK = 9;
+
+static const uint8_t A0 = 1;
+static const uint8_t A1 = 2;
+static const uint8_t A2 = 3;
+static const uint8_t A3 = 4;
+static const uint8_t A4 = 5;
+static const uint8_t A5 = 6;
+static const uint8_t A6 = 7;
+static const uint8_t A7 = 8;
+static const uint8_t A8 = 9;
+static const uint8_t A9 = 10;
+static const uint8_t A10 = 11;
+static const uint8_t A11 = 12;
+static const uint8_t A12 = 13;
+static const uint8_t A13 = 14;
+static const uint8_t A14 = 15;
+static const uint8_t A15 = 16;
+static const uint8_t A16 = 17;
+static const uint8_t A17 = 18;
+static const uint8_t A18 = 19;
+static const uint8_t A19 = 20;
+
+static const uint8_t T1 = 1;
+static const uint8_t T2 = 2;
+static const uint8_t T3 = 3;
+static const uint8_t T4 = 4;
+static const uint8_t T5 = 5;
+static const uint8_t T6 = 6;
+static const uint8_t T7 = 7;
+static const uint8_t T8 = 8;
+static const uint8_t T9 = 9;
+static const uint8_t T10 = 10;
+static const uint8_t T11 = 11;
+static const uint8_t T12 = 12;
+static const uint8_t T13 = 13;
+static const uint8_t T14 = 14;
+
+static const uint8_t Vext = 36;
+static const uint8_t LED = 18;
+
+static const uint8_t RST_LoRa = 12;
+static const uint8_t BUSY_LoRa = 13;
+static const uint8_t DIO0 = 14;
+
+#endif /* Pins_Arduino_h */
diff --git a/variants/tracksenger/oled/variant.h b/variants/tracksenger/oled/variant.h
new file mode 100644
index 000000000..d6bacf139
--- /dev/null
+++ b/variants/tracksenger/oled/variant.h
@@ -0,0 +1,92 @@
+#define LED_PIN 18
+
+#define HELTEC_TRACKER_V1_X
+
+// TRACKSENGER 2.42" I2C OLED
+
+// I2C
+#define I2C_SDA 42
+#define I2C_SCL 41
+#define HAS_SCREEN 1
+#define USE_SSD1306
+
+// ST7735S TFT LCD
+// #define ST7735S 1 // there are different (sub-)versions of ST7735
+// #define ST7735_CS 38
+// #define ST7735_RS 40 // DC
+// #define ST7735_SDA 42 // MOSI
+// #define ST7735_SCK 41
+// #define ST7735_RESET 39
+// #define ST7735_MISO -1
+// #define ST7735_BUSY -1
+#define ST7735_BL_V05 21 /* V1.1 PCB marking */
+// #define ST7735_SPI_HOST SPI3_HOST
+// #define SPI_FREQUENCY 40000000
+// #define SPI_READ_FREQUENCY 16000000
+// #define SCREEN_ROTATE
+// #define TFT_HEIGHT DISPLAY_WIDTH
+// #define TFT_WIDTH DISPLAY_HEIGHT
+// #define TFT_OFFSET_X 26
+// #define TFT_OFFSET_Y -1
+#define SCREEN_TRANSITION_FRAMERATE 3 // fps
+// #define DISPLAY_FORCE_SMALL_FONTS
+
+#define VEXT_ENABLE_V05 3 // active HIGH, powers the lora antenna boost
+#define BUTTON_PIN 0
+
+#define BATTERY_PIN 1 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
+#define ADC_CHANNEL ADC1_GPIO1_CHANNEL
+#define ADC_ATTENUATION ADC_ATTEN_DB_2_5 // lower dB for high resistance voltage divider
+#define ADC_MULTIPLIER 4.9
+#define ADC_CTRL 2 // active HIGH, powers the voltage divider. Only on 1.1
+#define ADC_CTRL_ENABLED HIGH
+
+#undef GPS_RX_PIN
+#undef GPS_TX_PIN
+#define GPS_RX_PIN 33
+#define GPS_TX_PIN 34
+#define PIN_GPS_RESET 35
+#define PIN_GPS_PPS 36
+
+#define GPS_RESET_MODE LOW
+#define GPS_UC6580
+
+#define USE_SX1262
+#define LORA_DIO0 -1 // a No connect on the SX1262 module
+#define LORA_RESET 12
+#define LORA_DIO1 14 // SX1262 IRQ
+#define LORA_DIO2 13 // SX1262 BUSY
+#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262, if DIO3 is high the TXCO is enabled
+
+#define LORA_SCK 9
+#define LORA_MISO 11
+#define LORA_MOSI 10
+#define LORA_CS 8
+
+#define SX126X_CS LORA_CS
+#define SX126X_DIO1 LORA_DIO1
+#define SX126X_BUSY LORA_DIO2
+#define SX126X_RESET LORA_RESET
+
+#define SX126X_DIO2_AS_RF_SWITCH
+#define SX126X_DIO3_TCXO_VOLTAGE 1.8
+
+// Picomputer gets a white on black display
+#define TFT_MESH COLOR565(0xFF, 0xFF, 0xFF)
+
+// keyboard changes
+
+#define PIN_BUZZER 43
+#define CANNED_MESSAGE_MODULE_ENABLE 1
+
+#define INPUTBROKER_MATRIX_TYPE 1
+
+#define KEYS_COLS \
+ { \
+ 44, 45, 46, 4, 5, 6 \
+ }
+#define KEYS_ROWS \
+ { \
+ 26, 37, 17, 16, 15, 7 \
+ }
+// #end keyboard
\ No newline at end of file
diff --git a/variants/tracksenger/platformio.ini b/variants/tracksenger/platformio.ini
new file mode 100644
index 000000000..d3e31264f
--- /dev/null
+++ b/variants/tracksenger/platformio.ini
@@ -0,0 +1,40 @@
+[env:tracksenger]
+extends = esp32s3_base
+board = heltec_wireless_tracker
+upload_protocol = esp-builtin
+
+build_flags =
+ ${esp32s3_base.build_flags} -I variants/tracksenger/internal
+ -D HELTEC_TRACKER_V1_1
+ -D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
+ ;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output
+
+lib_deps =
+ ${esp32s3_base.lib_deps}
+ lovyan03/LovyanGFX@^1.1.8
+
+[env:tracksenger-lcd]
+extends = esp32s3_base
+board = heltec_wireless_tracker
+upload_protocol = esp-builtin
+
+build_flags =
+ ${esp32s3_base.build_flags} -I variants/tracksenger/lcd
+ -D HELTEC_TRACKER_V1_1
+ -D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
+ ;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output
+
+lib_deps =
+ ${esp32s3_base.lib_deps}
+ lovyan03/LovyanGFX@^1.1.8
+
+[env:tracksenger-oled]
+extends = esp32s3_base
+board = heltec_wireless_tracker
+upload_protocol = esp-builtin
+
+build_flags =
+ ${esp32s3_base.build_flags} -I variants/tracksenger/oled
+ -D HELTEC_TRACKER_V1_1
+ -D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
+ ;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output
diff --git a/variants/unphone/platformio.ini b/variants/unphone/platformio.ini
index 53554f06b..e4f014889 100644
--- a/variants/unphone/platformio.ini
+++ b/variants/unphone/platformio.ini
@@ -3,7 +3,6 @@
[env:unphone]
extends = esp32s3_base
-board_level = extra
board = unphone9
upload_speed = 921600
monitor_speed = 115200
diff --git a/variants/wiphone/platformio.ini b/variants/wiphone/platformio.ini
index 10c0de55e..0218f8930 100644
--- a/variants/wiphone/platformio.ini
+++ b/variants/wiphone/platformio.ini
@@ -1,6 +1,7 @@
[env:wiphone]
extends = esp32_base
board = wiphone
+board_level = extra
monitor_filters = esp32_exception_decoder
board_build.partitions = default_16MB.csv
build_flags =
@@ -9,5 +10,4 @@ lib_deps =
${esp32_base.lib_deps}
lovyan03/LovyanGFX@^1.1.8
sparkfun/SX1509 IO Expander@^3.0.5
- pololu/APA102@^3.0.0
-
\ No newline at end of file
+ pololu/APA102@^3.0.0
\ No newline at end of file