From 16d265023626a3820deb5fa6835065c89f7eb8db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Sun, 13 Jul 2025 19:16:14 +0200 Subject: [PATCH 01/45] add pioenv to version string in debug log (#7328) --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 773145951..395291766 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -286,7 +286,7 @@ void lateInitVariant() {} */ void printInfo() { - LOG_INFO("S:B:%d,%s", HW_VENDOR, optstr(APP_VERSION)); + LOG_INFO("S:B:%d,%s,%s", HW_VENDOR, optstr(APP_VERSION), optstr(APP_ENV)); } #ifndef PIO_UNIT_TESTING void setup() From 45e428eb25acbd297dd570a32c57eca5f07c65d7 Mon Sep 17 00:00:00 2001 From: Austin Date: Sun, 13 Jul 2025 16:22:42 -0400 Subject: [PATCH 02/45] PPA: Add Ubuntu Questing (25.10) to daily builds (#7329) --- .github/workflows/daily_packaging.yml | 6 +++++- .github/workflows/release_channels.yml | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/daily_packaging.yml b/.github/workflows/daily_packaging.yml index 63d24687b..eb61554f2 100644 --- a/.github/workflows/daily_packaging.yml +++ b/.github/workflows/daily_packaging.yml @@ -30,7 +30,11 @@ jobs: strategy: fail-fast: false matrix: - series: [plucky, noble, jammy] + series: + - jammy # 22.04 + - noble # 24.04 + - plucky # 25.04 + - questing # 25.10 uses: ./.github/workflows/package_ppa.yml with: ppa_repo: ppa:meshtastic/daily diff --git a/.github/workflows/release_channels.yml b/.github/workflows/release_channels.yml index ed2de1717..ef03be9dc 100644 --- a/.github/workflows/release_channels.yml +++ b/.github/workflows/release_channels.yml @@ -20,7 +20,11 @@ jobs: strategy: fail-fast: false matrix: - series: [plucky, noble, jammy] + series: + - jammy # 22.04 + - noble # 24.04 + - plucky # 25.04 + # - questing # 25.10 uses: ./.github/workflows/package_ppa.yml with: ppa_repo: |- From f3ff80963afd5cafa840849c70023817de330863 Mon Sep 17 00:00:00 2001 From: Austin Date: Sun, 13 Jul 2025 20:48:17 -0400 Subject: [PATCH 03/45] Actions: Move all Linux packaging into subdir (#7332) --- .github/workflows/daily_packaging.yml | 18 +++++++++--------- .../copr.yml} | 0 .../debian_src.yml} | 0 .../{ => linux_packaging}/docker_build.yml | 1 + .../{ => linux_packaging}/docker_manifest.yml | 12 ++++++------ .../obs.yml} | 2 +- .../ppa.yml} | 2 +- .github/workflows/main_matrix.yml | 14 +++++++------- .github/workflows/release_channels.yml | 8 ++++---- .../{nightly.yml => trunk_nightly.yml} | 2 +- bin/build-firmware.sh | 4 ++-- 11 files changed, 32 insertions(+), 31 deletions(-) rename .github/workflows/{hook_copr.yml => linux_packaging/copr.yml} (100%) rename .github/workflows/{build_debian_src.yml => linux_packaging/debian_src.yml} (100%) rename .github/workflows/{ => linux_packaging}/docker_build.yml (98%) rename .github/workflows/{ => linux_packaging}/docker_manifest.yml (93%) rename .github/workflows/{package_obs.yml => linux_packaging/obs.yml} (98%) rename .github/workflows/{package_ppa.yml => linux_packaging/ppa.yml} (96%) rename .github/workflows/{nightly.yml => trunk_nightly.yml} (97%) diff --git a/.github/workflows/daily_packaging.yml b/.github/workflows/daily_packaging.yml index eb61554f2..b9b52c5e8 100644 --- a/.github/workflows/daily_packaging.yml +++ b/.github/workflows/daily_packaging.yml @@ -9,11 +9,11 @@ on: paths: - debian/** - "*.rpkg" - - .github/workflows/nightly_packaging.yml - - .github/workflows/build_debian_src.yml - - .github/workflows/package_ppa.yml - - .github/workflows/package_obs.yml - - .github/workflows/hook_copr.yml + - .github/workflows/daily_packaging.yml + - .github/workflows/linux_packaging/debian_src.yml + - .github/workflows/linux_packaging/ppa.yml + - .github/workflows/linux_packaging/obs.yml + - .github/workflows/linux_packaging/copr.yml permissions: contents: write @@ -21,7 +21,7 @@ permissions: jobs: docker-multiarch: - uses: ./.github/workflows/docker_manifest.yml + uses: ./.github/workflows/linux_packaging/docker_manifest.yml with: release_channel: daily secrets: inherit @@ -35,21 +35,21 @@ jobs: - noble # 24.04 - plucky # 25.04 - questing # 25.10 - uses: ./.github/workflows/package_ppa.yml + uses: ./.github/workflows/linux_packaging/ppa.yml with: ppa_repo: ppa:meshtastic/daily series: ${{ matrix.series }} secrets: inherit package-obs: - uses: ./.github/workflows/package_obs.yml + uses: ./.github/workflows/linux_packaging/obs.yml with: obs_project: network:Meshtastic:daily series: unstable secrets: inherit hook-copr: - uses: ./.github/workflows/hook_copr.yml + uses: ./.github/workflows/linux_packaging/copr.yml with: copr_project: daily secrets: inherit diff --git a/.github/workflows/hook_copr.yml b/.github/workflows/linux_packaging/copr.yml similarity index 100% rename from .github/workflows/hook_copr.yml rename to .github/workflows/linux_packaging/copr.yml diff --git a/.github/workflows/build_debian_src.yml b/.github/workflows/linux_packaging/debian_src.yml similarity index 100% rename from .github/workflows/build_debian_src.yml rename to .github/workflows/linux_packaging/debian_src.yml diff --git a/.github/workflows/docker_build.yml b/.github/workflows/linux_packaging/docker_build.yml similarity index 98% rename from .github/workflows/docker_build.yml rename to .github/workflows/linux_packaging/docker_build.yml index cde7fd274..a6173eac5 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/linux_packaging/docker_build.yml @@ -42,6 +42,7 @@ permissions: jobs: docker-build: + name: docker-${{ inputs.distro }} outputs: digest: ${{ steps.docker_variant.outputs.digest }} runs-on: ${{ inputs.runs-on }} diff --git a/.github/workflows/docker_manifest.yml b/.github/workflows/linux_packaging/docker_manifest.yml similarity index 93% rename from .github/workflows/docker_manifest.yml rename to .github/workflows/linux_packaging/docker_manifest.yml index d1d1a5634..6585212a4 100644 --- a/.github/workflows/docker_manifest.yml +++ b/.github/workflows/linux_packaging/docker_manifest.yml @@ -17,7 +17,7 @@ permissions: jobs: docker-debian-amd64: - uses: ./.github/workflows/docker_build.yml + uses: ./.github/workflows/linux_packaging/docker_build.yml with: distro: debian platform: linux/amd64 @@ -26,7 +26,7 @@ jobs: secrets: inherit docker-debian-arm64: - uses: ./.github/workflows/docker_build.yml + uses: ./.github/workflows/linux_packaging/docker_build.yml with: distro: debian platform: linux/arm64 @@ -35,7 +35,7 @@ jobs: secrets: inherit docker-debian-armv7: - uses: ./.github/workflows/docker_build.yml + uses: ./.github/workflows/linux_packaging/docker_build.yml with: distro: debian platform: linux/arm/v7 @@ -44,7 +44,7 @@ jobs: secrets: inherit docker-alpine-amd64: - uses: ./.github/workflows/docker_build.yml + uses: ./.github/workflows/linux_packaging/docker_build.yml with: distro: alpine platform: linux/amd64 @@ -53,7 +53,7 @@ jobs: secrets: inherit docker-alpine-arm64: - uses: ./.github/workflows/docker_build.yml + uses: ./.github/workflows/linux_packaging/docker_build.yml with: distro: alpine platform: linux/arm64 @@ -62,7 +62,7 @@ jobs: secrets: inherit docker-alpine-armv7: - uses: ./.github/workflows/docker_build.yml + uses: ./.github/workflows/linux_packaging/docker_build.yml with: distro: alpine platform: linux/arm/v7 diff --git a/.github/workflows/package_obs.yml b/.github/workflows/linux_packaging/obs.yml similarity index 98% rename from .github/workflows/package_obs.yml rename to .github/workflows/linux_packaging/obs.yml index 275ffce0e..5156dee2e 100644 --- a/.github/workflows/package_obs.yml +++ b/.github/workflows/linux_packaging/obs.yml @@ -23,7 +23,7 @@ permissions: jobs: build-debian-src: - uses: ./.github/workflows/build_debian_src.yml + uses: ./.github/workflows/linux_packaging/debian_src.yml secrets: inherit with: series: ${{ inputs.series }} diff --git a/.github/workflows/package_ppa.yml b/.github/workflows/linux_packaging/ppa.yml similarity index 96% rename from .github/workflows/package_ppa.yml rename to .github/workflows/linux_packaging/ppa.yml index a54b0bd36..ef089eefb 100644 --- a/.github/workflows/package_ppa.yml +++ b/.github/workflows/linux_packaging/ppa.yml @@ -21,7 +21,7 @@ permissions: jobs: build-debian-src: - uses: ./.github/workflows/build_debian_src.yml + uses: ./.github/workflows/linux_packaging/debian_src.yml secrets: inherit with: series: ${{ inputs.series }} diff --git a/.github/workflows/main_matrix.yml b/.github/workflows/main_matrix.yml index a676efa1e..3aafced62 100644 --- a/.github/workflows/main_matrix.yml +++ b/.github/workflows/main_matrix.yml @@ -136,7 +136,7 @@ jobs: build-debian-src: if: github.repository == 'meshtastic/firmware' - uses: ./.github/workflows/build_debian_src.yml + uses: ./.github/workflows/linux_packaging/debian_src.yml with: series: UNRELEASED build_location: local @@ -154,7 +154,7 @@ jobs: uses: ./.github/workflows/test_native.yml docker-deb-amd64: - uses: ./.github/workflows/docker_build.yml + uses: ./.github/workflows/linux_packaging/docker_build.yml with: distro: debian platform: linux/amd64 @@ -162,7 +162,7 @@ jobs: push: false docker-deb-amd64-tft: - uses: ./.github/workflows/docker_build.yml + uses: ./.github/workflows/linux_packaging/docker_build.yml with: distro: debian platform: linux/amd64 @@ -171,7 +171,7 @@ jobs: pio_env: native-tft docker-alp-amd64: - uses: ./.github/workflows/docker_build.yml + uses: ./.github/workflows/linux_packaging/docker_build.yml with: distro: alpine platform: linux/amd64 @@ -179,7 +179,7 @@ jobs: push: false docker-alp-amd64-tft: - uses: ./.github/workflows/docker_build.yml + uses: ./.github/workflows/linux_packaging/docker_build.yml with: distro: alpine platform: linux/amd64 @@ -188,7 +188,7 @@ jobs: pio_env: native-tft docker-deb-arm64: - uses: ./.github/workflows/docker_build.yml + uses: ./.github/workflows/linux_packaging/docker_build.yml with: distro: debian platform: linux/arm64 @@ -196,7 +196,7 @@ jobs: push: false docker-deb-armv7: - uses: ./.github/workflows/docker_build.yml + uses: ./.github/workflows/linux_packaging/docker_build.yml with: distro: debian platform: linux/arm/v7 diff --git a/.github/workflows/release_channels.yml b/.github/workflows/release_channels.yml index ef03be9dc..50bd1fba1 100644 --- a/.github/workflows/release_channels.yml +++ b/.github/workflows/release_channels.yml @@ -10,7 +10,7 @@ permissions: jobs: build-docker: - uses: ./.github/workflows/docker_manifest.yml + uses: ./.github/workflows/linux_packaging/docker_manifest.yml with: release_channel: |- ${{ contains(github.event.release.name, 'Beta') && 'beta' || contains(github.event.release.name, 'Alpha') && 'alpha' }} @@ -25,7 +25,7 @@ jobs: - noble # 24.04 - plucky # 25.04 # - questing # 25.10 - uses: ./.github/workflows/package_ppa.yml + uses: ./.github/workflows/linux_packaging/ppa.yml with: ppa_repo: |- ppa:meshtastic/${{ contains(github.event.release.name, 'Beta') && 'beta' || contains(github.event.release.name, 'Alpha') && 'alpha' }} @@ -33,7 +33,7 @@ jobs: secrets: inherit package-obs: - uses: ./.github/workflows/package_obs.yml + uses: ./.github/workflows/linux_packaging/obs.yml with: obs_project: |- network:Meshtastic:${{ contains(github.event.release.name, 'Beta') && 'beta' || contains(github.event.release.name, 'Alpha') && 'alpha' }} @@ -42,7 +42,7 @@ jobs: secrets: inherit hook-copr: - uses: ./.github/workflows/hook_copr.yml + uses: ./.github/workflows/linux_packaging/copr.yml with: copr_project: |- ${{ contains(github.event.release.name, 'Beta') && 'beta' || contains(github.event.release.name, 'Alpha') && 'alpha' }} diff --git a/.github/workflows/nightly.yml b/.github/workflows/trunk_nightly.yml similarity index 97% rename from .github/workflows/nightly.yml rename to .github/workflows/trunk_nightly.yml index 309772b12..4f1e9b426 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/trunk_nightly.yml @@ -1,4 +1,4 @@ -name: Nightly +name: Trunk Nightly on: schedule: - cron: 0 8 * * 1-5 diff --git a/bin/build-firmware.sh b/bin/build-firmware.sh index c53f1b660..933c9bfe6 100644 --- a/bin/build-firmware.sh +++ b/bin/build-firmware.sh @@ -10,8 +10,8 @@ elif (echo $2 | grep -q "nrf52"); then bin/build-nrf52.sh $1 elif (echo $2 | grep -q "stm32"); then bin/build-stm32.sh $1 -elif (echo $2 | grep -q "rpi2040"); then - bin/build-rpi2040.sh $1 +elif (echo $2 | grep -q "rp2xx0"); then + bin/build-rp2xx0.sh $1 else echo "Unknown target $2" exit 1 From 29cca4d62113f4627bcd8b9f33cc553a22f16fba Mon Sep 17 00:00:00 2001 From: Austin Date: Sun, 13 Jul 2025 20:54:52 -0400 Subject: [PATCH 04/45] Revert "Actions: Move all Linux packaging into subdir (#7332)" (#7334) This reverts commit f3ff80963afd5cafa840849c70023817de330863. --- .../debian_src.yml => build_debian_src.yml} | 0 .github/workflows/daily_packaging.yml | 18 +++++++++--------- .../{linux_packaging => }/docker_build.yml | 1 - .../{linux_packaging => }/docker_manifest.yml | 12 ++++++------ .../copr.yml => hook_copr.yml} | 0 .github/workflows/main_matrix.yml | 14 +++++++------- .../{trunk_nightly.yml => nightly.yml} | 2 +- .../obs.yml => package_obs.yml} | 2 +- .../ppa.yml => package_ppa.yml} | 2 +- .github/workflows/release_channels.yml | 8 ++++---- bin/build-firmware.sh | 4 ++-- 11 files changed, 31 insertions(+), 32 deletions(-) rename .github/workflows/{linux_packaging/debian_src.yml => build_debian_src.yml} (100%) rename .github/workflows/{linux_packaging => }/docker_build.yml (98%) rename .github/workflows/{linux_packaging => }/docker_manifest.yml (93%) rename .github/workflows/{linux_packaging/copr.yml => hook_copr.yml} (100%) rename .github/workflows/{trunk_nightly.yml => nightly.yml} (97%) rename .github/workflows/{linux_packaging/obs.yml => package_obs.yml} (98%) rename .github/workflows/{linux_packaging/ppa.yml => package_ppa.yml} (96%) diff --git a/.github/workflows/linux_packaging/debian_src.yml b/.github/workflows/build_debian_src.yml similarity index 100% rename from .github/workflows/linux_packaging/debian_src.yml rename to .github/workflows/build_debian_src.yml diff --git a/.github/workflows/daily_packaging.yml b/.github/workflows/daily_packaging.yml index b9b52c5e8..eb61554f2 100644 --- a/.github/workflows/daily_packaging.yml +++ b/.github/workflows/daily_packaging.yml @@ -9,11 +9,11 @@ on: paths: - debian/** - "*.rpkg" - - .github/workflows/daily_packaging.yml - - .github/workflows/linux_packaging/debian_src.yml - - .github/workflows/linux_packaging/ppa.yml - - .github/workflows/linux_packaging/obs.yml - - .github/workflows/linux_packaging/copr.yml + - .github/workflows/nightly_packaging.yml + - .github/workflows/build_debian_src.yml + - .github/workflows/package_ppa.yml + - .github/workflows/package_obs.yml + - .github/workflows/hook_copr.yml permissions: contents: write @@ -21,7 +21,7 @@ permissions: jobs: docker-multiarch: - uses: ./.github/workflows/linux_packaging/docker_manifest.yml + uses: ./.github/workflows/docker_manifest.yml with: release_channel: daily secrets: inherit @@ -35,21 +35,21 @@ jobs: - noble # 24.04 - plucky # 25.04 - questing # 25.10 - uses: ./.github/workflows/linux_packaging/ppa.yml + uses: ./.github/workflows/package_ppa.yml with: ppa_repo: ppa:meshtastic/daily series: ${{ matrix.series }} secrets: inherit package-obs: - uses: ./.github/workflows/linux_packaging/obs.yml + uses: ./.github/workflows/package_obs.yml with: obs_project: network:Meshtastic:daily series: unstable secrets: inherit hook-copr: - uses: ./.github/workflows/linux_packaging/copr.yml + uses: ./.github/workflows/hook_copr.yml with: copr_project: daily secrets: inherit diff --git a/.github/workflows/linux_packaging/docker_build.yml b/.github/workflows/docker_build.yml similarity index 98% rename from .github/workflows/linux_packaging/docker_build.yml rename to .github/workflows/docker_build.yml index a6173eac5..cde7fd274 100644 --- a/.github/workflows/linux_packaging/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -42,7 +42,6 @@ permissions: jobs: docker-build: - name: docker-${{ inputs.distro }} outputs: digest: ${{ steps.docker_variant.outputs.digest }} runs-on: ${{ inputs.runs-on }} diff --git a/.github/workflows/linux_packaging/docker_manifest.yml b/.github/workflows/docker_manifest.yml similarity index 93% rename from .github/workflows/linux_packaging/docker_manifest.yml rename to .github/workflows/docker_manifest.yml index 6585212a4..d1d1a5634 100644 --- a/.github/workflows/linux_packaging/docker_manifest.yml +++ b/.github/workflows/docker_manifest.yml @@ -17,7 +17,7 @@ permissions: jobs: docker-debian-amd64: - uses: ./.github/workflows/linux_packaging/docker_build.yml + uses: ./.github/workflows/docker_build.yml with: distro: debian platform: linux/amd64 @@ -26,7 +26,7 @@ jobs: secrets: inherit docker-debian-arm64: - uses: ./.github/workflows/linux_packaging/docker_build.yml + uses: ./.github/workflows/docker_build.yml with: distro: debian platform: linux/arm64 @@ -35,7 +35,7 @@ jobs: secrets: inherit docker-debian-armv7: - uses: ./.github/workflows/linux_packaging/docker_build.yml + uses: ./.github/workflows/docker_build.yml with: distro: debian platform: linux/arm/v7 @@ -44,7 +44,7 @@ jobs: secrets: inherit docker-alpine-amd64: - uses: ./.github/workflows/linux_packaging/docker_build.yml + uses: ./.github/workflows/docker_build.yml with: distro: alpine platform: linux/amd64 @@ -53,7 +53,7 @@ jobs: secrets: inherit docker-alpine-arm64: - uses: ./.github/workflows/linux_packaging/docker_build.yml + uses: ./.github/workflows/docker_build.yml with: distro: alpine platform: linux/arm64 @@ -62,7 +62,7 @@ jobs: secrets: inherit docker-alpine-armv7: - uses: ./.github/workflows/linux_packaging/docker_build.yml + uses: ./.github/workflows/docker_build.yml with: distro: alpine platform: linux/arm/v7 diff --git a/.github/workflows/linux_packaging/copr.yml b/.github/workflows/hook_copr.yml similarity index 100% rename from .github/workflows/linux_packaging/copr.yml rename to .github/workflows/hook_copr.yml diff --git a/.github/workflows/main_matrix.yml b/.github/workflows/main_matrix.yml index 3aafced62..a676efa1e 100644 --- a/.github/workflows/main_matrix.yml +++ b/.github/workflows/main_matrix.yml @@ -136,7 +136,7 @@ jobs: build-debian-src: if: github.repository == 'meshtastic/firmware' - uses: ./.github/workflows/linux_packaging/debian_src.yml + uses: ./.github/workflows/build_debian_src.yml with: series: UNRELEASED build_location: local @@ -154,7 +154,7 @@ jobs: uses: ./.github/workflows/test_native.yml docker-deb-amd64: - uses: ./.github/workflows/linux_packaging/docker_build.yml + uses: ./.github/workflows/docker_build.yml with: distro: debian platform: linux/amd64 @@ -162,7 +162,7 @@ jobs: push: false docker-deb-amd64-tft: - uses: ./.github/workflows/linux_packaging/docker_build.yml + uses: ./.github/workflows/docker_build.yml with: distro: debian platform: linux/amd64 @@ -171,7 +171,7 @@ jobs: pio_env: native-tft docker-alp-amd64: - uses: ./.github/workflows/linux_packaging/docker_build.yml + uses: ./.github/workflows/docker_build.yml with: distro: alpine platform: linux/amd64 @@ -179,7 +179,7 @@ jobs: push: false docker-alp-amd64-tft: - uses: ./.github/workflows/linux_packaging/docker_build.yml + uses: ./.github/workflows/docker_build.yml with: distro: alpine platform: linux/amd64 @@ -188,7 +188,7 @@ jobs: pio_env: native-tft docker-deb-arm64: - uses: ./.github/workflows/linux_packaging/docker_build.yml + uses: ./.github/workflows/docker_build.yml with: distro: debian platform: linux/arm64 @@ -196,7 +196,7 @@ jobs: push: false docker-deb-armv7: - uses: ./.github/workflows/linux_packaging/docker_build.yml + uses: ./.github/workflows/docker_build.yml with: distro: debian platform: linux/arm/v7 diff --git a/.github/workflows/trunk_nightly.yml b/.github/workflows/nightly.yml similarity index 97% rename from .github/workflows/trunk_nightly.yml rename to .github/workflows/nightly.yml index 4f1e9b426..309772b12 100644 --- a/.github/workflows/trunk_nightly.yml +++ b/.github/workflows/nightly.yml @@ -1,4 +1,4 @@ -name: Trunk Nightly +name: Nightly on: schedule: - cron: 0 8 * * 1-5 diff --git a/.github/workflows/linux_packaging/obs.yml b/.github/workflows/package_obs.yml similarity index 98% rename from .github/workflows/linux_packaging/obs.yml rename to .github/workflows/package_obs.yml index 5156dee2e..275ffce0e 100644 --- a/.github/workflows/linux_packaging/obs.yml +++ b/.github/workflows/package_obs.yml @@ -23,7 +23,7 @@ permissions: jobs: build-debian-src: - uses: ./.github/workflows/linux_packaging/debian_src.yml + uses: ./.github/workflows/build_debian_src.yml secrets: inherit with: series: ${{ inputs.series }} diff --git a/.github/workflows/linux_packaging/ppa.yml b/.github/workflows/package_ppa.yml similarity index 96% rename from .github/workflows/linux_packaging/ppa.yml rename to .github/workflows/package_ppa.yml index ef089eefb..a54b0bd36 100644 --- a/.github/workflows/linux_packaging/ppa.yml +++ b/.github/workflows/package_ppa.yml @@ -21,7 +21,7 @@ permissions: jobs: build-debian-src: - uses: ./.github/workflows/linux_packaging/debian_src.yml + uses: ./.github/workflows/build_debian_src.yml secrets: inherit with: series: ${{ inputs.series }} diff --git a/.github/workflows/release_channels.yml b/.github/workflows/release_channels.yml index 50bd1fba1..ef03be9dc 100644 --- a/.github/workflows/release_channels.yml +++ b/.github/workflows/release_channels.yml @@ -10,7 +10,7 @@ permissions: jobs: build-docker: - uses: ./.github/workflows/linux_packaging/docker_manifest.yml + uses: ./.github/workflows/docker_manifest.yml with: release_channel: |- ${{ contains(github.event.release.name, 'Beta') && 'beta' || contains(github.event.release.name, 'Alpha') && 'alpha' }} @@ -25,7 +25,7 @@ jobs: - noble # 24.04 - plucky # 25.04 # - questing # 25.10 - uses: ./.github/workflows/linux_packaging/ppa.yml + uses: ./.github/workflows/package_ppa.yml with: ppa_repo: |- ppa:meshtastic/${{ contains(github.event.release.name, 'Beta') && 'beta' || contains(github.event.release.name, 'Alpha') && 'alpha' }} @@ -33,7 +33,7 @@ jobs: secrets: inherit package-obs: - uses: ./.github/workflows/linux_packaging/obs.yml + uses: ./.github/workflows/package_obs.yml with: obs_project: |- network:Meshtastic:${{ contains(github.event.release.name, 'Beta') && 'beta' || contains(github.event.release.name, 'Alpha') && 'alpha' }} @@ -42,7 +42,7 @@ jobs: secrets: inherit hook-copr: - uses: ./.github/workflows/linux_packaging/copr.yml + uses: ./.github/workflows/hook_copr.yml with: copr_project: |- ${{ contains(github.event.release.name, 'Beta') && 'beta' || contains(github.event.release.name, 'Alpha') && 'alpha' }} diff --git a/bin/build-firmware.sh b/bin/build-firmware.sh index 933c9bfe6..c53f1b660 100644 --- a/bin/build-firmware.sh +++ b/bin/build-firmware.sh @@ -10,8 +10,8 @@ elif (echo $2 | grep -q "nrf52"); then bin/build-nrf52.sh $1 elif (echo $2 | grep -q "stm32"); then bin/build-stm32.sh $1 -elif (echo $2 | grep -q "rp2xx0"); then - bin/build-rp2xx0.sh $1 +elif (echo $2 | grep -q "rpi2040"); then + bin/build-rpi2040.sh $1 else echo "Unknown target $2" exit 1 From ac3e5684d6887704eb0e317223e0c7bc8394ac76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Mon, 14 Jul 2025 12:11:26 +0200 Subject: [PATCH 05/45] get git url part from local repo (#7331) --- bin/platformio-custom.py | 13 +++++++++++++ src/main.cpp | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/bin/platformio-custom.py b/bin/platformio-custom.py index be2a9ab71..fc1b4bc2e 100644 --- a/bin/platformio-custom.py +++ b/bin/platformio-custom.py @@ -3,6 +3,7 @@ # trunk-ignore-all(flake8/F821): For SConstruct imports import sys from os.path import join +import subprocess import json import re @@ -92,6 +93,17 @@ prefsLoc = projenv["PROJECT_DIR"] + "/version.properties" verObj = readProps(prefsLoc) print("Using meshtastic platformio-custom.py, firmware version " + verObj["long"] + " on " + env.get("PIOENV")) +# get repository owner if git is installed +try: + r_owner = ( + subprocess.check_output(["git", "config", "--get", "remote.origin.url"]) + .decode("utf-8") + .strip().split("/") + ) + repo_owner = r_owner[-2] + "/" + r_owner[-1].replace(".git", "") +except subprocess.CalledProcessError: + repo_owner = "unknown" + jsonLoc = env["PROJECT_DIR"] + "/userPrefs.jsonc" with open(jsonLoc) as f: jsonStr = re.sub("//.*","", f.read(), flags=re.MULTILINE) @@ -117,6 +129,7 @@ flags = [ "-DAPP_VERSION=" + verObj["long"], "-DAPP_VERSION_SHORT=" + verObj["short"], "-DAPP_ENV=" + env.get("PIOENV"), + "-DAPP_REPO=" + repo_owner, ] + pref_flags print ("Using flags:") diff --git a/src/main.cpp b/src/main.cpp index 395291766..640f0b1fe 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -286,7 +286,7 @@ void lateInitVariant() {} */ void printInfo() { - LOG_INFO("S:B:%d,%s,%s", HW_VENDOR, optstr(APP_VERSION), optstr(APP_ENV)); + LOG_INFO("S:B:%d,%s,%s,%s", HW_VENDOR, optstr(APP_VERSION), optstr(APP_ENV), optstr(APP_REPO)); } #ifndef PIO_UNIT_TESTING void setup() From 1be4fc5ae95dc22e63688f78e9050981d50d88d8 Mon Sep 17 00:00:00 2001 From: Chloe Bethel Date: Mon, 14 Jul 2025 11:12:26 +0100 Subject: [PATCH 06/45] GPS for STM32WL (#7297) * Enable GPS for Wio-E5 variant on Serial2 * Add ability to override GPS serial port using GPS_SERIAL_PORT, and make RAK2560 use it. * Don't try to send ATAK packets if ATAK is disabled, +4k flash --- arch/stm32/stm32.ini | 4 ++-- src/gps/GPS.cpp | 6 +++--- src/modules/PositionModule.cpp | 2 ++ variants/rak2560/variant.h | 1 + variants/wio-e5/platformio.ini | 7 ++++++- variants/wio-e5/variant.h | 2 ++ 6 files changed, 16 insertions(+), 6 deletions(-) diff --git a/arch/stm32/stm32.ini b/arch/stm32/stm32.ini index be1ed662f..03e0bf392 100644 --- a/arch/stm32/stm32.ini +++ b/arch/stm32/stm32.ini @@ -23,11 +23,11 @@ build_flags = -DMESHTASTIC_EXCLUDE_SCREEN=1 -DMESHTASTIC_EXCLUDE_MQTT=1 -DMESHTASTIC_EXCLUDE_BLUETOOTH=1 - -DMESHTASTIC_EXCLUDE_GPS=1 -DMESHTASTIC_EXCLUDE_WIFI=1 -DMESHTASTIC_EXCLUDE_TZ=1 ; Exclude TZ to save some flash space. + -DSERIAL_RX_BUFFER_SIZE=256 ; For GPS - the default of 64 is too small. -DPIO_FRAMEWORK_ARDUINO_NANOLIB_FLOAT_PRINTF ; This is REQUIRED for at least traceroute debug prints - without it the length ends up uninitialized. - ;-DDEBUG_MUTE + -DDEBUG_MUTE ; You can #undef DEBUG_MUTE in certain source files if you need the logs. -fmerge-all-constants -ffunction-sections -fdata-sections diff --git a/src/gps/GPS.cpp b/src/gps/GPS.cpp index 345c738d6..3a6b19f64 100644 --- a/src/gps/GPS.cpp +++ b/src/gps/GPS.cpp @@ -39,9 +39,9 @@ template std::size_t array_count(const T (&)[N]) return N; } -#if defined(NRF52840_XXAA) || defined(NRF52833_XXAA) || defined(ARCH_ESP32) || defined(ARCH_PORTDUINO) -#if defined(RAK2560) -HardwareSerial *GPS::_serial_gps = &Serial2; +#if defined(NRF52840_XXAA) || defined(NRF52833_XXAA) || defined(ARCH_ESP32) || defined(ARCH_PORTDUINO) || defined(ARCH_STM32WL) +#if defined(GPS_SERIAL_PORT) +HardwareSerial *GPS::_serial_gps = &GPS_SERIAL_PORT; #else HardwareSerial *GPS::_serial_gps = &Serial1; #endif diff --git a/src/modules/PositionModule.cpp b/src/modules/PositionModule.cpp index 93c65ecc1..8b6a9f19c 100644 --- a/src/modules/PositionModule.cpp +++ b/src/modules/PositionModule.cpp @@ -266,9 +266,11 @@ meshtastic_MeshPacket *PositionModule::allocPositionPacket() LOG_INFO("Position packet: time=%i lat=%i lon=%i", p.time, p.latitude_i, p.longitude_i); +#ifndef MESHTASTIC_EXCLUDE_ATAK // TAK Tracker devices should send their position in a TAK packet over the ATAK port if (config.device.role == meshtastic_Config_DeviceConfig_Role_TAK_TRACKER) return allocAtakPli(); +#endif return allocDataProtobuf(p); } diff --git a/variants/rak2560/variant.h b/variants/rak2560/variant.h index a03fc3933..f922e8a61 100644 --- a/variants/rak2560/variant.h +++ b/variants/rak2560/variant.h @@ -222,6 +222,7 @@ SO GPIO 39/TXEN MAY NOT BE DEFINED FOR SUCCESSFUL OPERATION OF THE SX1262 - TG // #define PIN_GPS_EN PIN_3V3_EN #define PIN_GPS_PPS (17) // Pulse per second input from the GPS +#define GPS_SERIAL_PORT Serial2 // On RAK2560 the GPS is be on a different UART // #define GPS_RX_PIN PIN_SERIAL2_RX // #define GPS_TX_PIN PIN_SERIAL2_TX diff --git a/variants/wio-e5/platformio.ini b/variants/wio-e5/platformio.ini index 1ef7abd78..90251c7aa 100644 --- a/variants/wio-e5/platformio.ini +++ b/variants/wio-e5/platformio.ini @@ -15,7 +15,12 @@ build_flags = -DRADIOLIB_EXCLUDE_SX128X=1 -DRADIOLIB_EXCLUDE_SX127X=1 -DRADIOLIB_EXCLUDE_LR11X0=1 - -DHAS_SENSOR + -DHAS_SENSOR=1 + -DENABLE_HWSERIAL2 + -DPIN_SERIAL2_TX=PA2 + -DPIN_SERIAL2_RX=PA3 + -DHAS_GPS=1 + -DGPS_SERIAL_PORT=Serial2 upload_port = stlink diff --git a/variants/wio-e5/variant.h b/variants/wio-e5/variant.h index 5421eaeb9..6098b4ce6 100644 --- a/variants/wio-e5/variant.h +++ b/variants/wio-e5/variant.h @@ -17,6 +17,8 @@ Do not expect a working Meshtastic device with this target. #define LED_PIN PB5 #define LED_STATE_ON 1 +#define WIO_E5 + #if (defined(LED_BUILTIN) && LED_BUILTIN == PNUM_NOT_DEFINED) #undef LED_BUILTIN #define LED_BUILTIN (LED_PIN) From 3599ca6845c3b9788226e875ef7c11a4a6be7da1 Mon Sep 17 00:00:00 2001 From: Chloe Bethel Date: Mon, 14 Jul 2025 11:12:38 +0100 Subject: [PATCH 07/45] Add heap info via standard mallinfo() function for STM32 (#7327) Co-authored-by: Ben Meadors --- src/memGet.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/memGet.cpp b/src/memGet.cpp index ef1102f1e..e8cd177dd 100644 --- a/src/memGet.cpp +++ b/src/memGet.cpp @@ -10,6 +10,10 @@ #include "memGet.h" #include "configuration.h" +#ifdef ARCH_STM32WL +#include +#endif + MemGet memGet; /** @@ -24,6 +28,9 @@ uint32_t MemGet::getFreeHeap() return dbgHeapFree(); #elif defined(ARCH_RP2040) return rp2040.getFreeHeap(); +#elif defined(ARCH_STM32WL) + struct mallinfo m = mallinfo(); + return m.fordblks; // Total free space (bytes) #else // this platform does not have heap management function implemented return UINT32_MAX; @@ -42,6 +49,9 @@ uint32_t MemGet::getHeapSize() return dbgHeapTotal(); #elif defined(ARCH_RP2040) return rp2040.getTotalHeap(); +#elif defined(ARCH_STM32WL) + struct mallinfo m = mallinfo(); + return m.arena; // Non-mmapped space allocated (bytes) #else // this platform does not have heap management function implemented return UINT32_MAX; From f197f0e5ec791c6944e73ec52ded417884ad3f08 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 14 Jul 2025 05:12:52 -0500 Subject: [PATCH 08/45] Upgrade trunk (#7336) Co-authored-by: vidplace7 <1779290+vidplace7@users.noreply.github.com> --- .trunk/trunk.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index f0271c856..7d27efe58 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -9,7 +9,7 @@ plugins: lint: enabled: - checkov@3.2.450 - - renovate@41.29.1 + - renovate@41.30.5 - prettier@3.6.2 - trufflehog@3.89.2 - yamllint@1.37.1 From daa1d582cbdf1a8ae20175d1353feb2e6524526f Mon Sep 17 00:00:00 2001 From: Quency-D <55523105+Quency-D@users.noreply.github.com> Date: Mon, 14 Jul 2025 18:43:25 +0800 Subject: [PATCH 09/45] The screen display of the heltec wireless tracker is abnormal. (#7337) The screen of the heltec wireless tracker uses the same power source as the GPS. If the GPS turns off the power during the screen shutdown period and then turns on the power, the screen will not function properly. So initialize the screen every time it starts. --- src/graphics/Screen.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index 1f2e7e4d9..e46f7dffe 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -386,9 +386,7 @@ void Screen::handleSetOn(bool on, FrameCallback einkScreensaver) #ifdef T_WATCH_S3 PMU->enablePowerOutput(XPOWERS_ALDO2); #endif -#ifdef HELTEC_TRACKER_V1_X - uint8_t tft_vext_enabled = digitalRead(VEXT_ENABLE); -#endif + #if !ARCH_PORTDUINO dispdev->displayOn(); #endif @@ -400,10 +398,7 @@ void Screen::handleSetOn(bool on, FrameCallback einkScreensaver) dispdev->displayOn(); #ifdef HELTEC_TRACKER_V1_X - // If the TFT VEXT power is not enabled, initialize the UI. - if (!tft_vext_enabled) { ui->init(); - } #endif #ifdef USE_ST7789 pinMode(VTFT_CTRL, OUTPUT); From 86af5f5252f408fce0fc1509e2430c98395c7d49 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 14 Jul 2025 05:44:29 -0500 Subject: [PATCH 10/45] Trunk --- src/graphics/Screen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index e46f7dffe..e1b4101c4 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -398,7 +398,7 @@ void Screen::handleSetOn(bool on, FrameCallback einkScreensaver) dispdev->displayOn(); #ifdef HELTEC_TRACKER_V1_X - ui->init(); + ui->init(); #endif #ifdef USE_ST7789 pinMode(VTFT_CTRL, OUTPUT); From e864fcf9a81d2b7c2a356687231b39edb4c36569 Mon Sep 17 00:00:00 2001 From: "Daniel.Cao" <144674500+DanielCao0@users.noreply.github.com> Date: Mon, 14 Jul 2025 22:29:42 +0800 Subject: [PATCH 11/45] feat: add support for RAK Wismesh Tag hardware platform (#6853) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add new platform rak_wismeshtag * Remove RTC and Ethernet definitions from variant.h * Remove unused EINK and Ethernet definitions from variant.h and platformio.ini * Add WISMESH_TAG hardware model definition in architecture.h and update build flags in platformio.ini * Remove unused build flags and dependencies --------- Co-authored-by: Ben Meadors Co-authored-by: daniel Co-authored-by: Thomas Göttgens --- src/platform/nrf52/architecture.h | 2 + variants/rak_wismeshtag/platformio.ini | 15 ++ variants/rak_wismeshtag/variant.cpp | 45 +++++ variants/rak_wismeshtag/variant.h | 245 +++++++++++++++++++++++++ 4 files changed, 307 insertions(+) create mode 100644 variants/rak_wismeshtag/platformio.ini create mode 100644 variants/rak_wismeshtag/variant.cpp create mode 100644 variants/rak_wismeshtag/variant.h diff --git a/src/platform/nrf52/architecture.h b/src/platform/nrf52/architecture.h index 684d20e84..ba94f4a2a 100644 --- a/src/platform/nrf52/architecture.h +++ b/src/platform/nrf52/architecture.h @@ -49,6 +49,8 @@ #define HW_VENDOR meshtastic_HardwareModel_RAK2560 #elif defined(WISMESH_TAP) #define HW_VENDOR meshtastic_HardwareModel_WISMESH_TAP +#elif defined(WISMESH_TAG) +#define HW_VENDOR meshtastic_HardwareModel_WISMESH_TAG #elif defined(GAT562_MESH_TRIAL_TRACKER) #define HW_VENDOR meshtastic_HardwareModel_GAT562_MESH_TRIAL_TRACKER #elif defined(RAK4630) diff --git a/variants/rak_wismeshtag/platformio.ini b/variants/rak_wismeshtag/platformio.ini new file mode 100644 index 000000000..a066e5282 --- /dev/null +++ b/variants/rak_wismeshtag/platformio.ini @@ -0,0 +1,15 @@ +; The very slick RAK wireless RAK 4631 / 4630 board - Unified firmware for 5005/19003, with or without OLED RAK 1921 +[env:rak_wismeshtag] +extends = nrf52840_base +board = wiscore_rak4631 +board_check = true +build_flags = ${nrf52840_base.build_flags} -Ivariants/rak_wismeshtag -D WISMESH_TAG -D RAK_4631 + -L "${platformio.libdeps_dir}/${this.__env__}/bsec2/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. + -DRADIOLIB_EXCLUDE_SX128X=1 + -DRADIOLIB_EXCLUDE_SX127X=1 + -DRADIOLIB_EXCLUDE_LR11X0=1 + -DMESHTASTIC_EXCLUDE_WIFI=1 +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/rak_wismeshtag> +lib_deps = + ${nrf52840_base.lib_deps} \ No newline at end of file diff --git a/variants/rak_wismeshtag/variant.cpp b/variants/rak_wismeshtag/variant.cpp new file mode 100644 index 000000000..e84b60b3b --- /dev/null +++ b/variants/rak_wismeshtag/variant.cpp @@ -0,0 +1,45 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + Copyright (c) 2016 Sandeep Mistry All right reserved. + Copyright (c) 2018, Adafruit Industries (adafruit.com) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "variant.h" +#include "nrf.h" +#include "wiring_constants.h" +#include "wiring_digital.h" + +const uint32_t g_ADigitalPinMap[] = { + // P0 + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + + // P1 + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47}; + +void initVariant() +{ + // LED1 & LED2 + pinMode(PIN_LED1, OUTPUT); + ledOff(PIN_LED1); + + pinMode(PIN_LED2, OUTPUT); + ledOff(PIN_LED2); + + // 3V3 Power Rail + pinMode(PIN_3V3_EN, OUTPUT); + digitalWrite(PIN_3V3_EN, HIGH); +} diff --git a/variants/rak_wismeshtag/variant.h b/variants/rak_wismeshtag/variant.h new file mode 100644 index 000000000..dd82b76a1 --- /dev/null +++ b/variants/rak_wismeshtag/variant.h @@ -0,0 +1,245 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + Copyright (c) 2016 Sandeep Mistry All right reserved. + Copyright (c) 2018, Adafruit Industries (adafruit.com) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _VARIANT_RAK4630_ +#define _VARIANT_RAK4630_ + +#define RAK4630 + +/** Master clock frequency */ +#define VARIANT_MCK (64000000ul) + +#define USE_LFXO // Board uses 32khz crystal for LF +// define USE_LFRC // Board uses RC for LF + +/*---------------------------------------------------------------------------- + * Headers + *----------------------------------------------------------------------------*/ + +#include "WVariant.h" + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +// Number of pins defined in PinDescription array +#define PINS_COUNT (48) +#define NUM_DIGITAL_PINS (48) +#define NUM_ANALOG_INPUTS (6) +#define NUM_ANALOG_OUTPUTS (0) + +// LEDs +#define PIN_LED1 (35) +#define PIN_LED2 (36) + +#define LED_BUILTIN PIN_LED1 +#define LED_CONN PIN_LED2 + +#define LED_GREEN PIN_LED1 +#define LED_BLUE PIN_LED2 + +#define LED_STATE_ON 1 // State when LED is litted + +/* + * Buttons + */ + +#define PIN_BUTTON1 9 // Pin for button on E-ink button module or IO expansion +#define BUTTON_NEED_PULLUP +#define PIN_BUTTON2 12 +#define PIN_BUTTON3 24 +#define PIN_BUTTON4 25 + +/* + * Analog pins + */ +#define PIN_A0 (5) +#define PIN_A1 (31) +#define PIN_A2 (28) +#define PIN_A3 (29) +#define PIN_A4 (30) +#define PIN_A5 (31) +#define PIN_A6 (0xff) +#define PIN_A7 (0xff) + +static const uint8_t A0 = PIN_A0; +static const uint8_t A1 = PIN_A1; +static const uint8_t A2 = PIN_A2; +static const uint8_t A3 = PIN_A3; +static const uint8_t A4 = PIN_A4; +static const uint8_t A5 = PIN_A5; +static const uint8_t A6 = PIN_A6; +static const uint8_t A7 = PIN_A7; +#define ADC_RESOLUTION 14 + +// Other pins +#define PIN_AREF (2) +#define PIN_NFC1 (9) +#define PIN_NFC2 (10) + +static const uint8_t AREF = PIN_AREF; + +/* + * Serial interfaces + */ +#define PIN_SERIAL1_RX (15) +#define PIN_SERIAL1_TX (16) + +// Connected to Jlink CDC +#define PIN_SERIAL2_RX (8) +#define PIN_SERIAL2_TX (6) + +/* + * SPI Interfaces + */ +#define SPI_INTERFACES_COUNT 2 + +#define PIN_SPI_MISO (45) +#define PIN_SPI_MOSI (44) +#define PIN_SPI_SCK (43) + +#define PIN_SPI1_MISO (29) // (0 + 29) +#define PIN_SPI1_MOSI (30) // (0 + 30) +#define PIN_SPI1_SCK (3) // (0 + 3) + +static const uint8_t SS = 42; +static const uint8_t MOSI = PIN_SPI_MOSI; +static const uint8_t MISO = PIN_SPI_MISO; +static const uint8_t SCK = PIN_SPI_SCK; + +/* + * eink display pins + */ + +#define PIN_EINK_CS (0 + 26) +#define PIN_EINK_BUSY (0 + 4) +#define PIN_EINK_DC (0 + 17) +#define PIN_EINK_RES (-1) +#define PIN_EINK_SCLK (0 + 3) +#define PIN_EINK_MOSI (0 + 30) // also called SDI + +/* + * Wire Interfaces + */ +#define WIRE_INTERFACES_COUNT 1 + +// RAK WISMESHTAG +#define PIN_WIRE_SDA (25) +#define PIN_WIRE_SCL (24) + +// QSPI Pins +#define PIN_QSPI_SCK 3 +#define PIN_QSPI_CS 26 +#define PIN_QSPI_IO0 30 +#define PIN_QSPI_IO1 29 +#define PIN_QSPI_IO2 28 +#define PIN_QSPI_IO3 2 + + +/* @note RAK5005-O GPIO mapping to RAK4631 GPIO ports + RAK5005-O <-> nRF52840 + IO1 <-> P0.17 (Arduino GPIO number 17) + IO2 <-> P1.02 (Arduino GPIO number 34) + IO3 <-> P0.21 (Arduino GPIO number 21) + IO4 <-> P0.04 (Arduino GPIO number 4) + IO5 <-> P0.09 (Arduino GPIO number 9) + IO6 <-> P0.10 (Arduino GPIO number 10) + IO7 <-> P0.28 (Arduino GPIO number 28) + SW1 <-> P0.01 (Arduino GPIO number 1) + A0 <-> P0.04/AIN2 (Arduino Analog A2 + A1 <-> P0.31/AIN7 (Arduino Analog A7 + SPI_CS <-> P0.26 (Arduino GPIO number 26) + */ + +// RAK4630 LoRa module + +/* Setup of the SX1262 LoRa module ( https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631/Datasheet/ ) + +P1.10 NSS SPI NSS (Arduino GPIO number 42) +P1.11 SCK SPI CLK (Arduino GPIO number 43) +P1.12 MOSI SPI MOSI (Arduino GPIO number 44) +P1.13 MISO SPI MISO (Arduino GPIO number 45) +P1.14 BUSY BUSY signal (Arduino GPIO number 46) +P1.15 DIO1 DIO1 event interrupt (Arduino GPIO number 47) +P1.06 NRESET NRESET manual reset of the SX1262 (Arduino GPIO number 38) + +Important for successful SX1262 initialization: + +* Setup DIO2 to control the antenna switch +* Setup DIO3 to control the TCXO power supply +* Setup the SX1262 to use it's DCDC regulator and not the LDO +* RAK4630 schematics show GPIO P1.07 connected to the antenna switch, but it should not be initialized, as DIO2 will do the +control of the antenna switch + +SO GPIO 39/TXEN MAY NOT BE DEFINED FOR SUCCESSFUL OPERATION OF THE SX1262 - TG + +*/ + +#define DETECTION_SENSOR_EN 4 + +#define USE_SX1262 +#define SX126X_CS (42) +#define SX126X_DIO1 (47) +#define SX126X_BUSY (46) +#define SX126X_RESET (38) +// #define SX126X_TXEN (39) +// #define SX126X_RXEN (37) +#define SX126X_POWER_EN (37) +// DIO2 controlls an antenna switch and the TCXO voltage is controlled by DIO3 +#define SX126X_DIO2_AS_RF_SWITCH +#define SX126X_DIO3_TCXO_VOLTAGE 1.8 + +// Testing USB detection +#define NRF_APM + +// enables 3.3V periphery like GPS or IO Module +// Do not toggle this for GPS power savings +#define PIN_3V3_EN (34) + +// RAK WISMESHTAG +#define PIN_GPS_EN PIN_3V3_EN +#define PIN_GPS_PPS (17) // Pulse per second input from the GPS + +#define GPS_RX_PIN PIN_SERIAL1_RX +#define GPS_TX_PIN PIN_SERIAL1_TX + +// RAK WISMESHTAG +#define PIN_BUZZER 21 + +// Battery +// The battery sense is hooked to pin A0 (5) +#define BATTERY_PIN PIN_A0 +// and has 12 bit resolution +#define BATTERY_SENSE_RESOLUTION_BITS 12 +#define BATTERY_SENSE_RESOLUTION 4096.0 +#undef AREF_VOLTAGE +#define AREF_VOLTAGE 3.0 +#define VBAT_AR_INTERNAL AR_INTERNAL_3_0 +#define ADC_MULTIPLIER 1.73 + +#define RAK_4631 1 + +#ifdef __cplusplus +} +#endif + +/*---------------------------------------------------------------------------- + * Arduino objects - C++ only + *----------------------------------------------------------------------------*/ + +#endif \ No newline at end of file From 8f10de5684d189bda6169332b70fd690b5328e9a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 14 Jul 2025 09:46:43 -0500 Subject: [PATCH 12/45] [create-pull-request] automated change (#7338) Co-authored-by: thebentern <9000580+thebentern@users.noreply.github.com> --- protobufs | 2 +- src/mesh/generated/meshtastic/admin.pb.h | 2 +- src/mesh/generated/meshtastic/config.pb.h | 10 +++++-- src/mesh/generated/meshtastic/deviceonly.pb.h | 4 +-- src/mesh/generated/meshtastic/mesh.pb.h | 28 ++++++++----------- src/mesh/generated/meshtastic/powermon.pb.h | 10 +++---- 6 files changed, 27 insertions(+), 29 deletions(-) diff --git a/protobufs b/protobufs index 584f0a3a3..f6448be77 160000 --- a/protobufs +++ b/protobufs @@ -1 +1 @@ -Subproject commit 584f0a3a359103acf0bfce506c1b1fc32c639841 +Subproject commit f6448be7770a3521bf52407ff8f5fa5b9b06da7b diff --git a/src/mesh/generated/meshtastic/admin.pb.h b/src/mesh/generated/meshtastic/admin.pb.h index 071640b0d..bc0b780b9 100644 --- a/src/mesh/generated/meshtastic/admin.pb.h +++ b/src/mesh/generated/meshtastic/admin.pb.h @@ -7,9 +7,9 @@ #include "meshtastic/channel.pb.h" #include "meshtastic/config.pb.h" #include "meshtastic/connection_status.pb.h" +#include "meshtastic/device_ui.pb.h" #include "meshtastic/mesh.pb.h" #include "meshtastic/module_config.pb.h" -#include "meshtastic/device_ui.pb.h" #if PB_PROTO_HEADER_VERSION != 40 #error Regenerate this file with the current version of nanopb generator. diff --git a/src/mesh/generated/meshtastic/config.pb.h b/src/mesh/generated/meshtastic/config.pb.h index f28daadbd..20bce5b78 100644 --- a/src/mesh/generated/meshtastic/config.pb.h +++ b/src/mesh/generated/meshtastic/config.pb.h @@ -102,7 +102,11 @@ typedef enum _meshtastic_Config_DeviceConfig_BuzzerMode { meshtastic_Config_DeviceConfig_BuzzerMode_NOTIFICATIONS_ONLY = 2, /* Non-notification system buzzer tones only. Buzzer is enabled only for non-notification tones such as button presses, startup, shutdown, but not for alerts. */ - meshtastic_Config_DeviceConfig_BuzzerMode_SYSTEM_ONLY = 3 + meshtastic_Config_DeviceConfig_BuzzerMode_SYSTEM_ONLY = 3, + /* Direct Message notifications only. + Buzzer is enabled only for direct messages and alerts, but not for button presses. + External notification config determines the specifics of the notification behavior. */ + meshtastic_Config_DeviceConfig_BuzzerMode_DIRECT_MSG_ONLY = 4 } meshtastic_Config_DeviceConfig_BuzzerMode; /* Bit field of boolean configuration options, indicating which optional @@ -645,8 +649,8 @@ extern "C" { #define _meshtastic_Config_DeviceConfig_RebroadcastMode_ARRAYSIZE ((meshtastic_Config_DeviceConfig_RebroadcastMode)(meshtastic_Config_DeviceConfig_RebroadcastMode_CORE_PORTNUMS_ONLY+1)) #define _meshtastic_Config_DeviceConfig_BuzzerMode_MIN meshtastic_Config_DeviceConfig_BuzzerMode_ALL_ENABLED -#define _meshtastic_Config_DeviceConfig_BuzzerMode_MAX meshtastic_Config_DeviceConfig_BuzzerMode_SYSTEM_ONLY -#define _meshtastic_Config_DeviceConfig_BuzzerMode_ARRAYSIZE ((meshtastic_Config_DeviceConfig_BuzzerMode)(meshtastic_Config_DeviceConfig_BuzzerMode_SYSTEM_ONLY+1)) +#define _meshtastic_Config_DeviceConfig_BuzzerMode_MAX meshtastic_Config_DeviceConfig_BuzzerMode_DIRECT_MSG_ONLY +#define _meshtastic_Config_DeviceConfig_BuzzerMode_ARRAYSIZE ((meshtastic_Config_DeviceConfig_BuzzerMode)(meshtastic_Config_DeviceConfig_BuzzerMode_DIRECT_MSG_ONLY+1)) #define _meshtastic_Config_PositionConfig_PositionFlags_MIN meshtastic_Config_PositionConfig_PositionFlags_UNSET #define _meshtastic_Config_PositionConfig_PositionFlags_MAX meshtastic_Config_PositionConfig_PositionFlags_SPEED diff --git a/src/mesh/generated/meshtastic/deviceonly.pb.h b/src/mesh/generated/meshtastic/deviceonly.pb.h index f78689cb2..b02b2083d 100644 --- a/src/mesh/generated/meshtastic/deviceonly.pb.h +++ b/src/mesh/generated/meshtastic/deviceonly.pb.h @@ -6,10 +6,10 @@ #include #include #include "meshtastic/channel.pb.h" -#include "meshtastic/mesh.pb.h" -#include "meshtastic/telemetry.pb.h" #include "meshtastic/config.pb.h" #include "meshtastic/localonly.pb.h" +#include "meshtastic/mesh.pb.h" +#include "meshtastic/telemetry.pb.h" #if PB_PROTO_HEADER_VERSION != 40 #error Regenerate this file with the current version of nanopb generator. diff --git a/src/mesh/generated/meshtastic/mesh.pb.h b/src/mesh/generated/meshtastic/mesh.pb.h index 9e0415198..584c3d647 100644 --- a/src/mesh/generated/meshtastic/mesh.pb.h +++ b/src/mesh/generated/meshtastic/mesh.pb.h @@ -6,11 +6,11 @@ #include #include "meshtastic/channel.pb.h" #include "meshtastic/config.pb.h" +#include "meshtastic/device_ui.pb.h" #include "meshtastic/module_config.pb.h" #include "meshtastic/portnums.pb.h" #include "meshtastic/telemetry.pb.h" #include "meshtastic/xmodem.pb.h" -#include "meshtastic/device_ui.pb.h" #if PB_PROTO_HEADER_VERSION != 40 #error Regenerate this file with the current version of nanopb generator. @@ -247,32 +247,26 @@ typedef enum _meshtastic_HardwareModel { meshtastic_HardwareModel_NOMADSTAR_METEOR_PRO = 96, /* Elecrow CrowPanel Advance models, ESP32-S3 and TFT with SX1262 radio plugin */ meshtastic_HardwareModel_CROWPANEL = 97, - /* * - Lilygo LINK32 board with sensors */ + /* Lilygo LINK32 board with sensors */ meshtastic_HardwareModel_LINK_32 = 98, - /* * - Seeed Tracker L1 */ + /* Seeed Tracker L1 */ meshtastic_HardwareModel_SEEED_WIO_TRACKER_L1 = 99, - /* * - Seeed Tracker L1 EINK driver */ + /* Seeed Tracker L1 EINK driver */ meshtastic_HardwareModel_SEEED_WIO_TRACKER_L1_EINK = 100, /* Reserved ID for future and past use */ meshtastic_HardwareModel_QWANTZ_TINY_ARMS = 101, - /* * - Lilygo T-Deck Pro */ + /* Lilygo T-Deck Pro */ meshtastic_HardwareModel_T_DECK_PRO = 102, - /* * - Lilygo TLora Pager */ + /* Lilygo TLora Pager */ meshtastic_HardwareModel_T_LORA_PAGER = 103, - /* * - GAT562 Mesh Trial Tracker */ + /* GAT562 Mesh Trial Tracker */ meshtastic_HardwareModel_GAT562_MESH_TRIAL_TRACKER = 104, - /* * - RAKwireless WisMesh Tag */ + /* RAKwireless WisMesh Tag */ meshtastic_HardwareModel_WISMESH_TAG = 105, - /* * - RAKwireless WisBlock Core RAK3312 https://docs.rakwireless.com/product-categories/wisduo/rak3112-module/overview/ */ + /* RAKwireless WisBlock Core RAK3312 https://docs.rakwireless.com/product-categories/wisduo/rak3112-module/overview/ */ meshtastic_HardwareModel_RAK3312 = 106, + /* Elecrow ThinkNode M5 https://www.elecrow.com/wiki/ThinkNode_M5_Meshtastic_LoRa_Signal_Transceiver_ESP32-S3.html */ + meshtastic_HardwareModel_THINKNODE_M5 = 107, /* ------------------------------------------------------------------------------------------------------------------------------------------ Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits. ------------------------------------------------------------------------------------------------------------------------------------------ */ diff --git a/src/mesh/generated/meshtastic/powermon.pb.h b/src/mesh/generated/meshtastic/powermon.pb.h index 9d4d94193..3072b8ac5 100644 --- a/src/mesh/generated/meshtastic/powermon.pb.h +++ b/src/mesh/generated/meshtastic/powermon.pb.h @@ -11,7 +11,7 @@ /* Enum definitions */ /* Any significant power changing event in meshtastic should be tagged with a powermon state transition. -If you are making new meshtastic features feel free to add new entries at the end of this definition. */ + If you are making new meshtastic features feel free to add new entries at the end of this definition. */ typedef enum _meshtastic_PowerMon_State { meshtastic_PowerMon_State_None = 0, meshtastic_PowerMon_State_CPU_DeepSleep = 1, @@ -34,13 +34,13 @@ something like "S:PM:C,0x00001234,REASON" where the hex number is the bitmask of meshtastic_PowerMon_State_Screen_Drawing = 512, meshtastic_PowerMon_State_Wifi_On = 1024, /* GPS is actively trying to find our location -See GPSPowerState for more details */ + See GPSPowerState for more details */ meshtastic_PowerMon_State_GPS_Active = 2048 } meshtastic_PowerMon_State; /* What operation would we like the UUT to perform. -note: senders should probably set want_response in their request packets, so that they can know when the state -machine has started processing their request */ + note: senders should probably set want_response in their request packets, so that they can know when the state + machine has started processing their request */ typedef enum _meshtastic_PowerStressMessage_Opcode { /* Unset/unused */ meshtastic_PowerStressMessage_Opcode_UNSET = 0, @@ -67,7 +67,7 @@ typedef enum _meshtastic_PowerStressMessage_Opcode { /* Struct definitions */ /* Note: There are no 'PowerMon' messages normally in use (PowerMons are sent only as structured logs - slogs). -But we wrap our State enum in this message to effectively nest a namespace (without our linter yelling at us) */ + But we wrap our State enum in this message to effectively nest a namespace (without our linter yelling at us) */ typedef struct _meshtastic_PowerMon { char dummy_field; } meshtastic_PowerMon; From 5776385e8cd20c31cc8e67a9f54f3a4c05a64678 Mon Sep 17 00:00:00 2001 From: Austin Date: Mon, 14 Jul 2025 13:52:21 -0400 Subject: [PATCH 13/45] STM32 PlatformIO cleanup (#7339) --- arch/stm32/stm32.ini | 6 ++++++ variants/CDEBYTE_E77-MBL/platformio.ini | 10 ---------- variants/rak3172/platformio.ini | 10 ---------- variants/wio-e5/platformio.ini | 5 ----- 4 files changed, 6 insertions(+), 25 deletions(-) diff --git a/arch/stm32/stm32.ini b/arch/stm32/stm32.ini index 03e0bf392..153ca9f3e 100644 --- a/arch/stm32/stm32.ini +++ b/arch/stm32/stm32.ini @@ -26,11 +26,17 @@ build_flags = -DMESHTASTIC_EXCLUDE_WIFI=1 -DMESHTASTIC_EXCLUDE_TZ=1 ; Exclude TZ to save some flash space. -DSERIAL_RX_BUFFER_SIZE=256 ; For GPS - the default of 64 is too small. + -DHAS_SCREEN=0 ; Always disable screen for STM32, it is not supported. -DPIO_FRAMEWORK_ARDUINO_NANOLIB_FLOAT_PRINTF ; This is REQUIRED for at least traceroute debug prints - without it the length ends up uninitialized. -DDEBUG_MUTE ; You can #undef DEBUG_MUTE in certain source files if you need the logs. -fmerge-all-constants -ffunction-sections -fdata-sections + -DRADIOLIB_EXCLUDE_SX128X=1 + -DRADIOLIB_EXCLUDE_SX127X=1 + -DRADIOLIB_EXCLUDE_LR11X0=1 + -DHAL_DAC_MODULE_ONLY + -DHAL_RNG_MODULE_ENABLED build_src_filter = ${arduino_base.build_src_filter} - - - - - - - - - - - - - - diff --git a/variants/CDEBYTE_E77-MBL/platformio.ini b/variants/CDEBYTE_E77-MBL/platformio.ini index 8a8002086..5c373875c 100644 --- a/variants/CDEBYTE_E77-MBL/platformio.ini +++ b/variants/CDEBYTE_E77-MBL/platformio.ini @@ -9,19 +9,9 @@ build_flags = -DSERIAL_UART_INSTANCE=1 -DPIN_SERIAL_RX=PA3 -DPIN_SERIAL_TX=PA2 - -DHAL_DAC_MODULE_ONLY - -DHAL_RNG_MODULE_ENABLED - -DRADIOLIB_EXCLUDE_SX128X=1 - -DRADIOLIB_EXCLUDE_SX127X=1 - -DRADIOLIB_EXCLUDE_LR11X0=1 -DMESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR=1 -DMESHTASTIC_EXCLUDE_I2C=1 - -DMESHTASTIC_EXCLUDE_WIFI=1 - -DMESHTASTIC_EXCLUDE_BLUETOOTH=1 -DMESHTASTIC_EXCLUDE_GPS=1 - -DMESHTASTIC_EXCLUDE_SCREEN=1 - -DMESHTASTIC_EXCLUDE_MQTT=1 - -DMESHTASTIC_EXCLUDE_POWERMON=1 ;-DPIO_FRAMEWORK_ARDUINO_NANOLIB_FLOAT_PRINTF ;-DCFG_DEBUG diff --git a/variants/rak3172/platformio.ini b/variants/rak3172/platformio.ini index 99610b17c..df2500f31 100644 --- a/variants/rak3172/platformio.ini +++ b/variants/rak3172/platformio.ini @@ -7,18 +7,8 @@ build_flags = -Ivariants/rak3172 -DPIN_WIRE_SDA=PA11 -DPIN_WIRE_SCL=PA12 - -DHAL_DAC_MODULE_ONLY - -DHAL_RNG_MODULE_ENABLED - -DRADIOLIB_EXCLUDE_SX128X=1 - -DRADIOLIB_EXCLUDE_SX127X=1 - -DRADIOLIB_EXCLUDE_LR11X0=1 -DMESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR=1 -DMESHTASTIC_EXCLUDE_I2C=1 - -DMESHTASTIC_EXCLUDE_WIFI=1 - -DMESHTASTIC_EXCLUDE_BLUETOOTH=1 -DMESHTASTIC_EXCLUDE_GPS=1 - -DMESHTASTIC_EXCLUDE_SCREEN=1 - -DMESHTASTIC_EXCLUDE_MQTT=1 - -DMESHTASTIC_EXCLUDE_POWERMON=1 ;-DCFG_DEBUG upload_port = stlink diff --git a/variants/wio-e5/platformio.ini b/variants/wio-e5/platformio.ini index 90251c7aa..5c9f433d4 100644 --- a/variants/wio-e5/platformio.ini +++ b/variants/wio-e5/platformio.ini @@ -10,11 +10,6 @@ build_flags = -DPIN_SERIAL_TX=PB6 -DPIN_WIRE_SDA=PA15 -DPIN_WIRE_SCL=PB15 - -DHAL_DAC_MODULE_ONLY - -DHAL_RNG_MODULE_ENABLED - -DRADIOLIB_EXCLUDE_SX128X=1 - -DRADIOLIB_EXCLUDE_SX127X=1 - -DRADIOLIB_EXCLUDE_LR11X0=1 -DHAS_SENSOR=1 -DENABLE_HWSERIAL2 -DPIN_SERIAL2_TX=PA2 From 31d56c16d57bca9817f80872e2f3010382446bfd Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 14 Jul 2025 20:13:34 -0500 Subject: [PATCH 14/45] Map report should work over devices which do not have network hardware (with client proxy) (#7341) * Map report should work over devices which do not have network hardware (with client proxy) * Fix else --- src/mqtt/MQTT.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mqtt/MQTT.cpp b/src/mqtt/MQTT.cpp index 137c92056..091612827 100644 --- a/src/mqtt/MQTT.cpp +++ b/src/mqtt/MQTT.cpp @@ -559,10 +559,8 @@ void MQTT::sendSubscriptions() int32_t MQTT::runOnce() { -#if HAS_NETWORKING if (!moduleConfig.mqtt.enabled || !(moduleConfig.mqtt.map_reporting_enabled || channels.anyMqttEnabled())) return disable(); - bool wantConnection = wantsLink(); perhapsReportToMap(); @@ -572,7 +570,7 @@ int32_t MQTT::runOnce() publishQueuedMessages(); return 200; } - +#if HAS_NETWORKING else if (!pubSub.loop()) { if (!wantConnection) return 5000; // If we don't want connection now, check again in 5 secs @@ -596,8 +594,10 @@ int32_t MQTT::runOnce() powerFSM.trigger(EVENT_CONTACT_FROM_PHONE); // Suppress entering light sleep (because that would turn off bluetooth) return 20; } -#endif +#else + // No networking available, return default interval return 30000; +#endif } bool MQTT::isValidConfig(const meshtastic_ModuleConfig_MQTTConfig &config, MQTTClient *client) From 625a529f6c53ba684e81838e753fbfdbb6a918e1 Mon Sep 17 00:00:00 2001 From: Jason P Date: Mon, 14 Jul 2025 20:59:22 -0500 Subject: [PATCH 15/45] Message frame New Message Options and Clock / TDeck / Brightness Refinements (#7344) * Clock updates and some TDeck corrections * TDeck Brightness Works in TFT Builds * Remove HAS_TFT from enabling Brightness, disable Brightness for TDeck * Add default textMessage frame actions and adjust SharedUIDisplay --------- Co-authored-by: Ben Meadors --- src/graphics/Screen.cpp | 9 ++++--- src/graphics/SharedUIDisplay.cpp | 2 +- src/graphics/draw/ClockRenderer.cpp | 7 ++++- src/graphics/draw/MenuHandler.cpp | 42 ++++++++++++++++++++++++++--- src/graphics/draw/MenuHandler.h | 1 + 5 files changed, 52 insertions(+), 9 deletions(-) diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index e1b4101c4..dbd0445f7 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -1374,9 +1374,12 @@ int Screen::handleInputEvent(const InputEvent *event) menuHandler::clockMenu(); } else if (this->ui->getUiState()->currentFrame == framesetInfo.positions.lora) { menuHandler::LoraRegionPicker(); - } else if (this->ui->getUiState()->currentFrame == framesetInfo.positions.textMessage && - devicestate.rx_text_message.from) { - menuHandler::messageResponseMenu(); + } else if (this->ui->getUiState()->currentFrame == framesetInfo.positions.textMessage) { + if (devicestate.rx_text_message.from) { + menuHandler::messageResponseMenu(); + } else { + menuHandler::textMessageBaseMenu(); + } } else if (framesetInfo.positions.firstFavorite != 255 && this->ui->getUiState()->currentFrame >= framesetInfo.positions.firstFavorite && this->ui->getUiState()->currentFrame <= framesetInfo.positions.lastFavorite) { diff --git a/src/graphics/SharedUIDisplay.cpp b/src/graphics/SharedUIDisplay.cpp index 7cd876ac5..b458e54e4 100644 --- a/src/graphics/SharedUIDisplay.cpp +++ b/src/graphics/SharedUIDisplay.cpp @@ -206,7 +206,7 @@ void drawCommonHeader(OLEDDisplay *display, int16_t x, int16_t y, const char *ti timeX = screenW - xOffset - timeStrWidth + 3; // === Show Mail or Mute Icon to the Left of Time === - int iconRightEdge = timeX - 1; + int iconRightEdge = timeX - 2; bool showMail = false; diff --git a/src/graphics/draw/ClockRenderer.cpp b/src/graphics/draw/ClockRenderer.cpp index 8d7e91000..e3cb5fcb9 100644 --- a/src/graphics/draw/ClockRenderer.cpp +++ b/src/graphics/draw/ClockRenderer.cpp @@ -186,7 +186,7 @@ void drawDigitalClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int1 { display->clear(); display->setTextAlignment(TEXT_ALIGN_LEFT); - int line = 1; + // === Set Title, Blank for Clock const char *titleStr = ""; // === Header === @@ -230,6 +230,8 @@ void drawDigitalClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int1 #ifdef T_WATCH_S3 float scale = 1.5; +#elif defined(CHATTER_2) + float scale = 1.1; #else float scale = 0.75; if (isHighResolution) { @@ -285,6 +287,9 @@ void drawDigitalClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int1 int yOffset = (isHighResolution) ? 3 : 1; #ifdef SENSECAP_INDICATOR yOffset -= 3; +#endif +#ifdef T_DECK + yOffset -= 5; #endif if (config.display.use_12h_clock) { display->drawString(startingHourMinuteTextX + xOffset, (display->getHeight() - hourMinuteTextY) - yOffset - 2, diff --git a/src/graphics/draw/MenuHandler.cpp b/src/graphics/draw/MenuHandler.cpp index f6b250ebc..ded492da6 100644 --- a/src/graphics/draw/MenuHandler.cpp +++ b/src/graphics/draw/MenuHandler.cpp @@ -344,6 +344,35 @@ void menuHandler::homeBaseMenu() screen->showOverlayBanner(bannerOptions); } +void menuHandler::textMessageBaseMenu() +{ + enum optionsNumbers { Back, Preset, Freetext, enumEnd }; + + static const char *optionsArray[enumEnd] = {"Back"}; + static int optionsEnumArray[enumEnd] = {Back}; + int options = 1; + optionsArray[options] = "New Preset Msg"; + optionsEnumArray[options++] = Preset; + if (kb_found) { + optionsArray[options] = "New Freetext Msg"; + optionsEnumArray[options++] = Freetext; + } + + BannerOverlayOptions bannerOptions; + bannerOptions.message = "Message Action"; + bannerOptions.optionsArrayPtr = optionsArray; + bannerOptions.optionsEnumPtr = optionsEnumArray; + bannerOptions.optionsCount = options; + bannerOptions.bannerCallback = [](int selected) -> void { + if (selected == Preset) { + cannedMessageModule->LaunchWithDestination(NODENUM_BROADCAST); + } else if (selected == Freetext) { + cannedMessageModule->LaunchFreetextWithDestination(NODENUM_BROADCAST); + } + }; + screen->showOverlayBanner(bannerOptions); +} + void menuHandler::systemBaseMenu() { // Check if brightness is supported @@ -729,7 +758,7 @@ void menuHandler::TFTColorPickerMenu(OLEDDisplay *display) screen->runNow(); } -#if defined(HELTEC_MESH_NODE_T114) || defined(HELTEC_VISION_MASTER_T190) || HAS_TFT +#if defined(HELTEC_MESH_NODE_T114) || defined(HELTEC_VISION_MASTER_T190) || defined(T_DECK) || HAS_TFT if (selected != 0) { display->setColor(BLACK); display->fillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); @@ -924,23 +953,28 @@ void menuHandler::screenOptionsMenu() { // Check if brightness is supported bool hasSupportBrightness = false; -#if defined(ST7789_CS) || defined(USE_OLED) || defined(USE_SSD1306) || defined(USE_SH1106) || defined(USE_SH1107) || HAS_TFT +#if defined(ST7789_CS) || defined(USE_OLED) || defined(USE_SSD1306) || defined(USE_SH1106) || defined(USE_SH1107) hasSupportBrightness = true; #endif +#if defined(T_DECK) + // TDeck Doesn't seem to support brightness at all, at least not reliably + hasSupportBrightness = false; +#endif + enum optionsNumbers { Back, Brightness, ScreenColor }; static const char *optionsArray[4] = {"Back"}; static int optionsEnumArray[4] = {Back}; int options = 1; // Only show brightness for B&W displays - if (hasSupportBrightness && !HAS_TFT) { + if (hasSupportBrightness) { optionsArray[options] = "Brightness"; optionsEnumArray[options++] = Brightness; } // Only show screen color for TFT displays -#if defined(HELTEC_MESH_NODE_T114) || defined(HELTEC_VISION_MASTER_T190) || HAS_TFT +#if defined(HELTEC_MESH_NODE_T114) || defined(HELTEC_VISION_MASTER_T190) || defined(T_DECK) || HAS_TFT optionsArray[options] = "Screen Color"; optionsEnumArray[options++] = ScreenColor; #endif diff --git a/src/graphics/draw/MenuHandler.h b/src/graphics/draw/MenuHandler.h index 2273dbbed..1f989be79 100644 --- a/src/graphics/draw/MenuHandler.h +++ b/src/graphics/draw/MenuHandler.h @@ -48,6 +48,7 @@ class menuHandler static void ClockFacePicker(); static void messageResponseMenu(); static void homeBaseMenu(); + static void textMessageBaseMenu(); static void systemBaseMenu(); static void favoriteBaseMenu(); static void positionBaseMenu(); From 39716ed1baacbcdabd744dfbb6534a3dbbbbc495 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 14 Jul 2025 21:14:07 -0500 Subject: [PATCH 16/45] Fix L1 EInk HWModel (#7346) --- src/platform/nrf52/architecture.h | 2 ++ variants/seeed_wio_tracker_L1_eink/platformio.ini | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/platform/nrf52/architecture.h b/src/platform/nrf52/architecture.h index ba94f4a2a..1bbdd77e0 100644 --- a/src/platform/nrf52/architecture.h +++ b/src/platform/nrf52/architecture.h @@ -91,6 +91,8 @@ #define HW_VENDOR meshtastic_HardwareModel_HELTEC_MESH_POCKET #elif defined(NOMADSTAR_METEOR_PRO) #define HW_VENDOR meshtastic_HardwareModel_NOMADSTAR_METEOR_PRO +#elif defined(SEEED_WIO_TRACKER_L1_EINK) +#define HW_VENDOR meshtastic_HardwareModel_SEEED_WIO_TRACKER_L1_EINK #elif defined(SEEED_WIO_TRACKER_L1) #define HW_VENDOR meshtastic_HardwareModel_SEEED_WIO_TRACKER_L1 #else diff --git a/variants/seeed_wio_tracker_L1_eink/platformio.ini b/variants/seeed_wio_tracker_L1_eink/platformio.ini index b84757b9d..b310cce83 100644 --- a/variants/seeed_wio_tracker_L1_eink/platformio.ini +++ b/variants/seeed_wio_tracker_L1_eink/platformio.ini @@ -4,7 +4,8 @@ extends = nrf52840_base, inkhud ;board_level = extra build_flags = ${nrf52840_base.build_flags} ${inkhud.build_flags} -I $PROJECT_DIR/variants/seeed_wio_tracker_L1_eink - -D SEEED_WIO_TRACKER_L1 + -D SEEED_WIO_TRACKER_L1_EINK + -D SEEED_WIO_TRACKER_L1 -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld build_src_filter = ${nrf52_base.build_src_filter} +<../variants/seeed_wio_tracker_L1_eink> ${inkhud.build_src_filter} From c3b2b474c6f9247b01b815bf181fbe104d121a64 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Wed, 16 Jul 2025 16:05:34 -0500 Subject: [PATCH 17/45] Drop NodeInfo packets if the is_licensed bit doesn't match owner (#7361) --- src/modules/NodeInfoModule.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/modules/NodeInfoModule.cpp b/src/modules/NodeInfoModule.cpp index cf9940e25..b6fee7703 100644 --- a/src/modules/NodeInfoModule.cpp +++ b/src/modules/NodeInfoModule.cpp @@ -14,6 +14,11 @@ bool NodeInfoModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, mes { auto p = *pptr; + if (p.is_licensed != owner.is_licensed) { + LOG_WARN("Invalid nodeInfo detected, is_licensed mismatch!"); + return true; + } + // Coerce user.id to be derived from the node number snprintf(p.id, sizeof(p.id), "!%08x", getFrom(&mp)); From 55fc4fcd9024df2f711bc797a467cea274e9ab4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Thu, 17 Jul 2025 00:40:29 +0200 Subject: [PATCH 18/45] clean up double i2c init/scan code (#7359) --- src/main.cpp | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 640f0b1fe..c37001307 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -515,25 +515,11 @@ void setup() LOG_INFO("Scan for i2c devices"); #endif -#if defined(I2C_SDA1) && defined(ARCH_RP2040) - Wire1.setSDA(I2C_SDA1); - Wire1.setSCL(I2C_SCL1); - Wire1.begin(); - i2cScanner->scanPort(ScanI2C::I2CPort::WIRE1); -#elif defined(I2C_SDA1) && !defined(ARCH_RP2040) - Wire1.begin(I2C_SDA1, I2C_SCL1); - i2cScanner->scanPort(ScanI2C::I2CPort::WIRE1); -#elif defined(NRF52840_XXAA) && (WIRE_INTERFACES_COUNT == 2) +#if defined(I2C_SDA1) || (defined(NRF52840_XXAA) && (WIRE_INTERFACES_COUNT == 2)) i2cScanner->scanPort(ScanI2C::I2CPort::WIRE1); #endif -#if defined(I2C_SDA) && defined(ARCH_RP2040) - Wire.setSDA(I2C_SDA); - Wire.setSCL(I2C_SCL); - Wire.begin(); - i2cScanner->scanPort(ScanI2C::I2CPort::WIRE); -#elif defined(I2C_SDA) && !defined(ARCH_RP2040) - Wire.begin(I2C_SDA, I2C_SCL); +#if defined(I2C_SDA) i2cScanner->scanPort(ScanI2C::I2CPort::WIRE); #elif defined(ARCH_PORTDUINO) if (settingsStrings[i2cdev] != "") { From 71b6508ad3a248360fe3d409eebdd44d1d3ad7b4 Mon Sep 17 00:00:00 2001 From: Jason P Date: Wed, 16 Jul 2025 19:44:23 -0500 Subject: [PATCH 19/45] BaseUI Updates (#7358) * Calculate the length of the right string and use it * Improve readability of Version Number * Prevent negative message IDs and proactively favorite DM'd nodes * Patch up Remove Favorite functionality * Fix warnings for TFT_MESH_* and hasSupportBrightness * Fix warning around casting variables * Correct Favorite Node Behavior to rebuild favorite nodes when updated. * Resolve bool kb_found issue not working for second discovery keyboards --------- Co-authored-by: Jonathan Bennett --- src/graphics/Screen.cpp | 2 ++ src/graphics/draw/DebugRenderer.cpp | 16 +++++++-- src/graphics/draw/MenuHandler.cpp | 17 ++++----- src/graphics/draw/NotificationRenderer.cpp | 2 +- src/graphics/draw/UIRenderer.cpp | 41 ++++++++++------------ src/graphics/draw/UIRenderer.h | 2 ++ src/input/cardKbI2cImpl.cpp | 1 + src/modules/CannedMessageModule.cpp | 8 ++++- 8 files changed, 52 insertions(+), 37 deletions(-) diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index dbd0445f7..b9c9e2fbf 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -864,6 +864,8 @@ void Screen::setFrames(FrameFocus focus) uint8_t previousFrameCount = framesetInfo.frameCount; FramesetInfo fsi; // Location of specific frames, for applying focus parameter + graphics::UIRenderer::rebuildFavoritedNodes(); + LOG_DEBUG("Show standard frames"); showingNormalScreen = true; diff --git a/src/graphics/draw/DebugRenderer.cpp b/src/graphics/draw/DebugRenderer.cpp index b1a901f99..5420d1b4b 100644 --- a/src/graphics/draw/DebugRenderer.cpp +++ b/src/graphics/draw/DebugRenderer.cpp @@ -483,7 +483,7 @@ void drawLoRaFocused(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, } // **************************** -// * Memory Screen * +// * System Screen * // **************************** void drawMemoryUsage(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y) { @@ -593,7 +593,19 @@ void drawMemoryUsage(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, } line += 1; char appversionstr[35]; - snprintf(appversionstr, sizeof(appversionstr), "Ver.: %s", optstr(APP_VERSION)); + snprintf(appversionstr, sizeof(appversionstr), "Ver: %s", optstr(APP_VERSION)); + char appversionstr_formatted[40]; + char *lastDot = strrchr(appversionstr, '.'); + if (lastDot) { + size_t prefixLen = lastDot - appversionstr; + strncpy(appversionstr_formatted, appversionstr, prefixLen); + appversionstr_formatted[prefixLen] = '\0'; + strncat(appversionstr_formatted, " (", sizeof(appversionstr_formatted) - strlen(appversionstr_formatted) - 1); + strncat(appversionstr_formatted, lastDot + 1, sizeof(appversionstr_formatted) - strlen(appversionstr_formatted) - 1); + strncat(appversionstr_formatted, ")", sizeof(appversionstr_formatted) - strlen(appversionstr_formatted) - 1); + strncpy(appversionstr, appversionstr_formatted, sizeof(appversionstr) - 1); + appversionstr[sizeof(appversionstr) - 1] = '\0'; + } int textWidth = display->getStringWidth(appversionstr); int nameX = (SCREEN_WIDTH - textWidth) / 2; display->drawString(nameX, getTextPositions(display)[line], appversionstr); diff --git a/src/graphics/draw/MenuHandler.cpp b/src/graphics/draw/MenuHandler.cpp index ded492da6..7ed9c4ea1 100644 --- a/src/graphics/draw/MenuHandler.cpp +++ b/src/graphics/draw/MenuHandler.cpp @@ -375,12 +375,6 @@ void menuHandler::textMessageBaseMenu() void menuHandler::systemBaseMenu() { - // Check if brightness is supported - bool hasSupportBrightness = false; -#if defined(ST7789_CS) || defined(USE_OLED) || defined(USE_SSD1306) || defined(USE_SH1106) || defined(USE_SH1107) || HAS_TFT - hasSupportBrightness = true; -#endif - enum optionsNumbers { Back, Notifications, ScreenOptions, PowerMenu, Test, enumEnd }; static const char *optionsArray[enumEnd] = {"Back"}; static int optionsEnumArray[enumEnd] = {Back}; @@ -450,11 +444,11 @@ void menuHandler::favoriteBaseMenu() bannerOptions.optionsEnumPtr = optionsEnumArray; bannerOptions.optionsCount = options; bannerOptions.bannerCallback = [](int selected) -> void { - if (selected == 1) { + if (selected == Preset) { cannedMessageModule->LaunchWithDestination(graphics::UIRenderer::currentFavoriteNodeNum); - } else if (selected == 2 && kb_found) { + } else if (selected == Freetext) { cannedMessageModule->LaunchFreetextWithDestination(graphics::UIRenderer::currentFavoriteNodeNum); - } else if ((!kb_found && selected == 2) || (selected == 3 && kb_found)) { + } else if (selected == Remove) { menuHandler::menuQueue = menuHandler::remove_favorite; screen->runNow(); } @@ -707,6 +701,7 @@ void menuHandler::TFTColorPickerMenu(OLEDDisplay *display) bannerOptions.optionsArrayPtr = optionsArray; bannerOptions.optionsCount = 10; bannerOptions.bannerCallback = [display](int selected) -> void { +#if defined(HELTEC_MESH_NODE_T114) || defined(HELTEC_VISION_MASTER_T190) || defined(T_DECK) || HAS_TFT uint8_t TFT_MESH_r = 0; uint8_t TFT_MESH_g = 0; uint8_t TFT_MESH_b = 0; @@ -758,7 +753,6 @@ void menuHandler::TFTColorPickerMenu(OLEDDisplay *display) screen->runNow(); } -#if defined(HELTEC_MESH_NODE_T114) || defined(HELTEC_VISION_MASTER_T190) || defined(T_DECK) || HAS_TFT if (selected != 0) { display->setColor(BLACK); display->fillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); @@ -856,8 +850,9 @@ void menuHandler::removeFavoriteMenu() bannerOptions.optionsCount = 2; bannerOptions.bannerCallback = [](int selected) -> void { if (selected == 1) { + LOG_INFO("Removing %x as favorite node", graphics::UIRenderer::currentFavoriteNodeNum); nodeDB->set_favorite(false, graphics::UIRenderer::currentFavoriteNodeNum); - screen->setFrames(graphics::Screen::FOCUS_PRESERVE); + screen->setFrames(graphics::Screen::FOCUS_DEFAULT); } }; screen->showOverlayBanner(bannerOptions); diff --git a/src/graphics/draw/NotificationRenderer.cpp b/src/graphics/draw/NotificationRenderer.cpp index 7350c204f..d9cf280ac 100644 --- a/src/graphics/draw/NotificationRenderer.cpp +++ b/src/graphics/draw/NotificationRenderer.cpp @@ -156,7 +156,7 @@ void NotificationRenderer::drawNumberPicker(OLEDDisplay *display, OLEDDisplayUiS resetBanner(); return; } - if (curSelected == numDigits) { + if (curSelected == static_cast(numDigits)) { alertBannerCallback(currentNumber); resetBanner(); return; diff --git a/src/graphics/draw/UIRenderer.cpp b/src/graphics/draw/UIRenderer.cpp index 9be8b04f4..71d92616f 100644 --- a/src/graphics/draw/UIRenderer.cpp +++ b/src/graphics/draw/UIRenderer.cpp @@ -24,6 +24,23 @@ extern graphics::Screen *screen; namespace graphics { NodeNum UIRenderer::currentFavoriteNodeNum = 0; +std::vector graphics::UIRenderer::favoritedNodes; + +void graphics::UIRenderer::rebuildFavoritedNodes() +{ + favoritedNodes.clear(); + size_t total = nodeDB->getNumMeshNodes(); + for (size_t i = 0; i < total; i++) { + meshtastic_NodeInfoLite *n = nodeDB->getMeshNodeByIndex(i); + if (!n || n->num == nodeDB->getNodeNum()) + continue; + if (n->is_favorite) + favoritedNodes.push_back(n); + } + + std::sort(favoritedNodes.begin(), favoritedNodes.end(), + [](const meshtastic_NodeInfoLite *a, const meshtastic_NodeInfoLite *b) { return a->num < b->num; }); +} #if !MESHTASTIC_EXCLUDE_GPS // GeoCoord object for coordinate conversions @@ -201,27 +218,7 @@ void UIRenderer::drawNodes(OLEDDisplay *display, int16_t x, int16_t y, const mes // ********************** void UIRenderer::drawNodeInfo(OLEDDisplay *display, const OLEDDisplayUiState *state, int16_t x, int16_t y) { - // --- Cache favorite nodes for the current frame only, to save computation --- - static std::vector favoritedNodes; - static int prevFrame = -1; - // --- Only rebuild favorites list if we're on a new frame --- - if (state->currentFrame != prevFrame) { - prevFrame = state->currentFrame; - favoritedNodes.clear(); - size_t total = nodeDB->getNumMeshNodes(); - for (size_t i = 0; i < total; i++) { - meshtastic_NodeInfoLite *n = nodeDB->getMeshNodeByIndex(i); - // Skip nulls and ourself - if (!n || n->num == nodeDB->getNodeNum()) - continue; - if (n->is_favorite) - favoritedNodes.push_back(n); - } - // Keep a stable, consistent display order - std::sort(favoritedNodes.begin(), favoritedNodes.end(), - [](const meshtastic_NodeInfoLite *a, const meshtastic_NodeInfoLite *b) { return a->num < b->num; }); - } if (favoritedNodes.empty()) return; @@ -657,7 +654,7 @@ void UIRenderer::drawDeviceFocused(OLEDDisplay *display, OLEDDisplayUiState *sta char combinedName[50]; snprintf(combinedName, sizeof(combinedName), "%s (%s)", longNameStr.empty() ? "" : longNameStr.c_str(), shortnameble); - if (SCREEN_WIDTH - (display->getStringWidth(longName) + display->getStringWidth(shortnameble)) > 10) { + if (SCREEN_WIDTH - (display->getStringWidth(combinedName)) > 10) { size_t len = strlen(combinedName); if (len >= 3 && strcmp(combinedName + len - 3, " ()") == 0) { combinedName[len - 3] = '\0'; // Remove the last three characters @@ -668,7 +665,7 @@ void UIRenderer::drawDeviceFocused(OLEDDisplay *display, OLEDDisplayUiState *sta nameX, ((rows == 4) ? getTextPositions(display)[line++] : getTextPositions(display)[line++]) + yOffset, combinedName); } else { // === LongName Centered === - textWidth = display->getStringWidth(longName); + textWidth = display->getStringWidth(longNameStr.c_str()); nameX = (SCREEN_WIDTH - textWidth) / 2; display->drawString(nameX, getTextPositions(display)[line++], longNameStr.c_str()); diff --git a/src/graphics/draw/UIRenderer.h b/src/graphics/draw/UIRenderer.h index 9e5e8c4b4..3c8e1dd9d 100644 --- a/src/graphics/draw/UIRenderer.h +++ b/src/graphics/draw/UIRenderer.h @@ -61,6 +61,8 @@ class UIRenderer static void drawCompassAndLocationScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y); static NodeNum currentFavoriteNodeNum; + static std::vector favoritedNodes; + static void rebuildFavoritedNodes(); // OEM screens #ifdef USERPREFS_OEM_TEXT diff --git a/src/input/cardKbI2cImpl.cpp b/src/input/cardKbI2cImpl.cpp index 21ecf381a..fcbdd0a3f 100644 --- a/src/input/cardKbI2cImpl.cpp +++ b/src/input/cardKbI2cImpl.cpp @@ -67,4 +67,5 @@ void CardKbI2cImpl::init() } #endif inputBroker->registerSource(this); + kb_found = true; } \ No newline at end of file diff --git a/src/modules/CannedMessageModule.cpp b/src/modules/CannedMessageModule.cpp index a1b89e0f8..2690c67f0 100644 --- a/src/modules/CannedMessageModule.cpp +++ b/src/modules/CannedMessageModule.cpp @@ -850,7 +850,13 @@ void CannedMessageModule::sendText(NodeNum dest, ChannelIndex channel, const cha this->waitingForAck = true; // Log outgoing message - LOG_INFO("Send message id=%d, dest=%x, msg=%.*s", p->id, p->to, p->decoded.payload.size, p->decoded.payload.bytes); + LOG_INFO("Send message id=%u, dest=%x, msg=%.*s", p->id, p->to, p->decoded.payload.size, p->decoded.payload.bytes); + + if (p->to != 0xffffffff) { + LOG_INFO("Proactively adding %x as favorite node", p->to); + nodeDB->set_favorite(true, p->to); + screen->setFrames(graphics::Screen::FOCUS_PRESERVE); + } // Send to mesh and phone (even if no phone connected, to track ACKs) service->sendToMesh(p, RX_SRC_LOCAL, true); From abe0a34fc0092937364c9045d7514a8ef568af74 Mon Sep 17 00:00:00 2001 From: Tom Fifield Date: Fri, 18 Jul 2025 20:49:19 +1000 Subject: [PATCH 20/45] Add additional Epoch check for time set (#7375) We have two perhapsSetRTC functions, which are called to set the time. The one with 3 parameters had a helpful check to reject an invalid time, by comparing the time from the source against when the firmware was compiled. The one with 2 parameters, which is called from the GPS lookForTime did not. As a result, certain GPS with bad time handling could set a time that was in the past. This patch adds the same epoch check code to the other perhapsSetRTC method. Fixes https://github.com/meshtastic/firmware/issues/7364 --- src/gps/RTC.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gps/RTC.cpp b/src/gps/RTC.cpp index 5054be3f0..c4d6065ff 100644 --- a/src/gps/RTC.cpp +++ b/src/gps/RTC.cpp @@ -228,6 +228,13 @@ RTCSetResult perhapsSetRTC(RTCQuality q, struct tm &t) tv.tv_sec = res; tv.tv_usec = 0; // time.centisecond() * (10 / 1000); +#ifdef BUILD_EPOCH + if (tv->tv_sec < BUILD_EPOCH) { + LOG_WARN("Ignore time (%ld) before build epoch (%ld)!", printableEpoch, BUILD_EPOCH); + return RTCSetResultInvalidTime; + } +#endif + // LOG_DEBUG("Got time from GPS month=%d, year=%d, unixtime=%ld", t.tm_mon, t.tm_year, tv.tv_sec); if (t.tm_year < 0 || t.tm_year >= 300) { // LOG_DEBUG("Ignore invalid GPS month=%d, year=%d, unixtime=%ld", t.tm_mon, t.tm_year, tv.tv_sec); From cf574c71d8dbf6a28e279286b90deb7658e10bb4 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Fri, 18 Jul 2025 09:24:34 -0500 Subject: [PATCH 21/45] Fix build --- src/gps/RTC.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gps/RTC.cpp b/src/gps/RTC.cpp index c4d6065ff..d574c9ad0 100644 --- a/src/gps/RTC.cpp +++ b/src/gps/RTC.cpp @@ -226,10 +226,10 @@ RTCSetResult perhapsSetRTC(RTCQuality q, struct tm &t) time_t res = gm_mktime(&t); struct timeval tv; tv.tv_sec = res; - tv.tv_usec = 0; // time.centisecond() * (10 / 1000); - + tv.tv_usec = 0; // time.centisecond() * (10 / 1000); + uint32_t printableEpoch = tv.tv_sec; // Print lib only supports 32 bit but time_t can be 64 bit on some platforms #ifdef BUILD_EPOCH - if (tv->tv_sec < BUILD_EPOCH) { + if (tv.tv_sec < BUILD_EPOCH) { LOG_WARN("Ignore time (%ld) before build epoch (%ld)!", printableEpoch, BUILD_EPOCH); return RTCSetResultInvalidTime; } From 3ca45ae99cac60073def445fcbed9787e9f1f5ac Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 19 Jul 2025 10:41:01 -0500 Subject: [PATCH 22/45] automated bumps (#7383) Co-authored-by: thebentern <9000580+thebentern@users.noreply.github.com> --- bin/org.meshtastic.meshtasticd.metainfo.xml | 3 +++ debian/changelog | 7 +++++-- version.properties | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/bin/org.meshtastic.meshtasticd.metainfo.xml b/bin/org.meshtastic.meshtasticd.metainfo.xml index 291fe7a7c..116155807 100644 --- a/bin/org.meshtastic.meshtasticd.metainfo.xml +++ b/bin/org.meshtastic.meshtasticd.metainfo.xml @@ -87,6 +87,9 @@ + + https://github.com/meshtastic/firmware/releases?q=tag%3Av2.7.4 + https://github.com/meshtastic/firmware/releases?q=tag%3Av2.7.3 diff --git a/debian/changelog b/debian/changelog index b5009028a..02a32f2f1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -meshtasticd (2.7.3.0) UNRELEASED; urgency=medium +meshtasticd (2.7.4.0) UNRELEASED; urgency=medium [ Austin Lane ] * Initial packaging @@ -31,4 +31,7 @@ meshtasticd (2.7.3.0) UNRELEASED; urgency=medium [ Ubuntu ] * GitHub Actions Automatic version bump - -- Ubuntu Thu, 10 Jul 2025 16:29:27 +0000 + [ ] + * GitHub Actions Automatic version bump + + -- Sat, 19 Jul 2025 11:36:55 +0000 diff --git a/version.properties b/version.properties index 5de810523..aa959bcac 100644 --- a/version.properties +++ b/version.properties @@ -1,4 +1,4 @@ [VERSION] major = 2 minor = 7 -build = 3 +build = 4 From 5d98f7e307941175f1fb658a168cc10fc6eeb147 Mon Sep 17 00:00:00 2001 From: Austin Date: Sat, 19 Jul 2025 12:38:05 -0400 Subject: [PATCH 23/45] Actions: Enforce PR labels (#7379) --- .github/workflows/pr_enforce_labels.yml | 24 ++++++++++++++++++++++++ .github/workflows/release_channels.yml | 3 ++- .github/workflows/update_protobufs.yml | 2 ++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/pr_enforce_labels.yml diff --git a/.github/workflows/pr_enforce_labels.yml b/.github/workflows/pr_enforce_labels.yml new file mode 100644 index 000000000..93114e2c7 --- /dev/null +++ b/.github/workflows/pr_enforce_labels.yml @@ -0,0 +1,24 @@ +name: Check PR Labels + +on: + pull_request: + types: [opened, edited, labeled, unlabeled, synchronize, reopened] + +permissions: + pull-requests: read + contents: read + +jobs: + check-label: + runs-on: ubuntu-24.04 + steps: + - name: Check for PR labels + uses: actions/github-script@v7 + with: + script: | + const labels = context.payload.pull_request.labels.map(label => label.name); + const requiredLabels = ['bugfix', 'enhancement', 'hardware-support', 'dependencies', 'submodules', 'github_actions', 'trunk']; + const hasRequiredLabel = labels.some(label => requiredLabels.includes(label)); + if (!hasRequiredLabel) { + core.setFailed(`PR must have at least one of the following labels before it can be merged: ${requiredLabels.join(', ')}.`); + } diff --git a/.github/workflows/release_channels.yml b/.github/workflows/release_channels.yml index ef03be9dc..e52e67227 100644 --- a/.github/workflows/release_channels.yml +++ b/.github/workflows/release_channels.yml @@ -103,8 +103,9 @@ jobs: with: base: ${{ github.event.repository.default_branch }} branch: create-pull-request/bump-version + labels: github_actions title: Bump release version - commit-message: automated bumps + commit-message: Automated version bumps add-paths: | version.properties debian/changelog diff --git a/.github/workflows/update_protobufs.yml b/.github/workflows/update_protobufs.yml index ccdcc19ae..3952d9d02 100644 --- a/.github/workflows/update_protobufs.yml +++ b/.github/workflows/update_protobufs.yml @@ -34,7 +34,9 @@ jobs: uses: peter-evans/create-pull-request@v7 with: branch: create-pull-request/update-protobufs + labels: submodules title: Update protobufs and classes + commit-message: Update protobufs add-paths: | protobufs src/mesh From 974741a36640c36a6f62acfdce75cf54bd3f6c5e Mon Sep 17 00:00:00 2001 From: Austin Date: Sat, 19 Jul 2025 19:41:59 -0400 Subject: [PATCH 24/45] ESP32: Initial sort variants by platform (#7340) --- platformio.ini | 4 +- variants/diy/platformio.ini | 44 ------------------- .../betafpv_2400_tx_micro/platformio.ini | 4 +- .../betafpv_2400_tx_micro/variant.h | 0 .../betafpv_900_tx_nano/platformio.ini | 4 +- .../{ => esp32}/betafpv_900_tx_nano/variant.h | 0 variants/{ => esp32}/chatter2/platformio.ini | 2 +- variants/{ => esp32}/chatter2/variant.h | 0 variants/esp32/diy/dr-dev/platformio.ini | 11 +++++ variants/{ => esp32}/diy/dr-dev/variant.h | 0 variants/esp32/diy/hydra/platformio.ini | 8 ++++ variants/{ => esp32}/diy/hydra/variant.h | 0 variants/esp32/diy/v1/platformio.ini | 10 +++++ variants/{ => esp32}/diy/v1/variant.h | 0 variants/esp32/diy/v1_1/platformio.ini | 10 +++++ variants/{ => esp32}/diy/v1_1/variant.h | 0 .../hackerboxes_esp32_io/platformio.ini | 2 +- .../hackerboxes_esp32_io/variant.h | 0 variants/{ => esp32}/heltec_v1/platformio.ini | 4 +- variants/{ => esp32}/heltec_v1/variant.h | 0 .../{ => esp32}/heltec_v2.1/platformio.ini | 6 ++- variants/{ => esp32}/heltec_v2.1/variant.h | 0 variants/{ => esp32}/heltec_v2/platformio.ini | 4 +- variants/{ => esp32}/heltec_v2/variant.h | 0 .../heltec_wireless_bridge/platformio.ini | 2 +- .../heltec_wireless_bridge/variant.h | 0 .../heltec_wsl_v2.1/platformio.ini | 6 ++- .../{ => esp32}/heltec_wsl_v2.1/variant.h | 0 .../{ => esp32}/m5stack_core/pins_arduino.h | 0 .../{ => esp32}/m5stack_core/platformio.ini | 3 +- variants/{ => esp32}/m5stack_core/variant.h | 0 .../m5stack_coreink/pins_arduino.h | 0 .../m5stack_coreink/platformio.ini | 3 +- .../{ => esp32}/m5stack_coreink/variant.h | 0 .../nano-g1-explorer/platformio.ini | 4 +- .../{ => esp32}/nano-g1-explorer/variant.h | 0 variants/{ => esp32}/nano-g1/platformio.ini | 4 +- variants/{ => esp32}/nano-g1/variant.h | 0 .../radiomaster_900_bandit/platformio.ini | 2 +- .../radiomaster_900_bandit/variant.h | 0 .../platformio.ini | 4 +- .../platformio.ini | 4 +- .../radiomaster_900_bandit_nano/variant.h | 0 variants/{ => esp32}/rak11200/pins_arduino.h | 0 variants/{ => esp32}/rak11200/platformio.ini | 6 ++- variants/{ => esp32}/rak11200/variant.h | 0 .../{ => esp32}/station-g1/platformio.ini | 4 +- variants/{ => esp32}/station-g1/variant.h | 0 variants/{ => esp32}/tbeam/platformio.ini | 6 ++- variants/{ => esp32}/tbeam/variant.h | 0 variants/{ => esp32}/tbeam_v07/platformio.ini | 4 +- variants/{ => esp32}/tbeam_v07/variant.h | 0 variants/{ => esp32}/tlora_v1/platformio.ini | 6 ++- variants/{ => esp32}/tlora_v1/variant.h | 0 .../{ => esp32}/tlora_v1_3/platformio.ini | 4 +- variants/{ => esp32}/tlora_v1_3/variant.h | 0 variants/{ => esp32}/tlora_v2/platformio.ini | 4 +- variants/{ => esp32}/tlora_v2/variant.h | 0 .../{ => esp32}/tlora_v2_1_16/platformio.ini | 4 +- variants/{ => esp32}/tlora_v2_1_16/variant.h | 0 .../tlora_v2_1_16_tcxo/platformio.ini | 2 +- .../{ => esp32}/tlora_v2_1_18/platformio.ini | 4 +- variants/{ => esp32}/tlora_v2_1_18/variant.h | 0 .../tlora_v3_3_0_tcxo/platformio.ini | 2 +- variants/{ => esp32}/trackerd/platformio.ini | 2 +- variants/{ => esp32}/trackerd/variant.h | 0 variants/{ => esp32}/wiphone/pins_arduino.h | 0 variants/{ => esp32}/wiphone/platformio.ini | 4 +- variants/{ => esp32}/wiphone/variant.h | 0 69 files changed, 112 insertions(+), 85 deletions(-) rename variants/{ => esp32}/betafpv_2400_tx_micro/platformio.ini (81%) rename variants/{ => esp32}/betafpv_2400_tx_micro/variant.h (100%) rename variants/{ => esp32}/betafpv_900_tx_nano/platformio.ini (84%) rename variants/{ => esp32}/betafpv_900_tx_nano/variant.h (100%) rename variants/{ => esp32}/chatter2/platformio.ini (91%) rename variants/{ => esp32}/chatter2/variant.h (100%) create mode 100644 variants/esp32/diy/dr-dev/platformio.ini rename variants/{ => esp32}/diy/dr-dev/variant.h (100%) create mode 100644 variants/esp32/diy/hydra/platformio.ini rename variants/{ => esp32}/diy/hydra/variant.h (100%) create mode 100644 variants/esp32/diy/v1/platformio.ini rename variants/{ => esp32}/diy/v1/variant.h (100%) create mode 100644 variants/esp32/diy/v1_1/platformio.ini rename variants/{ => esp32}/diy/v1_1/variant.h (100%) rename variants/{ => esp32}/hackerboxes_esp32_io/platformio.ini (85%) rename variants/{ => esp32}/hackerboxes_esp32_io/variant.h (100%) rename variants/{ => esp32}/heltec_v1/platformio.ini (70%) rename variants/{ => esp32}/heltec_v1/variant.h (100%) rename variants/{ => esp32}/heltec_v2.1/platformio.ini (65%) rename variants/{ => esp32}/heltec_v2.1/variant.h (100%) rename variants/{ => esp32}/heltec_v2/platformio.ini (70%) rename variants/{ => esp32}/heltec_v2/variant.h (100%) rename variants/{ => esp32}/heltec_wireless_bridge/platformio.ini (94%) rename variants/{ => esp32}/heltec_wireless_bridge/variant.h (100%) rename variants/{ => esp32}/heltec_wsl_v2.1/platformio.ini (56%) rename variants/{ => esp32}/heltec_wsl_v2.1/variant.h (100%) rename variants/{ => esp32}/m5stack_core/pins_arduino.h (100%) rename variants/{ => esp32}/m5stack_core/platformio.ini (90%) rename variants/{ => esp32}/m5stack_core/variant.h (100%) rename variants/{ => esp32}/m5stack_coreink/pins_arduino.h (100%) rename variants/{ => esp32}/m5stack_coreink/platformio.ini (90%) rename variants/{ => esp32}/m5stack_coreink/variant.h (100%) rename variants/{ => esp32}/nano-g1-explorer/platformio.ini (65%) rename variants/{ => esp32}/nano-g1-explorer/variant.h (100%) rename variants/{ => esp32}/nano-g1/platformio.ini (67%) rename variants/{ => esp32}/nano-g1/variant.h (100%) rename variants/{ => esp32}/radiomaster_900_bandit/platformio.ini (90%) rename variants/{ => esp32}/radiomaster_900_bandit/variant.h (100%) rename variants/{ => esp32}/radiomaster_900_bandit_micro/platformio.ini (87%) rename variants/{ => esp32}/radiomaster_900_bandit_nano/platformio.ini (79%) rename variants/{ => esp32}/radiomaster_900_bandit_nano/variant.h (100%) rename variants/{ => esp32}/rak11200/pins_arduino.h (100%) rename variants/{ => esp32}/rak11200/platformio.ini (50%) rename variants/{ => esp32}/rak11200/variant.h (100%) rename variants/{ => esp32}/station-g1/platformio.ini (66%) rename variants/{ => esp32}/station-g1/variant.h (100%) rename variants/{ => esp32}/tbeam/platformio.ini (78%) rename variants/{ => esp32}/tbeam/variant.h (100%) rename variants/{ => esp32}/tbeam_v07/platformio.ini (69%) rename variants/{ => esp32}/tbeam_v07/variant.h (100%) rename variants/{ => esp32}/tlora_v1/platformio.ini (50%) rename variants/{ => esp32}/tlora_v1/variant.h (100%) rename variants/{ => esp32}/tlora_v1_3/platformio.ini (50%) rename variants/{ => esp32}/tlora_v1_3/variant.h (100%) rename variants/{ => esp32}/tlora_v2/platformio.ini (56%) rename variants/{ => esp32}/tlora_v2/variant.h (100%) rename variants/{ => esp32}/tlora_v2_1_16/platformio.ini (68%) rename variants/{ => esp32}/tlora_v2_1_16/variant.h (100%) rename variants/{ => esp32}/tlora_v2_1_16_tcxo/platformio.ini (90%) rename variants/{ => esp32}/tlora_v2_1_18/platformio.ini (55%) rename variants/{ => esp32}/tlora_v2_1_18/variant.h (100%) rename variants/{ => esp32}/tlora_v3_3_0_tcxo/platformio.ini (89%) rename variants/{ => esp32}/trackerd/platformio.ini (56%) rename variants/{ => esp32}/trackerd/variant.h (100%) rename variants/{ => esp32}/wiphone/pins_arduino.h (100%) rename variants/{ => esp32}/wiphone/platformio.ini (81%) rename variants/{ => esp32}/wiphone/variant.h (100%) diff --git a/platformio.ini b/platformio.ini index b1f89e5b4..c0eb6fedb 100644 --- a/platformio.ini +++ b/platformio.ini @@ -6,7 +6,9 @@ default_envs = tbeam extra_configs = arch/*/*.ini - variants/*/platformio.ini + variants/*/platformio.ini ; Remove when all variants migrated to new dir structure + variants/*/*/platformio.ini + variants/*/diy/*/platformio.ini src/graphics/niche/InkHUD/PlatformioConfig.ini description = Meshtastic diff --git a/variants/diy/platformio.ini b/variants/diy/platformio.ini index 1f0f6d126..fddfb154e 100644 --- a/variants/diy/platformio.ini +++ b/variants/diy/platformio.ini @@ -1,47 +1,3 @@ -; Meshtastic DIY v1 by Nano VHF Schematic based on ESP32-WROOM-32 (38 pins) devkit & EBYTE E22 SX1262/SX1268 module -[env:meshtastic-diy-v1] -extends = esp32_base -board = esp32doit-devkit-v1 -board_check = true -build_flags = - ${esp32_base.build_flags} - -D DIY_V1 - -D EBYTE_E22 - -I variants/diy/v1 - -; Meshtastic DIY v1.1 new schematic based on ESP32-WROOM-32 & SX1262/SX1268 modules -[env:meshtastic-diy-v1_1] -extends = esp32_base -board = esp32doit-devkit-v1 -board_level = extra -build_flags = - ${esp32_base.build_flags} - -D DIY_V1 - -D EBYTE_E22 - -I variants/diy/v1_1 - -; Port to Disaster Radio's ESP32-v3 Dev Board -[env:meshtastic-dr-dev] -extends = esp32_base -board = esp32doit-devkit-v1 -board_upload.maximum_size = 4194304 -board_upload.maximum_ram_size = 532480 -build_flags = - ${esp32_base.build_flags} - -D DR_DEV - -D EBYTE_E22 - -I variants/diy/dr-dev - -; Hydra - Meshtastic DIY v1 hardware with some specific changes -[env:hydra] -extends = esp32_base -board = esp32doit-devkit-v1 -build_flags = - ${esp32_base.build_flags} - -D DIY_V1 - -I variants/diy/hydra - - ; Promicro + E22(0)-xxxMM / RA-01SH modules board variant - DIY - without TCXO [env:nrf52_promicro_diy_xtal] extends = nrf52840_base diff --git a/variants/betafpv_2400_tx_micro/platformio.ini b/variants/esp32/betafpv_2400_tx_micro/platformio.ini similarity index 81% rename from variants/betafpv_2400_tx_micro/platformio.ini rename to variants/esp32/betafpv_2400_tx_micro/platformio.ini index 531e8532d..4d163d834 100644 --- a/variants/betafpv_2400_tx_micro/platformio.ini +++ b/variants/esp32/betafpv_2400_tx_micro/platformio.ini @@ -8,11 +8,11 @@ build_flags = -D VTABLES_IN_FLASH=1 -D CONFIG_DISABLE_HAL_LOCKS=1 -O2 - -I variants/betafpv_2400_tx_micro + -I variants/esp32/betafpv_2400_tx_micro board_build.f_cpu = 240000000L upload_protocol = esptool ;upload_port = /dev/ttyUSB0 upload_speed = 460800 lib_deps = ${esp32_base.lib_deps} - adafruit/Adafruit NeoPixel @ ^1.12.0 \ No newline at end of file + adafruit/Adafruit NeoPixel @ ^1.12.0 diff --git a/variants/betafpv_2400_tx_micro/variant.h b/variants/esp32/betafpv_2400_tx_micro/variant.h similarity index 100% rename from variants/betafpv_2400_tx_micro/variant.h rename to variants/esp32/betafpv_2400_tx_micro/variant.h diff --git a/variants/betafpv_900_tx_nano/platformio.ini b/variants/esp32/betafpv_900_tx_nano/platformio.ini similarity index 84% rename from variants/betafpv_900_tx_nano/platformio.ini rename to variants/esp32/betafpv_900_tx_nano/platformio.ini index 3bea16f6b..7e01fd2fa 100644 --- a/variants/betafpv_900_tx_nano/platformio.ini +++ b/variants/esp32/betafpv_900_tx_nano/platformio.ini @@ -8,10 +8,10 @@ build_flags = -D VTABLES_IN_FLASH=1 -D CONFIG_DISABLE_HAL_LOCKS=1 -O2 - -I variants/betafpv_900_tx_nano + -I variants/esp32/betafpv_900_tx_nano board_build.f_cpu = 240000000L upload_protocol = esptool ;upload_port = /dev/ttyUSB0 upload_speed = 460800 lib_deps = - ${esp32_base.lib_deps} \ No newline at end of file + ${esp32_base.lib_deps} diff --git a/variants/betafpv_900_tx_nano/variant.h b/variants/esp32/betafpv_900_tx_nano/variant.h similarity index 100% rename from variants/betafpv_900_tx_nano/variant.h rename to variants/esp32/betafpv_900_tx_nano/variant.h diff --git a/variants/chatter2/platformio.ini b/variants/esp32/chatter2/platformio.ini similarity index 91% rename from variants/chatter2/platformio.ini rename to variants/esp32/chatter2/platformio.ini index 83e00d0c4..bf496bf26 100644 --- a/variants/chatter2/platformio.ini +++ b/variants/esp32/chatter2/platformio.ini @@ -5,7 +5,7 @@ board = esp32doit-devkit-v1 build_flags = ${esp32_base.build_flags} -D CHATTER_2 - -I variants/chatter2 + -I variants/esp32/chatter2 lib_deps = ${esp32_base.lib_deps} diff --git a/variants/chatter2/variant.h b/variants/esp32/chatter2/variant.h similarity index 100% rename from variants/chatter2/variant.h rename to variants/esp32/chatter2/variant.h diff --git a/variants/esp32/diy/dr-dev/platformio.ini b/variants/esp32/diy/dr-dev/platformio.ini new file mode 100644 index 000000000..5461d27b3 --- /dev/null +++ b/variants/esp32/diy/dr-dev/platformio.ini @@ -0,0 +1,11 @@ +; Port to Disaster Radio's ESP32-v3 Dev Board +[env:meshtastic-dr-dev] +extends = esp32_base +board = esp32doit-devkit-v1 +board_upload.maximum_size = 4194304 +board_upload.maximum_ram_size = 532480 +build_flags = + ${esp32_base.build_flags} + -D DR_DEV + -D EBYTE_E22 + -I variants/esp32/diy/dr-dev diff --git a/variants/diy/dr-dev/variant.h b/variants/esp32/diy/dr-dev/variant.h similarity index 100% rename from variants/diy/dr-dev/variant.h rename to variants/esp32/diy/dr-dev/variant.h diff --git a/variants/esp32/diy/hydra/platformio.ini b/variants/esp32/diy/hydra/platformio.ini new file mode 100644 index 000000000..a922ed874 --- /dev/null +++ b/variants/esp32/diy/hydra/platformio.ini @@ -0,0 +1,8 @@ +; Hydra - Meshtastic DIY v1 hardware with some specific changes +[env:hydra] +extends = esp32_base +board = esp32doit-devkit-v1 +build_flags = + ${esp32_base.build_flags} + -D DIY_V1 + -I variants/esp32/diy/hydra diff --git a/variants/diy/hydra/variant.h b/variants/esp32/diy/hydra/variant.h similarity index 100% rename from variants/diy/hydra/variant.h rename to variants/esp32/diy/hydra/variant.h diff --git a/variants/esp32/diy/v1/platformio.ini b/variants/esp32/diy/v1/platformio.ini new file mode 100644 index 000000000..bcbd57cfa --- /dev/null +++ b/variants/esp32/diy/v1/platformio.ini @@ -0,0 +1,10 @@ +; Meshtastic DIY v1 by Nano VHF Schematic based on ESP32-WROOM-32 (38 pins) devkit & EBYTE E22 SX1262/SX1268 module +[env:meshtastic-diy-v1] +extends = esp32_base +board = esp32doit-devkit-v1 +board_check = true +build_flags = + ${esp32_base.build_flags} + -D DIY_V1 + -D EBYTE_E22 + -I variants/esp32/diy/v1 diff --git a/variants/diy/v1/variant.h b/variants/esp32/diy/v1/variant.h similarity index 100% rename from variants/diy/v1/variant.h rename to variants/esp32/diy/v1/variant.h diff --git a/variants/esp32/diy/v1_1/platformio.ini b/variants/esp32/diy/v1_1/platformio.ini new file mode 100644 index 000000000..1431bd4c8 --- /dev/null +++ b/variants/esp32/diy/v1_1/platformio.ini @@ -0,0 +1,10 @@ +; Meshtastic DIY v1.1 new schematic based on ESP32-WROOM-32 & SX1262/SX1268 modules +[env:meshtastic-diy-v1_1] +extends = esp32_base +board = esp32doit-devkit-v1 +board_level = extra +build_flags = + ${esp32_base.build_flags} + -D DIY_V1 + -D EBYTE_E22 + -I variants/esp32/diy/v1_1 diff --git a/variants/diy/v1_1/variant.h b/variants/esp32/diy/v1_1/variant.h similarity index 100% rename from variants/diy/v1_1/variant.h rename to variants/esp32/diy/v1_1/variant.h diff --git a/variants/hackerboxes_esp32_io/platformio.ini b/variants/esp32/hackerboxes_esp32_io/platformio.ini similarity index 85% rename from variants/hackerboxes_esp32_io/platformio.ini rename to variants/esp32/hackerboxes_esp32_io/platformio.ini index f024dac3e..fc5f6701c 100644 --- a/variants/hackerboxes_esp32_io/platformio.ini +++ b/variants/esp32/hackerboxes_esp32_io/platformio.ini @@ -5,7 +5,7 @@ board_level = extra build_flags = ${esp32_base.build_flags} -D PRIVATE_HW - -I variants/hackerboxes_esp32_io + -I variants/esp32/hackerboxes_esp32_io monitor_speed = 115200 upload_protocol = esptool ;upload_port = /dev/ttyUSB0 diff --git a/variants/hackerboxes_esp32_io/variant.h b/variants/esp32/hackerboxes_esp32_io/variant.h similarity index 100% rename from variants/hackerboxes_esp32_io/variant.h rename to variants/esp32/hackerboxes_esp32_io/variant.h diff --git a/variants/heltec_v1/platformio.ini b/variants/esp32/heltec_v1/platformio.ini similarity index 70% rename from variants/heltec_v1/platformio.ini rename to variants/esp32/heltec_v1/platformio.ini index ee10ef0f6..4be3ba655 100644 --- a/variants/heltec_v1/platformio.ini +++ b/variants/esp32/heltec_v1/platformio.ini @@ -4,4 +4,6 @@ extends = esp32_base board_level = extra board = heltec_wifi_lora_32 build_flags = - ${esp32_base.build_flags} -D HELTEC_V1 -I variants/heltec_v1 \ No newline at end of file + ${esp32_base.build_flags} + -D HELTEC_V1 + -I variants/esp32/heltec_v1 diff --git a/variants/heltec_v1/variant.h b/variants/esp32/heltec_v1/variant.h similarity index 100% rename from variants/heltec_v1/variant.h rename to variants/esp32/heltec_v1/variant.h diff --git a/variants/heltec_v2.1/platformio.ini b/variants/esp32/heltec_v2.1/platformio.ini similarity index 65% rename from variants/heltec_v2.1/platformio.ini rename to variants/esp32/heltec_v2.1/platformio.ini index ea2281911..763f9764c 100644 --- a/variants/heltec_v2.1/platformio.ini +++ b/variants/esp32/heltec_v2.1/platformio.ini @@ -4,5 +4,7 @@ board_level = extra extends = esp32_base board = heltec_wifi_lora_32_V2 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 + ${esp32_base.build_flags} + -D HELTEC_V2_1 + -I variants/esp32/heltec_v2.1 + -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. diff --git a/variants/heltec_v2.1/variant.h b/variants/esp32/heltec_v2.1/variant.h similarity index 100% rename from variants/heltec_v2.1/variant.h rename to variants/esp32/heltec_v2.1/variant.h diff --git a/variants/heltec_v2/platformio.ini b/variants/esp32/heltec_v2/platformio.ini similarity index 70% rename from variants/heltec_v2/platformio.ini rename to variants/esp32/heltec_v2/platformio.ini index c81bca8ba..ed455616d 100644 --- a/variants/heltec_v2/platformio.ini +++ b/variants/esp32/heltec_v2/platformio.ini @@ -4,4 +4,6 @@ board_level = extra extends = esp32_base board = heltec_wifi_lora_32_V2 build_flags = - ${esp32_base.build_flags} -D HELTEC_V2_0 -I variants/heltec_v2 \ No newline at end of file + ${esp32_base.build_flags} + -D HELTEC_V2_0 + -I variants/esp32/heltec_v2 diff --git a/variants/heltec_v2/variant.h b/variants/esp32/heltec_v2/variant.h similarity index 100% rename from variants/heltec_v2/variant.h rename to variants/esp32/heltec_v2/variant.h diff --git a/variants/heltec_wireless_bridge/platformio.ini b/variants/esp32/heltec_wireless_bridge/platformio.ini similarity index 94% rename from variants/heltec_wireless_bridge/platformio.ini rename to variants/esp32/heltec_wireless_bridge/platformio.ini index ab30eb744..60e686f9e 100644 --- a/variants/heltec_wireless_bridge/platformio.ini +++ b/variants/esp32/heltec_wireless_bridge/platformio.ini @@ -4,7 +4,7 @@ extends = esp32_base board = heltec_wifi_lora_32 build_flags = ${esp32_base.build_flags} - -I variants/heltec_wireless_bridge + -I variants/esp32/heltec_wireless_bridge -D HELTEC_WIRELESS_BRIDGE -D BOARD_HAS_PSRAM -D RADIOLIB_EXCLUDE_LR11X0=1 diff --git a/variants/heltec_wireless_bridge/variant.h b/variants/esp32/heltec_wireless_bridge/variant.h similarity index 100% rename from variants/heltec_wireless_bridge/variant.h rename to variants/esp32/heltec_wireless_bridge/variant.h diff --git a/variants/heltec_wsl_v2.1/platformio.ini b/variants/esp32/heltec_wsl_v2.1/platformio.ini similarity index 56% rename from variants/heltec_wsl_v2.1/platformio.ini rename to variants/esp32/heltec_wsl_v2.1/platformio.ini index f4fff9698..eb44c88d2 100644 --- a/variants/heltec_wsl_v2.1/platformio.ini +++ b/variants/esp32/heltec_wsl_v2.1/platformio.ini @@ -3,5 +3,7 @@ extends = esp32_base board = heltec_wireless_stick_lite board_level = extra build_flags = - ${esp32_base.build_flags} -D PRIVATE_HW -I variants/heltec_wsl_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 + ${esp32_base.build_flags} + -D PRIVATE_HW + -I variants/esp32/heltec_wsl_v2.1 + -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. diff --git a/variants/heltec_wsl_v2.1/variant.h b/variants/esp32/heltec_wsl_v2.1/variant.h similarity index 100% rename from variants/heltec_wsl_v2.1/variant.h rename to variants/esp32/heltec_wsl_v2.1/variant.h diff --git a/variants/m5stack_core/pins_arduino.h b/variants/esp32/m5stack_core/pins_arduino.h similarity index 100% rename from variants/m5stack_core/pins_arduino.h rename to variants/esp32/m5stack_core/pins_arduino.h diff --git a/variants/m5stack_core/platformio.ini b/variants/esp32/m5stack_core/platformio.ini similarity index 90% rename from variants/m5stack_core/platformio.ini rename to variants/esp32/m5stack_core/platformio.ini index 7418d9e17..469d93f94 100644 --- a/variants/m5stack_core/platformio.ini +++ b/variants/esp32/m5stack_core/platformio.ini @@ -5,7 +5,8 @@ monitor_filters = esp32_exception_decoder build_src_filter = ${esp32_base.build_src_filter} build_flags = - ${esp32_base.build_flags} -I variants/m5stack_core + ${esp32_base.build_flags} + -I variants/esp32/m5stack_core -DILI9341_DRIVER -DM5STACK -DUSER_SETUP_LOADED diff --git a/variants/m5stack_core/variant.h b/variants/esp32/m5stack_core/variant.h similarity index 100% rename from variants/m5stack_core/variant.h rename to variants/esp32/m5stack_core/variant.h diff --git a/variants/m5stack_coreink/pins_arduino.h b/variants/esp32/m5stack_coreink/pins_arduino.h similarity index 100% rename from variants/m5stack_coreink/pins_arduino.h rename to variants/esp32/m5stack_coreink/pins_arduino.h diff --git a/variants/m5stack_coreink/platformio.ini b/variants/esp32/m5stack_coreink/platformio.ini similarity index 90% rename from variants/m5stack_coreink/platformio.ini rename to variants/esp32/m5stack_coreink/platformio.ini index 70da53379..1a00788e3 100644 --- a/variants/m5stack_coreink/platformio.ini +++ b/variants/esp32/m5stack_coreink/platformio.ini @@ -5,7 +5,8 @@ board_check = true build_src_filter = ${esp32_base.build_src_filter} build_flags = - ${esp32_base.build_flags} -I variants/m5stack_coreink + ${esp32_base.build_flags} + -I variants/esp32/m5stack_coreink ;-D RADIOLIB_VERBOSE -Ofast -D__MCUXPRESSO diff --git a/variants/m5stack_coreink/variant.h b/variants/esp32/m5stack_coreink/variant.h similarity index 100% rename from variants/m5stack_coreink/variant.h rename to variants/esp32/m5stack_coreink/variant.h diff --git a/variants/nano-g1-explorer/platformio.ini b/variants/esp32/nano-g1-explorer/platformio.ini similarity index 65% rename from variants/nano-g1-explorer/platformio.ini rename to variants/esp32/nano-g1-explorer/platformio.ini index 22037cbc9..2ba1f49e9 100644 --- a/variants/nano-g1-explorer/platformio.ini +++ b/variants/esp32/nano-g1-explorer/platformio.ini @@ -5,4 +5,6 @@ board = ttgo-t-beam lib_deps = ${esp32_base.lib_deps} build_flags = - ${esp32_base.build_flags} -D NANO_G1_EXPLORER -I variants/nano-g1-explorer \ No newline at end of file + ${esp32_base.build_flags} + -D NANO_G1_EXPLORER + -I variants/esp32/nano-g1-explorer diff --git a/variants/nano-g1-explorer/variant.h b/variants/esp32/nano-g1-explorer/variant.h similarity index 100% rename from variants/nano-g1-explorer/variant.h rename to variants/esp32/nano-g1-explorer/variant.h diff --git a/variants/nano-g1/platformio.ini b/variants/esp32/nano-g1/platformio.ini similarity index 67% rename from variants/nano-g1/platformio.ini rename to variants/esp32/nano-g1/platformio.ini index a3107423e..be8227de2 100644 --- a/variants/nano-g1/platformio.ini +++ b/variants/esp32/nano-g1/platformio.ini @@ -5,4 +5,6 @@ board = ttgo-t-beam lib_deps = ${esp32_base.lib_deps} build_flags = - ${esp32_base.build_flags} -D NANO_G1 -I variants/nano-g1 \ No newline at end of file + ${esp32_base.build_flags} + -D NANO_G1 + -I variants/esp32/nano-g1 diff --git a/variants/nano-g1/variant.h b/variants/esp32/nano-g1/variant.h similarity index 100% rename from variants/nano-g1/variant.h rename to variants/esp32/nano-g1/variant.h diff --git a/variants/radiomaster_900_bandit/platformio.ini b/variants/esp32/radiomaster_900_bandit/platformio.ini similarity index 90% rename from variants/radiomaster_900_bandit/platformio.ini rename to variants/esp32/radiomaster_900_bandit/platformio.ini index f87025937..d9eb78a57 100644 --- a/variants/radiomaster_900_bandit/platformio.ini +++ b/variants/esp32/radiomaster_900_bandit/platformio.ini @@ -8,7 +8,7 @@ build_flags = -DCONFIG_DISABLE_HAL_LOCKS=1 -DHAS_STK8XXX=1 -O2 - -Ivariants/radiomaster_900_bandit + -I variants/esp32/radiomaster_900_bandit board_build.f_cpu = 240000000L upload_protocol = esptool lib_deps = diff --git a/variants/radiomaster_900_bandit/variant.h b/variants/esp32/radiomaster_900_bandit/variant.h similarity index 100% rename from variants/radiomaster_900_bandit/variant.h rename to variants/esp32/radiomaster_900_bandit/variant.h diff --git a/variants/radiomaster_900_bandit_micro/platformio.ini b/variants/esp32/radiomaster_900_bandit_micro/platformio.ini similarity index 87% rename from variants/radiomaster_900_bandit_micro/platformio.ini rename to variants/esp32/radiomaster_900_bandit_micro/platformio.ini index 9e54f5859..36a45787b 100644 --- a/variants/radiomaster_900_bandit_micro/platformio.ini +++ b/variants/esp32/radiomaster_900_bandit_micro/platformio.ini @@ -12,8 +12,8 @@ build_flags = -DVTABLES_IN_FLASH=1 -DCONFIG_DISABLE_HAL_LOCKS=1 -O2 - -Ivariants/radiomaster_900_bandit_nano + -I variants/esp32/radiomaster_900_bandit_nano board_build.f_cpu = 240000000L upload_protocol = esptool lib_deps = - ${esp32_base.lib_deps} \ No newline at end of file + ${esp32_base.lib_deps} diff --git a/variants/radiomaster_900_bandit_nano/platformio.ini b/variants/esp32/radiomaster_900_bandit_nano/platformio.ini similarity index 79% rename from variants/radiomaster_900_bandit_nano/platformio.ini rename to variants/esp32/radiomaster_900_bandit_nano/platformio.ini index 0d43b8665..9a7fad83b 100644 --- a/variants/radiomaster_900_bandit_nano/platformio.ini +++ b/variants/esp32/radiomaster_900_bandit_nano/platformio.ini @@ -7,8 +7,8 @@ build_flags = -DVTABLES_IN_FLASH=1 -DCONFIG_DISABLE_HAL_LOCKS=1 -O2 - -Ivariants/radiomaster_900_bandit_nano + -I variants/esp32/radiomaster_900_bandit_nano board_build.f_cpu = 240000000L upload_protocol = esptool lib_deps = - ${esp32_base.lib_deps} \ No newline at end of file + ${esp32_base.lib_deps} diff --git a/variants/radiomaster_900_bandit_nano/variant.h b/variants/esp32/radiomaster_900_bandit_nano/variant.h similarity index 100% rename from variants/radiomaster_900_bandit_nano/variant.h rename to variants/esp32/radiomaster_900_bandit_nano/variant.h diff --git a/variants/rak11200/pins_arduino.h b/variants/esp32/rak11200/pins_arduino.h similarity index 100% rename from variants/rak11200/pins_arduino.h rename to variants/esp32/rak11200/pins_arduino.h diff --git a/variants/rak11200/platformio.ini b/variants/esp32/rak11200/platformio.ini similarity index 50% rename from variants/rak11200/platformio.ini rename to variants/esp32/rak11200/platformio.ini index eddc3458e..6149333f6 100644 --- a/variants/rak11200/platformio.ini +++ b/variants/esp32/rak11200/platformio.ini @@ -3,5 +3,7 @@ extends = esp32_base board = wiscore_rak11200 board_check = true build_flags = - ${esp32_base.build_flags} -D RAK_11200 -I variants/rak11200 -upload_speed = 115200 \ No newline at end of file + ${esp32_base.build_flags} + -D RAK_11200 + -I variants/esp32/rak11200 +upload_speed = 115200 diff --git a/variants/rak11200/variant.h b/variants/esp32/rak11200/variant.h similarity index 100% rename from variants/rak11200/variant.h rename to variants/esp32/rak11200/variant.h diff --git a/variants/station-g1/platformio.ini b/variants/esp32/station-g1/platformio.ini similarity index 66% rename from variants/station-g1/platformio.ini rename to variants/esp32/station-g1/platformio.ini index a466414d0..693a41ae8 100644 --- a/variants/station-g1/platformio.ini +++ b/variants/esp32/station-g1/platformio.ini @@ -5,4 +5,6 @@ board = ttgo-t-beam lib_deps = ${esp32_base.lib_deps} build_flags = - ${esp32_base.build_flags} -D STATION_G1 -I variants/station-g1 \ No newline at end of file + ${esp32_base.build_flags} + -D STATION_G1 + -I variants/esp32/station-g1 diff --git a/variants/station-g1/variant.h b/variants/esp32/station-g1/variant.h similarity index 100% rename from variants/station-g1/variant.h rename to variants/esp32/station-g1/variant.h diff --git a/variants/tbeam/platformio.ini b/variants/esp32/tbeam/platformio.ini similarity index 78% rename from variants/tbeam/platformio.ini rename to variants/esp32/tbeam/platformio.ini index 9049836a3..084a981da 100644 --- a/variants/tbeam/platformio.ini +++ b/variants/esp32/tbeam/platformio.ini @@ -6,8 +6,10 @@ board_check = true lib_deps = ${esp32_base.lib_deps} build_flags = - ${esp32_base.build_flags} -D TBEAM_V10 -I variants/tbeam + ${esp32_base.build_flags} + -D TBEAM_V10 + -I variants/esp32/tbeam -DGPS_POWER_TOGGLE ; comment this line to disable double press function on the user button to turn off gps entirely. -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -upload_speed = 921600 \ No newline at end of file +upload_speed = 921600 diff --git a/variants/tbeam/variant.h b/variants/esp32/tbeam/variant.h similarity index 100% rename from variants/tbeam/variant.h rename to variants/esp32/tbeam/variant.h diff --git a/variants/tbeam_v07/platformio.ini b/variants/esp32/tbeam_v07/platformio.ini similarity index 69% rename from variants/tbeam_v07/platformio.ini rename to variants/esp32/tbeam_v07/platformio.ini index 0cba92400..1647d9fd7 100644 --- a/variants/tbeam_v07/platformio.ini +++ b/variants/esp32/tbeam_v07/platformio.ini @@ -4,4 +4,6 @@ board_level = extra extends = esp32_base board = ttgo-t-beam build_flags = - ${esp32_base.build_flags} -D TBEAM_V07 -I variants/tbeam_v07 \ No newline at end of file + ${esp32_base.build_flags} + -D TBEAM_V07 + -I variants/esp32/tbeam_v07 diff --git a/variants/tbeam_v07/variant.h b/variants/esp32/tbeam_v07/variant.h similarity index 100% rename from variants/tbeam_v07/variant.h rename to variants/esp32/tbeam_v07/variant.h diff --git a/variants/tlora_v1/platformio.ini b/variants/esp32/tlora_v1/platformio.ini similarity index 50% rename from variants/tlora_v1/platformio.ini rename to variants/esp32/tlora_v1/platformio.ini index 17fc71d72..1d879b6b0 100644 --- a/variants/tlora_v1/platformio.ini +++ b/variants/esp32/tlora_v1/platformio.ini @@ -3,5 +3,7 @@ board_level = extra extends = esp32_base board = ttgo-lora32-v1 build_flags = - ${esp32_base.build_flags} -D TLORA_V1 -I variants/tlora_v1 -upload_speed = 115200 \ No newline at end of file + ${esp32_base.build_flags} + -D TLORA_V1 + -I variants/esp32/tlora_v1 +upload_speed = 115200 diff --git a/variants/tlora_v1/variant.h b/variants/esp32/tlora_v1/variant.h similarity index 100% rename from variants/tlora_v1/variant.h rename to variants/esp32/tlora_v1/variant.h diff --git a/variants/tlora_v1_3/platformio.ini b/variants/esp32/tlora_v1_3/platformio.ini similarity index 50% rename from variants/tlora_v1_3/platformio.ini rename to variants/esp32/tlora_v1_3/platformio.ini index c5eca589f..523c38a80 100644 --- a/variants/tlora_v1_3/platformio.ini +++ b/variants/esp32/tlora_v1_3/platformio.ini @@ -3,5 +3,5 @@ board_level = extra extends = esp32_base board = ttgo-lora32-v1 build_flags = - ${esp32_base.build_flags} -D TLORA_V1_3 -I variants/tlora_v1_3 -upload_speed = 115200 \ No newline at end of file + ${esp32_base.build_flags} -D TLORA_V1_3 -I variants/esp32/tlora_v1_3 +upload_speed = 115200 diff --git a/variants/tlora_v1_3/variant.h b/variants/esp32/tlora_v1_3/variant.h similarity index 100% rename from variants/tlora_v1_3/variant.h rename to variants/esp32/tlora_v1_3/variant.h diff --git a/variants/tlora_v2/platformio.ini b/variants/esp32/tlora_v2/platformio.ini similarity index 56% rename from variants/tlora_v2/platformio.ini rename to variants/esp32/tlora_v2/platformio.ini index 8087a30e3..4a710ee34 100644 --- a/variants/tlora_v2/platformio.ini +++ b/variants/esp32/tlora_v2/platformio.ini @@ -3,4 +3,6 @@ board_level = extra extends = esp32_base board = ttgo-lora32-v1 build_flags = - ${esp32_base.build_flags} -D TLORA_V2 -I variants/tlora_v2 \ No newline at end of file + ${esp32_base.build_flags} + -D TLORA_V2 + -I variants/esp32/tlora_v2 diff --git a/variants/tlora_v2/variant.h b/variants/esp32/tlora_v2/variant.h similarity index 100% rename from variants/tlora_v2/variant.h rename to variants/esp32/tlora_v2/variant.h diff --git a/variants/tlora_v2_1_16/platformio.ini b/variants/esp32/tlora_v2_1_16/platformio.ini similarity index 68% rename from variants/tlora_v2_1_16/platformio.ini rename to variants/esp32/tlora_v2_1_16/platformio.ini index 4253cc6af..bd85aa847 100644 --- a/variants/tlora_v2_1_16/platformio.ini +++ b/variants/esp32/tlora_v2_1_16/platformio.ini @@ -3,6 +3,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 + ${esp32_base.build_flags} -D TLORA_V2_1_16 -I variants/esp32/tlora_v2_1_16 -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -upload_speed = 115200 \ No newline at end of file +upload_speed = 115200 diff --git a/variants/tlora_v2_1_16/variant.h b/variants/esp32/tlora_v2_1_16/variant.h similarity index 100% rename from variants/tlora_v2_1_16/variant.h rename to variants/esp32/tlora_v2_1_16/variant.h diff --git a/variants/tlora_v2_1_16_tcxo/platformio.ini b/variants/esp32/tlora_v2_1_16_tcxo/platformio.ini similarity index 90% rename from variants/tlora_v2_1_16_tcxo/platformio.ini rename to variants/esp32/tlora_v2_1_16_tcxo/platformio.ini index 5c7cb7eb3..9404faa02 100644 --- a/variants/tlora_v2_1_16_tcxo/platformio.ini +++ b/variants/esp32/tlora_v2_1_16_tcxo/platformio.ini @@ -5,7 +5,7 @@ board = ttgo-lora32-v21 build_flags = ${esp32_base.build_flags} -D TLORA_V2_1_16 - -I variants/tlora_v2_1_16 + -I variants/esp32/tlora_v2_1_16 -D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -D LORA_TCXO_GPIO=33 upload_speed = 115200 \ No newline at end of file diff --git a/variants/tlora_v2_1_18/platformio.ini b/variants/esp32/tlora_v2_1_18/platformio.ini similarity index 55% rename from variants/tlora_v2_1_18/platformio.ini rename to variants/esp32/tlora_v2_1_18/platformio.ini index 48a001ced..432117485 100644 --- a/variants/tlora_v2_1_18/platformio.ini +++ b/variants/esp32/tlora_v2_1_18/platformio.ini @@ -4,4 +4,6 @@ board_level = extra board = ttgo-lora32-v21 build_flags = - ${esp32_base.build_flags} -D TLORA_V2_1_18 -I variants/tlora_v2_1_18 \ No newline at end of file + ${esp32_base.build_flags} + -D TLORA_V2_1_18 + -I variants/esp32/tlora_v2_1_18 diff --git a/variants/tlora_v2_1_18/variant.h b/variants/esp32/tlora_v2_1_18/variant.h similarity index 100% rename from variants/tlora_v2_1_18/variant.h rename to variants/esp32/tlora_v2_1_18/variant.h diff --git a/variants/tlora_v3_3_0_tcxo/platformio.ini b/variants/esp32/tlora_v3_3_0_tcxo/platformio.ini similarity index 89% rename from variants/tlora_v3_3_0_tcxo/platformio.ini rename to variants/esp32/tlora_v3_3_0_tcxo/platformio.ini index 8d060a087..f1110386e 100644 --- a/variants/tlora_v3_3_0_tcxo/platformio.ini +++ b/variants/esp32/tlora_v3_3_0_tcxo/platformio.ini @@ -4,7 +4,7 @@ board = ttgo-lora32-v21 build_flags = ${esp32_base.build_flags} -D TLORA_V2_1_16 - -I variants/tlora_v2_1_16 + -I variants/esp32/tlora_v2_1_16 -D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -D LORA_TCXO_GPIO=12 -D BUTTON_PIN=0 \ No newline at end of file diff --git a/variants/trackerd/platformio.ini b/variants/esp32/trackerd/platformio.ini similarity index 56% rename from variants/trackerd/platformio.ini rename to variants/esp32/trackerd/platformio.ini index 654534a15..3c2726a3c 100644 --- a/variants/trackerd/platformio.ini +++ b/variants/esp32/trackerd/platformio.ini @@ -4,5 +4,5 @@ board = pico32 board_build.f_flash = 80000000L build_flags = - ${esp32_base.build_flags} -D PRIVATE_HW -I variants/trackerd -D BSFILE=\"boards/dragino_lbt2.h\" + ${esp32_base.build_flags} -D PRIVATE_HW -I variants/esp32/trackerd -D BSFILE=\"boards/dragino_lbt2.h\" ;board_build.partitions = no_ota.csv \ No newline at end of file diff --git a/variants/trackerd/variant.h b/variants/esp32/trackerd/variant.h similarity index 100% rename from variants/trackerd/variant.h rename to variants/esp32/trackerd/variant.h diff --git a/variants/wiphone/pins_arduino.h b/variants/esp32/wiphone/pins_arduino.h similarity index 100% rename from variants/wiphone/pins_arduino.h rename to variants/esp32/wiphone/pins_arduino.h diff --git a/variants/wiphone/platformio.ini b/variants/esp32/wiphone/platformio.ini similarity index 81% rename from variants/wiphone/platformio.ini rename to variants/esp32/wiphone/platformio.ini index 362102731..5cce94b13 100644 --- a/variants/wiphone/platformio.ini +++ b/variants/esp32/wiphone/platformio.ini @@ -5,7 +5,9 @@ board_level = extra monitor_filters = esp32_exception_decoder board_build.partitions = default_16MB.csv build_flags = - ${esp32_base.build_flags} -D WIPHONE -I variants/wiphone + ${esp32_base.build_flags} + -D WIPHONE + -I variants/esp32/wiphone lib_deps = ${esp32_base.lib_deps} lovyan03/LovyanGFX@^1.2.0 diff --git a/variants/wiphone/variant.h b/variants/esp32/wiphone/variant.h similarity index 100% rename from variants/wiphone/variant.h rename to variants/esp32/wiphone/variant.h From 855514b4f33b0cb898feb75d23cd3ef3f7276e56 Mon Sep 17 00:00:00 2001 From: Austin Date: Sat, 19 Jul 2025 20:55:33 -0400 Subject: [PATCH 25/45] ESP32c3: Migrate variants to new structure (#7342) --- variants/diy/platformio.ini | 13 ------------- variants/{ => esp32c3}/ai-c3/platformio.ini | 6 +++--- variants/{ => esp32c3}/ai-c3/variant.h | 0 .../diy/esp32c3_super_mini/pins_arduino.h | 0 .../esp32c3/diy/esp32c3_super_mini/platformio.ini | 12 ++++++++++++ .../{ => esp32c3}/diy/esp32c3_super_mini/variant.h | 0 .../hackerboxes_esp32c3_oled/platformio.ini | 4 ++-- .../hackerboxes_esp32c3_oled/variant.h | 0 .../{ => esp32c3}/heltec_esp32c3/pins_arduino.h | 0 .../{ => esp32c3}/heltec_esp32c3/platformio.ini | 4 ++-- variants/{ => esp32c3}/heltec_esp32c3/variant.h | 0 .../{ => esp32c3}/heltec_hru_3601/pins_arduino.h | 0 .../{ => esp32c3}/heltec_hru_3601/platformio.ini | 2 +- variants/{ => esp32c3}/heltec_hru_3601/variant.h | 0 .../{ => esp32c3}/m5stack-stamp-c3/pins_arduino.h | 0 .../{ => esp32c3}/m5stack-stamp-c3/platformio.ini | 2 +- variants/{ => esp32c3}/m5stack-stamp-c3/variant.h | 0 .../{ => esp32s2}/nugget_s2_lora/platformio.ini | 4 +++- variants/{ => esp32s2}/nugget_s2_lora/variant.h | 0 19 files changed, 24 insertions(+), 23 deletions(-) rename variants/{ => esp32c3}/ai-c3/platformio.ini (57%) rename variants/{ => esp32c3}/ai-c3/variant.h (100%) rename variants/{ => esp32c3}/diy/esp32c3_super_mini/pins_arduino.h (100%) create mode 100644 variants/esp32c3/diy/esp32c3_super_mini/platformio.ini rename variants/{ => esp32c3}/diy/esp32c3_super_mini/variant.h (100%) rename variants/{ => esp32c3}/hackerboxes_esp32c3_oled/platformio.ini (80%) rename variants/{ => esp32c3}/hackerboxes_esp32c3_oled/variant.h (100%) rename variants/{ => esp32c3}/heltec_esp32c3/pins_arduino.h (100%) rename variants/{ => esp32c3}/heltec_esp32c3/platformio.ini (78%) rename variants/{ => esp32c3}/heltec_esp32c3/variant.h (100%) rename variants/{ => esp32c3}/heltec_hru_3601/pins_arduino.h (100%) rename variants/{ => esp32c3}/heltec_hru_3601/platformio.ini (84%) rename variants/{ => esp32c3}/heltec_hru_3601/variant.h (100%) rename variants/{ => esp32c3}/m5stack-stamp-c3/pins_arduino.h (100%) rename variants/{ => esp32c3}/m5stack-stamp-c3/platformio.ini (86%) rename variants/{ => esp32c3}/m5stack-stamp-c3/variant.h (100%) rename variants/{ => esp32s2}/nugget_s2_lora/platformio.ini (54%) rename variants/{ => esp32s2}/nugget_s2_lora/variant.h (100%) diff --git a/variants/diy/platformio.ini b/variants/diy/platformio.ini index fddfb154e..87451dfce 100644 --- a/variants/diy/platformio.ini +++ b/variants/diy/platformio.ini @@ -97,16 +97,3 @@ build_flags = -D ARDUINO_USB_MODE=0 -D ARDUINO_USB_CDC_ON_BOOT=1 -I variants/diy/t-energy-s3_e22 - -; ESP32 C3 Super Mini Development Board -; https://www.espboards.dev/esp32/esp32-c3-super-mini/ -[env:esp32c3_super_mini] -extends = esp32c3_base -board = esp32-c3-devkitm-1 -build_flags = - ${esp32_base.build_flags} - -D PRIVATE_HW - -I variants/diy/esp32c3_super_mini - -D ARDUINO_USB_MODE=1 - -D ARDUINO_USB_CDC_ON_BOOT=1 -board_level = extra diff --git a/variants/ai-c3/platformio.ini b/variants/esp32c3/ai-c3/platformio.ini similarity index 57% rename from variants/ai-c3/platformio.ini rename to variants/esp32c3/ai-c3/platformio.ini index 2869ca580..a25c0cb19 100644 --- a/variants/ai-c3/platformio.ini +++ b/variants/esp32c3/ai-c3/platformio.ini @@ -2,7 +2,7 @@ extends = esp32c3_base board = esp32-c3-devkitm-1 board_level = extra -build_flags = ${esp32c3_base.build_flags} +build_flags = + ${esp32c3_base.build_flags} -D PRIVATE_HW - -I variants/ai-c3 - + -I variants/esp32c3/ai-c3 diff --git a/variants/ai-c3/variant.h b/variants/esp32c3/ai-c3/variant.h similarity index 100% rename from variants/ai-c3/variant.h rename to variants/esp32c3/ai-c3/variant.h diff --git a/variants/diy/esp32c3_super_mini/pins_arduino.h b/variants/esp32c3/diy/esp32c3_super_mini/pins_arduino.h similarity index 100% rename from variants/diy/esp32c3_super_mini/pins_arduino.h rename to variants/esp32c3/diy/esp32c3_super_mini/pins_arduino.h diff --git a/variants/esp32c3/diy/esp32c3_super_mini/platformio.ini b/variants/esp32c3/diy/esp32c3_super_mini/platformio.ini new file mode 100644 index 000000000..c87baa7bf --- /dev/null +++ b/variants/esp32c3/diy/esp32c3_super_mini/platformio.ini @@ -0,0 +1,12 @@ +; ESP32 C3 Super Mini Development Board +; https://www.espboards.dev/esp32/esp32-c3-super-mini/ +[env:esp32c3_super_mini] +extends = esp32c3_base +board = esp32-c3-devkitm-1 +build_flags = + ${esp32_base.build_flags} + -D PRIVATE_HW + -I variants/esp32c3/diy/esp32c3_super_mini + -D ARDUINO_USB_MODE=1 + -D ARDUINO_USB_CDC_ON_BOOT=1 +board_level = extra diff --git a/variants/diy/esp32c3_super_mini/variant.h b/variants/esp32c3/diy/esp32c3_super_mini/variant.h similarity index 100% rename from variants/diy/esp32c3_super_mini/variant.h rename to variants/esp32c3/diy/esp32c3_super_mini/variant.h diff --git a/variants/hackerboxes_esp32c3_oled/platformio.ini b/variants/esp32c3/hackerboxes_esp32c3_oled/platformio.ini similarity index 80% rename from variants/hackerboxes_esp32c3_oled/platformio.ini rename to variants/esp32c3/hackerboxes_esp32c3_oled/platformio.ini index 4fcbf2ade..5a72b9d74 100644 --- a/variants/hackerboxes_esp32c3_oled/platformio.ini +++ b/variants/esp32c3/hackerboxes_esp32c3_oled/platformio.ini @@ -7,8 +7,8 @@ build_flags = -D PRIVATE_HW -D ARDUINO_USB_MODE=1 -D ARDUINO_USB_CDC_ON_BOOT=1 - -I variants/hackerboxes_esp32c3_oled + -I variants/esp32c3/hackerboxes_esp32c3_oled monitor_speed = 115200 upload_protocol = esptool ;upload_port = /dev/ttyUSB0 -upload_speed = 921600 \ No newline at end of file +upload_speed = 921600 diff --git a/variants/hackerboxes_esp32c3_oled/variant.h b/variants/esp32c3/hackerboxes_esp32c3_oled/variant.h similarity index 100% rename from variants/hackerboxes_esp32c3_oled/variant.h rename to variants/esp32c3/hackerboxes_esp32c3_oled/variant.h diff --git a/variants/heltec_esp32c3/pins_arduino.h b/variants/esp32c3/heltec_esp32c3/pins_arduino.h similarity index 100% rename from variants/heltec_esp32c3/pins_arduino.h rename to variants/esp32c3/heltec_esp32c3/pins_arduino.h diff --git a/variants/heltec_esp32c3/platformio.ini b/variants/esp32c3/heltec_esp32c3/platformio.ini similarity index 78% rename from variants/heltec_esp32c3/platformio.ini rename to variants/esp32c3/heltec_esp32c3/platformio.ini index 6fe5c3c69..d21d64d2a 100644 --- a/variants/heltec_esp32c3/platformio.ini +++ b/variants/esp32c3/heltec_esp32c3/platformio.ini @@ -4,8 +4,8 @@ board = esp32-c3-devkitm-1 build_flags = ${esp32_base.build_flags} -D HELTEC_HT62 - -I variants/heltec_esp32c3 + -I variants/esp32c3/heltec_esp32c3 monitor_speed = 115200 upload_protocol = esptool ;upload_port = /dev/ttyUSB0 -upload_speed = 921600 \ No newline at end of file +upload_speed = 921600 diff --git a/variants/heltec_esp32c3/variant.h b/variants/esp32c3/heltec_esp32c3/variant.h similarity index 100% rename from variants/heltec_esp32c3/variant.h rename to variants/esp32c3/heltec_esp32c3/variant.h diff --git a/variants/heltec_hru_3601/pins_arduino.h b/variants/esp32c3/heltec_hru_3601/pins_arduino.h similarity index 100% rename from variants/heltec_hru_3601/pins_arduino.h rename to variants/esp32c3/heltec_hru_3601/pins_arduino.h diff --git a/variants/heltec_hru_3601/platformio.ini b/variants/esp32c3/heltec_hru_3601/platformio.ini similarity index 84% rename from variants/heltec_hru_3601/platformio.ini rename to variants/esp32c3/heltec_hru_3601/platformio.ini index 3668e72b7..b5ff63eae 100644 --- a/variants/heltec_hru_3601/platformio.ini +++ b/variants/esp32c3/heltec_hru_3601/platformio.ini @@ -4,6 +4,6 @@ board = adafruit_qtpy_esp32c3 build_flags = ${esp32_base.build_flags} -D HELTEC_HRU_3601 - -I variants/heltec_hru_3601 + -I variants/esp32c3/heltec_hru_3601 lib_deps = ${esp32c3_base.lib_deps} adafruit/Adafruit NeoPixel @ ^1.12.0 diff --git a/variants/heltec_hru_3601/variant.h b/variants/esp32c3/heltec_hru_3601/variant.h similarity index 100% rename from variants/heltec_hru_3601/variant.h rename to variants/esp32c3/heltec_hru_3601/variant.h diff --git a/variants/m5stack-stamp-c3/pins_arduino.h b/variants/esp32c3/m5stack-stamp-c3/pins_arduino.h similarity index 100% rename from variants/m5stack-stamp-c3/pins_arduino.h rename to variants/esp32c3/m5stack-stamp-c3/pins_arduino.h diff --git a/variants/m5stack-stamp-c3/platformio.ini b/variants/esp32c3/m5stack-stamp-c3/platformio.ini similarity index 86% rename from variants/m5stack-stamp-c3/platformio.ini rename to variants/esp32c3/m5stack-stamp-c3/platformio.ini index bab65b621..1072df664 100644 --- a/variants/m5stack-stamp-c3/platformio.ini +++ b/variants/esp32c3/m5stack-stamp-c3/platformio.ini @@ -5,7 +5,7 @@ board_level = extra build_flags = ${esp32_base.build_flags} -D PRIVATE_HW - -I variants/m5stack-stamp-c3 + -I variants/esp32c3/m5stack-stamp-c3 monitor_speed = 115200 upload_protocol = esptool ;upload_port = /dev/ttyACM2 diff --git a/variants/m5stack-stamp-c3/variant.h b/variants/esp32c3/m5stack-stamp-c3/variant.h similarity index 100% rename from variants/m5stack-stamp-c3/variant.h rename to variants/esp32c3/m5stack-stamp-c3/variant.h diff --git a/variants/nugget_s2_lora/platformio.ini b/variants/esp32s2/nugget_s2_lora/platformio.ini similarity index 54% rename from variants/nugget_s2_lora/platformio.ini rename to variants/esp32s2/nugget_s2_lora/platformio.ini index 2a7ff1013..a091a705f 100644 --- a/variants/nugget_s2_lora/platformio.ini +++ b/variants/esp32s2/nugget_s2_lora/platformio.ini @@ -3,4 +3,6 @@ extends = esp32s2_base board = lolin_s2_mini board_level = extra build_flags = - ${esp32s2_base.build_flags} -D PRIVATE_HW -I variants/nugget_s2_lora \ No newline at end of file + ${esp32s2_base.build_flags} + -D PRIVATE_HW + -I variants/esp32s2/nugget_s2_lora diff --git a/variants/nugget_s2_lora/variant.h b/variants/esp32s2/nugget_s2_lora/variant.h similarity index 100% rename from variants/nugget_s2_lora/variant.h rename to variants/esp32s2/nugget_s2_lora/variant.h From 91049d0db321f910bdf341a9e1c8b06d94adc269 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Sun, 20 Jul 2025 06:19:45 -0500 Subject: [PATCH 26/45] Misc cppcheck fixes (#7370) --- src/buzz/BuzzerFeedbackThread.cpp | 5 +--- src/graphics/Screen.cpp | 2 +- src/graphics/draw/ClockRenderer.cpp | 6 +---- src/input/ButtonThread.h | 4 +-- src/mesh/MeshPacketQueue.cpp | 2 +- src/mesh/NodeDB.cpp | 2 +- src/mesh/NodeDB.h | 2 +- src/mesh/PacketHistory.cpp | 6 ++--- src/mesh/PacketHistory.h | 4 +-- src/modules/CannedMessageModule.cpp | 41 +++++++++++++++-------------- 10 files changed, 34 insertions(+), 40 deletions(-) diff --git a/src/buzz/BuzzerFeedbackThread.cpp b/src/buzz/BuzzerFeedbackThread.cpp index 2bd3158a3..b644ea8f4 100644 --- a/src/buzz/BuzzerFeedbackThread.cpp +++ b/src/buzz/BuzzerFeedbackThread.cpp @@ -69,10 +69,7 @@ int32_t BuzzerFeedbackThread::runOnce() // This thread is primarily event-driven, but we can use runOnce // for any periodic tasks if needed in the future - if (needsUpdate) { - needsUpdate = false; - // Could add any periodic processing here - } + needsUpdate = false; // Run every 100ms when active, less frequently when idle return needsUpdate ? 100 : 1000; diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index b9c9e2fbf..87d394d69 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -1001,7 +1001,7 @@ void Screen::setFrames(FrameFocus focus) // Insert favorite frames *after* collecting them all if (!favoriteFrames.empty()) { fsi.positions.firstFavorite = numframes; - for (auto &f : favoriteFrames) { + for (const auto &f : favoriteFrames) { normalFrames[numframes++] = f; indicatorIcons.push_back(icon_node); } diff --git a/src/graphics/draw/ClockRenderer.cpp b/src/graphics/draw/ClockRenderer.cpp index e3cb5fcb9..cc0b6f70b 100644 --- a/src/graphics/draw/ClockRenderer.cpp +++ b/src/graphics/draw/ClockRenderer.cpp @@ -218,7 +218,6 @@ void drawDigitalClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int1 hour %= 12; if (hour == 0) hour = 12; - bool isPM = hour >= 12; snprintf(timeString, sizeof(timeString), "%d:%02d", hour, minute); } else { snprintf(timeString, sizeof(timeString), "%02d:%02d", hour, minute); @@ -366,9 +365,6 @@ void drawAnalogClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16 // hour hand radius and y coordinate int16_t hourHandRadius = radius * 0.35; - if (isHighResolution) { - int16_t hourHandRadius = radius * 0.55; - } int16_t hourHandNoonY = centerY - hourHandRadius; display->setColor(OLEDDISPLAY_COLOR::WHITE); @@ -386,7 +382,7 @@ void drawAnalogClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16 bool isPM = hour >= 12; if (config.display.use_12h_clock) { - bool isPM = hour >= 12; + isPM = hour >= 12; display->setFont(FONT_SMALL); int yOffset = isHighResolution ? 1 : 0; #ifdef USE_EINK diff --git a/src/input/ButtonThread.h b/src/input/ButtonThread.h index 949048de1..2358e609d 100644 --- a/src/input/ButtonThread.h +++ b/src/input/ButtonThread.h @@ -24,7 +24,7 @@ struct ButtonConfig { bool touchQuirk = false; // Constructor to set required parameter - ButtonConfig(uint8_t pin = 0) : pinNumber(pin) {} + explicit ButtonConfig(uint8_t pin = 0) : pinNumber(pin) {} }; #ifndef BUTTON_CLICK_MS @@ -62,7 +62,7 @@ class ButtonThread : public Observable, public concurrency:: BUTTON_EVENT_COMBO_SHORT_LONG, }; - ButtonThread(const char *name); + explicit ButtonThread(const char *name); int32_t runOnce() override; OneButton userButton; void attachButtonInterrupts(); diff --git a/src/mesh/MeshPacketQueue.cpp b/src/mesh/MeshPacketQueue.cpp index f8af81321..a64678a7f 100644 --- a/src/mesh/MeshPacketQueue.cpp +++ b/src/mesh/MeshPacketQueue.cpp @@ -121,7 +121,7 @@ meshtastic_MeshPacket *MeshPacketQueue::remove(NodeNum from, PacketId id, bool t bool MeshPacketQueue::find(const NodeNum from, const PacketId id) { for (auto it = queue.begin(); it != queue.end(); it++) { - const auto p = (*it); + const auto *p = *it; if (getFrom(p) == from && p->id == id) { return true; } diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index 185ea0744..3c19971e6 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -1868,7 +1868,7 @@ UserLicenseStatus NodeDB::getLicenseStatus(uint32_t nodeNum) return info->user.is_licensed ? UserLicenseStatus::Licensed : UserLicenseStatus::NotLicensed; } -bool NodeDB::checkLowEntropyPublicKey(const meshtastic_Config_SecurityConfig_public_key_t keyToTest) +bool NodeDB::checkLowEntropyPublicKey(const meshtastic_Config_SecurityConfig_public_key_t &keyToTest) { if (keyToTest.size == 32) { uint8_t keyHash[32] = {0}; diff --git a/src/mesh/NodeDB.h b/src/mesh/NodeDB.h index 845f42c76..19fb67b73 100644 --- a/src/mesh/NodeDB.h +++ b/src/mesh/NodeDB.h @@ -279,7 +279,7 @@ class NodeDB bool hasValidPosition(const meshtastic_NodeInfoLite *n); - bool checkLowEntropyPublicKey(const meshtastic_Config_SecurityConfig_public_key_t keyToTest); + bool checkLowEntropyPublicKey(const meshtastic_Config_SecurityConfig_public_key_t &keyToTest); bool backupPreferences(meshtastic_AdminMessage_BackupLocation location); bool restorePreferences(meshtastic_AdminMessage_BackupLocation location, diff --git a/src/mesh/PacketHistory.cpp b/src/mesh/PacketHistory.cpp index 8cac31a3e..3902c1057 100644 --- a/src/mesh/PacketHistory.cpp +++ b/src/mesh/PacketHistory.cpp @@ -181,7 +181,7 @@ PacketHistory::PacketRecord *PacketHistory::find(NodeNum sender, PacketId id) } /** Insert/Replace oldest PacketRecord in recentPackets. */ -void PacketHistory::insert(PacketRecord &r) +void PacketHistory::insert(const PacketRecord &r) { uint32_t now_millis = millis(); // Should not jump with time changes uint32_t OldtrxTimeMsec = 0; @@ -308,7 +308,7 @@ bool PacketHistory::wasRelayer(const uint8_t relayer, const uint32_t id, const N return false; } - PacketRecord *found = find(sender, id); + const PacketRecord *found = find(sender, id); if (found == NULL) { #if VERBOSE_PACKET_HISTORY @@ -327,7 +327,7 @@ bool PacketHistory::wasRelayer(const uint8_t relayer, const uint32_t id, const N /* Check if a certain node was a relayer of a packet in the history given iterator * @return true if node was indeed a relayer, false if not */ -bool PacketHistory::wasRelayer(const uint8_t relayer, PacketRecord &r) +bool PacketHistory::wasRelayer(const uint8_t relayer, const PacketRecord &r) { for (uint8_t i = 0; i < NUM_RELAYERS; i++) { if (r.relayed_by[i] == relayer) { diff --git a/src/mesh/PacketHistory.h b/src/mesh/PacketHistory.h index d06c9bd2f..9f14a4cf0 100644 --- a/src/mesh/PacketHistory.h +++ b/src/mesh/PacketHistory.h @@ -31,11 +31,11 @@ class PacketHistory /** Insert/Replace oldest PacketRecord in mx_recentPackets. * @param r PacketRecord to insert or replace */ - void insert(PacketRecord &r); // Insert or replace a packet record in the history + void insert(const PacketRecord &r); // Insert or replace a packet record in the history /* Check if a certain node was a relayer of a packet in the history given iterator * @return true if node was indeed a relayer, false if not */ - bool wasRelayer(const uint8_t relayer, PacketRecord &r); + bool wasRelayer(const uint8_t relayer, const PacketRecord &r); PacketHistory(const PacketHistory &); // non construction-copyable PacketHistory &operator=(const PacketHistory &); // non copyable diff --git a/src/modules/CannedMessageModule.cpp b/src/modules/CannedMessageModule.cpp index 2690c67f0..2a4f1cf4d 100644 --- a/src/modules/CannedMessageModule.cpp +++ b/src/modules/CannedMessageModule.cpp @@ -1447,7 +1447,7 @@ void CannedMessageModule::drawEmotePickerScreen(OLEDDisplay *display, OLEDDispla int headerY = y; int listTop = headerY + headerFontHeight + headerMargin; - int visibleRows = (display->getHeight() - listTop - 2) / rowHeight; + int _visibleRows = (display->getHeight() - listTop - 2) / rowHeight; int numEmotes = graphics::numEmotes; // Clamp highlight index @@ -1457,11 +1457,11 @@ void CannedMessageModule::drawEmotePickerScreen(OLEDDisplay *display, OLEDDispla emotePickerIndex = numEmotes - 1; // Determine which emote is at the top - int topIndex = emotePickerIndex - visibleRows / 2; + int topIndex = emotePickerIndex - _visibleRows / 2; if (topIndex < 0) topIndex = 0; - if (topIndex > numEmotes - visibleRows) - topIndex = std::max(0, numEmotes - visibleRows); + if (topIndex > numEmotes - _visibleRows) + topIndex = std::max(0, numEmotes - _visibleRows); // Draw header/title display->setFont(FONT_SMALL); @@ -1709,7 +1709,7 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st } else { // Text: split by words and wrap inside word if needed String text = token.second; - uint16_t pos = 0; + pos = 0; while (pos < text.length()) { // Find next space (or end) int spacePos = text.indexOf(' ', pos); @@ -1753,7 +1753,7 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st int yLine = inputY; for (auto &line : lines) { int nextX = x; - for (auto &token : line) { + for (const auto &token : line) { if (token.first) { const graphics::Emote *emote = nullptr; for (int j = 0; j < graphics::numEmotes; j++) { @@ -1789,19 +1789,20 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st int topMsg; std::vector rowHeights; - int visibleRows; + int _visibleRows; // Draw header (To: ...) drawHeader(display, x, y, buffer); // Shift message list upward by 3 pixels to reduce spacing between header and first message const int listYOffset = y + FONT_HEIGHT_SMALL - 3; - visibleRows = (display->getHeight() - listYOffset) / baseRowSpacing; + _visibleRows = (display->getHeight() - listYOffset) / baseRowSpacing; // Figure out which messages are visible and their needed heights - topMsg = - (messagesCount > visibleRows && currentMessageIndex >= visibleRows - 1) ? currentMessageIndex - visibleRows + 2 : 0; - int countRows = std::min(messagesCount, visibleRows); + topMsg = (messagesCount > _visibleRows && currentMessageIndex >= _visibleRows - 1) + ? currentMessageIndex - _visibleRows + 2 + : 0; + int countRows = std::min(messagesCount, _visibleRows); // --- Build per-row max height based on all emotes in line --- for (int i = 0; i < countRows; i++) { @@ -1828,7 +1829,7 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st int lineY = yCursor; const char *msg = getMessageByIndex(msgIdx); int rowHeight = rowHeights[vis]; - bool highlight = (msgIdx == currentMessageIndex); + bool _highlight = (msgIdx == currentMessageIndex); // --- Multi-emote tokenization --- std::vector> tokens; // (isEmote, token) @@ -1881,20 +1882,20 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st int textYOffset = (rowHeight - FONT_HEIGHT_SMALL) / 2; #ifdef USE_EINK - int nextX = x + (highlight ? 12 : 0); - if (highlight) + int nextX = x + (_highlight ? 12 : 0); + if (_highlight) display->drawString(x + 0, lineY + textYOffset, ">"); #else int scrollPadding = 8; - if (highlight) { + if (_highlight) { display->fillRect(x + 0, lineY, display->getWidth() - scrollPadding, rowHeight); display->setColor(BLACK); } - int nextX = x + (highlight ? 2 : 0); + int nextX = x + (_highlight ? 2 : 0); #endif // Draw all tokens left to right - for (auto &token : tokens) { + for (const auto &token : tokens) { if (token.first) { // Emote const graphics::Emote *emote = nullptr; @@ -1916,7 +1917,7 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st } } #ifndef USE_EINK - if (highlight) + if (_highlight) display->setColor(WHITE); #endif @@ -1924,11 +1925,11 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st } // Scrollbar - if (messagesCount > visibleRows) { + if (messagesCount > _visibleRows) { int scrollHeight = display->getHeight() - listYOffset; int scrollTrackX = display->getWidth() - 6; display->drawRect(scrollTrackX, listYOffset, 4, scrollHeight); - int barHeight = (scrollHeight * visibleRows) / messagesCount; + int barHeight = (scrollHeight * _visibleRows) / messagesCount; int scrollPos = listYOffset + (scrollHeight * topMsg) / messagesCount; display->fillRect(scrollTrackX, scrollPos, 4, barHeight); } From 44518fea14a17373b266ad7471440e96a708e565 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 20 Jul 2025 06:20:07 -0500 Subject: [PATCH 27/45] Upgrade trunk (#7349) Co-authored-by: vidplace7 <1779290+vidplace7@users.noreply.github.com> --- .trunk/trunk.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 7d27efe58..e1abbcc88 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -8,15 +8,15 @@ plugins: uri: https://github.com/trunk-io/plugins lint: enabled: - - checkov@3.2.450 - - renovate@41.30.5 + - checkov@3.2.451 + - renovate@41.37.9 - prettier@3.6.2 - - trufflehog@3.89.2 + - trufflehog@3.90.0 - yamllint@1.37.1 - bandit@1.8.6 - trivy@0.64.1 - taplo@0.9.3 - - ruff@0.12.2 + - ruff@0.12.3 - isort@6.0.1 - markdownlint@0.45.0 - oxipng@9.1.5 From 9313d047260e183b1cacca89fc6000c21b8d6c09 Mon Sep 17 00:00:00 2001 From: Austin Date: Sun, 20 Jul 2025 07:20:57 -0400 Subject: [PATCH 28/45] RP2040/RP2350: Migrate variants to new structure (#7345) --- .../{ => rp2040}/ec_catsniffer/platformio.ini | 14 +++++++------- variants/{ => rp2040}/ec_catsniffer/variant.cpp | 0 variants/{ => rp2040}/ec_catsniffer/variant.h | 0 .../feather_rp2040_rfm95/platformio.ini | 14 +++++++------- .../{ => rp2040}/feather_rp2040_rfm95/variant.h | 0 .../{ => rp2040}/nibble_rp2040/platformio.ini | 14 +++++++------- variants/{ => rp2040}/nibble_rp2040/variant.h | 0 variants/{ => rp2040}/rak11310/pins_arduino.h | 0 variants/{ => rp2040}/rak11310/platformio.ini | 16 ++++++++-------- variants/{ => rp2040}/rak11310/variant.h | 0 variants/{ => rp2040}/rp2040-lora/platformio.ini | 14 +++++++------- variants/{ => rp2040}/rp2040-lora/variant.h | 0 .../rpipico-slowclock/platformio.ini | 8 ++++---- .../{ => rp2040}/rpipico-slowclock/variant.h | 0 variants/{ => rp2040}/rpipico/platformio.ini | 13 +++++++------ variants/{ => rp2040}/rpipico/variant.h | 0 variants/{ => rp2040}/rpipicow/platformio.ini | 12 ++++++------ variants/{ => rp2040}/rpipicow/variant.h | 0 .../{ => rp2040}/senselora_rp2040/pins_arduino.h | 0 .../{ => rp2040}/senselora_rp2040/platformio.ini | 8 ++++---- variants/{ => rp2040}/senselora_rp2040/variant.h | 1 + variants/{ => rp2350}/rpipico2/platformio.ini | 13 +++++++------ variants/{ => rp2350}/rpipico2/variant.h | 0 variants/{ => rp2350}/rpipico2w/platformio.ini | 5 +++-- variants/{ => rp2350}/rpipico2w/variant.h | 0 25 files changed, 68 insertions(+), 64 deletions(-) rename variants/{ => rp2040}/ec_catsniffer/platformio.ini (50%) rename variants/{ => rp2040}/ec_catsniffer/variant.cpp (100%) rename variants/{ => rp2040}/ec_catsniffer/variant.h (100%) rename variants/{ => rp2040}/feather_rp2040_rfm95/platformio.ini (53%) rename variants/{ => rp2040}/feather_rp2040_rfm95/variant.h (100%) rename variants/{ => rp2040}/nibble_rp2040/platformio.ini (56%) rename variants/{ => rp2040}/nibble_rp2040/variant.h (100%) rename variants/{ => rp2040}/rak11310/pins_arduino.h (100%) rename variants/{ => rp2040}/rak11310/platformio.ini (64%) rename variants/{ => rp2040}/rak11310/variant.h (100%) rename variants/{ => rp2040}/rp2040-lora/platformio.ini (54%) rename variants/{ => rp2040}/rp2040-lora/variant.h (100%) rename variants/{ => rp2040}/rpipico-slowclock/platformio.ini (85%) rename variants/{ => rp2040}/rpipico-slowclock/variant.h (100%) rename variants/{ => rp2040}/rpipico/platformio.ini (55%) rename variants/{ => rp2040}/rpipico/variant.h (100%) rename variants/{ => rp2040}/rpipicow/platformio.ini (75%) rename variants/{ => rp2040}/rpipicow/variant.h (100%) rename variants/{ => rp2040}/senselora_rp2040/pins_arduino.h (100%) rename variants/{ => rp2040}/senselora_rp2040/platformio.ini (60%) rename variants/{ => rp2040}/senselora_rp2040/variant.h (92%) rename variants/{ => rp2350}/rpipico2/platformio.ini (54%) rename variants/{ => rp2350}/rpipico2/variant.h (100%) rename variants/{ => rp2350}/rpipico2w/platformio.ini (91%) rename variants/{ => rp2350}/rpipico2w/variant.h (100%) diff --git a/variants/ec_catsniffer/platformio.ini b/variants/rp2040/ec_catsniffer/platformio.ini similarity index 50% rename from variants/ec_catsniffer/platformio.ini rename to variants/rp2040/ec_catsniffer/platformio.ini index 6db9abe90..acf19d757 100644 --- a/variants/ec_catsniffer/platformio.ini +++ b/variants/rp2040/ec_catsniffer/platformio.ini @@ -2,13 +2,13 @@ extends = rp2040_base board = rpipico upload_protocol = picotool - -build_flags = ${rp2040_base.build_flags} - -DRPI_PICO - -Ivariants/ec_catsniffer - -DDEBUG_RP2040_PORT=Serial - # -DHW_SPI1_DEVICE +build_flags = + ${rp2040_base.build_flags} + -D RPI_PICO + -I variants/rp2040/ec_catsniffer + -D DEBUG_RP2040_PORT=Serial + ; -D HW_SPI1_DEVICE lib_deps = ${rp2040_base.lib_deps} debug_build_flags = ${rp2040_base.build_flags}, -g -debug_tool = cmsis-dap \ No newline at end of file +debug_tool = cmsis-dap diff --git a/variants/ec_catsniffer/variant.cpp b/variants/rp2040/ec_catsniffer/variant.cpp similarity index 100% rename from variants/ec_catsniffer/variant.cpp rename to variants/rp2040/ec_catsniffer/variant.cpp diff --git a/variants/ec_catsniffer/variant.h b/variants/rp2040/ec_catsniffer/variant.h similarity index 100% rename from variants/ec_catsniffer/variant.h rename to variants/rp2040/ec_catsniffer/variant.h diff --git a/variants/feather_rp2040_rfm95/platformio.ini b/variants/rp2040/feather_rp2040_rfm95/platformio.ini similarity index 53% rename from variants/feather_rp2040_rfm95/platformio.ini rename to variants/rp2040/feather_rp2040_rfm95/platformio.ini index db1eb4f02..ef4118cb0 100644 --- a/variants/feather_rp2040_rfm95/platformio.ini +++ b/variants/rp2040/feather_rp2040_rfm95/platformio.ini @@ -2,14 +2,14 @@ extends = rp2040_base board = adafruit_feather upload_protocol = picotool - # add our variants files to the include and src paths -build_flags = ${rp2040_base.build_flags} - -DRP2040_FEATHER_RFM95 - -Ivariants/feather_rp2040_rfm95 - -DDEBUG_RP2040_PORT=Serial - -DHW_SPI1_DEVICE +build_flags = + ${rp2040_base.build_flags} + -D RP2040_FEATHER_RFM95 + -I variants/rp2040/feather_rp2040_rfm95 + -D DEBUG_RP2040_PORT=Serial + -D HW_SPI1_DEVICE lib_deps = ${rp2040_base.lib_deps} debug_build_flags = ${rp2040_base.build_flags} -debug_tool = cmsis-dap ; for e.g. Picotool \ No newline at end of file +debug_tool = cmsis-dap ; for e.g. Picotool diff --git a/variants/feather_rp2040_rfm95/variant.h b/variants/rp2040/feather_rp2040_rfm95/variant.h similarity index 100% rename from variants/feather_rp2040_rfm95/variant.h rename to variants/rp2040/feather_rp2040_rfm95/variant.h diff --git a/variants/nibble_rp2040/platformio.ini b/variants/rp2040/nibble_rp2040/platformio.ini similarity index 56% rename from variants/nibble_rp2040/platformio.ini rename to variants/rp2040/nibble_rp2040/platformio.ini index c3a1923c5..024a72206 100644 --- a/variants/nibble_rp2040/platformio.ini +++ b/variants/rp2040/nibble_rp2040/platformio.ini @@ -3,14 +3,14 @@ extends = rp2040_base board = rpipico board_level = extra upload_protocol = picotool - # add our variants files to the include and src paths -build_flags = ${rp2040_base.build_flags} - -DPRIVATE_HW - -Ivariants/nibble_rp2040 - -DDEBUG_RP2040_PORT=Serial - -DHW_SPI1_DEVICE +build_flags = + ${rp2040_base.build_flags} + -D PRIVATE_HW + -I variants/rp2040/nibble_rp2040 + -D DEBUG_RP2040_PORT=Serial + -D HW_SPI1_DEVICE lib_deps = ${rp2040_base.lib_deps} debug_build_flags = ${rp2040_base.build_flags}, -g -debug_tool = cmsis-dap ; for e.g. Picotool \ No newline at end of file +debug_tool = cmsis-dap ; for e.g. Picotool diff --git a/variants/nibble_rp2040/variant.h b/variants/rp2040/nibble_rp2040/variant.h similarity index 100% rename from variants/nibble_rp2040/variant.h rename to variants/rp2040/nibble_rp2040/variant.h diff --git a/variants/rak11310/pins_arduino.h b/variants/rp2040/rak11310/pins_arduino.h similarity index 100% rename from variants/rak11310/pins_arduino.h rename to variants/rp2040/rak11310/pins_arduino.h diff --git a/variants/rak11310/platformio.ini b/variants/rp2040/rak11310/platformio.ini similarity index 64% rename from variants/rak11310/platformio.ini rename to variants/rp2040/rak11310/platformio.ini index fd7e842cc..aca24656b 100644 --- a/variants/rak11310/platformio.ini +++ b/variants/rp2040/rak11310/platformio.ini @@ -2,18 +2,18 @@ extends = rp2040_base board = rakwireless_rak11300 upload_protocol = picotool - # add our variants files to the include and src paths -build_flags = ${rp2040_base.build_flags} - -DRAK11310 - -Ivariants/rak11310 - -DDEBUG_RP2040_PORT=Serial - -DRV3028_RTC=0x52 -build_src_filter = ${rp2040_base.build_src_filter} +<../variants/rak11310> + + + +build_flags = + ${rp2040_base.build_flags} + -D RAK11310 + -I variants/rp2040/rak11310 + -D DEBUG_RP2040_PORT=Serial + -D RV3028_RTC=0x52 +build_src_filter = ${rp2040_base.build_src_filter} +<../variants/rp2040/rak11310> + + + lib_deps = ${rp2040_base.lib_deps} ${networking_base.lib_deps} melopero/Melopero RV3028@^1.1.0 https://github.com/RAKWireless/RAK13800-W5100S/archive/1.0.2.zip debug_build_flags = ${rp2040_base.build_flags}, -g -debug_tool = cmsis-dap ; for e.g. Picotool \ No newline at end of file +debug_tool = cmsis-dap ; for e.g. Picotool diff --git a/variants/rak11310/variant.h b/variants/rp2040/rak11310/variant.h similarity index 100% rename from variants/rak11310/variant.h rename to variants/rp2040/rak11310/variant.h diff --git a/variants/rp2040-lora/platformio.ini b/variants/rp2040/rp2040-lora/platformio.ini similarity index 54% rename from variants/rp2040-lora/platformio.ini rename to variants/rp2040/rp2040-lora/platformio.ini index 7ac5b2cac..d59e74f20 100644 --- a/variants/rp2040-lora/platformio.ini +++ b/variants/rp2040/rp2040-lora/platformio.ini @@ -2,14 +2,14 @@ extends = rp2040_base board = rpipico upload_protocol = picotool - # add our variants files to the include and src paths -build_flags = ${rp2040_base.build_flags} - -DRP2040_LORA - -Ivariants/rp2040-lora - -DDEBUG_RP2040_PORT=Serial - -DHW_SPI1_DEVICE +build_flags = + ${rp2040_base.build_flags} + -D RP2040_LORA + -I variants/rp2040/rp2040-lora + -D DEBUG_RP2040_PORT=Serial + -D HW_SPI1_DEVICE lib_deps = ${rp2040_base.lib_deps} debug_build_flags = ${rp2040_base.build_flags}, -g -debug_tool = cmsis-dap ; for e.g. Picotool \ No newline at end of file +debug_tool = cmsis-dap ; for e.g. Picotool diff --git a/variants/rp2040-lora/variant.h b/variants/rp2040/rp2040-lora/variant.h similarity index 100% rename from variants/rp2040-lora/variant.h rename to variants/rp2040/rp2040-lora/variant.h diff --git a/variants/rpipico-slowclock/platformio.ini b/variants/rp2040/rpipico-slowclock/platformio.ini similarity index 85% rename from variants/rpipico-slowclock/platformio.ini rename to variants/rp2040/rpipico-slowclock/platformio.ini index c56f9e78c..30928aead 100644 --- a/variants/rpipico-slowclock/platformio.ini +++ b/variants/rp2040/rpipico-slowclock/platformio.ini @@ -12,11 +12,11 @@ debug_init_cmds = $LOAD_CMDS monitor init monitor reset halt - # add our variants files to the include and src paths -build_flags = ${rp2040_base.build_flags} +build_flags = + ${rp2040_base.build_flags} -DRPI_PICO - -Ivariants/rpipico-slowclock + -Ivariants/rp2040/rpipico-slowclock -DDEBUG_RP2040_PORT=Serial2 -DHW_SPI1_DEVICE -g @@ -25,4 +25,4 @@ lib_deps = ${rp2040_base.lib_deps} debug_build_flags = ${rp2040_base.build_flags} -g - -DNO_USB \ No newline at end of file + -DNO_USB diff --git a/variants/rpipico-slowclock/variant.h b/variants/rp2040/rpipico-slowclock/variant.h similarity index 100% rename from variants/rpipico-slowclock/variant.h rename to variants/rp2040/rpipico-slowclock/variant.h diff --git a/variants/rpipico/platformio.ini b/variants/rp2040/rpipico/platformio.ini similarity index 55% rename from variants/rpipico/platformio.ini rename to variants/rp2040/rpipico/platformio.ini index e34cfa43b..81db2a312 100644 --- a/variants/rpipico/platformio.ini +++ b/variants/rp2040/rpipico/platformio.ini @@ -4,12 +4,13 @@ board = rpipico upload_protocol = picotool # add our variants files to the include and src paths -build_flags = ${rp2040_base.build_flags} - -DRPI_PICO - -Ivariants/rpipico - -DDEBUG_RP2040_PORT=Serial - -DHW_SPI1_DEVICE +build_flags = + ${rp2040_base.build_flags} + -D RPI_PICO + -I variants/rp2040/rpipico + -D DEBUG_RP2040_PORT=Serial + -D HW_SPI1_DEVICE lib_deps = ${rp2040_base.lib_deps} debug_build_flags = ${rp2040_base.build_flags}, -g -debug_tool = cmsis-dap ; for e.g. Picotool \ No newline at end of file +debug_tool = cmsis-dap ; for e.g. Picotool diff --git a/variants/rpipico/variant.h b/variants/rp2040/rpipico/variant.h similarity index 100% rename from variants/rpipico/variant.h rename to variants/rp2040/rpipico/variant.h diff --git a/variants/rpipicow/platformio.ini b/variants/rp2040/rpipicow/platformio.ini similarity index 75% rename from variants/rpipicow/platformio.ini rename to variants/rp2040/rpipicow/platformio.ini index e59944b5d..f3fd07f8d 100644 --- a/variants/rpipicow/platformio.ini +++ b/variants/rp2040/rpipicow/platformio.ini @@ -2,14 +2,14 @@ extends = rp2040_base board = rpipicow upload_protocol = picotool - # add our variants files to the include and src paths -build_flags = ${rp2040_base.build_flags} - -DRPI_PICO - -Ivariants/rpipicow - -DHW_SPI1_DEVICE +build_flags = + ${rp2040_base.build_flags} + -D RPI_PICO + -I variants/rp2040/rpipicow + -D HW_SPI1_DEVICE + -D HAS_UDP_MULTICAST=1 -fexceptions # for exception handling in MQTT - -DHAS_UDP_MULTICAST=1 build_src_filter = ${rp2040_base.build_src_filter} + lib_deps = ${rp2040_base.lib_deps} diff --git a/variants/rpipicow/variant.h b/variants/rp2040/rpipicow/variant.h similarity index 100% rename from variants/rpipicow/variant.h rename to variants/rp2040/rpipicow/variant.h diff --git a/variants/senselora_rp2040/pins_arduino.h b/variants/rp2040/senselora_rp2040/pins_arduino.h similarity index 100% rename from variants/senselora_rp2040/pins_arduino.h rename to variants/rp2040/senselora_rp2040/pins_arduino.h diff --git a/variants/senselora_rp2040/platformio.ini b/variants/rp2040/senselora_rp2040/platformio.ini similarity index 60% rename from variants/senselora_rp2040/platformio.ini rename to variants/rp2040/senselora_rp2040/platformio.ini index b05fc1f8b..3a574d0f9 100644 --- a/variants/senselora_rp2040/platformio.ini +++ b/variants/rp2040/senselora_rp2040/platformio.ini @@ -5,9 +5,9 @@ board = rpipico upload_protocol = picotool # add our variants files to the include and src paths -build_flags = ${rp2040_base.build_flags} - -DSENSELORA_RP2040 - -Ivariants/senselora_rp2040 - -DDEBUG_RP2040_PORT=Serial +build_flags = ${rp2040_base.build_flags} + -D SENSELORA_RP2040 + -I variants/rp2040/senselora_rp2040 + -D DEBUG_RP2040_PORT=Serial lib_deps = ${rp2040_base.lib_deps} \ No newline at end of file diff --git a/variants/senselora_rp2040/variant.h b/variants/rp2040/senselora_rp2040/variant.h similarity index 92% rename from variants/senselora_rp2040/variant.h rename to variants/rp2040/senselora_rp2040/variant.h index 2f68cf034..cc90284b7 100644 --- a/variants/senselora_rp2040/variant.h +++ b/variants/rp2040/senselora_rp2040/variant.h @@ -6,6 +6,7 @@ #define BUTTON_NEED_PULLUP #define LED_PIN PIN_LED +#define ledOff(pin) pinMode(pin, INPUT) #undef BATTERY_PIN #define BATTERY_SENSE_RESOLUTION_BITS ADC_RESOLUTION diff --git a/variants/rpipico2/platformio.ini b/variants/rp2350/rpipico2/platformio.ini similarity index 54% rename from variants/rpipico2/platformio.ini rename to variants/rp2350/rpipico2/platformio.ini index 066809a91..485523eb0 100644 --- a/variants/rpipico2/platformio.ini +++ b/variants/rp2350/rpipico2/platformio.ini @@ -4,12 +4,13 @@ board = rpipico2 upload_protocol = picotool # add our variants files to the include and src paths -build_flags = ${rp2350_base.build_flags} - -DRPI_PICO2 - -Ivariants/rpipico2 - -DDEBUG_RP2040_PORT=Serial - -DHW_SPI1_DEVICE +build_flags = + ${rp2350_base.build_flags} + -D RPI_PICO2 + -I variants/rp2350/rpipico2 + -D DEBUG_RP2040_PORT=Serial + -D HW_SPI1_DEVICE lib_deps = ${rp2350_base.lib_deps} debug_build_flags = ${rp2350_base.build_flags}, -g -debug_tool = cmsis-dap ; for e.g. Picotool \ No newline at end of file +debug_tool = cmsis-dap ; for e.g. Picotool diff --git a/variants/rpipico2/variant.h b/variants/rp2350/rpipico2/variant.h similarity index 100% rename from variants/rpipico2/variant.h rename to variants/rp2350/rpipico2/variant.h diff --git a/variants/rpipico2w/platformio.ini b/variants/rp2350/rpipico2w/platformio.ini similarity index 91% rename from variants/rpipico2w/platformio.ini rename to variants/rp2350/rpipico2w/platformio.ini index 0fac1e9ce..3e5f2dbdd 100644 --- a/variants/rpipico2w/platformio.ini +++ b/variants/rp2350/rpipico2w/platformio.ini @@ -13,9 +13,10 @@ debug_init_cmds = monitor reset halt # add our variants files to the include and src paths -build_flags = ${rp2350_base.build_flags} +build_flags = + ${rp2350_base.build_flags} -DRPI_PICO2 - -Ivariants/rpipico2w + -Ivariants/rp2350/rpipico2w # -DDEBUG_RP2040_PORT=Serial -DHW_SPI1_DEVICE -DARDUINO_RASPBERRY_PI_PICO_2W diff --git a/variants/rpipico2w/variant.h b/variants/rp2350/rpipico2w/variant.h similarity index 100% rename from variants/rpipico2w/variant.h rename to variants/rp2350/rpipico2w/variant.h From 1c2a3c620fb233829460821c3a73f6c987e740d2 Mon Sep 17 00:00:00 2001 From: Austin Date: Sun, 20 Jul 2025 07:21:17 -0400 Subject: [PATCH 29/45] STM32: Migrate variants to new structure (#7389) --- variants/{ => stm32}/CDEBYTE_E77-MBL/platformio.ini | 2 +- variants/{ => stm32}/CDEBYTE_E77-MBL/variant.h | 0 variants/{ => stm32}/rak3172/platformio.ini | 2 +- variants/{ => stm32}/rak3172/variant.h | 0 variants/{ => stm32}/wio-e5/platformio.ini | 2 +- variants/{ => stm32}/wio-e5/variant.h | 0 6 files changed, 3 insertions(+), 3 deletions(-) rename variants/{ => stm32}/CDEBYTE_E77-MBL/platformio.ini (92%) rename variants/{ => stm32}/CDEBYTE_E77-MBL/variant.h (100%) rename variants/{ => stm32}/rak3172/platformio.ini (93%) rename variants/{ => stm32}/rak3172/variant.h (100%) rename variants/{ => stm32}/wio-e5/platformio.ini (95%) rename variants/{ => stm32}/wio-e5/variant.h (100%) diff --git a/variants/CDEBYTE_E77-MBL/platformio.ini b/variants/stm32/CDEBYTE_E77-MBL/platformio.ini similarity index 92% rename from variants/CDEBYTE_E77-MBL/platformio.ini rename to variants/stm32/CDEBYTE_E77-MBL/platformio.ini index 5c373875c..c011f62c9 100644 --- a/variants/CDEBYTE_E77-MBL/platformio.ini +++ b/variants/stm32/CDEBYTE_E77-MBL/platformio.ini @@ -5,7 +5,7 @@ board_upload.maximum_size = 233472 ; reserve the last 28KB for filesystem board_level = extra build_flags = ${stm32_base.build_flags} - -Ivariants/CDEBYTE_E77-MBL + -Ivariants/stm32/CDEBYTE_E77-MBL -DSERIAL_UART_INSTANCE=1 -DPIN_SERIAL_RX=PA3 -DPIN_SERIAL_TX=PA2 diff --git a/variants/CDEBYTE_E77-MBL/variant.h b/variants/stm32/CDEBYTE_E77-MBL/variant.h similarity index 100% rename from variants/CDEBYTE_E77-MBL/variant.h rename to variants/stm32/CDEBYTE_E77-MBL/variant.h diff --git a/variants/rak3172/platformio.ini b/variants/stm32/rak3172/platformio.ini similarity index 93% rename from variants/rak3172/platformio.ini rename to variants/stm32/rak3172/platformio.ini index df2500f31..9799fc879 100644 --- a/variants/rak3172/platformio.ini +++ b/variants/stm32/rak3172/platformio.ini @@ -4,7 +4,7 @@ board = wiscore_rak3172 board_upload.maximum_size = 233472 ; reserve the last 28KB for filesystem build_flags = ${stm32_base.build_flags} - -Ivariants/rak3172 + -Ivariants/stm32/rak3172 -DPIN_WIRE_SDA=PA11 -DPIN_WIRE_SCL=PA12 -DMESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR=1 diff --git a/variants/rak3172/variant.h b/variants/stm32/rak3172/variant.h similarity index 100% rename from variants/rak3172/variant.h rename to variants/stm32/rak3172/variant.h diff --git a/variants/wio-e5/platformio.ini b/variants/stm32/wio-e5/platformio.ini similarity index 95% rename from variants/wio-e5/platformio.ini rename to variants/stm32/wio-e5/platformio.ini index 5c9f433d4..c057946dd 100644 --- a/variants/wio-e5/platformio.ini +++ b/variants/stm32/wio-e5/platformio.ini @@ -4,7 +4,7 @@ board = lora_e5_dev_board board_upload.maximum_size = 233472 ; reserve the last 28KB for filesystem build_flags = ${stm32_base.build_flags} - -Ivariants/wio-e5 + -Ivariants/stm32/wio-e5 -DSERIAL_UART_INSTANCE=1 -DPIN_SERIAL_RX=PB7 -DPIN_SERIAL_TX=PB6 diff --git a/variants/wio-e5/variant.h b/variants/stm32/wio-e5/variant.h similarity index 100% rename from variants/wio-e5/variant.h rename to variants/stm32/wio-e5/variant.h From a9c9b96eb6003818d60f9845c19a84257c220cee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Sun, 20 Jul 2025 13:22:00 +0200 Subject: [PATCH 30/45] UDP for RAK4631 Eth Gw and the t-eth-elite. Solves #7149 (#7385) * UDP for RAK4631 Eth Gw and the t-eth-elite. Also enable IP output on Portduino. Solves #7149 * Copilot suggestion Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix portduino build * initialize local port --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Ben Meadors --- arch/portduino/portduino.ini | 2 +- src/mesh/eth/ethClient.cpp | 3 ++ src/mesh/eth/ethClient.h | 1 - src/mesh/udp/UdpMulticastHandler.h | 26 +++++++--- src/platform/nrf52/AsyncUDP.cpp | 69 ++++++++++++++++++++++++++ src/platform/nrf52/AsyncUDP.h | 57 +++++++++++++++++++++ variants/rak4631_eth_gw/platformio.ini | 1 + variants/t-eth-elite/platformio.ini | 1 + 8 files changed, 151 insertions(+), 9 deletions(-) create mode 100644 src/platform/nrf52/AsyncUDP.cpp create mode 100644 src/platform/nrf52/AsyncUDP.h diff --git a/arch/portduino/portduino.ini b/arch/portduino/portduino.ini index 03a8a6583..693ab63b7 100644 --- a/arch/portduino/portduino.ini +++ b/arch/portduino/portduino.ini @@ -39,7 +39,7 @@ build_flags = -Isrc/platform/portduino -DRADIOLIB_EEPROM_UNSUPPORTED -DPORTDUINO_LINUX_HARDWARE - -DHAS_UDP_MULTICAST + -DHAS_UDP_MULTICAST=1 -lpthread -lstdc++fs -lbluetooth diff --git a/src/mesh/eth/ethClient.cpp b/src/mesh/eth/ethClient.cpp index 9c92a6c27..fdcc0f4f7 100644 --- a/src/mesh/eth/ethClient.cpp +++ b/src/mesh/eth/ethClient.cpp @@ -68,6 +68,9 @@ static int32_t reconnectETH() initApiServer(); } #endif + if (udpHandler && config.network.enabled_protocols & meshtastic_Config_NetworkConfig_ProtocolFlags_UDP_BROADCAST) { + udpHandler->start(); + } ethStartupComplete = true; } diff --git a/src/mesh/eth/ethClient.h b/src/mesh/eth/ethClient.h index 9e1745b9f..3adf481d2 100644 --- a/src/mesh/eth/ethClient.h +++ b/src/mesh/eth/ethClient.h @@ -2,7 +2,6 @@ #include "configuration.h" #include -#include bool initEthernet(); bool isEthernetAvailable(); diff --git a/src/mesh/udp/UdpMulticastHandler.h b/src/mesh/udp/UdpMulticastHandler.h index d1cc1065c..d4e0eaa8c 100644 --- a/src/mesh/udp/UdpMulticastHandler.h +++ b/src/mesh/udp/UdpMulticastHandler.h @@ -4,8 +4,13 @@ #include "main.h" #include "mesh/Router.h" -#include +#if HAS_ETHERNET && defined(ARCH_NRF52) +#include "mesh/eth/ethClient.h" +#else #include +#endif + +#include #if HAS_ETHERNET && defined(USE_WS5500) #include @@ -22,11 +27,11 @@ class UdpMulticastHandler final void start() { if (udp.listenMulticast(udpIpAddress, UDP_MULTICAST_DEFAUL_PORT, 64)) { -#ifndef ARCH_PORTDUINO - // FIXME(PORTDUINO): arduino lacks IPAddress::toString() - LOG_DEBUG("UDP Listening on IP: %s", WiFi.localIP().toString().c_str()); +#if defined(ARCH_NRF52) || defined(ARCH_PORTDUINO) + LOG_DEBUG("UDP Listening on IP: %u.%u.%u.%u:%u", udpIpAddress[0], udpIpAddress[1], udpIpAddress[2], udpIpAddress[3], + UDP_MULTICAST_DEFAUL_PORT); #else - LOG_DEBUG("UDP Listening"); + LOG_DEBUG("UDP Listening on IP: %s", WiFi.localIP().toString().c_str()); #endif udp.onPacket([this](AsyncUDPPacket packet) { onReceive(packet); }); } else { @@ -37,7 +42,10 @@ class UdpMulticastHandler final void onReceive(AsyncUDPPacket packet) { size_t packetLength = packet.length(); -#ifndef ARCH_PORTDUINO +#if defined(ARCH_NRF52) + IPAddress ip = packet.remoteIP(); + LOG_DEBUG("UDP broadcast from: %u.%u.%u.%u, len=%u", ip[0], ip[1], ip[2], ip[3], packetLength); +#elif !defined(ARCH_PORTDUINO) // FIXME(PORTDUINO): arduino lacks IPAddress::toString() LOG_DEBUG("UDP broadcast from: %s, len=%u", packet.remoteIP().toString().c_str(), packetLength); #endif @@ -61,7 +69,11 @@ class UdpMulticastHandler final if (!mp || !udp) { return false; } -#ifndef ARCH_PORTDUINO +#if defined(ARCH_NRF52) + if (!isEthernetAvailable()) { + return false; + } +#elif !defined(ARCH_PORTDUINO) if (WiFi.status() != WL_CONNECTED) { return false; } diff --git a/src/platform/nrf52/AsyncUDP.cpp b/src/platform/nrf52/AsyncUDP.cpp new file mode 100644 index 000000000..956105cdf --- /dev/null +++ b/src/platform/nrf52/AsyncUDP.cpp @@ -0,0 +1,69 @@ +#include "AsyncUDP.h" + +AsyncUDP::AsyncUDP() : OSThread("AsyncUDP"), localPort(0) {} + +bool AsyncUDP::listenMulticast(IPAddress multicastIP, uint16_t port, uint8_t ttl) +{ + if (!isMulticast(multicastIP)) + return false; + localPort = port; + udp.beginMulticast(multicastIP, port); + return true; +} + +size_t AsyncUDP::write(uint8_t b) +{ + return udp.write(&b, 1); +} + +size_t AsyncUDP::write(const uint8_t *data, size_t len) +{ + return udp.write(data, len); +} + +void AsyncUDP::onPacket(const std::function &callback) +{ + _onPacket = callback; +} + +bool AsyncUDP::writeTo(const uint8_t *data, size_t len, IPAddress ip, uint16_t port) +{ + if (!udp.beginPacket(ip, port)) + return false; + udp.write(data, len); + return udp.endPacket(); +} + +// AsyncUDPPacket +AsyncUDPPacket::AsyncUDPPacket(EthernetUDP &source) : _udp(source), _remoteIP(source.remoteIP()), _remotePort(source.remotePort()) +{ + if (_udp.available() > 0) { + _readLength = _udp.read(_buffer, sizeof(_buffer)); + } else { + _readLength = 0; + } +} + +IPAddress AsyncUDPPacket::remoteIP() +{ + return _remoteIP; +} + +uint16_t AsyncUDPPacket::length() +{ + return _readLength; +} + +const uint8_t *AsyncUDPPacket::data() +{ + return _buffer; +} + +int32_t AsyncUDP::runOnce() +{ + if (_onPacket && udp.parsePacket() > 0) { + AsyncUDPPacket packet(udp); + _onPacket(packet); + } + return 5; // check every 5ms +} diff --git a/src/platform/nrf52/AsyncUDP.h b/src/platform/nrf52/AsyncUDP.h new file mode 100644 index 000000000..c7df6d9dd --- /dev/null +++ b/src/platform/nrf52/AsyncUDP.h @@ -0,0 +1,57 @@ +#ifndef ASYNC_UDP_H +#define ASYNC_UDP_H + +#include "concurrency/OSThread.h" +#include +#include +#include +#include +#include + +class AsyncUDPPacket; + +class AsyncUDP : public Print, private concurrency::OSThread +{ + public: + AsyncUDP(); + explicit operator bool() const { return localPort != 0; } + + bool listenMulticast(IPAddress multicastIP, uint16_t port, uint8_t ttl = 64); + bool writeTo(const uint8_t *data, size_t len, IPAddress ip, uint16_t port); + + size_t write(uint8_t b) override; + size_t write(const uint8_t *data, size_t len) override; + void onPacket(const std::function &callback); + + private: + EthernetUDP udp; + uint16_t localPort; + std::function _onPacket; + virtual int32_t runOnce() override; +}; + +class AsyncUDPPacket +{ + public: + AsyncUDPPacket(EthernetUDP &source); + + IPAddress remoteIP(); + uint16_t length(); + const uint8_t *data(); + + private: + EthernetUDP &_udp; + IPAddress _remoteIP; + uint16_t _remotePort; + size_t _readLength = 0; + + static constexpr size_t BUF_SIZE = 512; + uint8_t _buffer[BUF_SIZE]; +}; + +inline bool isMulticast(const IPAddress &ip) +{ + return (ip[0] & 0xF0) == 0xE0; +} + +#endif // ASYNC_UDP_H diff --git a/variants/rak4631_eth_gw/platformio.ini b/variants/rak4631_eth_gw/platformio.ini index 492ca374b..7e7b0e019 100644 --- a/variants/rak4631_eth_gw/platformio.ini +++ b/variants/rak4631_eth_gw/platformio.ini @@ -5,6 +5,7 @@ board = wiscore_rak4631 board_check = true build_flags = ${nrf52840_base.build_flags} -Ivariants/rak4631_eth_gw -D RAK_4631 -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. + -DHAS_UDP_MULTICAST=1 -DEINK_DISPLAY_MODEL=GxEPD2_213_BN -DEINK_WIDTH=250 -DEINK_HEIGHT=122 diff --git a/variants/t-eth-elite/platformio.ini b/variants/t-eth-elite/platformio.ini index d6f415f3d..c2f183dd5 100644 --- a/variants/t-eth-elite/platformio.ini +++ b/variants/t-eth-elite/platformio.ini @@ -6,6 +6,7 @@ board_build.partitions = default_16MB.csv build_flags = ${esp32s3_base.build_flags} -D T_ETH_ELITE + -D HAS_UDP_MULTICAST=1 -I variants/t-eth-elite -D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. From bc9023399d348fd50e7f1fe778c915218d176ea2 Mon Sep 17 00:00:00 2001 From: Jason P Date: Sun, 20 Jul 2025 13:43:54 -0500 Subject: [PATCH 31/45] Restore High Resolution Hour Hand (#7392) * Restore High Resolution Hour Hand * Drop the int16_t --- src/graphics/draw/ClockRenderer.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/graphics/draw/ClockRenderer.cpp b/src/graphics/draw/ClockRenderer.cpp index cc0b6f70b..08466662c 100644 --- a/src/graphics/draw/ClockRenderer.cpp +++ b/src/graphics/draw/ClockRenderer.cpp @@ -365,6 +365,9 @@ void drawAnalogClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16 // hour hand radius and y coordinate int16_t hourHandRadius = radius * 0.35; + if (isHighResolution) { + hourHandRadius = radius * 0.55; + } int16_t hourHandNoonY = centerY - hourHandRadius; display->setColor(OLEDDISPLAY_COLOR::WHITE); From 73347c25423e37eece49024194e9e69430a35e2a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 20 Jul 2025 15:03:56 -0500 Subject: [PATCH 32/45] Update protobufs (#7395) Co-authored-by: thebentern <9000580+thebentern@users.noreply.github.com> --- protobufs | 2 +- src/mesh/generated/meshtastic/config.pb.h | 3 +- src/mesh/generated/meshtastic/mesh.pb.h | 9 ++++-- src/mesh/generated/meshtastic/telemetry.pb.h | 33 +++++++++++++++----- 4 files changed, 35 insertions(+), 12 deletions(-) diff --git a/protobufs b/protobufs index f6448be77..15c1fbde8 160000 --- a/protobufs +++ b/protobufs @@ -1 +1 @@ -Subproject commit f6448be7770a3521bf52407ff8f5fa5b9b06da7b +Subproject commit 15c1fbde882de953dec279160fa984d0e00569d0 diff --git a/src/mesh/generated/meshtastic/config.pb.h b/src/mesh/generated/meshtastic/config.pb.h index 20bce5b78..bd43472b5 100644 --- a/src/mesh/generated/meshtastic/config.pb.h +++ b/src/mesh/generated/meshtastic/config.pb.h @@ -480,7 +480,8 @@ typedef struct _meshtastic_Config_DisplayConfig { /* Number of seconds the screen stays on after pressing the user button or receiving a message 0 for default of one minute MAXUINT for always on */ uint32_t screen_on_secs; - /* How the GPS coordinates are formatted on the OLED screen. */ + /* Deprecated in 2.7.4: Unused + How the GPS coordinates are formatted on the OLED screen. */ meshtastic_Config_DisplayConfig_GpsCoordinateFormat gps_format; /* Automatically toggles to the next page on the screen like a carousel, based the specified interval in seconds. Potentially useful for devices without user buttons. */ diff --git a/src/mesh/generated/meshtastic/mesh.pb.h b/src/mesh/generated/meshtastic/mesh.pb.h index 584c3d647..d1a38b565 100644 --- a/src/mesh/generated/meshtastic/mesh.pb.h +++ b/src/mesh/generated/meshtastic/mesh.pb.h @@ -426,7 +426,10 @@ typedef enum _meshtastic_Routing_Error { /* Admin packet otherwise checks out, but uses a bogus or expired session key */ meshtastic_Routing_Error_ADMIN_BAD_SESSION_KEY = 36, /* Admin packet sent using PKC, but not from a public key on the admin key list */ - meshtastic_Routing_Error_ADMIN_PUBLIC_KEY_UNAUTHORIZED = 37 + meshtastic_Routing_Error_ADMIN_PUBLIC_KEY_UNAUTHORIZED = 37, + /* Airtime fairness rate limit exceeded for a packet + This typically enforced per portnum and is used to prevent a single node from monopolizing airtime */ + meshtastic_Routing_Error_RATE_LIMIT_EXCEEDED = 38 } meshtastic_Routing_Error; /* The priority of this message for sending. @@ -1222,8 +1225,8 @@ extern "C" { #define _meshtastic_Position_AltSource_ARRAYSIZE ((meshtastic_Position_AltSource)(meshtastic_Position_AltSource_ALT_BAROMETRIC+1)) #define _meshtastic_Routing_Error_MIN meshtastic_Routing_Error_NONE -#define _meshtastic_Routing_Error_MAX meshtastic_Routing_Error_ADMIN_PUBLIC_KEY_UNAUTHORIZED -#define _meshtastic_Routing_Error_ARRAYSIZE ((meshtastic_Routing_Error)(meshtastic_Routing_Error_ADMIN_PUBLIC_KEY_UNAUTHORIZED+1)) +#define _meshtastic_Routing_Error_MAX meshtastic_Routing_Error_RATE_LIMIT_EXCEEDED +#define _meshtastic_Routing_Error_ARRAYSIZE ((meshtastic_Routing_Error)(meshtastic_Routing_Error_RATE_LIMIT_EXCEEDED+1)) #define _meshtastic_MeshPacket_Priority_MIN meshtastic_MeshPacket_Priority_UNSET #define _meshtastic_MeshPacket_Priority_MAX meshtastic_MeshPacket_Priority_MAX diff --git a/src/mesh/generated/meshtastic/telemetry.pb.h b/src/mesh/generated/meshtastic/telemetry.pb.h index 072a99a24..cb47b9fda 100644 --- a/src/mesh/generated/meshtastic/telemetry.pb.h +++ b/src/mesh/generated/meshtastic/telemetry.pb.h @@ -93,7 +93,11 @@ typedef enum _meshtastic_TelemetrySensorType { /* PCT2075 Temperature Sensor */ meshtastic_TelemetrySensorType_PCT2075 = 39, /* ADS1X15 ADC */ - meshtastic_TelemetrySensorType_ADS1X15 = 40 + meshtastic_TelemetrySensorType_ADS1X15 = 40, + /* ADS1X15 ADC_ALT */ + meshtastic_TelemetrySensorType_ADS1X15_ALT = 41, + /* Sensirion SFA30 Formaldehyde sensor */ + meshtastic_TelemetrySensorType_SFA30 = 42 } meshtastic_TelemetrySensorType; /* Struct definitions */ @@ -287,6 +291,15 @@ typedef struct _meshtastic_AirQualityMetrics { /* CO2 sensor relative humidity in % */ bool has_co2_humidity; float co2_humidity; + /* Formaldehyde sensor formaldehyde concentration in ppb */ + bool has_form_formaldehyde; + float form_formaldehyde; + /* Formaldehyde sensor relative humidity in %RH */ + bool has_form_humidity; + float form_humidity; + /* Formaldehyde sensor temperature in degrees Celsius */ + bool has_form_temperature; + float form_temperature; } meshtastic_AirQualityMetrics; /* Local device mesh statistics */ @@ -398,8 +411,8 @@ extern "C" { /* Helper constants for enums */ #define _meshtastic_TelemetrySensorType_MIN meshtastic_TelemetrySensorType_SENSOR_UNSET -#define _meshtastic_TelemetrySensorType_MAX meshtastic_TelemetrySensorType_ADS1X15 -#define _meshtastic_TelemetrySensorType_ARRAYSIZE ((meshtastic_TelemetrySensorType)(meshtastic_TelemetrySensorType_ADS1X15+1)) +#define _meshtastic_TelemetrySensorType_MAX meshtastic_TelemetrySensorType_SFA30 +#define _meshtastic_TelemetrySensorType_ARRAYSIZE ((meshtastic_TelemetrySensorType)(meshtastic_TelemetrySensorType_SFA30+1)) @@ -415,7 +428,7 @@ extern "C" { #define meshtastic_DeviceMetrics_init_default {false, 0, false, 0, false, 0, false, 0, false, 0} #define meshtastic_EnvironmentMetrics_init_default {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} #define meshtastic_PowerMetrics_init_default {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} -#define meshtastic_AirQualityMetrics_init_default {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} +#define meshtastic_AirQualityMetrics_init_default {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} #define meshtastic_LocalStats_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} #define meshtastic_HealthMetrics_init_default {false, 0, false, 0, false, 0} #define meshtastic_HostMetrics_init_default {0, 0, 0, false, 0, false, 0, 0, 0, 0, false, ""} @@ -424,7 +437,7 @@ extern "C" { #define meshtastic_DeviceMetrics_init_zero {false, 0, false, 0, false, 0, false, 0, false, 0} #define meshtastic_EnvironmentMetrics_init_zero {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} #define meshtastic_PowerMetrics_init_zero {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} -#define meshtastic_AirQualityMetrics_init_zero {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} +#define meshtastic_AirQualityMetrics_init_zero {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} #define meshtastic_LocalStats_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} #define meshtastic_HealthMetrics_init_zero {false, 0, false, 0, false, 0} #define meshtastic_HostMetrics_init_zero {0, 0, 0, false, 0, false, 0, 0, 0, 0, false, ""} @@ -490,6 +503,9 @@ extern "C" { #define meshtastic_AirQualityMetrics_co2_tag 13 #define meshtastic_AirQualityMetrics_co2_temperature_tag 14 #define meshtastic_AirQualityMetrics_co2_humidity_tag 15 +#define meshtastic_AirQualityMetrics_form_formaldehyde_tag 16 +#define meshtastic_AirQualityMetrics_form_humidity_tag 17 +#define meshtastic_AirQualityMetrics_form_temperature_tag 18 #define meshtastic_LocalStats_uptime_seconds_tag 1 #define meshtastic_LocalStats_channel_utilization_tag 2 #define meshtastic_LocalStats_air_util_tx_tag 3 @@ -597,7 +613,10 @@ X(a, STATIC, OPTIONAL, UINT32, particles_50um, 11) \ X(a, STATIC, OPTIONAL, UINT32, particles_100um, 12) \ X(a, STATIC, OPTIONAL, UINT32, co2, 13) \ X(a, STATIC, OPTIONAL, FLOAT, co2_temperature, 14) \ -X(a, STATIC, OPTIONAL, FLOAT, co2_humidity, 15) +X(a, STATIC, OPTIONAL, FLOAT, co2_humidity, 15) \ +X(a, STATIC, OPTIONAL, FLOAT, form_formaldehyde, 16) \ +X(a, STATIC, OPTIONAL, FLOAT, form_humidity, 17) \ +X(a, STATIC, OPTIONAL, FLOAT, form_temperature, 18) #define meshtastic_AirQualityMetrics_CALLBACK NULL #define meshtastic_AirQualityMetrics_DEFAULT NULL @@ -686,7 +705,7 @@ extern const pb_msgdesc_t meshtastic_Nau7802Config_msg; /* Maximum encoded size of messages (where known) */ #define MESHTASTIC_MESHTASTIC_TELEMETRY_PB_H_MAX_SIZE meshtastic_Telemetry_size -#define meshtastic_AirQualityMetrics_size 88 +#define meshtastic_AirQualityMetrics_size 106 #define meshtastic_DeviceMetrics_size 27 #define meshtastic_EnvironmentMetrics_size 113 #define meshtastic_HealthMetrics_size 11 From b851b15a73979917656fdc96a57742f1ce4847aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Sun, 20 Jul 2025 23:13:50 +0200 Subject: [PATCH 33/45] fix UDP builds on nRF (#7394) * fix UDP builds on nRF * fix rp2040 too --- src/mesh/eth/ethClient.cpp | 2 ++ src/platform/nrf52/AsyncUDP.cpp | 4 ++++ src/platform/nrf52/AsyncUDP.h | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/src/mesh/eth/ethClient.cpp b/src/mesh/eth/ethClient.cpp index fdcc0f4f7..2b4f63512 100644 --- a/src/mesh/eth/ethClient.cpp +++ b/src/mesh/eth/ethClient.cpp @@ -68,9 +68,11 @@ static int32_t reconnectETH() initApiServer(); } #endif +#if HAS_UDP_MULTICAST if (udpHandler && config.network.enabled_protocols & meshtastic_Config_NetworkConfig_ProtocolFlags_UDP_BROADCAST) { udpHandler->start(); } +#endif ethStartupComplete = true; } diff --git a/src/platform/nrf52/AsyncUDP.cpp b/src/platform/nrf52/AsyncUDP.cpp index 956105cdf..836fb1307 100644 --- a/src/platform/nrf52/AsyncUDP.cpp +++ b/src/platform/nrf52/AsyncUDP.cpp @@ -1,5 +1,7 @@ #include "AsyncUDP.h" +#if HAS_ETHERNET + AsyncUDP::AsyncUDP() : OSThread("AsyncUDP"), localPort(0) {} bool AsyncUDP::listenMulticast(IPAddress multicastIP, uint16_t port, uint8_t ttl) @@ -67,3 +69,5 @@ int32_t AsyncUDP::runOnce() } return 5; // check every 5ms } + +#endif // HAS_ETHERNET \ No newline at end of file diff --git a/src/platform/nrf52/AsyncUDP.h b/src/platform/nrf52/AsyncUDP.h index c7df6d9dd..e2b406ba9 100644 --- a/src/platform/nrf52/AsyncUDP.h +++ b/src/platform/nrf52/AsyncUDP.h @@ -1,6 +1,10 @@ #ifndef ASYNC_UDP_H #define ASYNC_UDP_H +#include "configuration.h" + +#if HAS_ETHERNET + #include "concurrency/OSThread.h" #include #include @@ -54,4 +58,6 @@ inline bool isMulticast(const IPAddress &ip) return (ip[0] & 0xF0) == 0xE0; } +#endif // HAS_ETHERNET + #endif // ASYNC_UDP_H From 475cfe4af2817a54f2a3c9ac913bb35cc9574733 Mon Sep 17 00:00:00 2001 From: Austin Date: Sun, 20 Jul 2025 17:47:37 -0400 Subject: [PATCH 34/45] ESP32s3: Migrate variants to new structure (#7343) --- variants/diy/platformio.ini | 19 ------------------- .../CDEBYTE_EoRa-S3/pins_arduino.h | 0 .../CDEBYTE_EoRa-S3/platformio.ini | 4 ++-- .../{ => esp32s3}/CDEBYTE_EoRa-S3/variant.h | 0 .../EBYTE_ESP32-S3/pins_arduino.h | 0 .../EBYTE_ESP32-S3/platformio.ini | 2 +- .../{ => esp32s3}/EBYTE_ESP32-S3/variant.h | 0 .../ELECROW-ThinkNode-M2/pins_arduino.h | 0 .../ELECROW-ThinkNode-M2/platformio.ini | 2 +- .../ELECROW-ThinkNode-M2/variant.h | 0 .../bpi_picow_esp32_s3/pins_arduino.h | 0 .../bpi_picow_esp32_s3/platformio.ini | 4 +++- .../bpi_picow_esp32_s3/variant.h | 0 .../crowpanel-esp32s3-5-epaper/pins_arduino.h | 0 .../crowpanel-esp32s3-5-epaper/platformio.ini | 12 +++++++++--- .../crowpanel-esp32s3-5-epaper/variant.h | 0 .../diy}/my_esp32s3_diy_eink/pins_arduino.h | 0 .../diy}/my_esp32s3_diy_eink/platformio.ini | 9 ++++----- .../diy}/my_esp32s3_diy_eink/variant.h | 0 .../diy}/my_esp32s3_diy_oled/pins_arduino.h | 0 .../diy}/my_esp32s3_diy_oled/platformio.ini | 9 ++++----- .../diy}/my_esp32s3_diy_oled/variant.h | 0 .../diy/t-energy-s3_e22/platformio.ini | 18 ++++++++++++++++++ .../diy/t-energy-s3_e22/variant.h | 0 .../{ => esp32s3}/dreamcatcher/platformio.ini | 4 ++-- .../{ => esp32s3}/dreamcatcher/rfswitch.h | 0 variants/{ => esp32s3}/dreamcatcher/variant.h | 0 .../elecrow_panel/pins_arduino.h | 0 .../elecrow_panel/platformio.ini | 2 +- .../{ => esp32s3}/elecrow_panel/variant.h | 0 .../esp32-s3-pico/pins_arduino.h | 0 .../esp32-s3-pico/platformio.ini | 2 +- .../{ => esp32s3}/esp32-s3-pico/variant.h | 0 .../heltec_capsule_sensor_v3/platformio.ini | 4 ++-- .../heltec_capsule_sensor_v3/variant.h | 0 .../heltec_sensor_hub/platformio.ini | 3 ++- .../{ => esp32s3}/heltec_sensor_hub/variant.h | 0 .../{ => esp32s3}/heltec_v3/platformio.ini | 4 +++- variants/{ => esp32s3}/heltec_v3/variant.h | 0 .../heltec_vision_master_e213/einkDetect.h | 0 .../heltec_vision_master_e213/nicheGraphics.h | 0 .../heltec_vision_master_e213/pins_arduino.h | 0 .../heltec_vision_master_e213/platformio.ini | 6 +++--- .../heltec_vision_master_e213/variant.h | 0 .../heltec_vision_master_e290/nicheGraphics.h | 0 .../heltec_vision_master_e290/pins_arduino.h | 0 .../heltec_vision_master_e290/platformio.ini | 6 +++--- .../heltec_vision_master_e290/variant.h | 0 .../heltec_vision_master_t190/pins_arduino.h | 0 .../heltec_vision_master_t190/platformio.ini | 6 +++--- .../heltec_vision_master_t190/variant.h | 0 .../heltec_wireless_paper/einkDetect.h | 0 .../heltec_wireless_paper/nicheGraphics.h | 0 .../heltec_wireless_paper/pins_arduino.h | 0 .../heltec_wireless_paper/platformio.ini | 6 +++--- .../heltec_wireless_paper/variant.h | 0 .../heltec_wireless_paper_v1/pins_arduino.h | 0 .../heltec_wireless_paper_v1/platformio.ini | 4 ++-- .../heltec_wireless_paper_v1/variant.h | 0 .../heltec_wireless_tracker/pins_arduino.h | 0 .../heltec_wireless_tracker/platformio.ini | 3 ++- .../heltec_wireless_tracker/variant.h | 0 .../pins_arduino.h | 0 .../platformio.ini | 3 ++- .../heltec_wireless_tracker_V1_0/variant.h | 0 .../heltec_wsl_v3/platformio.ini | 4 +++- .../{ => esp32s3}/heltec_wsl_v3/variant.h | 0 variants/{ => esp32s3}/icarus/pins_arduino.h | 0 variants/{ => esp32s3}/icarus/platformio.ini | 6 ++++-- variants/{ => esp32s3}/icarus/variant.h | 0 .../{ => esp32s3}/link32_s3_v1/pins_arduino.h | 0 .../{ => esp32s3}/link32_s3_v1/platformio.ini | 4 +++- variants/{ => esp32s3}/link32_s3_v1/variant.h | 0 .../m5stack_cores3/pins_arduino.h | 0 .../m5stack_cores3/platformio.ini | 14 ++++++-------- .../{ => esp32s3}/m5stack_cores3/variant.h | 0 .../{ => esp32s3}/nibble_esp32/platformio.ini | 4 +++- variants/{ => esp32s3}/nibble_esp32/variant.h | 0 .../nugget_s3_lora/platformio.ini | 2 +- .../{ => esp32s3}/nugget_s3_lora/variant.h | 0 .../picomputer-s3/pins_arduino.h | 0 .../picomputer-s3/platformio.ini | 2 +- .../{ => esp32s3}/picomputer-s3/variant.h | 0 variants/{ => esp32s3}/rak3312/pins_arduino.h | 0 variants/{ => esp32s3}/rak3312/platformio.ini | 4 +++- variants/{ => esp32s3}/rak3312/variant.h | 0 .../seeed-sensecap-indicator/pins_arduino.h | 0 .../seeed-sensecap-indicator/platformio.ini | 2 +- .../seeed-sensecap-indicator/variant.h | 0 .../seeed_xiao_s3/pins_arduino.h | 0 .../seeed_xiao_s3/platformio.ini | 7 ++++--- .../{ => esp32s3}/seeed_xiao_s3/variant.h | 0 .../{ => esp32s3}/station-g2/pins_arduino.h | 0 .../{ => esp32s3}/station-g2/platformio.ini | 4 +++- variants/{ => esp32s3}/station-g2/variant.h | 0 variants/{ => esp32s3}/t-deck/pins_arduino.h | 0 variants/{ => esp32s3}/t-deck/platformio.ini | 9 ++++----- variants/{ => esp32s3}/t-deck/variant.h | 0 .../{ => esp32s3}/t-eth-elite/pins_arduino.h | 0 .../{ => esp32s3}/t-eth-elite/platformio.ini | 2 +- variants/{ => esp32s3}/t-eth-elite/rfswitch.h | 0 variants/{ => esp32s3}/t-eth-elite/variant.h | 0 .../{ => esp32s3}/t-watch-s3/pins_arduino.h | 0 .../{ => esp32s3}/t-watch-s3/platformio.ini | 2 +- variants/{ => esp32s3}/t-watch-s3/variant.h | 0 .../tbeam-s3-core/pins_arduino.h | 0 .../tbeam-s3-core/platformio.ini | 4 ++-- .../{ => esp32s3}/tbeam-s3-core/variant.h | 0 .../tlora_t3s3_epaper/nicheGraphics.h | 0 .../tlora_t3s3_epaper/pins_arduino.h | 0 .../tlora_t3s3_epaper/platformio.ini | 8 +++++--- .../{ => esp32s3}/tlora_t3s3_epaper/variant.h | 0 .../tlora_t3s3_v1/pins_arduino.h | 0 .../tlora_t3s3_v1/platformio.ini | 4 ++-- .../{ => esp32s3}/tlora_t3s3_v1/rfswitch.h | 0 .../{ => esp32s3}/tlora_t3s3_v1/variant.h | 0 .../tracksenger/internal/pins_arduino.h | 0 .../tracksenger/internal/variant.h | 0 .../tracksenger/lcd/pins_arduino.h | 0 .../{ => esp32s3}/tracksenger/lcd/variant.h | 0 .../tracksenger/oled/pins_arduino.h | 0 .../{ => esp32s3}/tracksenger/oled/variant.h | 0 .../{ => esp32s3}/tracksenger/platformio.ini | 9 ++++++--- variants/{ => esp32s3}/unphone/pins_arduino.h | 0 variants/{ => esp32s3}/unphone/platformio.ini | 4 ++-- variants/{ => esp32s3}/unphone/variant.cpp | 0 variants/{ => esp32s3}/unphone/variant.h | 0 127 files changed, 126 insertions(+), 101 deletions(-) rename variants/{ => esp32s3}/CDEBYTE_EoRa-S3/pins_arduino.h (100%) rename variants/{ => esp32s3}/CDEBYTE_EoRa-S3/platformio.ini (69%) rename variants/{ => esp32s3}/CDEBYTE_EoRa-S3/variant.h (100%) rename variants/{ => esp32s3}/EBYTE_ESP32-S3/pins_arduino.h (100%) rename variants/{ => esp32s3}/EBYTE_ESP32-S3/platformio.ini (86%) rename variants/{ => esp32s3}/EBYTE_ESP32-S3/variant.h (100%) rename variants/{ => esp32s3}/ELECROW-ThinkNode-M2/pins_arduino.h (100%) rename variants/{ => esp32s3}/ELECROW-ThinkNode-M2/platformio.ini (76%) rename variants/{ => esp32s3}/ELECROW-ThinkNode-M2/variant.h (100%) rename variants/{ => esp32s3}/bpi_picow_esp32_s3/pins_arduino.h (100%) rename variants/{ => esp32s3}/bpi_picow_esp32_s3/platformio.ini (77%) rename variants/{ => esp32s3}/bpi_picow_esp32_s3/variant.h (100%) rename variants/{ => esp32s3}/crowpanel-esp32s3-5-epaper/pins_arduino.h (100%) rename variants/{ => esp32s3}/crowpanel-esp32s3-5-epaper/platformio.ini (89%) rename variants/{ => esp32s3}/crowpanel-esp32s3-5-epaper/variant.h (100%) rename variants/{ => esp32s3/diy}/my_esp32s3_diy_eink/pins_arduino.h (100%) rename variants/{ => esp32s3/diy}/my_esp32s3_diy_eink/platformio.ini (71%) rename variants/{ => esp32s3/diy}/my_esp32s3_diy_eink/variant.h (100%) rename variants/{ => esp32s3/diy}/my_esp32s3_diy_oled/pins_arduino.h (100%) rename variants/{ => esp32s3/diy}/my_esp32s3_diy_oled/platformio.ini (67%) rename variants/{ => esp32s3/diy}/my_esp32s3_diy_oled/variant.h (100%) create mode 100644 variants/esp32s3/diy/t-energy-s3_e22/platformio.ini rename variants/{ => esp32s3}/diy/t-energy-s3_e22/variant.h (100%) rename variants/{ => esp32s3}/dreamcatcher/platformio.ini (89%) rename variants/{ => esp32s3}/dreamcatcher/rfswitch.h (100%) rename variants/{ => esp32s3}/dreamcatcher/variant.h (100%) rename variants/{ => esp32s3}/elecrow_panel/pins_arduino.h (100%) rename variants/{ => esp32s3}/elecrow_panel/platformio.ini (99%) rename variants/{ => esp32s3}/elecrow_panel/variant.h (100%) rename variants/{ => esp32s3}/esp32-s3-pico/pins_arduino.h (100%) rename variants/{ => esp32s3}/esp32-s3-pico/platformio.ini (94%) rename variants/{ => esp32s3}/esp32-s3-pico/variant.h (100%) rename variants/{ => esp32s3}/heltec_capsule_sensor_v3/platformio.ini (82%) rename variants/{ => esp32s3}/heltec_capsule_sensor_v3/variant.h (100%) rename variants/{ => esp32s3}/heltec_sensor_hub/platformio.ini (75%) rename variants/{ => esp32s3}/heltec_sensor_hub/variant.h (100%) rename variants/{ => esp32s3}/heltec_v3/platformio.ini (77%) rename variants/{ => esp32s3}/heltec_v3/variant.h (100%) rename variants/{ => esp32s3}/heltec_vision_master_e213/einkDetect.h (100%) rename variants/{ => esp32s3}/heltec_vision_master_e213/nicheGraphics.h (100%) rename variants/{ => esp32s3}/heltec_vision_master_e213/pins_arduino.h (100%) rename variants/{ => esp32s3}/heltec_vision_master_e213/platformio.ini (91%) rename variants/{ => esp32s3}/heltec_vision_master_e213/variant.h (100%) rename variants/{ => esp32s3}/heltec_vision_master_e290/nicheGraphics.h (100%) rename variants/{ => esp32s3}/heltec_vision_master_e290/pins_arduino.h (100%) rename variants/{ => esp32s3}/heltec_vision_master_e290/platformio.ini (91%) rename variants/{ => esp32s3}/heltec_vision_master_e290/variant.h (100%) rename variants/{ => esp32s3}/heltec_vision_master_t190/pins_arduino.h (100%) rename variants/{ => esp32s3}/heltec_vision_master_t190/platformio.ini (77%) rename variants/{ => esp32s3}/heltec_vision_master_t190/variant.h (100%) rename variants/{ => esp32s3}/heltec_wireless_paper/einkDetect.h (100%) rename variants/{ => esp32s3}/heltec_wireless_paper/nicheGraphics.h (100%) rename variants/{ => esp32s3}/heltec_wireless_paper/pins_arduino.h (100%) rename variants/{ => esp32s3}/heltec_wireless_paper/platformio.ini (92%) rename variants/{ => esp32s3}/heltec_wireless_paper/variant.h (100%) rename variants/{ => esp32s3}/heltec_wireless_paper_v1/pins_arduino.h (100%) rename variants/{ => esp32s3}/heltec_wireless_paper_v1/platformio.ini (91%) rename variants/{ => esp32s3}/heltec_wireless_paper_v1/variant.h (100%) rename variants/{ => esp32s3}/heltec_wireless_tracker/pins_arduino.h (100%) rename variants/{ => esp32s3}/heltec_wireless_tracker/platformio.ini (85%) rename variants/{ => esp32s3}/heltec_wireless_tracker/variant.h (100%) rename variants/{ => esp32s3}/heltec_wireless_tracker_V1_0/pins_arduino.h (100%) rename variants/{ => esp32s3}/heltec_wireless_tracker_V1_0/platformio.ini (85%) rename variants/{ => esp32s3}/heltec_wireless_tracker_V1_0/variant.h (100%) rename variants/{ => esp32s3}/heltec_wsl_v3/platformio.ini (78%) rename variants/{ => esp32s3}/heltec_wsl_v3/variant.h (100%) rename variants/{ => esp32s3}/icarus/pins_arduino.h (100%) rename variants/{ => esp32s3}/icarus/platformio.ini (84%) rename variants/{ => esp32s3}/icarus/variant.h (100%) rename variants/{ => esp32s3}/link32_s3_v1/pins_arduino.h (100%) rename variants/{ => esp32s3}/link32_s3_v1/platformio.ini (81%) rename variants/{ => esp32s3}/link32_s3_v1/variant.h (100%) rename variants/{ => esp32s3}/m5stack_cores3/pins_arduino.h (100%) rename variants/{ => esp32s3}/m5stack_cores3/platformio.ini (53%) rename variants/{ => esp32s3}/m5stack_cores3/variant.h (100%) rename variants/{ => esp32s3}/nibble_esp32/platformio.ini (55%) rename variants/{ => esp32s3}/nibble_esp32/variant.h (100%) rename variants/{ => esp32s3}/nugget_s3_lora/platformio.ini (78%) rename variants/{ => esp32s3}/nugget_s3_lora/variant.h (100%) rename variants/{ => esp32s3}/picomputer-s3/pins_arduino.h (100%) rename variants/{ => esp32s3}/picomputer-s3/platformio.ini (97%) rename variants/{ => esp32s3}/picomputer-s3/variant.h (100%) rename variants/{ => esp32s3}/rak3312/pins_arduino.h (100%) rename variants/{ => esp32s3}/rak3312/platformio.ini (63%) rename variants/{ => esp32s3}/rak3312/variant.h (100%) rename variants/{ => esp32s3}/seeed-sensecap-indicator/pins_arduino.h (100%) rename variants/{ => esp32s3}/seeed-sensecap-indicator/platformio.ini (97%) rename variants/{ => esp32s3}/seeed-sensecap-indicator/variant.h (100%) rename variants/{ => esp32s3}/seeed_xiao_s3/pins_arduino.h (100%) rename variants/{ => esp32s3}/seeed_xiao_s3/platformio.ini (74%) rename variants/{ => esp32s3}/seeed_xiao_s3/variant.h (100%) rename variants/{ => esp32s3}/station-g2/pins_arduino.h (100%) rename variants/{ => esp32s3}/station-g2/platformio.ini (83%) rename variants/{ => esp32s3}/station-g2/variant.h (100%) rename variants/{ => esp32s3}/t-deck/pins_arduino.h (100%) rename variants/{ => esp32s3}/t-deck/platformio.ini (95%) rename variants/{ => esp32s3}/t-deck/variant.h (100%) rename variants/{ => esp32s3}/t-eth-elite/pins_arduino.h (100%) rename variants/{ => esp32s3}/t-eth-elite/platformio.ini (93%) rename variants/{ => esp32s3}/t-eth-elite/rfswitch.h (100%) rename variants/{ => esp32s3}/t-eth-elite/variant.h (100%) rename variants/{ => esp32s3}/t-watch-s3/pins_arduino.h (100%) rename variants/{ => esp32s3}/t-watch-s3/platformio.ini (93%) rename variants/{ => esp32s3}/t-watch-s3/variant.h (100%) rename variants/{ => esp32s3}/tbeam-s3-core/pins_arduino.h (100%) rename variants/{ => esp32s3}/tbeam-s3-core/platformio.ini (71%) rename variants/{ => esp32s3}/tbeam-s3-core/variant.h (100%) rename variants/{ => esp32s3}/tlora_t3s3_epaper/nicheGraphics.h (100%) rename variants/{ => esp32s3}/tlora_t3s3_epaper/pins_arduino.h (100%) rename variants/{ => esp32s3}/tlora_t3s3_epaper/platformio.ini (85%) rename variants/{ => esp32s3}/tlora_t3s3_epaper/variant.h (100%) rename variants/{ => esp32s3}/tlora_t3s3_v1/pins_arduino.h (100%) rename variants/{ => esp32s3}/tlora_t3s3_v1/platformio.ini (58%) rename variants/{ => esp32s3}/tlora_t3s3_v1/rfswitch.h (100%) rename variants/{ => esp32s3}/tlora_t3s3_v1/variant.h (100%) rename variants/{ => esp32s3}/tracksenger/internal/pins_arduino.h (100%) rename variants/{ => esp32s3}/tracksenger/internal/variant.h (100%) rename variants/{ => esp32s3}/tracksenger/lcd/pins_arduino.h (100%) rename variants/{ => esp32s3}/tracksenger/lcd/variant.h (100%) rename variants/{ => esp32s3}/tracksenger/oled/pins_arduino.h (100%) rename variants/{ => esp32s3}/tracksenger/oled/variant.h (100%) rename variants/{ => esp32s3}/tracksenger/platformio.ini (85%) rename variants/{ => esp32s3}/unphone/pins_arduino.h (100%) rename variants/{ => esp32s3}/unphone/platformio.ini (96%) rename variants/{ => esp32s3}/unphone/variant.cpp (100%) rename variants/{ => esp32s3}/unphone/variant.h (100%) diff --git a/variants/diy/platformio.ini b/variants/diy/platformio.ini index 87451dfce..6b3a2ed99 100644 --- a/variants/diy/platformio.ini +++ b/variants/diy/platformio.ini @@ -78,22 +78,3 @@ build_src_filter = ${nrf52_base.build_src_filter} +<../variants/diy/seeed-xiao-n lib_deps = ${nrf52840_base.lib_deps} debug_tool = jlink - -; NanoVHF T-Energy-S3 + E22(0)-xxxM - DIY -[env:t-energy-s3_e22] -extends = esp32s3_base -board = esp32-s3-devkitc-1 -board_build.partitions = default_16MB.csv -board_level = extra -board_upload.flash_size = 16MB ;Specify the FLASH capacity as 16MB -board_build.arduino.memory_type = qio_opi ;Enable internal PSRAM -build_unflags = - ${esp32s3_base.build_unflags} - -D ARDUINO_USB_MODE=1 -build_flags = - ${esp32s3_base.build_flags} - -D EBYTE_ESP32_S3 - -D BOARD_HAS_PSRAM - -D ARDUINO_USB_MODE=0 - -D ARDUINO_USB_CDC_ON_BOOT=1 - -I variants/diy/t-energy-s3_e22 diff --git a/variants/CDEBYTE_EoRa-S3/pins_arduino.h b/variants/esp32s3/CDEBYTE_EoRa-S3/pins_arduino.h similarity index 100% rename from variants/CDEBYTE_EoRa-S3/pins_arduino.h rename to variants/esp32s3/CDEBYTE_EoRa-S3/pins_arduino.h diff --git a/variants/CDEBYTE_EoRa-S3/platformio.ini b/variants/esp32s3/CDEBYTE_EoRa-S3/platformio.ini similarity index 69% rename from variants/CDEBYTE_EoRa-S3/platformio.ini rename to variants/esp32s3/CDEBYTE_EoRa-S3/platformio.ini index a1642ff97..dbd420f04 100644 --- a/variants/CDEBYTE_EoRa-S3/platformio.ini +++ b/variants/esp32s3/CDEBYTE_EoRa-S3/platformio.ini @@ -4,5 +4,5 @@ board = CDEBYTE_EoRa-S3 build_flags = ${esp32s3_base.build_flags} -D CDEBYTE_EORA_S3 - -I variants/CDEBYTE_EoRa-S3 - -D GPS_POWER_TOGGLE \ No newline at end of file + -I variants/esp32s3/CDEBYTE_EoRa-S3 + -D GPS_POWER_TOGGLE diff --git a/variants/CDEBYTE_EoRa-S3/variant.h b/variants/esp32s3/CDEBYTE_EoRa-S3/variant.h similarity index 100% rename from variants/CDEBYTE_EoRa-S3/variant.h rename to variants/esp32s3/CDEBYTE_EoRa-S3/variant.h diff --git a/variants/EBYTE_ESP32-S3/pins_arduino.h b/variants/esp32s3/EBYTE_ESP32-S3/pins_arduino.h similarity index 100% rename from variants/EBYTE_ESP32-S3/pins_arduino.h rename to variants/esp32s3/EBYTE_ESP32-S3/pins_arduino.h diff --git a/variants/EBYTE_ESP32-S3/platformio.ini b/variants/esp32s3/EBYTE_ESP32-S3/platformio.ini similarity index 86% rename from variants/EBYTE_ESP32-S3/platformio.ini rename to variants/esp32s3/EBYTE_ESP32-S3/platformio.ini index 10de91386..507a19588 100644 --- a/variants/EBYTE_ESP32-S3/platformio.ini +++ b/variants/esp32s3/EBYTE_ESP32-S3/platformio.ini @@ -6,4 +6,4 @@ board_level = extra build_flags = ${esp32s3_base.build_flags} -D EBYTE_ESP32_S3 - -I variants/EBYTE_ESP32-S3 + -I variants/esp32s3/EBYTE_ESP32-S3 diff --git a/variants/EBYTE_ESP32-S3/variant.h b/variants/esp32s3/EBYTE_ESP32-S3/variant.h similarity index 100% rename from variants/EBYTE_ESP32-S3/variant.h rename to variants/esp32s3/EBYTE_ESP32-S3/variant.h diff --git a/variants/ELECROW-ThinkNode-M2/pins_arduino.h b/variants/esp32s3/ELECROW-ThinkNode-M2/pins_arduino.h similarity index 100% rename from variants/ELECROW-ThinkNode-M2/pins_arduino.h rename to variants/esp32s3/ELECROW-ThinkNode-M2/pins_arduino.h diff --git a/variants/ELECROW-ThinkNode-M2/platformio.ini b/variants/esp32s3/ELECROW-ThinkNode-M2/platformio.ini similarity index 76% rename from variants/ELECROW-ThinkNode-M2/platformio.ini rename to variants/esp32s3/ELECROW-ThinkNode-M2/platformio.ini index c08c94a71..01e82184b 100644 --- a/variants/ELECROW-ThinkNode-M2/platformio.ini +++ b/variants/esp32s3/ELECROW-ThinkNode-M2/platformio.ini @@ -4,4 +4,4 @@ board = ESP32-S3-WROOM-1-N4 build_flags = ${esp32s3_base.build_flags} -D ELECROW_ThinkNode_M2 - -I variants/ELECROW-ThinkNode-M2 + -I variants/esp32s3/ELECROW-ThinkNode-M2 diff --git a/variants/ELECROW-ThinkNode-M2/variant.h b/variants/esp32s3/ELECROW-ThinkNode-M2/variant.h similarity index 100% rename from variants/ELECROW-ThinkNode-M2/variant.h rename to variants/esp32s3/ELECROW-ThinkNode-M2/variant.h diff --git a/variants/bpi_picow_esp32_s3/pins_arduino.h b/variants/esp32s3/bpi_picow_esp32_s3/pins_arduino.h similarity index 100% rename from variants/bpi_picow_esp32_s3/pins_arduino.h rename to variants/esp32s3/bpi_picow_esp32_s3/pins_arduino.h diff --git a/variants/bpi_picow_esp32_s3/platformio.ini b/variants/esp32s3/bpi_picow_esp32_s3/platformio.ini similarity index 77% rename from variants/bpi_picow_esp32_s3/platformio.ini rename to variants/esp32s3/bpi_picow_esp32_s3/platformio.ini index 7e94cc97e..57af0da82 100644 --- a/variants/bpi_picow_esp32_s3/platformio.ini +++ b/variants/esp32s3/bpi_picow_esp32_s3/platformio.ini @@ -11,4 +11,6 @@ lib_deps = ${esp32_base.lib_deps} caveman99/ESP32 Codec2@^1.0.1 build_flags = - ${esp32_base.build_flags} -D PRIVATE_HW -I variants/bpi_picow_esp32_s3 \ No newline at end of file + ${esp32_base.build_flags} + -D PRIVATE_HW + -I variants/esp32s3/bpi_picow_esp32_s3 diff --git a/variants/bpi_picow_esp32_s3/variant.h b/variants/esp32s3/bpi_picow_esp32_s3/variant.h similarity index 100% rename from variants/bpi_picow_esp32_s3/variant.h rename to variants/esp32s3/bpi_picow_esp32_s3/variant.h diff --git a/variants/crowpanel-esp32s3-5-epaper/pins_arduino.h b/variants/esp32s3/crowpanel-esp32s3-5-epaper/pins_arduino.h similarity index 100% rename from variants/crowpanel-esp32s3-5-epaper/pins_arduino.h rename to variants/esp32s3/crowpanel-esp32s3-5-epaper/pins_arduino.h diff --git a/variants/crowpanel-esp32s3-5-epaper/platformio.ini b/variants/esp32s3/crowpanel-esp32s3-5-epaper/platformio.ini similarity index 89% rename from variants/crowpanel-esp32s3-5-epaper/platformio.ini rename to variants/esp32s3/crowpanel-esp32s3-5-epaper/platformio.ini index ebf013f64..49e84bf4f 100644 --- a/variants/crowpanel-esp32s3-5-epaper/platformio.ini +++ b/variants/esp32s3/crowpanel-esp32s3-5-epaper/platformio.ini @@ -11,7 +11,9 @@ board = esp32-s3-devkitc-1 board_level = extra upload_protocol = esptool build_flags = - ${esp32s3_base.build_flags} -D CROWPANEL_ESP32S3_5_EPAPER -I variants/crowpanel-esp32s3-5-epaper + ${esp32s3_base.build_flags} + -D CROWPANEL_ESP32S3_5_EPAPER + -I variants/esp32s3/crowpanel-esp32s3-5-epaper -D PRIVATE_HW -DBOARD_HAS_PSRAM -DGPS_POWER_TOGGLE @@ -39,7 +41,9 @@ board = esp32-s3-devkitc-1 board_level = extra upload_protocol = esptool build_flags = - ${esp32s3_base.build_flags} -D CROWPANEL_ESP32S3_4_EPAPER -I variants/crowpanel-esp32s3-5-epaper + ${esp32s3_base.build_flags} + -D CROWPANEL_ESP32S3_4_EPAPER + -I variants/esp32s3/crowpanel-esp32s3-5-epaper -D PRIVATE_HW -DBOARD_HAS_PSRAM -DGPS_POWER_TOGGLE @@ -67,7 +71,9 @@ board = esp32-s3-devkitc-1 board_level = extra upload_protocol = esptool build_flags = - ${esp32s3_base.build_flags} -D CROWPANEL_ESP32S3_2_EPAPER -I variants/crowpanel-esp32s3-5-epaper + ${esp32s3_base.build_flags} + -D CROWPANEL_ESP32S3_2_EPAPER + -I variants/esp32s3/crowpanel-esp32s3-5-epaper -D PRIVATE_HW -DBOARD_HAS_PSRAM -DGPS_POWER_TOGGLE diff --git a/variants/crowpanel-esp32s3-5-epaper/variant.h b/variants/esp32s3/crowpanel-esp32s3-5-epaper/variant.h similarity index 100% rename from variants/crowpanel-esp32s3-5-epaper/variant.h rename to variants/esp32s3/crowpanel-esp32s3-5-epaper/variant.h diff --git a/variants/my_esp32s3_diy_eink/pins_arduino.h b/variants/esp32s3/diy/my_esp32s3_diy_eink/pins_arduino.h similarity index 100% rename from variants/my_esp32s3_diy_eink/pins_arduino.h rename to variants/esp32s3/diy/my_esp32s3_diy_eink/pins_arduino.h diff --git a/variants/my_esp32s3_diy_eink/platformio.ini b/variants/esp32s3/diy/my_esp32s3_diy_eink/platformio.ini similarity index 71% rename from variants/my_esp32s3_diy_eink/platformio.ini rename to variants/esp32s3/diy/my_esp32s3_diy_eink/platformio.ini index 98613e4fb..267544c40 100644 --- a/variants/my_esp32s3_diy_eink/platformio.ini +++ b/variants/esp32s3/diy/my_esp32s3_diy_eink/platformio.ini @@ -8,8 +8,6 @@ board_build.f_cpu = 240000000L upload_protocol = esptool ;upload_port = /dev/ttyACM1 upload_speed = 921600 -platform_packages = - platformio/tool-esptoolpy@^1.40801.0 lib_deps = ${esp32_base.lib_deps} zinggjm/GxEPD2@^1.6.2 @@ -18,12 +16,13 @@ build_unflags = ${esp32s3_base.build_unflags} -DARDUINO_USB_MODE=1 build_flags = - ;${esp32_base.build_flags} -D MY_ESP32S3_DIY -I variants/my_esp32s3_diy_eink - ${esp32_base.build_flags} -D PRIVATE_HW -I variants/my_esp32s3_diy_eink + ${esp32_base.build_flags} + -D PRIVATE_HW + -I variants/esp32s3/diy/my_esp32s3_diy_eink -Dmy -DEINK_DISPLAY_MODEL=GxEPD2_290_T5D -DEINK_WIDTH=296 -DEINK_HEIGHT=128 -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue - -DARDUINO_USB_MODE=0 \ No newline at end of file + -DARDUINO_USB_MODE=0 diff --git a/variants/my_esp32s3_diy_eink/variant.h b/variants/esp32s3/diy/my_esp32s3_diy_eink/variant.h similarity index 100% rename from variants/my_esp32s3_diy_eink/variant.h rename to variants/esp32s3/diy/my_esp32s3_diy_eink/variant.h diff --git a/variants/my_esp32s3_diy_oled/pins_arduino.h b/variants/esp32s3/diy/my_esp32s3_diy_oled/pins_arduino.h similarity index 100% rename from variants/my_esp32s3_diy_oled/pins_arduino.h rename to variants/esp32s3/diy/my_esp32s3_diy_oled/pins_arduino.h diff --git a/variants/my_esp32s3_diy_oled/platformio.ini b/variants/esp32s3/diy/my_esp32s3_diy_oled/platformio.ini similarity index 67% rename from variants/my_esp32s3_diy_oled/platformio.ini rename to variants/esp32s3/diy/my_esp32s3_diy_oled/platformio.ini index 346cc9cac..aa3e6e482 100644 --- a/variants/my_esp32s3_diy_oled/platformio.ini +++ b/variants/esp32s3/diy/my_esp32s3_diy_oled/platformio.ini @@ -8,8 +8,6 @@ board_build.f_cpu = 240000000L upload_protocol = esptool ;upload_port = /dev/ttyACM0 upload_speed = 921600 -platform_packages = - platformio/tool-esptoolpy@^1.40801.0 lib_deps = ${esp32_base.lib_deps} adafruit/Adafruit NeoPixel @ ^1.12.0 @@ -17,8 +15,9 @@ build_unflags = ${esp32s3_base.build_unflags} -DARDUINO_USB_MODE=1 build_flags = - ;${esp32_base.build_flags} -D MY_ESP32S3_DIY -I variants/my_esp32s3_diy_oled - ${esp32_base.build_flags} -D PRIVATE_HW -I variants/my_esp32s3_diy_oled + ${esp32_base.build_flags} + -D PRIVATE_HW + -I variants/esp32s3/diy/my_esp32s3_diy_oled -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue - -DARDUINO_USB_MODE=0 \ No newline at end of file + -DARDUINO_USB_MODE=0 diff --git a/variants/my_esp32s3_diy_oled/variant.h b/variants/esp32s3/diy/my_esp32s3_diy_oled/variant.h similarity index 100% rename from variants/my_esp32s3_diy_oled/variant.h rename to variants/esp32s3/diy/my_esp32s3_diy_oled/variant.h diff --git a/variants/esp32s3/diy/t-energy-s3_e22/platformio.ini b/variants/esp32s3/diy/t-energy-s3_e22/platformio.ini new file mode 100644 index 000000000..681ee6c45 --- /dev/null +++ b/variants/esp32s3/diy/t-energy-s3_e22/platformio.ini @@ -0,0 +1,18 @@ +; NanoVHF T-Energy-S3 + E22(0)-xxxM - DIY +[env:t-energy-s3_e22] +extends = esp32s3_base +board = esp32-s3-devkitc-1 +board_build.partitions = default_16MB.csv +board_level = extra +board_upload.flash_size = 16MB ;Specify the FLASH capacity as 16MB +board_build.arduino.memory_type = qio_opi ;Enable internal PSRAM +build_unflags = + ${esp32s3_base.build_unflags} + -D ARDUINO_USB_MODE=1 +build_flags = + ${esp32s3_base.build_flags} + -D EBYTE_ESP32_S3 + -D BOARD_HAS_PSRAM + -D ARDUINO_USB_MODE=0 + -D ARDUINO_USB_CDC_ON_BOOT=1 + -I variants/esp32s3/diy/t-energy-s3_e22 diff --git a/variants/diy/t-energy-s3_e22/variant.h b/variants/esp32s3/diy/t-energy-s3_e22/variant.h similarity index 100% rename from variants/diy/t-energy-s3_e22/variant.h rename to variants/esp32s3/diy/t-energy-s3_e22/variant.h diff --git a/variants/dreamcatcher/platformio.ini b/variants/esp32s3/dreamcatcher/platformio.ini similarity index 89% rename from variants/dreamcatcher/platformio.ini rename to variants/esp32s3/dreamcatcher/platformio.ini index 6527d89be..d088f2dac 100644 --- a/variants/dreamcatcher/platformio.ini +++ b/variants/esp32s3/dreamcatcher/platformio.ini @@ -8,7 +8,7 @@ build_flags = ${esp32s3_base.build_flags} -D PRIVATE_HW -D OTHERNET_DC_REV=2301 - -I variants/dreamcatcher + -I variants/esp32s3/dreamcatcher -D ARDUINO_USB_CDC_ON_BOOT=1 lib_deps = ${esp32s3_base.lib_deps} @@ -25,5 +25,5 @@ build_flags = ${esp32s3_base.build_flags} -D PRIVATE_HW -D OTHERNET_DC_REV=2206 - -I variants/dreamcatcher + -I variants/esp32s3/dreamcatcher -D ARDUINO_USB_CDC_ON_BOOT=1 diff --git a/variants/dreamcatcher/rfswitch.h b/variants/esp32s3/dreamcatcher/rfswitch.h similarity index 100% rename from variants/dreamcatcher/rfswitch.h rename to variants/esp32s3/dreamcatcher/rfswitch.h diff --git a/variants/dreamcatcher/variant.h b/variants/esp32s3/dreamcatcher/variant.h similarity index 100% rename from variants/dreamcatcher/variant.h rename to variants/esp32s3/dreamcatcher/variant.h diff --git a/variants/elecrow_panel/pins_arduino.h b/variants/esp32s3/elecrow_panel/pins_arduino.h similarity index 100% rename from variants/elecrow_panel/pins_arduino.h rename to variants/esp32s3/elecrow_panel/pins_arduino.h diff --git a/variants/elecrow_panel/platformio.ini b/variants/esp32s3/elecrow_panel/platformio.ini similarity index 99% rename from variants/elecrow_panel/platformio.ini rename to variants/esp32s3/elecrow_panel/platformio.ini index de7f28a83..203a4c0d0 100644 --- a/variants/elecrow_panel/platformio.ini +++ b/variants/esp32s3/elecrow_panel/platformio.ini @@ -5,7 +5,7 @@ board_check = true upload_protocol = esptool board_build.partitions = default_16MB.csv ; must be here for some reason, board.json is not enough !? build_flags = ${esp32s3_base.build_flags} -Os - -I variants/elecrow_panel + -I variants/esp32s3/elecrow_panel -D ELECROW_PANEL -D CONFIG_ARDUHAL_LOG_COLORS -D RADIOLIB_DEBUG_SPI=0 diff --git a/variants/elecrow_panel/variant.h b/variants/esp32s3/elecrow_panel/variant.h similarity index 100% rename from variants/elecrow_panel/variant.h rename to variants/esp32s3/elecrow_panel/variant.h diff --git a/variants/esp32-s3-pico/pins_arduino.h b/variants/esp32s3/esp32-s3-pico/pins_arduino.h similarity index 100% rename from variants/esp32-s3-pico/pins_arduino.h rename to variants/esp32s3/esp32-s3-pico/pins_arduino.h diff --git a/variants/esp32-s3-pico/platformio.ini b/variants/esp32s3/esp32-s3-pico/platformio.ini similarity index 94% rename from variants/esp32-s3-pico/platformio.ini rename to variants/esp32s3/esp32-s3-pico/platformio.ini index 69969c601..11bd4f5a3 100644 --- a/variants/esp32-s3-pico/platformio.ini +++ b/variants/esp32s3/esp32-s3-pico/platformio.ini @@ -15,7 +15,7 @@ board_upload.require_upload_port = yes build_flags = ${esp32s3_base.build_flags} -DESP32_S3_PICO ;-DPRIVATE_HW - -Ivariants/esp32-s3-pico + -Ivariants/esp32s3/esp32-s3-pico -DBOARD_HAS_PSRAM -DEINK_DISPLAY_MODEL=GxEPD2_290_T94_V2 -DEINK_WIDTH=296 diff --git a/variants/esp32-s3-pico/variant.h b/variants/esp32s3/esp32-s3-pico/variant.h similarity index 100% rename from variants/esp32-s3-pico/variant.h rename to variants/esp32s3/esp32-s3-pico/variant.h diff --git a/variants/heltec_capsule_sensor_v3/platformio.ini b/variants/esp32s3/heltec_capsule_sensor_v3/platformio.ini similarity index 82% rename from variants/heltec_capsule_sensor_v3/platformio.ini rename to variants/esp32s3/heltec_capsule_sensor_v3/platformio.ini index 8d1c039c1..d43ffd0df 100644 --- a/variants/heltec_capsule_sensor_v3/platformio.ini +++ b/variants/esp32s3/heltec_capsule_sensor_v3/platformio.ini @@ -4,7 +4,7 @@ board = heltec_wifi_lora_32_V3 board_check = true board_build.partitions = default_8MB.csv build_flags = - ${esp32s3_base.build_flags} -I variants/heltec_capsule_sensor_v3 + ${esp32s3_base.build_flags} -I variants/esp32s3/heltec_capsule_sensor_v3 -D HELTEC_CAPSULE_SENSOR_V3 -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 \ No newline at end of file + ;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output diff --git a/variants/heltec_capsule_sensor_v3/variant.h b/variants/esp32s3/heltec_capsule_sensor_v3/variant.h similarity index 100% rename from variants/heltec_capsule_sensor_v3/variant.h rename to variants/esp32s3/heltec_capsule_sensor_v3/variant.h diff --git a/variants/heltec_sensor_hub/platformio.ini b/variants/esp32s3/heltec_sensor_hub/platformio.ini similarity index 75% rename from variants/heltec_sensor_hub/platformio.ini rename to variants/esp32s3/heltec_sensor_hub/platformio.ini index 53f84fab4..92b90d9b9 100644 --- a/variants/heltec_sensor_hub/platformio.ini +++ b/variants/esp32s3/heltec_sensor_hub/platformio.ini @@ -4,7 +4,8 @@ board = heltec_wifi_lora_32_V3 board_check = true build_flags = - ${esp32s3_base.build_flags} -I variants/heltec_sensor_hub + ${esp32s3_base.build_flags} + -I variants/esp32s3/heltec_sensor_hub -D HELTEC_SENSOR_HUB lib_deps = ${esp32s3_base.lib_deps} diff --git a/variants/heltec_sensor_hub/variant.h b/variants/esp32s3/heltec_sensor_hub/variant.h similarity index 100% rename from variants/heltec_sensor_hub/variant.h rename to variants/esp32s3/heltec_sensor_hub/variant.h diff --git a/variants/heltec_v3/platformio.ini b/variants/esp32s3/heltec_v3/platformio.ini similarity index 77% rename from variants/heltec_v3/platformio.ini rename to variants/esp32s3/heltec_v3/platformio.ini index 4be96b019..8dda72ceb 100644 --- a/variants/heltec_v3/platformio.ini +++ b/variants/esp32s3/heltec_v3/platformio.ini @@ -4,5 +4,7 @@ board = heltec_wifi_lora_32_V3 board_check = true board_build.partitions = default_8MB.csv build_flags = - ${esp32s3_base.build_flags} -D HELTEC_V3 -I variants/heltec_v3 + ${esp32s3_base.build_flags} + -D HELTEC_V3 + -I variants/esp32s3/heltec_v3 -D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. diff --git a/variants/heltec_v3/variant.h b/variants/esp32s3/heltec_v3/variant.h similarity index 100% rename from variants/heltec_v3/variant.h rename to variants/esp32s3/heltec_v3/variant.h diff --git a/variants/heltec_vision_master_e213/einkDetect.h b/variants/esp32s3/heltec_vision_master_e213/einkDetect.h similarity index 100% rename from variants/heltec_vision_master_e213/einkDetect.h rename to variants/esp32s3/heltec_vision_master_e213/einkDetect.h diff --git a/variants/heltec_vision_master_e213/nicheGraphics.h b/variants/esp32s3/heltec_vision_master_e213/nicheGraphics.h similarity index 100% rename from variants/heltec_vision_master_e213/nicheGraphics.h rename to variants/esp32s3/heltec_vision_master_e213/nicheGraphics.h diff --git a/variants/heltec_vision_master_e213/pins_arduino.h b/variants/esp32s3/heltec_vision_master_e213/pins_arduino.h similarity index 100% rename from variants/heltec_vision_master_e213/pins_arduino.h rename to variants/esp32s3/heltec_vision_master_e213/pins_arduino.h diff --git a/variants/heltec_vision_master_e213/platformio.ini b/variants/esp32s3/heltec_vision_master_e213/platformio.ini similarity index 91% rename from variants/heltec_vision_master_e213/platformio.ini rename to variants/esp32s3/heltec_vision_master_e213/platformio.ini index 028caaeff..2b4eebe64 100644 --- a/variants/heltec_vision_master_e213/platformio.ini +++ b/variants/esp32s3/heltec_vision_master_e213/platformio.ini @@ -4,7 +4,7 @@ board = heltec_vision_master_e213 board_build.partitions = default_8MB.csv build_flags = ${esp32s3_base.build_flags} - -Ivariants/heltec_vision_master_e213 + -Ivariants/esp32s3/heltec_vision_master_e213 -DHELTEC_VISION_MASTER_E213 -DUSE_EINK -DGXEPD2_DRIVER_0=GxEPD2_213_FC1 @@ -31,9 +31,9 @@ build_src_filter = build_flags = ${esp32s3_base.build_flags} ${inkhud.build_flags} - -I variants/heltec_vision_master_e213 + -I variants/esp32s3/heltec_vision_master_e213 -D HELTEC_VISION_MASTER_E213 lib_deps = ${inkhud.lib_deps} ; InkHUD libs first, so we get GFXRoot instead of AdafruitGFX ${esp32s3_base.lib_deps} -upload_speed = 921600 \ No newline at end of file +upload_speed = 921600 diff --git a/variants/heltec_vision_master_e213/variant.h b/variants/esp32s3/heltec_vision_master_e213/variant.h similarity index 100% rename from variants/heltec_vision_master_e213/variant.h rename to variants/esp32s3/heltec_vision_master_e213/variant.h diff --git a/variants/heltec_vision_master_e290/nicheGraphics.h b/variants/esp32s3/heltec_vision_master_e290/nicheGraphics.h similarity index 100% rename from variants/heltec_vision_master_e290/nicheGraphics.h rename to variants/esp32s3/heltec_vision_master_e290/nicheGraphics.h diff --git a/variants/heltec_vision_master_e290/pins_arduino.h b/variants/esp32s3/heltec_vision_master_e290/pins_arduino.h similarity index 100% rename from variants/heltec_vision_master_e290/pins_arduino.h rename to variants/esp32s3/heltec_vision_master_e290/pins_arduino.h diff --git a/variants/heltec_vision_master_e290/platformio.ini b/variants/esp32s3/heltec_vision_master_e290/platformio.ini similarity index 91% rename from variants/heltec_vision_master_e290/platformio.ini rename to variants/esp32s3/heltec_vision_master_e290/platformio.ini index cda3fde00..08056b639 100644 --- a/variants/heltec_vision_master_e290/platformio.ini +++ b/variants/esp32s3/heltec_vision_master_e290/platformio.ini @@ -5,7 +5,7 @@ board = heltec_vision_master_e290 board_build.partitions = default_8MB.csv build_flags = ${esp32s3_base.build_flags} - -I variants/heltec_vision_master_e290 + -I variants/esp32s3/heltec_vision_master_e290 -D DISPLAY_FLIP_SCREEN ; Orient so the LoRa antenna faces up -D HELTEC_VISION_MASTER_E290 -D BUTTON_CLICK_MS=200 @@ -34,9 +34,9 @@ build_src_filter = build_flags = ${esp32s3_base.build_flags} ${inkhud.build_flags} - -I variants/heltec_vision_master_e290 + -I variants/esp32s3/heltec_vision_master_e290 -D HELTEC_VISION_MASTER_E290 lib_deps = ${inkhud.lib_deps} ; InkHUD libs first, so we get GFXRoot instead of AdafruitGFX ${esp32s3_base.lib_deps} -upload_speed = 921600 \ No newline at end of file +upload_speed = 921600 diff --git a/variants/heltec_vision_master_e290/variant.h b/variants/esp32s3/heltec_vision_master_e290/variant.h similarity index 100% rename from variants/heltec_vision_master_e290/variant.h rename to variants/esp32s3/heltec_vision_master_e290/variant.h diff --git a/variants/heltec_vision_master_t190/pins_arduino.h b/variants/esp32s3/heltec_vision_master_t190/pins_arduino.h similarity index 100% rename from variants/heltec_vision_master_t190/pins_arduino.h rename to variants/esp32s3/heltec_vision_master_t190/pins_arduino.h diff --git a/variants/heltec_vision_master_t190/platformio.ini b/variants/esp32s3/heltec_vision_master_t190/platformio.ini similarity index 77% rename from variants/heltec_vision_master_t190/platformio.ini rename to variants/esp32s3/heltec_vision_master_t190/platformio.ini index 7f55a1be7..e7e7ff4e4 100644 --- a/variants/heltec_vision_master_t190/platformio.ini +++ b/variants/esp32s3/heltec_vision_master_t190/platformio.ini @@ -4,10 +4,10 @@ board = heltec_vision_master_t190 board_build.partitions = default_8MB.csv build_flags = ${esp32s3_base.build_flags} - -Ivariants/heltec_vision_master_t190 - -DHELTEC_VISION_MASTER_T190 + -I variants/esp32s3/heltec_vision_master_t190 + -D HELTEC_VISION_MASTER_T190 lib_deps = ${esp32s3_base.lib_deps} lewisxhe/PCF8563_Library@^1.0.1 https://github.com/meshtastic/st7789/archive/bd33ea58ddfe4a5e4a66d53300ccbd38d66ac21f.zip -upload_speed = 921600 \ No newline at end of file +upload_speed = 921600 diff --git a/variants/heltec_vision_master_t190/variant.h b/variants/esp32s3/heltec_vision_master_t190/variant.h similarity index 100% rename from variants/heltec_vision_master_t190/variant.h rename to variants/esp32s3/heltec_vision_master_t190/variant.h diff --git a/variants/heltec_wireless_paper/einkDetect.h b/variants/esp32s3/heltec_wireless_paper/einkDetect.h similarity index 100% rename from variants/heltec_wireless_paper/einkDetect.h rename to variants/esp32s3/heltec_wireless_paper/einkDetect.h diff --git a/variants/heltec_wireless_paper/nicheGraphics.h b/variants/esp32s3/heltec_wireless_paper/nicheGraphics.h similarity index 100% rename from variants/heltec_wireless_paper/nicheGraphics.h rename to variants/esp32s3/heltec_wireless_paper/nicheGraphics.h diff --git a/variants/heltec_wireless_paper/pins_arduino.h b/variants/esp32s3/heltec_wireless_paper/pins_arduino.h similarity index 100% rename from variants/heltec_wireless_paper/pins_arduino.h rename to variants/esp32s3/heltec_wireless_paper/pins_arduino.h diff --git a/variants/heltec_wireless_paper/platformio.ini b/variants/esp32s3/heltec_wireless_paper/platformio.ini similarity index 92% rename from variants/heltec_wireless_paper/platformio.ini rename to variants/esp32s3/heltec_wireless_paper/platformio.ini index 790646056..f16dcd257 100644 --- a/variants/heltec_wireless_paper/platformio.ini +++ b/variants/esp32s3/heltec_wireless_paper/platformio.ini @@ -5,7 +5,7 @@ board = heltec_wifi_lora_32_V3 board_build.partitions = default_8MB.csv build_flags = ${esp32s3_base.build_flags} - -I variants/heltec_wireless_paper + -I variants/esp32s3/heltec_wireless_paper -D HELTEC_WIRELESS_PAPER -D GXEPD2_DRIVER_0=GxEPD2_213_FC1 -D GXEPD2_DRIVER_1=GxEPD2_213_E0213A367 @@ -32,9 +32,9 @@ build_src_filter = build_flags = ${esp32s3_base.build_flags} ${inkhud.build_flags} - -I variants/heltec_wireless_paper + -I variants/esp32s3/heltec_wireless_paper -D HELTEC_WIRELESS_PAPER lib_deps = ${inkhud.lib_deps} ; InkHUD libs first, so we get GFXRoot instead of AdafruitGFX ${esp32s3_base.lib_deps} -upload_speed = 921600 \ No newline at end of file +upload_speed = 921600 diff --git a/variants/heltec_wireless_paper/variant.h b/variants/esp32s3/heltec_wireless_paper/variant.h similarity index 100% rename from variants/heltec_wireless_paper/variant.h rename to variants/esp32s3/heltec_wireless_paper/variant.h diff --git a/variants/heltec_wireless_paper_v1/pins_arduino.h b/variants/esp32s3/heltec_wireless_paper_v1/pins_arduino.h similarity index 100% rename from variants/heltec_wireless_paper_v1/pins_arduino.h rename to variants/esp32s3/heltec_wireless_paper_v1/pins_arduino.h diff --git a/variants/heltec_wireless_paper_v1/platformio.ini b/variants/esp32s3/heltec_wireless_paper_v1/platformio.ini similarity index 91% rename from variants/heltec_wireless_paper_v1/platformio.ini rename to variants/esp32s3/heltec_wireless_paper_v1/platformio.ini index 44b0606af..99f2eddeb 100644 --- a/variants/heltec_wireless_paper_v1/platformio.ini +++ b/variants/esp32s3/heltec_wireless_paper_v1/platformio.ini @@ -5,7 +5,7 @@ board = heltec_wifi_lora_32_V3 board_build.partitions = default_8MB.csv build_flags = ${esp32s3_base.build_flags} - -I variants/heltec_wireless_paper_v1 + -I variants/esp32s3/heltec_wireless_paper_v1 -D HELTEC_WIRELESS_PAPER_V1_0 -D EINK_DISPLAY_MODEL=GxEPD2_213_BN -D EINK_WIDTH=250 @@ -17,4 +17,4 @@ lib_deps = ${esp32s3_base.lib_deps} https://github.com/meshtastic/GxEPD2/archive/55f618961db45a23eff0233546430f1e5a80f63a.zip lewisxhe/PCF8563_Library@^1.0.1 -upload_speed = 115200 \ No newline at end of file +upload_speed = 115200 diff --git a/variants/heltec_wireless_paper_v1/variant.h b/variants/esp32s3/heltec_wireless_paper_v1/variant.h similarity index 100% rename from variants/heltec_wireless_paper_v1/variant.h rename to variants/esp32s3/heltec_wireless_paper_v1/variant.h diff --git a/variants/heltec_wireless_tracker/pins_arduino.h b/variants/esp32s3/heltec_wireless_tracker/pins_arduino.h similarity index 100% rename from variants/heltec_wireless_tracker/pins_arduino.h rename to variants/esp32s3/heltec_wireless_tracker/pins_arduino.h diff --git a/variants/heltec_wireless_tracker/platformio.ini b/variants/esp32s3/heltec_wireless_tracker/platformio.ini similarity index 85% rename from variants/heltec_wireless_tracker/platformio.ini rename to variants/esp32s3/heltec_wireless_tracker/platformio.ini index 5c19c37e6..2faba45a8 100644 --- a/variants/heltec_wireless_tracker/platformio.ini +++ b/variants/esp32s3/heltec_wireless_tracker/platformio.ini @@ -5,7 +5,8 @@ board_build.partitions = default_8MB.csv upload_protocol = esptool build_flags = - ${esp32s3_base.build_flags} -I variants/heltec_wireless_tracker + ${esp32s3_base.build_flags} + -I variants/esp32s3/heltec_wireless_tracker -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/heltec_wireless_tracker/variant.h b/variants/esp32s3/heltec_wireless_tracker/variant.h similarity index 100% rename from variants/heltec_wireless_tracker/variant.h rename to variants/esp32s3/heltec_wireless_tracker/variant.h diff --git a/variants/heltec_wireless_tracker_V1_0/pins_arduino.h b/variants/esp32s3/heltec_wireless_tracker_V1_0/pins_arduino.h similarity index 100% rename from variants/heltec_wireless_tracker_V1_0/pins_arduino.h rename to variants/esp32s3/heltec_wireless_tracker_V1_0/pins_arduino.h diff --git a/variants/heltec_wireless_tracker_V1_0/platformio.ini b/variants/esp32s3/heltec_wireless_tracker_V1_0/platformio.ini similarity index 85% rename from variants/heltec_wireless_tracker_V1_0/platformio.ini rename to variants/esp32s3/heltec_wireless_tracker_V1_0/platformio.ini index 08b0ae95c..89fe4b385 100644 --- a/variants/heltec_wireless_tracker_V1_0/platformio.ini +++ b/variants/esp32s3/heltec_wireless_tracker_V1_0/platformio.ini @@ -5,7 +5,8 @@ board = heltec_wireless_tracker board_build.partitions = default_8MB.csv upload_protocol = esptool build_flags = - ${esp32s3_base.build_flags} -I variants/heltec_wireless_tracker_V1_0 + ${esp32s3_base.build_flags} + -I variants/esp32s3/heltec_wireless_tracker_V1_0 -D HELTEC_TRACKER_V1_0 -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/heltec_wireless_tracker_V1_0/variant.h b/variants/esp32s3/heltec_wireless_tracker_V1_0/variant.h similarity index 100% rename from variants/heltec_wireless_tracker_V1_0/variant.h rename to variants/esp32s3/heltec_wireless_tracker_V1_0/variant.h diff --git a/variants/heltec_wsl_v3/platformio.ini b/variants/esp32s3/heltec_wsl_v3/platformio.ini similarity index 78% rename from variants/heltec_wsl_v3/platformio.ini rename to variants/esp32s3/heltec_wsl_v3/platformio.ini index bc3e6ada1..06cde2304 100644 --- a/variants/heltec_wsl_v3/platformio.ini +++ b/variants/esp32s3/heltec_wsl_v3/platformio.ini @@ -4,5 +4,7 @@ board = heltec_wifi_lora_32_V3 board_build.partitions = default_8MB.csv # Temporary until espressif creates a release with this new target build_flags = - ${esp32s3_base.build_flags} -D HELTEC_WSL_V3 -I variants/heltec_wsl_v3 + ${esp32s3_base.build_flags} + -D HELTEC_WSL_V3 + -I variants/esp32s3/heltec_wsl_v3 -D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. diff --git a/variants/heltec_wsl_v3/variant.h b/variants/esp32s3/heltec_wsl_v3/variant.h similarity index 100% rename from variants/heltec_wsl_v3/variant.h rename to variants/esp32s3/heltec_wsl_v3/variant.h diff --git a/variants/icarus/pins_arduino.h b/variants/esp32s3/icarus/pins_arduino.h similarity index 100% rename from variants/icarus/pins_arduino.h rename to variants/esp32s3/icarus/pins_arduino.h diff --git a/variants/icarus/platformio.ini b/variants/esp32s3/icarus/platformio.ini similarity index 84% rename from variants/icarus/platformio.ini rename to variants/esp32s3/icarus/platformio.ini index b4ea125cf..de450da93 100644 --- a/variants/icarus/platformio.ini +++ b/variants/esp32s3/icarus/platformio.ini @@ -14,6 +14,8 @@ build_unflags = ${esp32s3_base.build_unflags} -DARDUINO_USB_MODE=1 build_flags = - ${esp32s3_base.build_flags} -D PRIVATE_HW -I variants/icarus - -DBOARD_HAS_PSRAM + ${esp32s3_base.build_flags} + -D PRIVATE_HW + -I variants/esp32s3/icarus + -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=0 diff --git a/variants/icarus/variant.h b/variants/esp32s3/icarus/variant.h similarity index 100% rename from variants/icarus/variant.h rename to variants/esp32s3/icarus/variant.h diff --git a/variants/link32_s3_v1/pins_arduino.h b/variants/esp32s3/link32_s3_v1/pins_arduino.h similarity index 100% rename from variants/link32_s3_v1/pins_arduino.h rename to variants/esp32s3/link32_s3_v1/pins_arduino.h diff --git a/variants/link32_s3_v1/platformio.ini b/variants/esp32s3/link32_s3_v1/platformio.ini similarity index 81% rename from variants/link32_s3_v1/platformio.ini rename to variants/esp32s3/link32_s3_v1/platformio.ini index 5a614a7af..c1b71b3b5 100644 --- a/variants/link32_s3_v1/platformio.ini +++ b/variants/esp32s3/link32_s3_v1/platformio.ini @@ -2,7 +2,9 @@ extends = esp32s3_base board = esp32-s3-devkitc-1 build_flags = - ${esp32_base.build_flags} -D LINK_32 -I variants/link32_s3_v1 + ${esp32_base.build_flags} + -D LINK_32 + -I variants/esp32s3/link32_s3_v1 -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -DARDUINO_USB_CDC_ON_BOOT -DARDUINO_USB_MODE=1 diff --git a/variants/link32_s3_v1/variant.h b/variants/esp32s3/link32_s3_v1/variant.h similarity index 100% rename from variants/link32_s3_v1/variant.h rename to variants/esp32s3/link32_s3_v1/variant.h diff --git a/variants/m5stack_cores3/pins_arduino.h b/variants/esp32s3/m5stack_cores3/pins_arduino.h similarity index 100% rename from variants/m5stack_cores3/pins_arduino.h rename to variants/esp32s3/m5stack_cores3/pins_arduino.h diff --git a/variants/m5stack_cores3/platformio.ini b/variants/esp32s3/m5stack_cores3/platformio.ini similarity index 53% rename from variants/m5stack_cores3/platformio.ini rename to variants/esp32s3/m5stack_cores3/platformio.ini index 2253e75e2..9973abfce 100644 --- a/variants/m5stack_cores3/platformio.ini +++ b/variants/esp32s3/m5stack_cores3/platformio.ini @@ -5,11 +5,9 @@ board = m5stack-cores3 board_check = true board_build.partitions = default_16MB.csv upload_protocol = esptool - -build_flags = ${esp32_base.build_flags} - -DPRIVATE_HW - -DM5STACK_CORES3 - -Ivariants/m5stack_cores3 - -lib_deps = - ${esp32_base.lib_deps} +build_flags = + ${esp32_base.build_flags} + -D PRIVATE_HW + -D M5STACK_CORES3 + -I variants/esp32s3/m5stack_cores3 +lib_deps = ${esp32_base.lib_deps} diff --git a/variants/m5stack_cores3/variant.h b/variants/esp32s3/m5stack_cores3/variant.h similarity index 100% rename from variants/m5stack_cores3/variant.h rename to variants/esp32s3/m5stack_cores3/variant.h diff --git a/variants/nibble_esp32/platformio.ini b/variants/esp32s3/nibble_esp32/platformio.ini similarity index 55% rename from variants/nibble_esp32/platformio.ini rename to variants/esp32s3/nibble_esp32/platformio.ini index 24d2ee2a5..2f6960d2e 100644 --- a/variants/nibble_esp32/platformio.ini +++ b/variants/esp32s3/nibble_esp32/platformio.ini @@ -3,4 +3,6 @@ extends = esp32s3_base board = esp32-s3-zero board_level = extra build_flags = - ${esp32_base.build_flags} -D PRIVATE_HW -I variants/nibble_esp32 \ No newline at end of file + ${esp32_base.build_flags} + -D PRIVATE_HW + -I variants/esp32s3/nibble_esp32 diff --git a/variants/nibble_esp32/variant.h b/variants/esp32s3/nibble_esp32/variant.h similarity index 100% rename from variants/nibble_esp32/variant.h rename to variants/esp32s3/nibble_esp32/variant.h diff --git a/variants/nugget_s3_lora/platformio.ini b/variants/esp32s3/nugget_s3_lora/platformio.ini similarity index 78% rename from variants/nugget_s3_lora/platformio.ini rename to variants/esp32s3/nugget_s3_lora/platformio.ini index 1085d633b..a0076a18b 100644 --- a/variants/nugget_s3_lora/platformio.ini +++ b/variants/esp32s3/nugget_s3_lora/platformio.ini @@ -3,4 +3,4 @@ extends = esp32s3_base board = lolin_s3_mini board_level = extra build_flags = - ${esp32s3_base.build_flags} -D ARDUINO_USB_CDC_ON_BOOT=1 -D PRIVATE_HW -I variants/nugget_s3_lora + ${esp32s3_base.build_flags} -D ARDUINO_USB_CDC_ON_BOOT=1 -D PRIVATE_HW -I variants/esp32s3/nugget_s3_lora diff --git a/variants/nugget_s3_lora/variant.h b/variants/esp32s3/nugget_s3_lora/variant.h similarity index 100% rename from variants/nugget_s3_lora/variant.h rename to variants/esp32s3/nugget_s3_lora/variant.h diff --git a/variants/picomputer-s3/pins_arduino.h b/variants/esp32s3/picomputer-s3/pins_arduino.h similarity index 100% rename from variants/picomputer-s3/pins_arduino.h rename to variants/esp32s3/picomputer-s3/pins_arduino.h diff --git a/variants/picomputer-s3/platformio.ini b/variants/esp32s3/picomputer-s3/platformio.ini similarity index 97% rename from variants/picomputer-s3/platformio.ini rename to variants/esp32s3/picomputer-s3/platformio.ini index cb5e829b4..d5847959b 100644 --- a/variants/picomputer-s3/platformio.ini +++ b/variants/esp32s3/picomputer-s3/platformio.ini @@ -11,7 +11,7 @@ upload_protocol = esptool build_flags = ${esp32s3_base.build_flags} -DPICOMPUTER_S3 - -I variants/picomputer-s3 + -I variants/esp32s3/picomputer-s3 lib_deps = ${esp32s3_base.lib_deps} diff --git a/variants/picomputer-s3/variant.h b/variants/esp32s3/picomputer-s3/variant.h similarity index 100% rename from variants/picomputer-s3/variant.h rename to variants/esp32s3/picomputer-s3/variant.h diff --git a/variants/rak3312/pins_arduino.h b/variants/esp32s3/rak3312/pins_arduino.h similarity index 100% rename from variants/rak3312/pins_arduino.h rename to variants/esp32s3/rak3312/pins_arduino.h diff --git a/variants/rak3312/platformio.ini b/variants/esp32s3/rak3312/platformio.ini similarity index 63% rename from variants/rak3312/platformio.ini rename to variants/esp32s3/rak3312/platformio.ini index d2877b3f7..50b0c5020 100644 --- a/variants/rak3312/platformio.ini +++ b/variants/esp32s3/rak3312/platformio.ini @@ -5,4 +5,6 @@ board_check = true upload_protocol = esptool build_flags = - ${esp32_base.build_flags} -D RAK3312 -I variants/rak3312 + ${esp32_base.build_flags} + -D RAK3312 + -I variants/esp32s3/rak3312 diff --git a/variants/rak3312/variant.h b/variants/esp32s3/rak3312/variant.h similarity index 100% rename from variants/rak3312/variant.h rename to variants/esp32s3/rak3312/variant.h diff --git a/variants/seeed-sensecap-indicator/pins_arduino.h b/variants/esp32s3/seeed-sensecap-indicator/pins_arduino.h similarity index 100% rename from variants/seeed-sensecap-indicator/pins_arduino.h rename to variants/esp32s3/seeed-sensecap-indicator/pins_arduino.h diff --git a/variants/seeed-sensecap-indicator/platformio.ini b/variants/esp32s3/seeed-sensecap-indicator/platformio.ini similarity index 97% rename from variants/seeed-sensecap-indicator/platformio.ini rename to variants/esp32s3/seeed-sensecap-indicator/platformio.ini index 63f814b57..1d55b31ca 100644 --- a/variants/seeed-sensecap-indicator/platformio.ini +++ b/variants/esp32s3/seeed-sensecap-indicator/platformio.ini @@ -10,7 +10,7 @@ board_build.partitions = default_8MB.csv upload_protocol = esptool build_flags = ${esp32_base.build_flags} - -Ivariants/seeed-sensecap-indicator + -Ivariants/esp32s3/seeed-sensecap-indicator -DSENSECAP_INDICATOR -DCONFIG_ARDUHAL_LOG_COLORS -DRADIOLIB_DEBUG_SPI=0 diff --git a/variants/seeed-sensecap-indicator/variant.h b/variants/esp32s3/seeed-sensecap-indicator/variant.h similarity index 100% rename from variants/seeed-sensecap-indicator/variant.h rename to variants/esp32s3/seeed-sensecap-indicator/variant.h diff --git a/variants/seeed_xiao_s3/pins_arduino.h b/variants/esp32s3/seeed_xiao_s3/pins_arduino.h similarity index 100% rename from variants/seeed_xiao_s3/pins_arduino.h rename to variants/esp32s3/seeed_xiao_s3/pins_arduino.h diff --git a/variants/seeed_xiao_s3/platformio.ini b/variants/esp32s3/seeed_xiao_s3/platformio.ini similarity index 74% rename from variants/seeed_xiao_s3/platformio.ini rename to variants/esp32s3/seeed_xiao_s3/platformio.ini index 9d935e2e0..ad09efabd 100644 --- a/variants/seeed_xiao_s3/platformio.ini +++ b/variants/esp32s3/seeed_xiao_s3/platformio.ini @@ -11,7 +11,8 @@ build_unflags = ${esp32s3_base.build_unflags} -DARDUINO_USB_MODE=1 build_flags = - ${esp32s3_base.build_flags} -DSEEED_XIAO_S3 -I variants/seeed_xiao_s3 + ${esp32s3_base.build_flags} + -D SEEED_XIAO_S3 + -I variants/esp32s3/seeed_xiao_s3 -DBOARD_HAS_PSRAM - - -DARDUINO_USB_MODE=0 \ No newline at end of file + -DARDUINO_USB_MODE=0 diff --git a/variants/seeed_xiao_s3/variant.h b/variants/esp32s3/seeed_xiao_s3/variant.h similarity index 100% rename from variants/seeed_xiao_s3/variant.h rename to variants/esp32s3/seeed_xiao_s3/variant.h diff --git a/variants/station-g2/pins_arduino.h b/variants/esp32s3/station-g2/pins_arduino.h similarity index 100% rename from variants/station-g2/pins_arduino.h rename to variants/esp32s3/station-g2/pins_arduino.h diff --git a/variants/station-g2/platformio.ini b/variants/esp32s3/station-g2/platformio.ini similarity index 83% rename from variants/station-g2/platformio.ini rename to variants/esp32s3/station-g2/platformio.ini index 4ddd28f1c..0aed5e7ce 100755 --- a/variants/station-g2/platformio.ini +++ b/variants/esp32s3/station-g2/platformio.ini @@ -13,7 +13,9 @@ build_unflags = ${esp32s3_base.build_unflags} -DARDUINO_USB_MODE=1 build_flags = - ${esp32s3_base.build_flags} -D STATION_G2 -I variants/station-g2 + ${esp32s3_base.build_flags} + -D STATION_G2 + -I variants/esp32s3/station-g2 -DBOARD_HAS_PSRAM -DSTATION_G2 -DARDUINO_USB_MODE=0 diff --git a/variants/station-g2/variant.h b/variants/esp32s3/station-g2/variant.h similarity index 100% rename from variants/station-g2/variant.h rename to variants/esp32s3/station-g2/variant.h diff --git a/variants/t-deck/pins_arduino.h b/variants/esp32s3/t-deck/pins_arduino.h similarity index 100% rename from variants/t-deck/pins_arduino.h rename to variants/esp32s3/t-deck/pins_arduino.h diff --git a/variants/t-deck/platformio.ini b/variants/esp32s3/t-deck/platformio.ini similarity index 95% rename from variants/t-deck/platformio.ini rename to variants/esp32s3/t-deck/platformio.ini index c9bd64bc3..9d55ee365 100644 --- a/variants/t-deck/platformio.ini +++ b/variants/esp32s3/t-deck/platformio.ini @@ -7,17 +7,16 @@ board_build.partitions = default_16MB.csv upload_protocol = esptool build_flags = ${esp32s3_base.build_flags} - -DT_DECK - -DBOARD_HAS_PSRAM - -DGPS_POWER_TOGGLE - -Ivariants/t-deck + -D T_DECK + -D BOARD_HAS_PSRAM + -D GPS_POWER_TOGGLE + -I variants/esp32s3/t-deck lib_deps = ${esp32s3_base.lib_deps} lovyan03/LovyanGFX@^1.2.0 earlephilhower/ESP8266Audio@^1.9.9 earlephilhower/ESP8266SAM@^1.0.1 - [env:t-deck-tft] extends = env:t-deck diff --git a/variants/t-deck/variant.h b/variants/esp32s3/t-deck/variant.h similarity index 100% rename from variants/t-deck/variant.h rename to variants/esp32s3/t-deck/variant.h diff --git a/variants/t-eth-elite/pins_arduino.h b/variants/esp32s3/t-eth-elite/pins_arduino.h similarity index 100% rename from variants/t-eth-elite/pins_arduino.h rename to variants/esp32s3/t-eth-elite/pins_arduino.h diff --git a/variants/t-eth-elite/platformio.ini b/variants/esp32s3/t-eth-elite/platformio.ini similarity index 93% rename from variants/t-eth-elite/platformio.ini rename to variants/esp32s3/t-eth-elite/platformio.ini index c2f183dd5..889270ceb 100644 --- a/variants/t-eth-elite/platformio.ini +++ b/variants/esp32s3/t-eth-elite/platformio.ini @@ -7,7 +7,7 @@ build_flags = ${esp32s3_base.build_flags} -D T_ETH_ELITE -D HAS_UDP_MULTICAST=1 - -I variants/t-eth-elite + -I variants/esp32s3/t-eth-elite -D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. lib_ignore = diff --git a/variants/t-eth-elite/rfswitch.h b/variants/esp32s3/t-eth-elite/rfswitch.h similarity index 100% rename from variants/t-eth-elite/rfswitch.h rename to variants/esp32s3/t-eth-elite/rfswitch.h diff --git a/variants/t-eth-elite/variant.h b/variants/esp32s3/t-eth-elite/variant.h similarity index 100% rename from variants/t-eth-elite/variant.h rename to variants/esp32s3/t-eth-elite/variant.h diff --git a/variants/t-watch-s3/pins_arduino.h b/variants/esp32s3/t-watch-s3/pins_arduino.h similarity index 100% rename from variants/t-watch-s3/pins_arduino.h rename to variants/esp32s3/t-watch-s3/pins_arduino.h diff --git a/variants/t-watch-s3/platformio.ini b/variants/esp32s3/t-watch-s3/platformio.ini similarity index 93% rename from variants/t-watch-s3/platformio.ini rename to variants/esp32s3/t-watch-s3/platformio.ini index f98237943..59ff8891d 100644 --- a/variants/t-watch-s3/platformio.ini +++ b/variants/esp32s3/t-watch-s3/platformio.ini @@ -8,7 +8,7 @@ upload_protocol = esptool build_flags = ${esp32_base.build_flags} -DT_WATCH_S3 - -Ivariants/t-watch-s3 + -Ivariants/esp32s3/t-watch-s3 -DPCF8563_RTC=0x51 -DHAS_BMA423=1 diff --git a/variants/t-watch-s3/variant.h b/variants/esp32s3/t-watch-s3/variant.h similarity index 100% rename from variants/t-watch-s3/variant.h rename to variants/esp32s3/t-watch-s3/variant.h diff --git a/variants/tbeam-s3-core/pins_arduino.h b/variants/esp32s3/tbeam-s3-core/pins_arduino.h similarity index 100% rename from variants/tbeam-s3-core/pins_arduino.h rename to variants/esp32s3/tbeam-s3-core/pins_arduino.h diff --git a/variants/tbeam-s3-core/platformio.ini b/variants/esp32s3/tbeam-s3-core/platformio.ini similarity index 71% rename from variants/tbeam-s3-core/platformio.ini rename to variants/esp32s3/tbeam-s3-core/platformio.ini index a7bdf963f..fba8e4003 100644 --- a/variants/tbeam-s3-core/platformio.ini +++ b/variants/esp32s3/tbeam-s3-core/platformio.ini @@ -11,5 +11,5 @@ lib_deps = build_flags = ${esp32s3_base.build_flags} - -Ivariants/tbeam-s3-core - -DPCF8563_RTC=0x51 ;Putting definitions in variant.h does not compile correctly + -I variants/esp32s3/tbeam-s3-core + -D PCF8563_RTC=0x51 ;Putting definitions in variant.h does not compile correctly diff --git a/variants/tbeam-s3-core/variant.h b/variants/esp32s3/tbeam-s3-core/variant.h similarity index 100% rename from variants/tbeam-s3-core/variant.h rename to variants/esp32s3/tbeam-s3-core/variant.h diff --git a/variants/tlora_t3s3_epaper/nicheGraphics.h b/variants/esp32s3/tlora_t3s3_epaper/nicheGraphics.h similarity index 100% rename from variants/tlora_t3s3_epaper/nicheGraphics.h rename to variants/esp32s3/tlora_t3s3_epaper/nicheGraphics.h diff --git a/variants/tlora_t3s3_epaper/pins_arduino.h b/variants/esp32s3/tlora_t3s3_epaper/pins_arduino.h similarity index 100% rename from variants/tlora_t3s3_epaper/pins_arduino.h rename to variants/esp32s3/tlora_t3s3_epaper/pins_arduino.h diff --git a/variants/tlora_t3s3_epaper/platformio.ini b/variants/esp32s3/tlora_t3s3_epaper/platformio.ini similarity index 85% rename from variants/tlora_t3s3_epaper/platformio.ini rename to variants/esp32s3/tlora_t3s3_epaper/platformio.ini index 0750b5bbb..71644ee77 100644 --- a/variants/tlora_t3s3_epaper/platformio.ini +++ b/variants/esp32s3/tlora_t3s3_epaper/platformio.ini @@ -5,7 +5,9 @@ board_check = true upload_protocol = esptool build_flags = - ${esp32_base.build_flags} -D TLORA_T3S3_EPAPER -I variants/tlora_t3s3_epaper + ${esp32_base.build_flags} + -D TLORA_T3S3_EPAPER + -I variants/esp32s3/tlora_t3s3_epaper -DGPS_POWER_TOGGLE -DUSE_EINK -DEINK_DISPLAY_MODEL=GxEPD2_213_BN @@ -29,8 +31,8 @@ build_src_filter = build_flags = ${esp32s3_base.build_flags} ${inkhud.build_flags} - -I variants/tlora_t3s3_epaper + -I variants/esp32s3/tlora_t3s3_epaper -D TLORA_T3S3_EPAPER lib_deps = ${inkhud.lib_deps} ; InkHUD libs first, so we get GFXRoot instead of AdafruitGFX - ${esp32s3_base.lib_deps} \ No newline at end of file + ${esp32s3_base.lib_deps} diff --git a/variants/tlora_t3s3_epaper/variant.h b/variants/esp32s3/tlora_t3s3_epaper/variant.h similarity index 100% rename from variants/tlora_t3s3_epaper/variant.h rename to variants/esp32s3/tlora_t3s3_epaper/variant.h diff --git a/variants/tlora_t3s3_v1/pins_arduino.h b/variants/esp32s3/tlora_t3s3_v1/pins_arduino.h similarity index 100% rename from variants/tlora_t3s3_v1/pins_arduino.h rename to variants/esp32s3/tlora_t3s3_v1/pins_arduino.h diff --git a/variants/tlora_t3s3_v1/platformio.ini b/variants/esp32s3/tlora_t3s3_v1/platformio.ini similarity index 58% rename from variants/tlora_t3s3_v1/platformio.ini rename to variants/esp32s3/tlora_t3s3_v1/platformio.ini index 0a5797280..d9624f043 100644 --- a/variants/tlora_t3s3_v1/platformio.ini +++ b/variants/esp32s3/tlora_t3s3_v1/platformio.ini @@ -5,5 +5,5 @@ board_check = true upload_protocol = esptool build_flags = - ${esp32_base.build_flags} -D TLORA_T3S3_V1 -I variants/tlora_t3s3_v1 - -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 + ${esp32_base.build_flags} -D TLORA_T3S3_V1 -I variants/esp32s3/tlora_t3s3_v1 + -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. diff --git a/variants/tlora_t3s3_v1/rfswitch.h b/variants/esp32s3/tlora_t3s3_v1/rfswitch.h similarity index 100% rename from variants/tlora_t3s3_v1/rfswitch.h rename to variants/esp32s3/tlora_t3s3_v1/rfswitch.h diff --git a/variants/tlora_t3s3_v1/variant.h b/variants/esp32s3/tlora_t3s3_v1/variant.h similarity index 100% rename from variants/tlora_t3s3_v1/variant.h rename to variants/esp32s3/tlora_t3s3_v1/variant.h diff --git a/variants/tracksenger/internal/pins_arduino.h b/variants/esp32s3/tracksenger/internal/pins_arduino.h similarity index 100% rename from variants/tracksenger/internal/pins_arduino.h rename to variants/esp32s3/tracksenger/internal/pins_arduino.h diff --git a/variants/tracksenger/internal/variant.h b/variants/esp32s3/tracksenger/internal/variant.h similarity index 100% rename from variants/tracksenger/internal/variant.h rename to variants/esp32s3/tracksenger/internal/variant.h diff --git a/variants/tracksenger/lcd/pins_arduino.h b/variants/esp32s3/tracksenger/lcd/pins_arduino.h similarity index 100% rename from variants/tracksenger/lcd/pins_arduino.h rename to variants/esp32s3/tracksenger/lcd/pins_arduino.h diff --git a/variants/tracksenger/lcd/variant.h b/variants/esp32s3/tracksenger/lcd/variant.h similarity index 100% rename from variants/tracksenger/lcd/variant.h rename to variants/esp32s3/tracksenger/lcd/variant.h diff --git a/variants/tracksenger/oled/pins_arduino.h b/variants/esp32s3/tracksenger/oled/pins_arduino.h similarity index 100% rename from variants/tracksenger/oled/pins_arduino.h rename to variants/esp32s3/tracksenger/oled/pins_arduino.h diff --git a/variants/tracksenger/oled/variant.h b/variants/esp32s3/tracksenger/oled/variant.h similarity index 100% rename from variants/tracksenger/oled/variant.h rename to variants/esp32s3/tracksenger/oled/variant.h diff --git a/variants/tracksenger/platformio.ini b/variants/esp32s3/tracksenger/platformio.ini similarity index 85% rename from variants/tracksenger/platformio.ini rename to variants/esp32s3/tracksenger/platformio.ini index b36b9c45a..0e9f08541 100644 --- a/variants/tracksenger/platformio.ini +++ b/variants/esp32s3/tracksenger/platformio.ini @@ -5,7 +5,8 @@ board_build.partitions = default_8MB.csv upload_protocol = esp-builtin build_flags = - ${esp32s3_base.build_flags} -I variants/tracksenger/internal + ${esp32s3_base.build_flags} + -I variants/esp32s3/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 @@ -21,7 +22,8 @@ board_build.partitions = default_8MB.csv upload_protocol = esp-builtin build_flags = - ${esp32s3_base.build_flags} -I variants/tracksenger/lcd + ${esp32s3_base.build_flags} + -I variants/esp32s3/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 @@ -37,7 +39,8 @@ board_build.partitions = default_8MB.csv upload_protocol = esp-builtin build_flags = - ${esp32s3_base.build_flags} -I variants/tracksenger/oled + ${esp32s3_base.build_flags} + -I variants/esp32s3/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/pins_arduino.h b/variants/esp32s3/unphone/pins_arduino.h similarity index 100% rename from variants/unphone/pins_arduino.h rename to variants/esp32s3/unphone/pins_arduino.h diff --git a/variants/unphone/platformio.ini b/variants/esp32s3/unphone/platformio.ini similarity index 96% rename from variants/unphone/platformio.ini rename to variants/esp32s3/unphone/platformio.ini index b9da6d0e5..ecb1cbd67 100644 --- a/variants/unphone/platformio.ini +++ b/variants/esp32s3/unphone/platformio.ini @@ -11,7 +11,7 @@ monitor_filters = esp32_exception_decoder build_flags = ${esp32s3_base.build_flags} -D UNPHONE - -I variants/unphone + -I variants/esp32s3/unphone -D ARDUINO_USB_MODE=0 -D UNPHONE_ACCEL=0 -D UNPHONE_TOUCHS=0 @@ -23,7 +23,7 @@ build_flags = build_src_filter = ${esp32s3_base.build_src_filter} - +<../variants/unphone> + +<../variants/esp32s3/unphone> lib_deps = ${esp32s3_base.lib_deps} lovyan03/LovyanGFX@ 1.2.0 diff --git a/variants/unphone/variant.cpp b/variants/esp32s3/unphone/variant.cpp similarity index 100% rename from variants/unphone/variant.cpp rename to variants/esp32s3/unphone/variant.cpp diff --git a/variants/unphone/variant.h b/variants/esp32s3/unphone/variant.h similarity index 100% rename from variants/unphone/variant.h rename to variants/esp32s3/unphone/variant.h From 36b94cf823faa82e1fb67767daa782e449fc8ddc Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Sun, 20 Jul 2025 18:53:40 -0500 Subject: [PATCH 35/45] Unify the shutdown proceedure (#7393) * Unify the shutdown proceedure * Don't double save nodeDB on shutdown * Re-tool button shutdown to better correspond to tones * Beep then save --------- Co-authored-by: Ben Meadors --- src/Power.cpp | 15 ++++++++-- src/buzz/BuzzerFeedbackThread.cpp | 4 --- src/graphics/draw/MenuHandler.cpp | 5 ++-- src/input/ButtonThread.cpp | 44 +++++++++++++--------------- src/input/ButtonThread.h | 2 +- src/input/ExpressLRSFiveWay.cpp | 9 +----- src/main.cpp | 5 ++-- src/modules/SystemCommandsModule.cpp | 6 +--- src/shutdown.h | 15 +--------- 9 files changed, 43 insertions(+), 62 deletions(-) diff --git a/src/Power.cpp b/src/Power.cpp index 9c67977bd..385cc1a65 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -681,7 +681,14 @@ bool Power::setup() void Power::shutdown() { - LOG_INFO("Shutting Down"); + +#if HAS_SCREEN + if (screen) { + screen->showSimpleBanner("Shutting Down...", 0); // stays on screen + } +#endif + playShutdownMelody(); + nodeDB->saveToDisk(); #if defined(ARCH_NRF52) || defined(ARCH_ESP32) || defined(ARCH_RP2040) #ifdef PIN_LED1 @@ -693,7 +700,11 @@ void Power::shutdown() #ifdef PIN_LED3 ledOff(PIN_LED3); #endif - doDeepSleep(DELAY_FOREVER, false, false); + doDeepSleep(DELAY_FOREVER, false, true); +#elif defined(ARCH_PORTDUINO) + exit(EXIT_SUCCESS); +#else + LOG_WARN("FIXME implement shutdown for this platform"); #endif } diff --git a/src/buzz/BuzzerFeedbackThread.cpp b/src/buzz/BuzzerFeedbackThread.cpp index b644ea8f4..ce762c764 100644 --- a/src/buzz/BuzzerFeedbackThread.cpp +++ b/src/buzz/BuzzerFeedbackThread.cpp @@ -47,10 +47,6 @@ int BuzzerFeedbackThread::handleInputEvent(const InputEvent *event) playComboTune(); // Ping sent feedback break; - case INPUT_BROKER_SHUTDOWN: - playShutdownMelody(); // Shutdown feedback - break; - default: // For other events, check if it's a printable character if (event->kbchar >= 32 && event->kbchar <= 126) { diff --git a/src/graphics/draw/MenuHandler.cpp b/src/graphics/draw/MenuHandler.cpp index 7ed9c4ea1..83198a7c5 100644 --- a/src/graphics/draw/MenuHandler.cpp +++ b/src/graphics/draw/MenuHandler.cpp @@ -815,9 +815,8 @@ void menuHandler::shutdownMenu() bannerOptions.optionsCount = 2; bannerOptions.bannerCallback = [](int selected) -> void { if (selected == 1) { - IF_SCREEN(screen->showSimpleBanner("Shutting Down...", 0)); - nodeDB->saveToDisk(); - power->shutdown(); + InputEvent event = {.inputEvent = (input_broker_event)INPUT_BROKER_SHUTDOWN, .kbchar = 0, .touchX = 0, .touchY = 0}; + inputBroker->injectInputEvent(&event); } else { menuQueue = power_menu; screen->runNow(); diff --git a/src/input/ButtonThread.cpp b/src/input/ButtonThread.cpp index ad667f003..233bbefe0 100644 --- a/src/input/ButtonThread.cpp +++ b/src/input/ButtonThread.cpp @@ -53,23 +53,21 @@ bool ButtonThread::initButton(const ButtonConfig &config) }, this); - if (config.longPress != INPUT_BROKER_NONE) { - _longPress = config.longPress; - userButton.attachLongPressStart( - [](void *callerThread) -> void { - ButtonThread *thread = (ButtonThread *)callerThread; - // if (millis() > 30000) // hold off 30s after boot - thread->btnEvent = BUTTON_EVENT_LONG_PRESSED; - }, - this); - userButton.attachLongPressStop( - [](void *callerThread) -> void { - ButtonThread *thread = (ButtonThread *)callerThread; - // if (millis() > 30000) // hold off 30s after boot - thread->btnEvent = BUTTON_EVENT_LONG_RELEASED; - }, - this); - } + _longPress = config.longPress; + userButton.attachLongPressStart( + [](void *callerThread) -> void { + ButtonThread *thread = (ButtonThread *)callerThread; + // if (millis() > 30000) // hold off 30s after boot + thread->btnEvent = BUTTON_EVENT_LONG_PRESSED; + }, + this); + userButton.attachLongPressStop( + [](void *callerThread) -> void { + ButtonThread *thread = (ButtonThread *)callerThread; + // if (millis() > 30000) // hold off 30s after boot + thread->btnEvent = BUTTON_EVENT_LONG_RELEASED; + }, + this); if (config.doublePress != INPUT_BROKER_NONE) { _doublePress = config.doublePress; @@ -202,11 +200,11 @@ int32_t ButtonThread::runOnce() break; } - - // Forward long press to InputBroker (but NOT as DOWN/SELECT, just forward a "button long press" event) - evt.inputEvent = _longPress; - this->notifyObservers(&evt); - + if (_longPress != INPUT_BROKER_NONE) { + // Forward long press to InputBroker (but NOT as DOWN/SELECT, just forward a "button long press" event) + evt.inputEvent = _longPress; + this->notifyObservers(&evt); + } // Reset combination tracking waitingForLongPress = false; @@ -253,7 +251,7 @@ int32_t ButtonThread::runOnce() // may wake the board immediatedly. case BUTTON_EVENT_LONG_RELEASED: { - LOG_INFO("LONG PRESS RELEASE"); + LOG_INFO("LONG PRESS RELEASE AFTER %u MILLIS", millis() - buttonPressStartTime); if (millis() > 30000 && _longLongPress != INPUT_BROKER_NONE && (millis() - buttonPressStartTime) >= _longLongPressTime) { evt.inputEvent = _longLongPress; diff --git a/src/input/ButtonThread.h b/src/input/ButtonThread.h index 2358e609d..bbc8da2a7 100644 --- a/src/input/ButtonThread.h +++ b/src/input/ButtonThread.h @@ -18,7 +18,7 @@ struct ButtonConfig { uint16_t longPressTime = 500; input_broker_event doublePress = INPUT_BROKER_NONE; input_broker_event longLongPress = INPUT_BROKER_NONE; - uint16_t longLongPressTime = 5000; + uint16_t longLongPressTime = 3900; input_broker_event triplePress = INPUT_BROKER_NONE; input_broker_event shortLong = INPUT_BROKER_NONE; bool touchQuirk = false; diff --git a/src/input/ExpressLRSFiveWay.cpp b/src/input/ExpressLRSFiveWay.cpp index 53bcedc63..77f9e9993 100644 --- a/src/input/ExpressLRSFiveWay.cpp +++ b/src/input/ExpressLRSFiveWay.cpp @@ -233,14 +233,7 @@ void ExpressLRSFiveWay::sendAdhocPing() // Contained as one method for easier remapping of buttons by user void ExpressLRSFiveWay::shutdown() { - LOG_INFO("Shutdown from long press"); - powerFSM.trigger(EVENT_PRESS); - screen->startAlert("Shutting Down..."); - // Don't set alerting = true. We don't want to auto-dismiss this alert. - - playShutdownMelody(); // In case user adds a buzzer - - shutdownAtMsec = millis() + 3000; + sendKey(INPUT_BROKER_SHUTDOWN); } void ExpressLRSFiveWay::click() diff --git a/src/main.cpp b/src/main.cpp index c37001307..2e2adfd46 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1042,8 +1042,9 @@ void setup() mainDelay.interruptFromISR(&higherWake); }; userConfigNoScreen.singlePress = INPUT_BROKER_USER_PRESS; - userConfigNoScreen.longPress = INPUT_BROKER_SHUTDOWN; - userConfigNoScreen.longPressTime = 5000; + userConfigNoScreen.longPress = INPUT_BROKER_NONE; + userConfigNoScreen.longPressTime = 500; + userConfigNoScreen.longLongPress = INPUT_BROKER_SHUTDOWN; userConfigNoScreen.doublePress = INPUT_BROKER_SEND_PING; userConfigNoScreen.triplePress = INPUT_BROKER_GPS_TOGGLE; UserButtonThread->initButton(userConfigNoScreen); diff --git a/src/modules/SystemCommandsModule.cpp b/src/modules/SystemCommandsModule.cpp index ab9439b39..2d534bd67 100644 --- a/src/modules/SystemCommandsModule.cpp +++ b/src/modules/SystemCommandsModule.cpp @@ -107,11 +107,7 @@ int SystemCommandsModule::handleInputEvent(const InputEvent *event) return true; // Power control case INPUT_BROKER_SHUTDOWN: - LOG_ERROR("Shutting Down"); - IF_SCREEN(screen->showSimpleBanner("Shutting Down...")); - nodeDB->saveToDisk(); - shutdownAtMsec = millis() + DEFAULT_SHUTDOWN_SECONDS * 1000; - // runState = CANNED_MESSAGE_RUN_STATE_INACTIVE; + shutdownAtMsec = millis(); return true; default: diff --git a/src/shutdown.h b/src/shutdown.h index 7e2120149..973e388b1 100644 --- a/src/shutdown.h +++ b/src/shutdown.h @@ -40,21 +40,8 @@ void powerCommandsCheck() #endif } -#if defined(ARCH_ESP32) || defined(ARCH_NRF52) - if (shutdownAtMsec && screen) { - screen->showSimpleBanner("Shutting Down...", 0); // stays on screen - } -#endif - if (shutdownAtMsec && millis() > shutdownAtMsec) { - LOG_INFO("Shut down from admin command"); -#if defined(ARCH_NRF52) || defined(ARCH_ESP32) || defined(ARCH_RP2040) - playShutdownMelody(); + shutdownAtMsec = 0; power->shutdown(); -#elif defined(ARCH_PORTDUINO) - exit(EXIT_SUCCESS); -#else - LOG_WARN("FIXME implement shutdown for this platform"); -#endif } } \ No newline at end of file From 8345c21effe958588ccca3906a24104fd4f476ac Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 20 Jul 2025 20:02:32 -0500 Subject: [PATCH 36/45] STM32 doesn't play --- src/Power.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Power.cpp b/src/Power.cpp index 385cc1a65..ee97eda6e 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -687,7 +687,9 @@ void Power::shutdown() screen->showSimpleBanner("Shutting Down...", 0); // stays on screen } #endif +#ifndef ARCH_STM32 playShutdownMelody(); +#endif nodeDB->saveToDisk(); #if defined(ARCH_NRF52) || defined(ARCH_ESP32) || defined(ARCH_RP2040) From 8aef3c44f4f060c2008d3c950981d85af3bb5e92 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 20 Jul 2025 20:12:10 -0500 Subject: [PATCH 37/45] Text message rate limiting should return routing error instead (#7365) * Text message rate limiting should return routing error instead * Proper rooting * Update PhoneAPI.cpp * Update PhoneAPI.cpp --- src/mesh/MeshService.cpp | 16 ++++++++++++++++ src/mesh/MeshService.h | 3 +++ src/mesh/PhoneAPI.cpp | 3 ++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/mesh/MeshService.cpp b/src/mesh/MeshService.cpp index 297c7b2ed..2cc4197c1 100644 --- a/src/mesh/MeshService.cpp +++ b/src/mesh/MeshService.cpp @@ -16,6 +16,7 @@ #include "meshUtils.h" #include "modules/NodeInfoModule.h" #include "modules/PositionModule.h" +#include "modules/RoutingModule.h" #include "power.h" #include #include @@ -333,6 +334,21 @@ void MeshService::sendMqttMessageToClientProxy(meshtastic_MqttClientProxyMessage fromNum++; } +void MeshService::sendRoutingErrorResponse(meshtastic_Routing_Error error, const meshtastic_MeshPacket *mp) +{ + if (!mp) { + LOG_WARN("Cannot send routing error response: null packet"); + return; + } + + // Use the routing module to send the error response + if (routingModule) { + routingModule->sendAckNak(error, mp->from, mp->id, mp->channel); + } else { + LOG_ERROR("Cannot send routing error response: no routing module"); + } +} + void MeshService::sendClientNotification(meshtastic_ClientNotification *n) { LOG_DEBUG("Send client notification to phone"); diff --git a/src/mesh/MeshService.h b/src/mesh/MeshService.h index e2e430c03..89d3b15d0 100644 --- a/src/mesh/MeshService.h +++ b/src/mesh/MeshService.h @@ -148,6 +148,9 @@ class MeshService /// Send a ClientNotification to the phone void sendClientNotification(meshtastic_ClientNotification *cn); + /// Send an error response to the phone + void sendRoutingErrorResponse(meshtastic_Routing_Error error, const meshtastic_MeshPacket *mp); + bool isToPhoneQueueEmpty(); ErrorCode sendQueueStatusToPhone(const meshtastic_QueueStatus &qs, ErrorCode res, uint32_t mesh_packet_id); diff --git a/src/mesh/PhoneAPI.cpp b/src/mesh/PhoneAPI.cpp index 287de38fa..e0b81bedd 100644 --- a/src/mesh/PhoneAPI.cpp +++ b/src/mesh/PhoneAPI.cpp @@ -686,7 +686,8 @@ bool PhoneAPI::handleToRadioPacket(meshtastic_MeshPacket &p) LOG_WARN("Rate limit portnum %d", p.decoded.portnum); meshtastic_QueueStatus qs = router->getQueueStatus(); service->sendQueueStatusToPhone(qs, 0, p.id); - sendNotification(meshtastic_LogRecord_Level_WARNING, p.id, "Text messages can only be sent once every 2 seconds"); + service->sendRoutingErrorResponse(meshtastic_Routing_Error_RATE_LIMIT_EXCEEDED, &p); + // sendNotification(meshtastic_LogRecord_Level_WARNING, p.id, "Text messages can only be sent once every 2 seconds"); return false; } lastPortNumToRadio[p.decoded.portnum] = millis(); From 25b8d9b0ca9de9633779b15954f29401f4c008e0 Mon Sep 17 00:00:00 2001 From: Austin Date: Sun, 20 Jul 2025 23:30:52 -0400 Subject: [PATCH 38/45] ARCH_STM32*WL* macro fix (#7397) --- src/Power.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Power.cpp b/src/Power.cpp index ee97eda6e..ed2d867d8 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -687,7 +687,7 @@ void Power::shutdown() screen->showSimpleBanner("Shutting Down...", 0); // stays on screen } #endif -#ifndef ARCH_STM32 +#if !defined(ARCH_STM32WL) playShutdownMelody(); #endif nodeDB->saveToDisk(); From 19dc2873c55884b7e6f3066448002cb1f543e974 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 21 Jul 2025 20:07:45 +1000 Subject: [PATCH 39/45] Upgrade trunk (#7400) Co-authored-by: vidplace7 <1779290+vidplace7@users.noreply.github.com> --- .trunk/trunk.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index e1abbcc88..d6a8cc8c1 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -9,14 +9,14 @@ plugins: lint: enabled: - checkov@3.2.451 - - renovate@41.37.9 + - renovate@41.38.1 - prettier@3.6.2 - trufflehog@3.90.0 - yamllint@1.37.1 - bandit@1.8.6 - trivy@0.64.1 - taplo@0.9.3 - - ruff@0.12.3 + - ruff@0.12.4 - isort@6.0.1 - markdownlint@0.45.0 - oxipng@9.1.5 From b3525c256908e61ae2c9e63491d8e5fc2cfd02ce Mon Sep 17 00:00:00 2001 From: Manuel <71137295+mverch67@users.noreply.github.com> Date: Mon, 21 Jul 2025 19:33:24 +0200 Subject: [PATCH 40/45] T-Deck Pro support (#6936) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * initial draft * fix touchscreen * fix touchscreen * optimize GPS * battery management * cleanup comments * enable vibration motor * refactored TCA8418Keyboard * update HW_VENDOR id * manual fixes after merge * fix keyboard/BQ27220 detection * add BQ27220 * modify charge voltage and current * update XpowerLib * design capacity * try-fix charge behavior * improve Vbus detection * moved variant into esp32s3 folder --------- Co-authored-by: Ben Meadors Co-authored-by: Thomas Göttgens --- arch/esp32/esp32.ini | 4 +- boards/t-deck-pro.json | 43 ++ src/Power.cpp | 152 ++++++ src/configuration.h | 10 +- src/detect/ScanI2C.h | 7 +- src/detect/ScanI2CTwoWire.cpp | 21 +- src/graphics/EInkDisplay2.cpp | 2 +- src/graphics/Screen.cpp | 2 +- src/input/TCA8418Keyboard.cpp | 485 ++---------------- src/input/TCA8418Keyboard.h | 85 +-- src/input/TCA8418KeyboardBase.cpp | 372 ++++++++++++++ src/input/TCA8418KeyboardBase.h | 170 ++++++ src/input/TDeckProKeyboard.cpp | 196 +++++++ src/input/TDeckProKeyboard.h | 27 + src/input/TLoraPagerKeyboard.h | 12 + src/input/kbI2cBase.cpp | 71 ++- src/input/kbI2cBase.h | 5 +- src/main.cpp | 9 + src/mesh/NodeDB.cpp | 8 +- src/platform/esp32/architecture.h | 2 + .../extra_variants/t_deck_pro/variant.cpp | 28 + src/power.h | 2 + variants/esp32s3/t-deck-pro/pins_arduino.h | 19 + variants/esp32s3/t-deck-pro/platformio.ini | 24 + variants/esp32s3/t-deck-pro/variant.h | 94 ++++ 25 files changed, 1298 insertions(+), 552 deletions(-) create mode 100644 boards/t-deck-pro.json create mode 100644 src/input/TCA8418KeyboardBase.cpp create mode 100644 src/input/TCA8418KeyboardBase.h create mode 100644 src/input/TDeckProKeyboard.cpp create mode 100644 src/input/TDeckProKeyboard.h create mode 100644 src/input/TLoraPagerKeyboard.h create mode 100644 src/platform/extra_variants/t_deck_pro/variant.cpp create mode 100644 variants/esp32s3/t-deck-pro/pins_arduino.h create mode 100644 variants/esp32s3/t-deck-pro/platformio.ini create mode 100644 variants/esp32s3/t-deck-pro/variant.h diff --git a/arch/esp32/esp32.ini b/arch/esp32/esp32.ini index 6b9ebcb24..9d21562a8 100644 --- a/arch/esp32/esp32.ini +++ b/arch/esp32/esp32.ini @@ -54,8 +54,8 @@ lib_deps = h2zero/NimBLE-Arduino@^1.4.3 # renovate: datasource=git-refs depName=libpax packageName=https://github.com/dbinfrago/libpax gitBranch=master https://github.com/dbinfrago/libpax/archive/3cdc0371c375676a97967547f4065607d4c53fd1.zip - # renovate: datasource=custom.pio depName=XPowersLib packageName=lewisxhe/library/XPowersLib - lewisxhe/XPowersLib@0.3.0 + # renovate: datasource=git-refs depName=XPowersLib packageName=https://github.com/lewisxhe/XPowersLib gitBranch=master + https://github.com/lewisxhe/XPowersLib/archive/refs/tags/v0.3.0.zip # renovate: datasource=git-refs depName=meshtastic-ESP32_Codec2 packageName=https://github.com/meshtastic/ESP32_Codec2 gitBranch=master https://github.com/meshtastic/ESP32_Codec2/archive/633326c78ac251c059ab3a8c430fcdf25b41672f.zip # renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto diff --git a/boards/t-deck-pro.json b/boards/t-deck-pro.json new file mode 100644 index 000000000..2f4bd594a --- /dev/null +++ b/boards/t-deck-pro.json @@ -0,0 +1,43 @@ +{ + "build": { + "arduino": { + "ldscript": "esp32s3_out.ld", + "memory_type": "qio_qspi", + "partitions": "default_16MB.csv" + }, + "core": "esp32", + "extra_flags": [ + "-DBOARD_HAS_PSRAM", + "-DARDUINO_USB_CDC_ON_BOOT=1", + "-DARDUINO_USB_MODE=1", + "-DARDUINO_RUNNING_CORE=1", + "-DARDUINO_EVENT_RUNNING_CORE=1" + ], + "f_cpu": "240000000L", + "f_flash": "80000000L", + "flash_mode": "qio", + "hwids": [["0x303A", "0x1001"]], + "mcu": "esp32s3", + "variant": "esp32s3" + }, + "connectivity": ["wifi", "bluetooth", "lora"], + "debug": { + "default_tool": "esp-builtin", + "onboard_tools": ["esp-builtin"], + "openocd_target": "esp32s3.cfg" + }, + "frameworks": ["arduino", "espidf"], + "name": "LilyGo T-Deck Pro S3 (16M Flash 8M QSPI PSRAM )", + "upload": { + "flash_size": "16MB", + "maximum_ram_size": 327680, + "maximum_size": 16777216, + "require_upload_port": true, + "speed": 921600 + }, + "monitor": { + "speed": 115200 + }, + "url": "https://lilygo.cc/products/t-deck-pro", + "vendor": "LilyGo" +} diff --git a/src/Power.cpp b/src/Power.cpp index ed2d867d8..298f08e0d 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -120,6 +120,15 @@ NullSensor max17048Sensor; RAK9154Sensor rak9154Sensor; #endif +#ifdef HAS_PPM +// note: XPOWERS_CHIP_XXX must be defined in variant.h +#include +#endif + +#ifdef HAS_BQ27220 +#include "bq27220.h" +#endif + #ifdef HAS_PMU XPowersLibInterface *PMU = NULL; #else @@ -665,6 +674,8 @@ bool Power::setup() found = true; } else if (lipoInit()) { found = true; + } else if (lipoChargerInit()) { + found = true; } else if (analogInit()) { found = true; } @@ -1250,3 +1261,144 @@ bool Power::lipoInit() return false; } #endif + +#if defined(HAS_PPM) && HAS_PPM + +/** + * Adapter class for BQ25896/BQ27220 Lipo battery charger. + */ +class LipoCharger : public HasBatteryLevel +{ + private: + XPowersPPM *ppm = nullptr; + BQ27220 *bq = nullptr; + + public: + /** + * Init the I2C BQ25896 Lipo battery charger + */ + bool runOnce() + { + if (ppm == nullptr) { + ppm = new XPowersPPM; + bool result = ppm->init(Wire, I2C_SDA, I2C_SCL, BQ25896_ADDR); + if (result) { + LOG_INFO("PPM BQ25896 init succeeded"); + // Set the minimum operating voltage. Below this voltage, the PPM will protect + // ppm->setSysPowerDownVoltage(3100); + + // Set input current limit, default is 500mA + // ppm->setInputCurrentLimit(800); + + // Disable current limit pin + // ppm->disableCurrentLimitPin(); + + // Set the charging target voltage, Range:3840 ~ 4608mV ,step:16 mV + ppm->setChargeTargetVoltage(4288); + + // Set the precharge current , Range: 64mA ~ 1024mA ,step:64mA + // ppm->setPrechargeCurr(64); + + // The premise is that limit pin is disabled, or it will + // only follow the maximum charging current set by limit pin. + // Set the charging current , Range:0~5056mA ,step:64mA + ppm->setChargerConstantCurr(1024); + + // To obtain voltage data, the ADC must be enabled first + ppm->enableMeasure(); + + // Turn on charging function + // If there is no battery connected, do not turn on the charging function + ppm->enableCharge(); + } else { + LOG_WARN("PPM BQ25896 init failed"); + delete ppm; + ppm = nullptr; + return false; + } + } + if (bq == nullptr) { + bq = new BQ27220; + bq->setDefaultCapacity(BQ27220_DESIGN_CAPACITY); + + bool result = bq->init(); + if (result) { + LOG_DEBUG("BQ27220 design capacity: %d", bq->getDesignCapacity()); + LOG_DEBUG("BQ27220 fullCharge capacity: %d", bq->getFullChargeCapacity()); + LOG_DEBUG("BQ27220 remaining capacity: %d", bq->getRemainingCapacity()); + return true; + } else { + LOG_WARN("BQ27220 init failed"); + delete bq; + bq = nullptr; + return false; + } + } + return false; + } + + /** + * Battery state of charge, from 0 to 100 or -1 for unknown + */ + virtual int getBatteryPercent() override + { + return -1; + // return bq->getChargePercent(); // don't use BQ27220 for battery percent, it is not calibrated + } + + /** + * The raw voltage of the battery in millivolts, or NAN if unknown + */ + virtual uint16_t getBattVoltage() override { return bq->getVoltage(); } + + /** + * return true if there is a battery installed in this unit + */ + virtual bool isBatteryConnect() override { return ppm->getBattVoltage() > 0; } + + /** + * return true if there is an external power source detected + */ + virtual bool isVbusIn() override { return ppm->getVbusVoltage() > 0; } + + /** + * return true if the battery is currently charging + */ + virtual bool isCharging() override + { + bool isCharging = ppm->isCharging(); + if (isCharging) { + LOG_DEBUG("BQ27220 time to full charge: %d min", bq->getTimeToFull()); + } else { + if (!ppm->isVbusIn()) { + LOG_DEBUG("BQ27220 time to empty: %d min (%d mAh)", bq->getTimeToEmpty(), bq->getRemainingCapacity()); + } + } + return isCharging; + } +}; + +LipoCharger lipoCharger; + +/** + * Init the Lipo battery charger + */ +bool Power::lipoChargerInit() +{ + bool result = lipoCharger.runOnce(); + LOG_DEBUG("Power::lipoChargerInit lipo sensor is %s", result ? "ready" : "not ready yet"); + if (!result) + return false; + batteryLevel = &lipoCharger; + return true; +} + +#else +/** + * The Lipo battery level sensor is unavailable - default to AnalogBatteryLevel + */ +bool Power::lipoChargerInit() +{ + return false; +} +#endif diff --git a/src/configuration.h b/src/configuration.h index cddc7ba7a..0e24990b5 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -150,11 +150,12 @@ along with this program. If not, see . // Define if screen should be mirrored left to right // #define SCREEN_MIRROR -// I2C Keyboards (M5Stack, RAK14004, T-Deck) +// I2C Keyboards (M5Stack, RAK14004, T-Deck, T-Deck Pro, T-Lora Pager, CardKB, BBQ10, MPR121, TCA8418) #define CARDKB_ADDR 0x5F #define TDECK_KB_ADDR 0x55 #define BBQ10_KB_ADDR 0x1F #define MPR121_KB_ADDR 0x5A +#define TCA8418_KB_ADDR 0x34 // ----------------------------------------------------------------------------- // SENSOR @@ -193,8 +194,11 @@ along with this program. If not, see . #define MLX90614_ADDR_DEF 0x5A #define CGRADSENS_ADDR 0x66 #define LTR390UV_ADDR 0x53 -#define XPOWERS_AXP192_AXP2101_ADDRESS 0x34 // same adress as TCA8418 +#define XPOWERS_AXP192_AXP2101_ADDRESS 0x34 // same adress as TCA8418_KB #define PCT2075_ADDR 0x37 +#define BQ27220_ADDR 0x55 // same address as TDECK_KB +#define BQ25896_ADDR 0x6B +#define LTR553ALS_ADDR 0x23 // ----------------------------------------------------------------------------- // ACCELEROMETER @@ -208,6 +212,7 @@ along with this program. If not, see . #define BMX160_ADDR 0x69 #define ICM20948_ADDR 0x69 #define ICM20948_ADDR_ALT 0x68 +#define BHI260AP_ADDR 0x28 #define BMM150_ADDR 0x13 // ----------------------------------------------------------------------------- @@ -230,6 +235,7 @@ along with this program. If not, see . // Touchscreen // ----------------------------------------------------------------------------- #define FT6336U_ADDR 0x48 +#define CST328_ADDR 0x1A // ----------------------------------------------------------------------------- // RAK12035VB Soil Monitor (using RAK12023 up to 3 RAK12035 monitors can be connected) diff --git a/src/detect/ScanI2C.h b/src/detect/ScanI2C.h index dd290db98..c1358861b 100644 --- a/src/detect/ScanI2C.h +++ b/src/detect/ScanI2C.h @@ -74,7 +74,12 @@ class ScanI2C RAK12035, TCA8418KB, PCT2075, - BMM150, + CST328, + BQ25896, + BQ27220, + LTR553ALS, + BHI260AP, + BMM150 } DeviceType; // typedef uint8_t DeviceAddress; diff --git a/src/detect/ScanI2CTwoWire.cpp b/src/detect/ScanI2CTwoWire.cpp index 9e9441123..652d50d51 100644 --- a/src/detect/ScanI2CTwoWire.cpp +++ b/src/detect/ScanI2CTwoWire.cpp @@ -206,7 +206,17 @@ void ScanI2CTwoWire::scanPort(I2CPort port, uint8_t *address, uint8_t asize) } break; - SCAN_SIMPLE_CASE(TDECK_KB_ADDR, TDECKKB, "T-Deck keyboard", (uint8_t)addr.address); + case TDECK_KB_ADDR: + // Do we have the T-Deck keyboard or the T-Deck Pro battery sensor? + registerValue = getRegisterValue(ScanI2CTwoWire::RegisterLocation(addr, 0x04), 1); + if (registerValue != 0) { + logFoundDevice("BQ27220", (uint8_t)addr.address); + type = BQ27220; + } else { + logFoundDevice("TDECKKB", (uint8_t)addr.address); + type = TDECKKB; + } + break; SCAN_SIMPLE_CASE(BBQ10_KB_ADDR, BBQ10KB, "BB Q10", (uint8_t)addr.address); SCAN_SIMPLE_CASE(ST7567_ADDRESS, SCREEN_ST7567, "ST7567", (uint8_t)addr.address); @@ -396,6 +406,12 @@ void ScanI2CTwoWire::scanPort(I2CPort port, uint8_t *address, uint8_t asize) logFoundDevice("BQ24295", (uint8_t)addr.address); break; } + registerValue = getRegisterValue(ScanI2CTwoWire::RegisterLocation(addr, 0x14), 1); // get ID + if ((registerValue & 0b00000011) == 0b00000010) { + type = BQ25896; + logFoundDevice("BQ25896", (uint8_t)addr.address); + break; + } registerValue = getRegisterValue(ScanI2CTwoWire::RegisterLocation(addr, 0x0F), 1); // get ID if (registerValue == 0x6A) { type = LSM6DS3; @@ -447,6 +463,9 @@ void ScanI2CTwoWire::scanPort(I2CPort port, uint8_t *address, uint8_t asize) SCAN_SIMPLE_CASE(DFROBOT_RAIN_ADDR, DFROBOT_RAIN, "DFRobot Rain Gauge", (uint8_t)addr.address); SCAN_SIMPLE_CASE(LTR390UV_ADDR, LTR390UV, "LTR390UV", (uint8_t)addr.address); SCAN_SIMPLE_CASE(PCT2075_ADDR, PCT2075, "PCT2075", (uint8_t)addr.address); + SCAN_SIMPLE_CASE(CST328_ADDR, CST328, "CST328", (uint8_t)addr.address); + SCAN_SIMPLE_CASE(LTR553ALS_ADDR, LTR553ALS, "LTR553ALS", (uint8_t)addr.address); + SCAN_SIMPLE_CASE(BHI260AP_ADDR, BHI260AP, "BHI260AP", (uint8_t)addr.address); SCAN_SIMPLE_CASE(SCD4X_ADDR, SCD4X, "SCD4X", (uint8_t)addr.address); SCAN_SIMPLE_CASE(BMM150_ADDR, BMM150, "BMM150", (uint8_t)addr.address); #ifdef HAS_TPS65233 diff --git a/src/graphics/EInkDisplay2.cpp b/src/graphics/EInkDisplay2.cpp index 66c7938b5..3bd20feec 100644 --- a/src/graphics/EInkDisplay2.cpp +++ b/src/graphics/EInkDisplay2.cpp @@ -206,7 +206,7 @@ bool EInkDisplay::connect() adafruitDisplay->setRotation(0); adafruitDisplay->setPartialWindow(0, 0, EINK_WIDTH, EINK_HEIGHT); } -#elif defined(M5_COREINK) +#elif defined(M5_COREINK) || defined(T_DECK_PRO) auto lowLevel = new EINK_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY); adafruitDisplay = new GxEPD2_BW(*lowLevel); adafruitDisplay->init(115200, true, 40, false, SPI, SPISettings(4000000, MSBFIRST, SPI_MODE0)); diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index 87d394d69..f22a0d8a8 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -579,7 +579,7 @@ void Screen::setup() touchScreenImpl1->init(); } } -#elif HAS_TOUCHSCREEN +#elif HAS_TOUCHSCREEN && !defined(USE_EINK) touchScreenImpl1 = new TouchScreenImpl1(dispdev->getWidth(), dispdev->getHeight(), static_cast(dispdev)->getTouch); touchScreenImpl1->init(); diff --git a/src/input/TCA8418Keyboard.cpp b/src/input/TCA8418Keyboard.cpp index d99379b23..bd8338acf 100644 --- a/src/input/TCA8418Keyboard.cpp +++ b/src/input/TCA8418Keyboard.cpp @@ -1,116 +1,18 @@ -// Based on the MPR121 Keyboard and Adafruit TCA8418 library - #include "TCA8418Keyboard.h" -#include "configuration.h" - -#include - -// REGISTERS -// #define _TCA8418_REG_RESERVED 0x00 -#define _TCA8418_REG_CFG 0x01 // Configuration register -#define _TCA8418_REG_INT_STAT 0x02 // Interrupt status -#define _TCA8418_REG_KEY_LCK_EC 0x03 // Key lock and event counter -#define _TCA8418_REG_KEY_EVENT_A 0x04 // Key event register A -#define _TCA8418_REG_KEY_EVENT_B 0x05 // Key event register B -#define _TCA8418_REG_KEY_EVENT_C 0x06 // Key event register C -#define _TCA8418_REG_KEY_EVENT_D 0x07 // Key event register D -#define _TCA8418_REG_KEY_EVENT_E 0x08 // Key event register E -#define _TCA8418_REG_KEY_EVENT_F 0x09 // Key event register F -#define _TCA8418_REG_KEY_EVENT_G 0x0A // Key event register G -#define _TCA8418_REG_KEY_EVENT_H 0x0B // Key event register H -#define _TCA8418_REG_KEY_EVENT_I 0x0C // Key event register I -#define _TCA8418_REG_KEY_EVENT_J 0x0D // Key event register J -#define _TCA8418_REG_KP_LCK_TIMER 0x0E // Keypad lock1 to lock2 timer -#define _TCA8418_REG_UNLOCK_1 0x0F // Unlock register 1 -#define _TCA8418_REG_UNLOCK_2 0x10 // Unlock register 2 -#define _TCA8418_REG_GPIO_INT_STAT_1 0x11 // GPIO interrupt status 1 -#define _TCA8418_REG_GPIO_INT_STAT_2 0x12 // GPIO interrupt status 2 -#define _TCA8418_REG_GPIO_INT_STAT_3 0x13 // GPIO interrupt status 3 -#define _TCA8418_REG_GPIO_DAT_STAT_1 0x14 // GPIO data status 1 -#define _TCA8418_REG_GPIO_DAT_STAT_2 0x15 // GPIO data status 2 -#define _TCA8418_REG_GPIO_DAT_STAT_3 0x16 // GPIO data status 3 -#define _TCA8418_REG_GPIO_DAT_OUT_1 0x17 // GPIO data out 1 -#define _TCA8418_REG_GPIO_DAT_OUT_2 0x18 // GPIO data out 2 -#define _TCA8418_REG_GPIO_DAT_OUT_3 0x19 // GPIO data out 3 -#define _TCA8418_REG_GPIO_INT_EN_1 0x1A // GPIO interrupt enable 1 -#define _TCA8418_REG_GPIO_INT_EN_2 0x1B // GPIO interrupt enable 2 -#define _TCA8418_REG_GPIO_INT_EN_3 0x1C // GPIO interrupt enable 3 -#define _TCA8418_REG_KP_GPIO_1 0x1D // Keypad/GPIO select 1 -#define _TCA8418_REG_KP_GPIO_2 0x1E // Keypad/GPIO select 2 -#define _TCA8418_REG_KP_GPIO_3 0x1F // Keypad/GPIO select 3 -#define _TCA8418_REG_GPI_EM_1 0x20 // GPI event mode 1 -#define _TCA8418_REG_GPI_EM_2 0x21 // GPI event mode 2 -#define _TCA8418_REG_GPI_EM_3 0x22 // GPI event mode 3 -#define _TCA8418_REG_GPIO_DIR_1 0x23 // GPIO data direction 1 -#define _TCA8418_REG_GPIO_DIR_2 0x24 // GPIO data direction 2 -#define _TCA8418_REG_GPIO_DIR_3 0x25 // GPIO data direction 3 -#define _TCA8418_REG_GPIO_INT_LVL_1 0x26 // GPIO edge/level detect 1 -#define _TCA8418_REG_GPIO_INT_LVL_2 0x27 // GPIO edge/level detect 2 -#define _TCA8418_REG_GPIO_INT_LVL_3 0x28 // GPIO edge/level detect 3 -#define _TCA8418_REG_DEBOUNCE_DIS_1 0x29 // Debounce disable 1 -#define _TCA8418_REG_DEBOUNCE_DIS_2 0x2A // Debounce disable 2 -#define _TCA8418_REG_DEBOUNCE_DIS_3 0x2B // Debounce disable 3 -#define _TCA8418_REG_GPIO_PULL_1 0x2C // GPIO pull-up disable 1 -#define _TCA8418_REG_GPIO_PULL_2 0x2D // GPIO pull-up disable 2 -#define _TCA8418_REG_GPIO_PULL_3 0x2E // GPIO pull-up disable 3 -// #define _TCA8418_REG_RESERVED 0x2F - -// FIELDS CONFIG REGISTER 1 -#define _TCA8418_REG_CFG_AI 0x80 // Auto-increment for read/write -#define _TCA8418_REG_CFG_GPI_E_CGF 0x40 // Event mode config -#define _TCA8418_REG_CFG_OVR_FLOW_M 0x20 // Overflow mode enable -#define _TCA8418_REG_CFG_INT_CFG 0x10 // Interrupt config -#define _TCA8418_REG_CFG_OVR_FLOW_IEN 0x08 // Overflow interrupt enable -#define _TCA8418_REG_CFG_K_LCK_IEN 0x04 // Keypad lock interrupt enable -#define _TCA8418_REG_CFG_GPI_IEN 0x02 // GPI interrupt enable -#define _TCA8418_REG_CFG_KE_IEN 0x01 // Key events interrupt enable - -// FIELDS INT_STAT REGISTER 2 -#define _TCA8418_REG_STAT_CAD_INT 0x10 // Ctrl-alt-del seq status -#define _TCA8418_REG_STAT_OVR_FLOW_INT 0x08 // Overflow interrupt status -#define _TCA8418_REG_STAT_K_LCK_INT 0x04 // Key lock interrupt status -#define _TCA8418_REG_STAT_GPI_INT 0x02 // GPI interrupt status -#define _TCA8418_REG_STAT_K_INT 0x01 // Key events interrupt status - -// FIELDS KEY_LCK_EC REGISTER 3 -#define _TCA8418_REG_LCK_EC_K_LCK_EN 0x40 // Key lock enable -#define _TCA8418_REG_LCK_EC_LCK_2 0x20 // Keypad lock status 2 -#define _TCA8418_REG_LCK_EC_LCK_1 0x10 // Keypad lock status 1 -#define _TCA8418_REG_LCK_EC_KLEC_3 0x08 // Key event count bit 3 -#define _TCA8418_REG_LCK_EC_KLEC_2 0x04 // Key event count bit 2 -#define _TCA8418_REG_LCK_EC_KLEC_1 0x02 // Key event count bit 1 -#define _TCA8418_REG_LCK_EC_KLEC_0 0x01 // Key event count bit 0 - -// Pin IDs for matrix rows/columns -enum { - _TCA8418_ROW0, // Pin ID for row 0 - _TCA8418_ROW1, // Pin ID for row 1 - _TCA8418_ROW2, // Pin ID for row 2 - _TCA8418_ROW3, // Pin ID for row 3 - _TCA8418_ROW4, // Pin ID for row 4 - _TCA8418_ROW5, // Pin ID for row 5 - _TCA8418_ROW6, // Pin ID for row 6 - _TCA8418_ROW7, // Pin ID for row 7 - _TCA8418_COL0, // Pin ID for column 0 - _TCA8418_COL1, // Pin ID for column 1 - _TCA8418_COL2, // Pin ID for column 2 - _TCA8418_COL3, // Pin ID for column 3 - _TCA8418_COL4, // Pin ID for column 4 - _TCA8418_COL5, // Pin ID for column 5 - _TCA8418_COL6, // Pin ID for column 6 - _TCA8418_COL7, // Pin ID for column 7 - _TCA8418_COL8, // Pin ID for column 8 - _TCA8418_COL9 // Pin ID for column 9 -}; #define _TCA8418_COLS 3 #define _TCA8418_ROWS 4 #define _TCA8418_NUM_KEYS 12 -uint8_t TCA8418TapMod[_TCA8418_NUM_KEYS] = {13, 7, 7, 7, 7, 7, - 9, 7, 9, 2, 2, 2}; // Num chars per key, Modulus for rotating through characters +#define _TCA8418_LONG_PRESS_THRESHOLD 2000 +#define _TCA8418_MULTI_TAP_THRESHOLD 750 -unsigned char TCA8418TapMap[_TCA8418_NUM_KEYS][13] = { +using Key = TCA8418KeyboardBase::TCA8418Key; + +// Num chars per key, Modulus for rotating through characters +static uint8_t TCA8418TapMod[_TCA8418_NUM_KEYS] = {13, 7, 7, 7, 7, 7, 9, 7, 9, 2, 2, 2}; + +static unsigned char TCA8418TapMap[_TCA8418_NUM_KEYS][13] = { {'1', '.', ',', '?', '!', ':', ';', '-', '_', '\\', '/', '(', ')'}, // 1 {'2', 'a', 'b', 'c', 'A', 'B', 'C'}, // 2 {'3', 'd', 'e', 'f', 'D', 'E', 'F'}, // 3 @@ -125,176 +27,35 @@ unsigned char TCA8418TapMap[_TCA8418_NUM_KEYS][13] = { {'#', '@'}, // # }; -unsigned char TCA8418LongPressMap[_TCA8418_NUM_KEYS] = { - _TCA8418_ESC, // 1 - _TCA8418_UP, // 2 - _TCA8418_NONE, // 3 - _TCA8418_LEFT, // 4 - _TCA8418_NONE, // 5 - _TCA8418_RIGHT, // 6 - _TCA8418_NONE, // 7 - _TCA8418_DOWN, // 8 - _TCA8418_NONE, // 9 - _TCA8418_BSP, // * - _TCA8418_NONE, // 0 - _TCA8418_NONE, // # +static unsigned char TCA8418LongPressMap[_TCA8418_NUM_KEYS] = { + Key::ESC, // 1 + Key::UP, // 2 + Key::NONE, // 3 + Key::LEFT, // 4 + Key::NONE, // 5 + Key::RIGHT, // 6 + Key::NONE, // 7 + Key::DOWN, // 8 + Key::NONE, // 9 + Key::BSP, // * + Key::NONE, // 0 + Key::NONE, // # }; -#define _TCA8418_LONG_PRESS_THRESHOLD 2000 -#define _TCA8418_MULTI_TAP_THRESHOLD 750 - -TCA8418Keyboard::TCA8418Keyboard() : m_wire(nullptr), m_addr(0), readCallback(nullptr), writeCallback(nullptr) +TCA8418Keyboard::TCA8418Keyboard() + : TCA8418KeyboardBase(_TCA8418_ROWS, _TCA8418_COLS), last_key(-1), next_key(-1), last_tap(0L), char_idx(0), tap_interval(0), + should_backspace(false) { - state = Init; - last_key = -1; - should_backspace = false; - last_tap = 0L; - char_idx = 0; - tap_interval = 0; - backlight_on = true; - queue = ""; -} - -void TCA8418Keyboard::begin(uint8_t addr, TwoWire *wire) -{ - m_addr = addr; - m_wire = wire; - - m_wire->begin(); - - reset(); -} - -void TCA8418Keyboard::begin(i2c_com_fptr_t r, i2c_com_fptr_t w, uint8_t addr) -{ - m_addr = addr; - m_wire = nullptr; - writeCallback = w; - readCallback = r; - reset(); } void TCA8418Keyboard::reset() { - LOG_DEBUG("TCA8418 Reset"); - // GPIO - // set default all GIO pins to INPUT - writeRegister(_TCA8418_REG_GPIO_DIR_1, 0x00); - writeRegister(_TCA8418_REG_GPIO_DIR_2, 0x00); + TCA8418KeyboardBase::reset(); + // Set COL9 as GPIO output - writeRegister(_TCA8418_REG_GPIO_DIR_3, 0x02); + writeRegister(TCA8418_REG_GPIO_DIR_3, 0x02); // Switch off keyboard backlight (COL9 = LOW) - writeRegister(_TCA8418_REG_GPIO_DAT_OUT_3, 0x00); - - // add all pins to key events - writeRegister(_TCA8418_REG_GPI_EM_1, 0xFF); - writeRegister(_TCA8418_REG_GPI_EM_2, 0xFF); - writeRegister(_TCA8418_REG_GPI_EM_3, 0xFF); - - // set all pins to FALLING interrupts - writeRegister(_TCA8418_REG_GPIO_INT_LVL_1, 0x00); - writeRegister(_TCA8418_REG_GPIO_INT_LVL_2, 0x00); - writeRegister(_TCA8418_REG_GPIO_INT_LVL_3, 0x00); - - // add all pins to interrupts - writeRegister(_TCA8418_REG_GPIO_INT_EN_1, 0xFF); - writeRegister(_TCA8418_REG_GPIO_INT_EN_2, 0xFF); - writeRegister(_TCA8418_REG_GPIO_INT_EN_3, 0xFF); - - // Set keyboard matrix size - matrix(_TCA8418_ROWS, _TCA8418_COLS); - enableDebounce(); - flush(); - state = Idle; -} - -bool TCA8418Keyboard::matrix(uint8_t rows, uint8_t columns) -{ - if ((rows > 8) || (columns > 10)) - return false; - - // Skip zero size matrix - if ((rows != 0) && (columns != 0)) { - // Setup the keypad matrix. - uint8_t mask = 0x00; - for (int r = 0; r < rows; r++) { - mask <<= 1; - mask |= 1; - } - writeRegister(_TCA8418_REG_KP_GPIO_1, mask); - - mask = 0x00; - for (int c = 0; c < columns && c < 8; c++) { - mask <<= 1; - mask |= 1; - } - writeRegister(_TCA8418_REG_KP_GPIO_2, mask); - - if (columns > 8) { - if (columns == 9) - mask = 0x01; - else - mask = 0x03; - writeRegister(_TCA8418_REG_KP_GPIO_3, mask); - } - } - - return true; -} - -uint8_t TCA8418Keyboard::keyCount() const -{ - uint8_t eventCount = readRegister(_TCA8418_REG_KEY_LCK_EC); - eventCount &= 0x0F; // lower 4 bits only - return eventCount; -} - -bool TCA8418Keyboard::hasEvent() -{ - return queue.length() > 0; -} - -void TCA8418Keyboard::queueEvent(char next) -{ - if (next == _TCA8418_NONE) { - return; - } - queue.concat(next); -} - -char TCA8418Keyboard::dequeueEvent() -{ - if (queue.length() < 1) { - return _TCA8418_NONE; - } - char next = queue.charAt(0); - queue.remove(0, 1); - return next; -} - -void TCA8418Keyboard::trigger() -{ - if (keyCount() == 0) { - return; - } - if (state != Init) { - // Read the key register - uint8_t k = readRegister(_TCA8418_REG_KEY_EVENT_A); - uint8_t key = k & 0x7F; - if (k & 0x80) { - if (state == Idle) - pressed(key); - return; - } else { - if (state == Held) { - released(); - } - state = Idle; - return; - } - } else { - reset(); - } + writeRegister(TCA8418_REG_GPIO_DAT_OUT_3, 0x00); } void TCA8418Keyboard::pressed(uint8_t key) @@ -354,7 +115,7 @@ void TCA8418Keyboard::released() int32_t held_interval = now - last_tap; last_tap = now; if (tap_interval < _TCA8418_MULTI_TAP_THRESHOLD && should_backspace) { - queueEvent(_TCA8418_BSP); + queueEvent(BSP); } if (held_interval > _TCA8418_LONG_PRESS_THRESHOLD) { queueEvent(TCA8418LongPressMap[last_key]); @@ -366,195 +127,11 @@ void TCA8418Keyboard::released() } } -uint8_t TCA8418Keyboard::flush() -{ - // Flush key events - uint8_t count = 0; - while (readRegister(_TCA8418_REG_KEY_EVENT_A) != 0) - count++; - // Flush gpio events - readRegister(_TCA8418_REG_GPIO_INT_STAT_1); - readRegister(_TCA8418_REG_GPIO_INT_STAT_2); - readRegister(_TCA8418_REG_GPIO_INT_STAT_3); - // Clear INT_STAT register - writeRegister(_TCA8418_REG_INT_STAT, 3); - return count; -} - -uint8_t TCA8418Keyboard::digitalRead(uint8_t pinnum) const -{ - if (pinnum > _TCA8418_COL9) - return 0xFF; - - uint8_t reg = _TCA8418_REG_GPIO_DAT_STAT_1 + pinnum / 8; - uint8_t mask = (1 << (pinnum % 8)); - - // Level 0 = low other = high - uint8_t value = readRegister(reg); - if (value & mask) - return HIGH; - return LOW; -} - -bool TCA8418Keyboard::digitalWrite(uint8_t pinnum, uint8_t level) -{ - if (pinnum > _TCA8418_COL9) - return false; - - uint8_t reg = _TCA8418_REG_GPIO_DAT_OUT_1 + pinnum / 8; - uint8_t mask = (1 << (pinnum % 8)); - - // Level 0 = low other = high - uint8_t value = readRegister(reg); - if (level == LOW) - value &= ~mask; - else - value |= mask; - writeRegister(reg, value); - return true; -} - -bool TCA8418Keyboard::pinMode(uint8_t pinnum, uint8_t mode) -{ - if (pinnum > _TCA8418_COL9) - return false; - - uint8_t idx = pinnum / 8; - uint8_t reg = _TCA8418_REG_GPIO_DIR_1 + idx; - uint8_t mask = (1 << (pinnum % 8)); - - // Mode 0 = input 1 = output - uint8_t value = readRegister(reg); - if (mode == OUTPUT) - value |= mask; - else - value &= ~mask; - writeRegister(reg, value); - - // Pullup 0 = enabled 1 = disabled - reg = _TCA8418_REG_GPIO_PULL_1 + idx; - value = readRegister(reg); - if (mode == INPUT_PULLUP) - value &= ~mask; - else - value |= mask; - writeRegister(reg, value); - - return true; -} - -bool TCA8418Keyboard::pinIRQMode(uint8_t pinnum, uint8_t mode) -{ - if (pinnum > _TCA8418_COL9) - return false; - if ((mode != RISING) && (mode != FALLING)) - return false; - - // Mode 0 = falling 1 = rising - uint8_t idx = pinnum / 8; - uint8_t reg = _TCA8418_REG_GPIO_INT_LVL_1 + idx; - uint8_t mask = (1 << (pinnum % 8)); - - uint8_t value = readRegister(reg); - if (mode == RISING) - value |= mask; - else - value &= ~mask; - writeRegister(reg, value); - - // Enable interrupt - reg = _TCA8418_REG_GPIO_INT_EN_1 + idx; - value = readRegister(reg); - value |= mask; - writeRegister(reg, value); - - return true; -} - -void TCA8418Keyboard::enableInterrupts() -{ - uint8_t value = readRegister(_TCA8418_REG_CFG); - value |= (_TCA8418_REG_CFG_GPI_IEN | _TCA8418_REG_CFG_KE_IEN); - writeRegister(_TCA8418_REG_CFG, value); -}; - -void TCA8418Keyboard::disableInterrupts() -{ - uint8_t value = readRegister(_TCA8418_REG_CFG); - value &= ~(_TCA8418_REG_CFG_GPI_IEN | _TCA8418_REG_CFG_KE_IEN); - writeRegister(_TCA8418_REG_CFG, value); -}; - -void TCA8418Keyboard::enableMatrixOverflow() -{ - uint8_t value = readRegister(_TCA8418_REG_CFG); - value |= _TCA8418_REG_CFG_OVR_FLOW_M; - writeRegister(_TCA8418_REG_CFG, value); -}; - -void TCA8418Keyboard::disableMatrixOverflow() -{ - uint8_t value = readRegister(_TCA8418_REG_CFG); - value &= ~_TCA8418_REG_CFG_OVR_FLOW_M; - writeRegister(_TCA8418_REG_CFG, value); -}; - -void TCA8418Keyboard::enableDebounce() -{ - writeRegister(_TCA8418_REG_DEBOUNCE_DIS_1, 0x00); - writeRegister(_TCA8418_REG_DEBOUNCE_DIS_2, 0x00); - writeRegister(_TCA8418_REG_DEBOUNCE_DIS_3, 0x00); -} - -void TCA8418Keyboard::disableDebounce() -{ - writeRegister(_TCA8418_REG_DEBOUNCE_DIS_1, 0xFF); - writeRegister(_TCA8418_REG_DEBOUNCE_DIS_2, 0xFF); - writeRegister(_TCA8418_REG_DEBOUNCE_DIS_3, 0xFF); -} - void TCA8418Keyboard::setBacklight(bool on) { if (on) { - digitalWrite(_TCA8418_COL9, HIGH); + digitalWrite(TCA8418_COL9, HIGH); } else { - digitalWrite(_TCA8418_COL9, LOW); + digitalWrite(TCA8418_COL9, LOW); } } - -uint8_t TCA8418Keyboard::readRegister(uint8_t reg) const -{ - if (m_wire) { - m_wire->beginTransmission(m_addr); - m_wire->write(reg); - m_wire->endTransmission(); - - m_wire->requestFrom(m_addr, (uint8_t)1); - if (m_wire->available() < 1) - return 0; - - return m_wire->read(); - } - if (readCallback) { - uint8_t data; - readCallback(m_addr, reg, &data, 1); - return data; - } - return 0; -} - -void TCA8418Keyboard::writeRegister(uint8_t reg, uint8_t value) -{ - uint8_t data[2]; - data[0] = reg; - data[1] = value; - - if (m_wire) { - m_wire->beginTransmission(m_addr); - m_wire->write(data, sizeof(uint8_t) * 2); - m_wire->endTransmission(); - } - if (writeCallback) { - writeCallback(m_addr, data[0], &(data[1]), 1); - } -} \ No newline at end of file diff --git a/src/input/TCA8418Keyboard.h b/src/input/TCA8418Keyboard.h index 5c53452a4..b76916643 100644 --- a/src/input/TCA8418Keyboard.h +++ b/src/input/TCA8418Keyboard.h @@ -1,82 +1,23 @@ -// Based on the MPR121 Keyboard and Adafruit TCA8418 library -#include "configuration.h" -#include +#include "TCA8418KeyboardBase.h" -#define _TCA8418_NONE 0x00 -#define _TCA8418_REBOOT 0x90 -#define _TCA8418_LEFT 0xb4 -#define _TCA8418_UP 0xb5 -#define _TCA8418_DOWN 0xb6 -#define _TCA8418_RIGHT 0xb7 -#define _TCA8418_ESC 0x1b -#define _TCA8418_BSP 0x08 -#define _TCA8418_SELECT 0x0d - -class TCA8418Keyboard +/** + * @brief 3x4 keypad with 3 columns and 4 rows + */ +class TCA8418Keyboard : public TCA8418KeyboardBase { public: - typedef uint8_t (*i2c_com_fptr_t)(uint8_t dev_addr, uint8_t reg_addr, uint8_t *data, uint8_t len); + TCA8418Keyboard(); + void reset(void) override; + void setBacklight(bool on) override; - enum KeyState { Init = 0, Idle, Held, Busy }; + protected: + void pressed(uint8_t key) override; + void released(void) override; - KeyState state; int8_t last_key; - bool should_backspace; + int8_t next_key; uint32_t last_tap; uint8_t char_idx; int32_t tap_interval; - bool backlight_on; - - String queue; - - TCA8418Keyboard(); - - void begin(uint8_t addr = XPOWERS_AXP192_AXP2101_ADDRESS, TwoWire *wire = &Wire); - void begin(i2c_com_fptr_t r, i2c_com_fptr_t w, uint8_t addr = XPOWERS_AXP192_AXP2101_ADDRESS); - - void reset(void); - // Configure the size of the keypad. - // All other rows and columns are set as inputs. - bool matrix(uint8_t rows, uint8_t columns); - - // Flush all events in the FIFO buffer + GPIO events. - uint8_t flush(void); - - // Key events available in the internal FIFO buffer. - uint8_t keyCount(void) const; - - void trigger(void); - void pressed(uint8_t key); - void released(void); - bool hasEvent(void); - char dequeueEvent(void); - void queueEvent(char); - - uint8_t digitalRead(uint8_t pinnum) const; - bool digitalWrite(uint8_t pinnum, uint8_t level); - bool pinMode(uint8_t pinnum, uint8_t mode); - bool pinIRQMode(uint8_t pinnum, uint8_t mode); // MODE FALLING or RISING - - // enable / disable interrupts for matrix and GPI pins - void enableInterrupts(); - void disableInterrupts(); - - // ignore key events when FIFO buffer is full or not. - void enableMatrixOverflow(); - void disableMatrixOverflow(); - - // debounce keys. - void enableDebounce(); - void disableDebounce(); - - void setBacklight(bool on); - - uint8_t readRegister(uint8_t reg) const; - void writeRegister(uint8_t reg, uint8_t value); - - private: - TwoWire *m_wire; - uint8_t m_addr; - i2c_com_fptr_t readCallback; - i2c_com_fptr_t writeCallback; + bool should_backspace; }; diff --git a/src/input/TCA8418KeyboardBase.cpp b/src/input/TCA8418KeyboardBase.cpp new file mode 100644 index 000000000..aafc4c36c --- /dev/null +++ b/src/input/TCA8418KeyboardBase.cpp @@ -0,0 +1,372 @@ +// Based on the MPR121 Keyboard and Adafruit TCA8418 library + +#include "TCA8418KeyboardBase.h" +#include "configuration.h" + +#include + +// FIELDS CONFIG REGISTER 1 +#define _TCA8418_REG_CFG_AI 0x80 // Auto-increment for read/write +#define _TCA8418_REG_CFG_GPI_E_CGF 0x40 // Event mode config +#define _TCA8418_REG_CFG_OVR_FLOW_M 0x20 // Overflow mode enable +#define _TCA8418_REG_CFG_INT_CFG 0x10 // Interrupt config +#define _TCA8418_REG_CFG_OVR_FLOW_IEN 0x08 // Overflow interrupt enable +#define _TCA8418_REG_CFG_K_LCK_IEN 0x04 // Keypad lock interrupt enable +#define _TCA8418_REG_CFG_GPI_IEN 0x02 // GPI interrupt enable +#define _TCA8418_REG_CFG_KE_IEN 0x01 // Key events interrupt enable + +// FIELDS INT_STAT REGISTER 2 +#define _TCA8418_REG_STAT_CAD_INT 0x10 // Ctrl-alt-del seq status +#define _TCA8418_REG_STAT_OVR_FLOW_INT 0x08 // Overflow interrupt status +#define _TCA8418_REG_STAT_K_LCK_INT 0x04 // Key lock interrupt status +#define _TCA8418_REG_STAT_GPI_INT 0x02 // GPI interrupt status +#define _TCA8418_REG_STAT_K_INT 0x01 // Key events interrupt status + +// FIELDS KEY_LCK_EC REGISTER 3 +#define _TCA8418_REG_LCK_EC_K_LCK_EN 0x40 // Key lock enable +#define _TCA8418_REG_LCK_EC_LCK_2 0x20 // Keypad lock status 2 +#define _TCA8418_REG_LCK_EC_LCK_1 0x10 // Keypad lock status 1 +#define _TCA8418_REG_LCK_EC_KLEC_3 0x08 // Key event count bit 3 +#define _TCA8418_REG_LCK_EC_KLEC_2 0x04 // Key event count bit 2 +#define _TCA8418_REG_LCK_EC_KLEC_1 0x02 // Key event count bit 1 +#define _TCA8418_REG_LCK_EC_KLEC_0 0x01 // Key event count bit 0 + +TCA8418KeyboardBase::TCA8418KeyboardBase(uint8_t rows, uint8_t columns) + : rows(rows), columns(columns), state(Init), queue(""), m_wire(nullptr), m_addr(0), readCallback(nullptr), + writeCallback(nullptr) +{ +} + +void TCA8418KeyboardBase::begin(uint8_t addr, TwoWire *wire) +{ + m_addr = addr; + m_wire = wire; + m_wire->begin(); + reset(); +} + +void TCA8418KeyboardBase::begin(i2c_com_fptr_t r, i2c_com_fptr_t w, uint8_t addr) +{ + m_addr = addr; + m_wire = nullptr; + writeCallback = w; + readCallback = r; + reset(); +} + +void TCA8418KeyboardBase::reset() +{ + LOG_DEBUG("TCA8418 Reset"); + // GPIO + // set default all GIO pins to INPUT + writeRegister(TCA8418_REG_GPIO_DIR_1, 0x00); + writeRegister(TCA8418_REG_GPIO_DIR_2, 0x00); + writeRegister(TCA8418_REG_GPIO_DIR_3, 0x00); + + // add all pins to key events + writeRegister(TCA8418_REG_GPI_EM_1, 0xFF); + writeRegister(TCA8418_REG_GPI_EM_2, 0xFF); + writeRegister(TCA8418_REG_GPI_EM_3, 0xFF); + + // set all pins to FALLING interrupts + writeRegister(TCA8418_REG_GPIO_INT_LVL_1, 0x00); + writeRegister(TCA8418_REG_GPIO_INT_LVL_2, 0x00); + writeRegister(TCA8418_REG_GPIO_INT_LVL_3, 0x00); + + // add all pins to interrupts + writeRegister(TCA8418_REG_GPIO_INT_EN_1, 0xFF); + writeRegister(TCA8418_REG_GPIO_INT_EN_2, 0xFF); + writeRegister(TCA8418_REG_GPIO_INT_EN_3, 0xFF); + + // Set keyboard matrix size + matrix(rows, columns); + enableDebounce(); + flush(); + state = Idle; +} + +bool TCA8418KeyboardBase::matrix(uint8_t rows, uint8_t columns) +{ + if (rows < 1 || rows > 8 || columns < 1 || columns > 10) + return false; + + // Setup the keypad matrix. + uint8_t mask = 0x00; + for (int r = 0; r < rows; r++) { + mask <<= 1; + mask |= 1; + } + writeRegister(TCA8418_REG_KP_GPIO_1, mask); + + mask = 0x00; + for (int c = 0; c < columns && c < 8; c++) { + mask <<= 1; + mask |= 1; + } + writeRegister(TCA8418_REG_KP_GPIO_2, mask); + + if (columns > 8) { + if (columns == 9) + mask = 0x01; + else + mask = 0x03; + writeRegister(TCA8418_REG_KP_GPIO_3, mask); + } + + return true; +} + +uint8_t TCA8418KeyboardBase::keyCount() const +{ + uint8_t eventCount = readRegister(TCA8418_REG_KEY_LCK_EC); + eventCount &= 0x0F; // lower 4 bits only + return eventCount; +} + +bool TCA8418KeyboardBase::hasEvent() const +{ + return queue.length() > 0; +} + +void TCA8418KeyboardBase::queueEvent(char next) +{ + if (next == NONE) { + return; + } + queue.concat(next); +} + +char TCA8418KeyboardBase::dequeueEvent() +{ + if (queue.length() < 1) { + return NONE; + } + char next = queue.charAt(0); + queue.remove(0, 1); + return next; +} + +void TCA8418KeyboardBase::trigger() +{ + if (keyCount() == 0) { + return; + } + if (state != Init) { + // Read the key register + uint8_t k = readRegister(TCA8418_REG_KEY_EVENT_A); + uint8_t key = k & 0x7F; + if (k & 0x80) { + if (state == Idle) + pressed(key); + return; + } else { + if (state == Held) { + released(); + } + state = Idle; + return; + } + } else { + reset(); + } +} + +void TCA8418KeyboardBase::pressed(uint8_t key) +{ + // must be defined in derived class + LOG_ERROR("pressed() not implemented in derived class"); +} + +void TCA8418KeyboardBase::released() +{ + // must be defined in derived class + LOG_ERROR("released() not implemented in derived class"); +} + +uint8_t TCA8418KeyboardBase::flush() +{ + // Flush key events + uint8_t count = 0; + while (readRegister(TCA8418_REG_KEY_EVENT_A) != 0) + count++; + + // Flush gpio events + readRegister(TCA8418_REG_GPIO_INT_STAT_1); + readRegister(TCA8418_REG_GPIO_INT_STAT_2); + readRegister(TCA8418_REG_GPIO_INT_STAT_3); + + // Clear INT_STAT register + writeRegister(TCA8418_REG_INT_STAT, 3); + return count; +} + +uint8_t TCA8418KeyboardBase::digitalRead(uint8_t pinnum) const +{ + if (pinnum > TCA8418_COL9) + return 0xFF; + + uint8_t reg = TCA8418_REG_GPIO_DAT_STAT_1 + pinnum / 8; + uint8_t mask = (1 << (pinnum % 8)); + + // Level 0 = low other = high + uint8_t value = readRegister(reg); + if (value & mask) + return HIGH; + return LOW; +} + +bool TCA8418KeyboardBase::digitalWrite(uint8_t pinnum, uint8_t level) +{ + if (pinnum > TCA8418_COL9) + return false; + + uint8_t reg = TCA8418_REG_GPIO_DAT_OUT_1 + pinnum / 8; + uint8_t mask = (1 << (pinnum % 8)); + + // Level 0 = low other = high + uint8_t value = readRegister(reg); + if (level == LOW) + value &= ~mask; + else + value |= mask; + writeRegister(reg, value); + return true; +} + +bool TCA8418KeyboardBase::pinMode(uint8_t pinnum, uint8_t mode) +{ + if (pinnum > TCA8418_COL9) + return false; + + uint8_t idx = pinnum / 8; + uint8_t reg = TCA8418_REG_GPIO_DIR_1 + idx; + uint8_t mask = (1 << (pinnum % 8)); + + // Mode 0 = input 1 = output + uint8_t value = readRegister(reg); + if (mode == OUTPUT) + value |= mask; + else + value &= ~mask; + writeRegister(reg, value); + + // Pullup 0 = enabled 1 = disabled + reg = TCA8418_REG_GPIO_PULL_1 + idx; + value = readRegister(reg); + if (mode == INPUT_PULLUP) + value &= ~mask; + else + value |= mask; + writeRegister(reg, value); + + return true; +} + +bool TCA8418KeyboardBase::pinIRQMode(uint8_t pinnum, uint8_t mode) +{ + if (pinnum > TCA8418_COL9) + return false; + if ((mode != RISING) && (mode != FALLING)) + return false; + + // Mode 0 = falling 1 = rising + uint8_t idx = pinnum / 8; + uint8_t reg = TCA8418_REG_GPIO_INT_LVL_1 + idx; + uint8_t mask = (1 << (pinnum % 8)); + + uint8_t value = readRegister(reg); + if (mode == RISING) + value |= mask; + else + value &= ~mask; + writeRegister(reg, value); + + // Enable interrupt + reg = TCA8418_REG_GPIO_INT_EN_1 + idx; + value = readRegister(reg); + value |= mask; + writeRegister(reg, value); + + return true; +} + +void TCA8418KeyboardBase::enableInterrupts() +{ + uint8_t value = readRegister(TCA8418_REG_CFG); + value |= (_TCA8418_REG_CFG_GPI_IEN | _TCA8418_REG_CFG_KE_IEN); + writeRegister(TCA8418_REG_CFG, value); +}; + +void TCA8418KeyboardBase::disableInterrupts() +{ + uint8_t value = readRegister(TCA8418_REG_CFG); + value &= ~(_TCA8418_REG_CFG_GPI_IEN | _TCA8418_REG_CFG_KE_IEN); + writeRegister(TCA8418_REG_CFG, value); +}; + +void TCA8418KeyboardBase::enableMatrixOverflow() +{ + uint8_t value = readRegister(TCA8418_REG_CFG); + value |= _TCA8418_REG_CFG_OVR_FLOW_M; + writeRegister(TCA8418_REG_CFG, value); +}; + +void TCA8418KeyboardBase::disableMatrixOverflow() +{ + uint8_t value = readRegister(TCA8418_REG_CFG); + value &= ~_TCA8418_REG_CFG_OVR_FLOW_M; + writeRegister(TCA8418_REG_CFG, value); +}; + +void TCA8418KeyboardBase::enableDebounce() +{ + writeRegister(TCA8418_REG_DEBOUNCE_DIS_1, 0x00); + writeRegister(TCA8418_REG_DEBOUNCE_DIS_2, 0x00); + writeRegister(TCA8418_REG_DEBOUNCE_DIS_3, 0x00); +} + +void TCA8418KeyboardBase::disableDebounce() +{ + writeRegister(TCA8418_REG_DEBOUNCE_DIS_1, 0xFF); + writeRegister(TCA8418_REG_DEBOUNCE_DIS_2, 0xFF); + writeRegister(TCA8418_REG_DEBOUNCE_DIS_3, 0xFF); +} + +void TCA8418KeyboardBase::setBacklight(bool on) {} + +uint8_t TCA8418KeyboardBase::readRegister(uint8_t reg) const +{ + if (m_wire) { + m_wire->beginTransmission(m_addr); + m_wire->write(reg); + m_wire->endTransmission(); + + m_wire->requestFrom(m_addr, (uint8_t)1); + if (m_wire->available() < 1) + return 0; + + return m_wire->read(); + } + if (readCallback) { + uint8_t data; + readCallback(m_addr, reg, &data, 1); + return data; + } + return 0; +} + +void TCA8418KeyboardBase::writeRegister(uint8_t reg, uint8_t value) +{ + uint8_t data[2]; + data[0] = reg; + data[1] = value; + + if (m_wire) { + m_wire->beginTransmission(m_addr); + m_wire->write(data, sizeof(uint8_t) * 2); + m_wire->endTransmission(); + } + if (writeCallback) { + writeCallback(m_addr, data[0], &(data[1]), 1); + } +} \ No newline at end of file diff --git a/src/input/TCA8418KeyboardBase.h b/src/input/TCA8418KeyboardBase.h new file mode 100644 index 000000000..5d6c4f7e9 --- /dev/null +++ b/src/input/TCA8418KeyboardBase.h @@ -0,0 +1,170 @@ +// Based on the MPR121 Keyboard and Adafruit TCA8418 library +#include "configuration.h" +#include + +/** + * @brief TCA8418KeyboardBase is the base class for TCA8418 keyboard handling. + * It provides basic functionality for reading key events, managing the keyboard matrix, + * and handling key states. It is designed to be extended for specific keyboard implementations. + * It supports both I2C communication and function pointers for custom I2C operations. + */ +class TCA8418KeyboardBase +{ + public: + enum TCA8418Key : uint8_t { + NONE = 0x00, + BSP = 0x08, + TAB = 0x09, + SELECT = 0x0d, + ESC = 0x1b, + REBOOT = 0x90, + LEFT = 0xb4, + UP = 0xb5, + DOWN = 0xb6, + RIGHT = 0xb7, + BT_TOGGLE = 0xAA, + GPS_TOGGLE = 0x9E, + MUTE_TOGGLE = 0xAC, + SEND_PING = 0xAF, + BL_TOGGLE = 0xAB + }; + + typedef uint8_t (*i2c_com_fptr_t)(uint8_t dev_addr, uint8_t reg_addr, uint8_t *data, uint8_t len); + + TCA8418KeyboardBase(uint8_t rows, uint8_t columns); + + virtual void begin(uint8_t addr = TCA8418_KB_ADDR, TwoWire *wire = &Wire); + virtual void begin(i2c_com_fptr_t r, i2c_com_fptr_t w, uint8_t addr = TCA8418_KB_ADDR); + + virtual void reset(void); + virtual void trigger(void); + + virtual void setBacklight(bool on); + + // Key events available + virtual bool hasEvent(void) const; + virtual char dequeueEvent(void); + + protected: + enum KeyState { Init, Idle, Held, Busy }; + + enum TCA8418Register : uint8_t { + TCA8418_REG_RESERVED = 0x00, + TCA8418_REG_CFG = 0x01, + TCA8418_REG_INT_STAT = 0x02, + TCA8418_REG_KEY_LCK_EC = 0x03, + TCA8418_REG_KEY_EVENT_A = 0x04, + TCA8418_REG_KEY_EVENT_B = 0x05, + TCA8418_REG_KEY_EVENT_C = 0x06, + TCA8418_REG_KEY_EVENT_D = 0x07, + TCA8418_REG_KEY_EVENT_E = 0x08, + TCA8418_REG_KEY_EVENT_F = 0x09, + TCA8418_REG_KEY_EVENT_G = 0x0A, + TCA8418_REG_KEY_EVENT_H = 0x0B, + TCA8418_REG_KEY_EVENT_I = 0x0C, + TCA8418_REG_KEY_EVENT_J = 0x0D, + TCA8418_REG_KP_LCK_TIMER = 0x0E, + TCA8418_REG_UNLOCK_1 = 0x0F, + TCA8418_REG_UNLOCK_2 = 0x10, + TCA8418_REG_GPIO_INT_STAT_1 = 0x11, + TCA8418_REG_GPIO_INT_STAT_2 = 0x12, + TCA8418_REG_GPIO_INT_STAT_3 = 0x13, + TCA8418_REG_GPIO_DAT_STAT_1 = 0x14, + TCA8418_REG_GPIO_DAT_STAT_2 = 0x15, + TCA8418_REG_GPIO_DAT_STAT_3 = 0x16, + TCA8418_REG_GPIO_DAT_OUT_1 = 0x17, + TCA8418_REG_GPIO_DAT_OUT_2 = 0x18, + TCA8418_REG_GPIO_DAT_OUT_3 = 0x19, + TCA8418_REG_GPIO_INT_EN_1 = 0x1A, + TCA8418_REG_GPIO_INT_EN_2 = 0x1B, + TCA8418_REG_GPIO_INT_EN_3 = 0x1C, + TCA8418_REG_KP_GPIO_1 = 0x1D, + TCA8418_REG_KP_GPIO_2 = 0x1E, + TCA8418_REG_KP_GPIO_3 = 0x1F, + TCA8418_REG_GPI_EM_1 = 0x20, + TCA8418_REG_GPI_EM_2 = 0x21, + TCA8418_REG_GPI_EM_3 = 0x22, + TCA8418_REG_GPIO_DIR_1 = 0x23, + TCA8418_REG_GPIO_DIR_2 = 0x24, + TCA8418_REG_GPIO_DIR_3 = 0x25, + TCA8418_REG_GPIO_INT_LVL_1 = 0x26, + TCA8418_REG_GPIO_INT_LVL_2 = 0x27, + TCA8418_REG_GPIO_INT_LVL_3 = 0x28, + TCA8418_REG_DEBOUNCE_DIS_1 = 0x29, + TCA8418_REG_DEBOUNCE_DIS_2 = 0x2A, + TCA8418_REG_DEBOUNCE_DIS_3 = 0x2B, + TCA8418_REG_GPIO_PULL_1 = 0x2C, + TCA8418_REG_GPIO_PULL_2 = 0x2D, + TCA8418_REG_GPIO_PULL_3 = 0x2E + }; + + // Pin IDs for matrix rows/columns + enum TCA8418PinId : uint8_t { + TCA8418_ROW0, // Pin ID for row 0 + TCA8418_ROW1, // Pin ID for row 1 + TCA8418_ROW2, // Pin ID for row 2 + TCA8418_ROW3, // Pin ID for row 3 + TCA8418_ROW4, // Pin ID for row 4 + TCA8418_ROW5, // Pin ID for row 5 + TCA8418_ROW6, // Pin ID for row 6 + TCA8418_ROW7, // Pin ID for row 7 + TCA8418_COL0, // Pin ID for column 0 + TCA8418_COL1, // Pin ID for column 1 + TCA8418_COL2, // Pin ID for column 2 + TCA8418_COL3, // Pin ID for column 3 + TCA8418_COL4, // Pin ID for column 4 + TCA8418_COL5, // Pin ID for column 5 + TCA8418_COL6, // Pin ID for column 6 + TCA8418_COL7, // Pin ID for column 7 + TCA8418_COL8, // Pin ID for column 8 + TCA8418_COL9 // Pin ID for column 9 + }; + + virtual void pressed(uint8_t key); + virtual void released(void); + + virtual void queueEvent(char); + + virtual ~TCA8418KeyboardBase() {} + + protected: + // Set the size of the keypad matrix + // All other rows and columns are set as inputs. + bool matrix(uint8_t rows, uint8_t columns); + + uint8_t keyCount(void) const; + + // Flush all events in the FIFO buffer + GPIO events. + uint8_t flush(void); + + // debounce keys. + void enableDebounce(); + void disableDebounce(); + + // enable / disable interrupts for matrix and GPI pins + void enableInterrupts(); + void disableInterrupts(); + + // ignore key events when FIFO buffer is full or not. + void enableMatrixOverflow(); + void disableMatrixOverflow(); + + uint8_t digitalRead(uint8_t pinnum) const; + bool digitalWrite(uint8_t pinnum, uint8_t level); + bool pinMode(uint8_t pinnum, uint8_t mode); + bool pinIRQMode(uint8_t pinnum, uint8_t mode); // MODE FALLING or RISING + uint8_t readRegister(uint8_t reg) const; + void writeRegister(uint8_t reg, uint8_t value); + + protected: + uint8_t rows; + uint8_t columns; + KeyState state; + String queue; + + private: + TwoWire *m_wire; + uint8_t m_addr; + i2c_com_fptr_t readCallback; + i2c_com_fptr_t writeCallback; +}; diff --git a/src/input/TDeckProKeyboard.cpp b/src/input/TDeckProKeyboard.cpp new file mode 100644 index 000000000..098e0804a --- /dev/null +++ b/src/input/TDeckProKeyboard.cpp @@ -0,0 +1,196 @@ +#if defined(T_DECK_PRO) + +#include "TDeckProKeyboard.h" + +#define _TCA8418_COLS 10 +#define _TCA8418_ROWS 4 +#define _TCA8418_NUM_KEYS 35 + +#define _TCA8418_MULTI_TAP_THRESHOLD 1500 + +using Key = TCA8418KeyboardBase::TCA8418Key; + +constexpr uint8_t modifierRightShiftKey = 31 - 1; // keynum -1 +constexpr uint8_t modifierRightShift = 0b0001; +constexpr uint8_t modifierLeftShiftKey = 35 - 1; +constexpr uint8_t modifierLeftShift = 0b0001; +constexpr uint8_t modifierSymKey = 32 - 1; +constexpr uint8_t modifierSym = 0b0010; +constexpr uint8_t modifierAltKey = 30 - 1; +constexpr uint8_t modifierAlt = 0b0100; + +// Num chars per key, Modulus for rotating through characters +static uint8_t TDeckProTapMod[_TCA8418_NUM_KEYS] = {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}; + +static unsigned char TDeckProTapMap[_TCA8418_NUM_KEYS][5] = { + {'p', 'P', '@', 0x00, Key::SEND_PING}, + {'o', 'O', '+'}, + {'i', 'I', '-'}, + {'u', 'U', '_'}, + {'y', 'Y', ')'}, + {'t', 'T', '(', 0x00, Key::TAB}, + {'r', 'R', '3'}, + {'e', 'E', '2', 0x00, Key::UP}, + {'w', 'W', '1'}, + {'q', 'Q', '#', 0x00, Key::ESC}, // p, o, i, u, y, t, r, e, w, q + {Key::BSP, 0x00, 0x00}, + {'l', 'L', '"'}, + {'k', 'K', '\''}, + {'j', 'J', ';'}, + {'h', 'H', ':'}, + {'g', 'G', '/', 0x00, Key::GPS_TOGGLE}, + {'f', 'F', '6', 0x00, Key::RIGHT}, + {'d', 'D', '5'}, + {'s', 'S', '4', 0x00, Key::LEFT}, + {'a', 'A', '*'}, // bsp, l, k, j, h, g, f, d, s, a + {0x0d, 0x00, 0x00}, + {'$', 0x00, 0x00}, + {'m', 'M', '.', 0x00, Key::MUTE_TOGGLE}, + {'n', 'N', ','}, + {'b', 'B', '!', 0x00, Key::BL_TOGGLE}, + {'v', 'V', '?'}, + {'c', 'C', '9'}, + {'x', 'X', '8', 0x00, Key::DOWN}, + {'z', 'Z', '7'}, + {0x00, 0x00, 0x00}, // Ent, $, m, n, b, v, c, x, z, alt + {0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00}, + {0x20, 0x00, 0x00}, + {0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00} // R_Shift, sym, space, mic, L_Shift +}; + +TDeckProKeyboard::TDeckProKeyboard() + : TCA8418KeyboardBase(_TCA8418_ROWS, _TCA8418_COLS), modifierFlag(0), last_modifier_time(0), last_key(-1), next_key(-1), + last_tap(0L), char_idx(0), tap_interval(0) +{ +} + +void TDeckProKeyboard::reset() +{ + TCA8418KeyboardBase::reset(); + pinMode(KB_BL_PIN, OUTPUT); + setBacklight(false); +} + +// handle multi-key presses (shift and alt) +void TDeckProKeyboard::trigger() +{ + uint8_t count = keyCount(); + if (count == 0) + return; + for (uint8_t i = 0; i < count; ++i) { + uint8_t k = readRegister(TCA8418_REG_KEY_EVENT_A + i); + uint8_t key = k & 0x7F; + if (k & 0x80) { + pressed(key); + } else { + released(); + state = Idle; + } + } +} + +void TDeckProKeyboard::pressed(uint8_t key) +{ + if (state == Init || state == Busy) { + return; + } + if (modifierFlag && (millis() - last_modifier_time > _TCA8418_MULTI_TAP_THRESHOLD)) { + modifierFlag = 0; + } + + uint8_t next_key = 0; + int row = (key - 1) / 10; + int col = (key - 1) % 10; + + if (row >= _TCA8418_ROWS || col >= _TCA8418_COLS) { + return; // Invalid key + } + + next_key = row * _TCA8418_COLS + col; + state = Held; + + uint32_t now = millis(); + tap_interval = now - last_tap; + + updateModifierFlag(next_key); + if (isModifierKey(next_key)) { + last_modifier_time = now; + } + + if (tap_interval < 0) { + last_tap = 0; + state = Busy; + return; + } + + if (next_key != last_key || tap_interval > _TCA8418_MULTI_TAP_THRESHOLD) { + char_idx = 0; + } else { + char_idx += 1; + } + + last_key = next_key; + last_tap = now; +} + +void TDeckProKeyboard::released() +{ + if (state != Held) { + return; + } + + if (last_key < 0 || last_key >= _TCA8418_NUM_KEYS) { + last_key = -1; + state = Idle; + return; + } + + uint32_t now = millis(); + last_tap = now; + + if (TDeckProTapMap[last_key][modifierFlag % TDeckProTapMod[last_key]] == Key::BL_TOGGLE) { + toggleBacklight(); + return; + } + + queueEvent(TDeckProTapMap[last_key][modifierFlag % TDeckProTapMod[last_key]]); + if (isModifierKey(last_key) == false) + modifierFlag = 0; +} + +void TDeckProKeyboard::setBacklight(bool on) +{ + if (on) { + digitalWrite(KB_BL_PIN, HIGH); + } else { + digitalWrite(KB_BL_PIN, LOW); + } +} + +void TDeckProKeyboard::toggleBacklight(void) +{ + digitalWrite(KB_BL_PIN, !digitalRead(KB_BL_PIN)); +} + +void TDeckProKeyboard::updateModifierFlag(uint8_t key) +{ + if (key == modifierRightShiftKey) { + modifierFlag ^= modifierRightShift; + } else if (key == modifierLeftShiftKey) { + modifierFlag ^= modifierLeftShift; + } else if (key == modifierSymKey) { + modifierFlag ^= modifierSym; + } else if (key == modifierAltKey) { + modifierFlag ^= modifierAlt; + } +} + +bool TDeckProKeyboard::isModifierKey(uint8_t key) +{ + return (key == modifierRightShiftKey || key == modifierLeftShiftKey || key == modifierAltKey || key == modifierSymKey); +} + +#endif // T_DECK_PRO \ No newline at end of file diff --git a/src/input/TDeckProKeyboard.h b/src/input/TDeckProKeyboard.h new file mode 100644 index 000000000..617f3f20b --- /dev/null +++ b/src/input/TDeckProKeyboard.h @@ -0,0 +1,27 @@ +#include "TCA8418KeyboardBase.h" + +class TDeckProKeyboard : public TCA8418KeyboardBase +{ + public: + TDeckProKeyboard(); + void reset(void) override; + void trigger(void) override; + void setBacklight(bool on) override; + + protected: + void pressed(uint8_t key) override; + void released(void) override; + + void updateModifierFlag(uint8_t key); + bool isModifierKey(uint8_t key); + void toggleBacklight(void); + + private: + uint8_t modifierFlag; // Flag to indicate if a modifier key is pressed + uint32_t last_modifier_time; // Timestamp of the last modifier key press + int8_t last_key; + int8_t next_key; + uint32_t last_tap; + uint8_t char_idx; + int32_t tap_interval; +}; diff --git a/src/input/TLoraPagerKeyboard.h b/src/input/TLoraPagerKeyboard.h new file mode 100644 index 000000000..d31b05978 --- /dev/null +++ b/src/input/TLoraPagerKeyboard.h @@ -0,0 +1,12 @@ +#include "TCA8418KeyboardBase.h" + +class TLoraPagerKeyboard : public TCA8418KeyboardBase +{ + public: + TLoraPagerKeyboard(); + void setBacklight(bool on) override{}; + + protected: + void pressed(uint8_t key) override{}; + void released(void) override{}; +}; diff --git a/src/input/kbI2cBase.cpp b/src/input/kbI2cBase.cpp index 5cc069816..5db1e39a9 100644 --- a/src/input/kbI2cBase.cpp +++ b/src/input/kbI2cBase.cpp @@ -3,10 +3,26 @@ #include "detect/ScanI2C.h" #include "detect/ScanI2CTwoWire.h" +#if defined(T_DECK_PRO) +#include "TDeckProKeyboard.h" +#elif defined(T_LORA_PAGER) +#include "TLoraPagerKeyboard.h" +#else +#include "TCA8418Keyboard.h" +#endif + extern ScanI2C::DeviceAddress cardkb_found; extern uint8_t kb_model; -KbI2cBase::KbI2cBase(const char *name) : concurrency::OSThread(name) +KbI2cBase::KbI2cBase(const char *name) + : concurrency::OSThread(name), +#if defined(T_DECK_PRO) + TCAKeyboard(*(new TDeckProKeyboard())) +#elif defined(T_LORA_PAGER) + TCAKeyboard(*(new TLoraPagerKeyboard())) +#else + TCAKeyboard(*(new TCA8418Keyboard())) +#endif { this->_originName = name; } @@ -43,8 +59,8 @@ int32_t KbI2cBase::runOnce() if (cardkb_found.address == MPR121_KB_ADDR) { MPRkeyboard.begin(MPR121_KB_ADDR, &Wire1); } - if (cardkb_found.address == XPOWERS_AXP192_AXP2101_ADDRESS) { - TCAKeyboard.begin(XPOWERS_AXP192_AXP2101_ADDRESS, &Wire1); + if (cardkb_found.address == TCA8418_KB_ADDR) { + TCAKeyboard.begin(TCA8418_KB_ADDR, &Wire1); } break; #endif @@ -58,8 +74,8 @@ int32_t KbI2cBase::runOnce() if (cardkb_found.address == MPR121_KB_ADDR) { MPRkeyboard.begin(MPR121_KB_ADDR, &Wire); } - if (cardkb_found.address == XPOWERS_AXP192_AXP2101_ADDRESS) { - TCAKeyboard.begin(XPOWERS_AXP192_AXP2101_ADDRESS, &Wire); + if (cardkb_found.address == TCA8418_KB_ADDR) { + TCAKeyboard.begin(TCA8418_KB_ADDR, &Wire); } break; case ScanI2C::NO_I2C: @@ -241,41 +257,65 @@ int32_t KbI2cBase::runOnce() e.kbchar = 0x00; e.source = this->_originName; switch (nextEvent) { - case _TCA8418_NONE: + case TCA8418KeyboardBase::NONE: e.inputEvent = INPUT_BROKER_NONE; e.kbchar = 0x00; break; - case _TCA8418_REBOOT: + case TCA8418KeyboardBase::REBOOT: e.inputEvent = INPUT_BROKER_ANYKEY; e.kbchar = INPUT_BROKER_MSG_REBOOT; break; - case _TCA8418_LEFT: + case TCA8418KeyboardBase::LEFT: e.inputEvent = INPUT_BROKER_LEFT; e.kbchar = 0x00; break; - case _TCA8418_UP: + case TCA8418KeyboardBase::UP: e.inputEvent = INPUT_BROKER_UP; e.kbchar = 0x00; break; - case _TCA8418_DOWN: + case TCA8418KeyboardBase::DOWN: e.inputEvent = INPUT_BROKER_DOWN; e.kbchar = 0x00; break; - case _TCA8418_RIGHT: + case TCA8418KeyboardBase::RIGHT: e.inputEvent = INPUT_BROKER_RIGHT; e.kbchar = 0x00; break; - case _TCA8418_BSP: + case TCA8418KeyboardBase::BSP: e.inputEvent = INPUT_BROKER_BACK; e.kbchar = 0x08; break; - case _TCA8418_SELECT: + case TCA8418KeyboardBase::SELECT: e.inputEvent = INPUT_BROKER_SELECT; e.kbchar = 0x00; break; - case _TCA8418_ESC: + case TCA8418KeyboardBase::ESC: e.inputEvent = INPUT_BROKER_CANCEL; - e.kbchar = 0; + e.kbchar = 0x00; + break; + case TCA8418KeyboardBase::GPS_TOGGLE: + e.inputEvent = INPUT_BROKER_ANYKEY; + e.kbchar = INPUT_BROKER_GPS_TOGGLE; + break; + case TCA8418KeyboardBase::SEND_PING: + e.inputEvent = INPUT_BROKER_ANYKEY; + e.kbchar = INPUT_BROKER_SEND_PING; + break; + case TCA8418KeyboardBase::MUTE_TOGGLE: + e.inputEvent = INPUT_BROKER_ANYKEY; + e.kbchar = INPUT_BROKER_MSG_MUTE_TOGGLE; + break; + case TCA8418KeyboardBase::BT_TOGGLE: + e.inputEvent = INPUT_BROKER_ANYKEY; + e.kbchar = INPUT_BROKER_MSG_BLUETOOTH_TOGGLE; + break; + case TCA8418KeyboardBase::BL_TOGGLE: + e.inputEvent = INPUT_BROKER_ANYKEY; + e.kbchar = INPUT_BROKER_MSG_BLUETOOTH_TOGGLE; + break; + case TCA8418KeyboardBase::TAB: + e.inputEvent = INPUT_BROKER_ANYKEY; + e.kbchar = INPUT_BROKER_MSG_TAB; break; default: if (nextEvent > 127) { @@ -291,6 +331,7 @@ int32_t KbI2cBase::runOnce() LOG_DEBUG("TCA8418 Notifying: %i Char: %c", e.inputEvent, e.kbchar); this->notifyObservers(&e); } + TCAKeyboard.trigger(); } break; } diff --git a/src/input/kbI2cBase.h b/src/input/kbI2cBase.h index 8193433fe..af7602979 100644 --- a/src/input/kbI2cBase.h +++ b/src/input/kbI2cBase.h @@ -3,10 +3,11 @@ #include "BBQ10Keyboard.h" #include "InputBroker.h" #include "MPR121Keyboard.h" -#include "TCA8418Keyboard.h" #include "Wire.h" #include "concurrency/OSThread.h" +class TCA8418KeyboardBase; + class KbI2cBase : public Observable, public concurrency::OSThread { public: @@ -22,6 +23,6 @@ class KbI2cBase : public Observable, public concurrency::OST BBQ10Keyboard Q10keyboard; MPR121Keyboard MPRkeyboard; - TCA8418Keyboard TCAKeyboard; + TCA8418KeyboardBase &TCAKeyboard; bool is_sym = false; }; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 2e2adfd46..c3e7c2a33 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -335,6 +335,15 @@ void setup() pinMode(TFT_CS, OUTPUT); digitalWrite(TFT_CS, HIGH); delay(100); +#elif defined(T_DECK_PRO) + pinMode(LORA_EN, OUTPUT); + digitalWrite(LORA_EN, HIGH); + pinMode(LORA_CS, OUTPUT); + digitalWrite(LORA_CS, HIGH); + pinMode(SDCARD_CS, OUTPUT); + digitalWrite(SDCARD_CS, HIGH); + pinMode(PIN_EINK_CS, OUTPUT); + digitalWrite(PIN_EINK_CS, HIGH); #endif concurrency::hasBeenSetup = true; diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index 3c19971e6..38e213167 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -735,7 +735,6 @@ void NodeDB::installDefaultConfig(bool preserveKey = false) config.display.screen_on_secs = 30; config.display.wake_on_tap_or_motion = true; #endif - #if defined(ARCH_ESP32) && !MESHTASTIC_EXCLUDE_WIFI if (WiFiOTA::isUpdated()) { WiFiOTA::recoverConfig(&config.network); @@ -796,6 +795,13 @@ void NodeDB::installDefaultModuleConfig() moduleConfig.external_notification.alert_message_buzzer = true; moduleConfig.external_notification.nag_timeout = default_ringtone_nag_secs; #endif +#if defined(PIN_VIBRATION) + moduleConfig.external_notification.enabled = true; + moduleConfig.external_notification.output_vibra = PIN_VIBRATION; + moduleConfig.external_notification.alert_message_vibra = true; + moduleConfig.external_notification.output_ms = 500; + moduleConfig.external_notification.nag_timeout = 2; +#endif #if defined(RAK4630) || defined(RAK11310) || defined(RAK3312) // Default to RAK led pin 2 (blue) moduleConfig.external_notification.enabled = true; diff --git a/src/platform/esp32/architecture.h b/src/platform/esp32/architecture.h index baefbc4eb..3168d9121 100644 --- a/src/platform/esp32/architecture.h +++ b/src/platform/esp32/architecture.h @@ -188,6 +188,8 @@ #define HW_VENDOR meshtastic_HardwareModel_RAK3312 #elif defined(LINK_32) #define HW_VENDOR meshtastic_HardwareModel_LINK_32 +#elif defined(T_DECK_PRO) +#define HW_VENDOR meshtastic_HardwareModel_T_DECK_PRO #endif // ----------------------------------------------------------------------------- diff --git a/src/platform/extra_variants/t_deck_pro/variant.cpp b/src/platform/extra_variants/t_deck_pro/variant.cpp new file mode 100644 index 000000000..eae9335ce --- /dev/null +++ b/src/platform/extra_variants/t_deck_pro/variant.cpp @@ -0,0 +1,28 @@ +#include "configuration.h" + +#ifdef T_DECK_PRO + +#include "input/TouchScreenImpl1.h" +#include +#include + +CSE_CST328 tsPanel = CSE_CST328(EINK_WIDTH, EINK_HEIGHT, &Wire, CST328_PIN_RST, CST328_PIN_INT); + +bool readTouch(int16_t *x, int16_t *y) +{ + if (tsPanel.getTouches()) { + *x = tsPanel.getPoint(0).x; + *y = tsPanel.getPoint(0).y; + return true; + } + return false; +} + +// T-Deck Pro specific init +void lateInitVariant() +{ + tsPanel.begin(); + touchScreenImpl1 = new TouchScreenImpl1(EINK_WIDTH, EINK_HEIGHT, readTouch); + touchScreenImpl1->init(); +} +#endif \ No newline at end of file diff --git a/src/power.h b/src/power.h index c71f96c10..046980bd6 100644 --- a/src/power.h +++ b/src/power.h @@ -126,6 +126,8 @@ class Power : private concurrency::OSThread bool analogInit(); /// Setup a Lipo battery level sensor bool lipoInit(); + /// Setup a Lipo charger + bool lipoChargerInit(); private: // open circuit voltage lookup table diff --git a/variants/esp32s3/t-deck-pro/pins_arduino.h b/variants/esp32s3/t-deck-pro/pins_arduino.h new file mode 100644 index 000000000..af0ba80b3 --- /dev/null +++ b/variants/esp32s3/t-deck-pro/pins_arduino.h @@ -0,0 +1,19 @@ +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +#define USB_VID 0x303a +#define USB_PID 0x1001 + +// used for keyboard, touch controller, beam sensor, and gyroscope +static const uint8_t SDA = 13; +static const uint8_t SCL = 14; + +// Default SPI will be mapped to Radio +static const uint8_t SS = 3; +static const uint8_t MOSI = 33; +static const uint8_t MISO = 47; +static const uint8_t SCK = 36; + +#endif /* Pins_Arduino_h */ diff --git a/variants/esp32s3/t-deck-pro/platformio.ini b/variants/esp32s3/t-deck-pro/platformio.ini new file mode 100644 index 000000000..45c3ae4ea --- /dev/null +++ b/variants/esp32s3/t-deck-pro/platformio.ini @@ -0,0 +1,24 @@ +[env:t-deck-pro] +extends = esp32s3_base +board = t-deck-pro +board_check = true +upload_protocol = esptool + +build_flags = + ${esp32_base.build_flags} -I variants/esp32s3/t-deck-pro + -D T_DECK_PRO + -D GPS_POWER_TOGGLE + -D USE_EINK + -D EINK_DISPLAY_MODEL=GxEPD2_310_GDEQ031T10 + -D EINK_WIDTH=240 + -D EINK_HEIGHT=320 + ;-D USE_EINK_DYNAMICDISPLAY ; Enable Dynamic EInk + -D EINK_LIMIT_FASTREFRESH=10 ; How many consecutive fast-refreshes are permitted + -D EINK_LIMIT_GHOSTING_PX=2000 ; (Optional) How much image ghosting is tolerated + +lib_deps = + ${esp32s3_base.lib_deps} + https://github.com/ZinggJM/GxEPD2/archive/refs/tags/1.6.4.zip + https://github.com/CIRCUITSTATE/CSE_Touch/archive/b44f23b6f870b848f1fbe453c190879bc6cfaafa.zip + https://github.com/CIRCUITSTATE/CSE_CST328/archive/refs/tags/v0.0.4.zip + https://github.com/mverch67/BQ27220/archive/07d92be846abd8a0258a50c23198dac0858b22ed.zip diff --git a/variants/esp32s3/t-deck-pro/variant.h b/variants/esp32s3/t-deck-pro/variant.h new file mode 100644 index 000000000..b08d3f65f --- /dev/null +++ b/variants/esp32s3/t-deck-pro/variant.h @@ -0,0 +1,94 @@ +// Display (E-Ink) +#define PIN_EINK_CS 34 +#define PIN_EINK_BUSY 37 +#define PIN_EINK_DC 35 +#define PIN_EINK_RES -1 +#define PIN_EINK_SCLK 36 +#define PIN_EINK_MOSI 47 + +#define I2C_SDA SDA +#define I2C_SCL SCL + +// CST328 touch screen (implementation in src/platform/extra_variants/t_deck_pro/variant.cpp) +#define HAS_TOUCHSCREEN 1 +#define CST328_PIN_INT 12 +#define CST328_PIN_RST 45 + +#define USE_POWERSAVE +#define SLEEP_TIME 120 + +// GNNS +#define HAS_GPS 1 +#define GPS_BAUDRATE 38400 +#define PIN_GPS_EN 15 +#define GPS_EN_ACTIVE 1 +#define GPS_RX_PIN 44 +#define GPS_TX_PIN 43 +#define PIN_GPS_PPS 1 + +#define BUTTON_PIN 0 + +// vibration motor +#define PIN_VIBRATION 2 + +// Have SPI interface SD card slot +#define HAS_SDCARD +#define SDCARD_USE_SPI1 +#define SPI_MOSI (33) +#define SPI_SCK (36) +#define SPI_MISO (47) +#define SPI_CS (48) +#define SDCARD_CS SPI_CS +#define SD_SPI_FREQUENCY 75000000U + +// TCA8418 keyboard +#define KB_BL_PIN 42 +#define CANNED_MESSAGE_MODULE_ENABLE 1 + +// microphone PCM5102A +#define PCM5102A_SCK 47 +#define PCM5102A_DIN 17 +#define PCM5102A_LRCK 18 + +// LTR_553ALS light sensor +#define HAS_LTR553ALS + +// gyroscope BHI260AP +#define BOARD_1V8_EN 38 +#define HAS_BHI260AP + +// battery charger BQ25896 +#define HAS_PPM 1 +#define XPOWERS_CHIP_BQ25896 + +// battery quality management BQ27220 +#define HAS_BQ27220 1 +#define BQ27220_I2C_SDA SDA +#define BQ27220_I2C_SCL SCL +#define BQ27220_DESIGN_CAPACITY 1400 + +// LoRa +#define USE_SX1262 +#define USE_SX1268 + +#define LORA_EN 46 // LoRa enable pin +#define LORA_SCK 36 +#define LORA_MISO 47 +#define LORA_MOSI 33 +#define LORA_CS 3 + +#define LORA_DIO0 -1 // a No connect on the SX1262 module +#define LORA_RESET 4 +#define LORA_DIO1 5 // SX1262 IRQ +#define LORA_DIO2 6 // SX1262 BUSY +#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262, if DIO3 is high the TXCO is enabled + +#define SX126X_CS LORA_CS // FIXME - we really should define LORA_CS instead +#define SX126X_DIO1 LORA_DIO1 +#define SX126X_BUSY LORA_DIO2 +#define SX126X_RESET LORA_RESET +// Not really an E22 but TTGO seems to be trying to clone that +#define SX126X_DIO2_AS_RF_SWITCH +#define SX126X_DIO3_TCXO_VOLTAGE 2.4 +// Internally the TTGO module hooks the SX1262-DIO2 in to control the TX/RX switch (which is the default for the sx1262interface +// code) From 32418448de4de4243c729d192d91e6e1e22bd4cf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 21 Jul 2025 20:32:55 +0200 Subject: [PATCH 41/45] Update protobufs (#7410) Co-authored-by: caveman99 <25002+caveman99@users.noreply.github.com> --- protobufs | 2 +- src/mesh/generated/meshtastic/config.pb.h | 10 ++- src/mesh/generated/meshtastic/telemetry.pb.h | 75 +++++++++++++++----- 3 files changed, 64 insertions(+), 23 deletions(-) diff --git a/protobufs b/protobufs index 15c1fbde8..fa02e14d8 160000 --- a/protobufs +++ b/protobufs @@ -1 +1 @@ -Subproject commit 15c1fbde882de953dec279160fa984d0e00569d0 +Subproject commit fa02e14d8d01850336eaea0e9552aef4f08f0a40 diff --git a/src/mesh/generated/meshtastic/config.pb.h b/src/mesh/generated/meshtastic/config.pb.h index bd43472b5..8a68197f0 100644 --- a/src/mesh/generated/meshtastic/config.pb.h +++ b/src/mesh/generated/meshtastic/config.pb.h @@ -293,7 +293,11 @@ typedef enum _meshtastic_Config_LoRaConfig_RegionCode { /* Kazakhstan 433MHz */ meshtastic_Config_LoRaConfig_RegionCode_KZ_433 = 23, /* Kazakhstan 863MHz */ - meshtastic_Config_LoRaConfig_RegionCode_KZ_863 = 24 + meshtastic_Config_LoRaConfig_RegionCode_KZ_863 = 24, + /* Nepal 865MHz */ + meshtastic_Config_LoRaConfig_RegionCode_NP_865 = 25, + /* Brazil 902MHz */ + meshtastic_Config_LoRaConfig_RegionCode_BR_902 = 26 } meshtastic_Config_LoRaConfig_RegionCode; /* Standard predefined channel settings @@ -690,8 +694,8 @@ extern "C" { #define _meshtastic_Config_DisplayConfig_CompassOrientation_ARRAYSIZE ((meshtastic_Config_DisplayConfig_CompassOrientation)(meshtastic_Config_DisplayConfig_CompassOrientation_DEGREES_270_INVERTED+1)) #define _meshtastic_Config_LoRaConfig_RegionCode_MIN meshtastic_Config_LoRaConfig_RegionCode_UNSET -#define _meshtastic_Config_LoRaConfig_RegionCode_MAX meshtastic_Config_LoRaConfig_RegionCode_KZ_863 -#define _meshtastic_Config_LoRaConfig_RegionCode_ARRAYSIZE ((meshtastic_Config_LoRaConfig_RegionCode)(meshtastic_Config_LoRaConfig_RegionCode_KZ_863+1)) +#define _meshtastic_Config_LoRaConfig_RegionCode_MAX meshtastic_Config_LoRaConfig_RegionCode_BR_902 +#define _meshtastic_Config_LoRaConfig_RegionCode_ARRAYSIZE ((meshtastic_Config_LoRaConfig_RegionCode)(meshtastic_Config_LoRaConfig_RegionCode_BR_902+1)) #define _meshtastic_Config_LoRaConfig_ModemPreset_MIN meshtastic_Config_LoRaConfig_ModemPreset_LONG_FAST #define _meshtastic_Config_LoRaConfig_ModemPreset_MAX meshtastic_Config_LoRaConfig_ModemPreset_SHORT_TURBO diff --git a/src/mesh/generated/meshtastic/telemetry.pb.h b/src/mesh/generated/meshtastic/telemetry.pb.h index cb47b9fda..f758995c2 100644 --- a/src/mesh/generated/meshtastic/telemetry.pb.h +++ b/src/mesh/generated/meshtastic/telemetry.pb.h @@ -97,7 +97,9 @@ typedef enum _meshtastic_TelemetrySensorType { /* ADS1X15 ADC_ALT */ meshtastic_TelemetrySensorType_ADS1X15_ALT = 41, /* Sensirion SFA30 Formaldehyde sensor */ - meshtastic_TelemetrySensorType_SFA30 = 42 + meshtastic_TelemetrySensorType_SFA30 = 42, + /* SEN5X PM SENSORS */ + meshtastic_TelemetrySensorType_SEN5X = 43 } meshtastic_TelemetrySensorType; /* Struct definitions */ @@ -246,40 +248,40 @@ typedef struct _meshtastic_PowerMetrics { /* Air quality metrics */ typedef struct _meshtastic_AirQualityMetrics { - /* Concentration Units Standard PM1.0 */ + /* Concentration Units Standard PM1.0 in ug/m3 */ bool has_pm10_standard; uint32_t pm10_standard; - /* Concentration Units Standard PM2.5 */ + /* Concentration Units Standard PM2.5 in ug/m3 */ bool has_pm25_standard; uint32_t pm25_standard; - /* Concentration Units Standard PM10.0 */ + /* Concentration Units Standard PM10.0 in ug/m3 */ bool has_pm100_standard; uint32_t pm100_standard; - /* Concentration Units Environmental PM1.0 */ + /* Concentration Units Environmental PM1.0 in ug/m3 */ bool has_pm10_environmental; uint32_t pm10_environmental; - /* Concentration Units Environmental PM2.5 */ + /* Concentration Units Environmental PM2.5 in ug/m3 */ bool has_pm25_environmental; uint32_t pm25_environmental; - /* Concentration Units Environmental PM10.0 */ + /* Concentration Units Environmental PM10.0 in ug/m3 */ bool has_pm100_environmental; uint32_t pm100_environmental; - /* 0.3um Particle Count */ + /* 0.3um Particle Count in #/0.1l */ bool has_particles_03um; uint32_t particles_03um; - /* 0.5um Particle Count */ + /* 0.5um Particle Count in #/0.1l */ bool has_particles_05um; uint32_t particles_05um; - /* 1.0um Particle Count */ + /* 1.0um Particle Count in #/0.1l */ bool has_particles_10um; uint32_t particles_10um; - /* 2.5um Particle Count */ + /* 2.5um Particle Count in #/0.1l */ bool has_particles_25um; uint32_t particles_25um; - /* 5.0um Particle Count */ + /* 5.0um Particle Count in #/0.1l */ bool has_particles_50um; uint32_t particles_50um; - /* 10.0um Particle Count */ + /* 10.0um Particle Count in #/0.1l */ bool has_particles_100um; uint32_t particles_100um; /* CO2 concentration in ppm */ @@ -300,6 +302,27 @@ typedef struct _meshtastic_AirQualityMetrics { /* Formaldehyde sensor temperature in degrees Celsius */ bool has_form_temperature; float form_temperature; + /* Concentration Units Standard PM4.0 in ug/m3 */ + bool has_pm40_standard; + uint32_t pm40_standard; + /* 4.0um Particle Count in #/0.1l */ + bool has_particles_40um; + uint32_t particles_40um; + /* PM Sensor Temperature */ + bool has_pm_temperature; + float pm_temperature; + /* PM Sensor humidity */ + bool has_pm_humidity; + float pm_humidity; + /* PM Sensor VOC Index */ + bool has_pm_voc_idx; + float pm_voc_idx; + /* PM Sensor NOx Index */ + bool has_pm_nox_idx; + float pm_nox_idx; + /* Typical Particle Size in um */ + bool has_particles_tps; + float particles_tps; } meshtastic_AirQualityMetrics; /* Local device mesh statistics */ @@ -411,8 +434,8 @@ extern "C" { /* Helper constants for enums */ #define _meshtastic_TelemetrySensorType_MIN meshtastic_TelemetrySensorType_SENSOR_UNSET -#define _meshtastic_TelemetrySensorType_MAX meshtastic_TelemetrySensorType_SFA30 -#define _meshtastic_TelemetrySensorType_ARRAYSIZE ((meshtastic_TelemetrySensorType)(meshtastic_TelemetrySensorType_SFA30+1)) +#define _meshtastic_TelemetrySensorType_MAX meshtastic_TelemetrySensorType_SEN5X +#define _meshtastic_TelemetrySensorType_ARRAYSIZE ((meshtastic_TelemetrySensorType)(meshtastic_TelemetrySensorType_SEN5X+1)) @@ -428,7 +451,7 @@ extern "C" { #define meshtastic_DeviceMetrics_init_default {false, 0, false, 0, false, 0, false, 0, false, 0} #define meshtastic_EnvironmentMetrics_init_default {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} #define meshtastic_PowerMetrics_init_default {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} -#define meshtastic_AirQualityMetrics_init_default {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} +#define meshtastic_AirQualityMetrics_init_default {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} #define meshtastic_LocalStats_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} #define meshtastic_HealthMetrics_init_default {false, 0, false, 0, false, 0} #define meshtastic_HostMetrics_init_default {0, 0, 0, false, 0, false, 0, 0, 0, 0, false, ""} @@ -437,7 +460,7 @@ extern "C" { #define meshtastic_DeviceMetrics_init_zero {false, 0, false, 0, false, 0, false, 0, false, 0} #define meshtastic_EnvironmentMetrics_init_zero {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} #define meshtastic_PowerMetrics_init_zero {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} -#define meshtastic_AirQualityMetrics_init_zero {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} +#define meshtastic_AirQualityMetrics_init_zero {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0} #define meshtastic_LocalStats_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} #define meshtastic_HealthMetrics_init_zero {false, 0, false, 0, false, 0} #define meshtastic_HostMetrics_init_zero {0, 0, 0, false, 0, false, 0, 0, 0, 0, false, ""} @@ -506,6 +529,13 @@ extern "C" { #define meshtastic_AirQualityMetrics_form_formaldehyde_tag 16 #define meshtastic_AirQualityMetrics_form_humidity_tag 17 #define meshtastic_AirQualityMetrics_form_temperature_tag 18 +#define meshtastic_AirQualityMetrics_pm40_standard_tag 19 +#define meshtastic_AirQualityMetrics_particles_40um_tag 20 +#define meshtastic_AirQualityMetrics_pm_temperature_tag 21 +#define meshtastic_AirQualityMetrics_pm_humidity_tag 22 +#define meshtastic_AirQualityMetrics_pm_voc_idx_tag 23 +#define meshtastic_AirQualityMetrics_pm_nox_idx_tag 24 +#define meshtastic_AirQualityMetrics_particles_tps_tag 25 #define meshtastic_LocalStats_uptime_seconds_tag 1 #define meshtastic_LocalStats_channel_utilization_tag 2 #define meshtastic_LocalStats_air_util_tx_tag 3 @@ -616,7 +646,14 @@ X(a, STATIC, OPTIONAL, FLOAT, co2_temperature, 14) \ X(a, STATIC, OPTIONAL, FLOAT, co2_humidity, 15) \ X(a, STATIC, OPTIONAL, FLOAT, form_formaldehyde, 16) \ X(a, STATIC, OPTIONAL, FLOAT, form_humidity, 17) \ -X(a, STATIC, OPTIONAL, FLOAT, form_temperature, 18) +X(a, STATIC, OPTIONAL, FLOAT, form_temperature, 18) \ +X(a, STATIC, OPTIONAL, UINT32, pm40_standard, 19) \ +X(a, STATIC, OPTIONAL, UINT32, particles_40um, 20) \ +X(a, STATIC, OPTIONAL, FLOAT, pm_temperature, 21) \ +X(a, STATIC, OPTIONAL, FLOAT, pm_humidity, 22) \ +X(a, STATIC, OPTIONAL, FLOAT, pm_voc_idx, 23) \ +X(a, STATIC, OPTIONAL, FLOAT, pm_nox_idx, 24) \ +X(a, STATIC, OPTIONAL, FLOAT, particles_tps, 25) #define meshtastic_AirQualityMetrics_CALLBACK NULL #define meshtastic_AirQualityMetrics_DEFAULT NULL @@ -705,7 +742,7 @@ extern const pb_msgdesc_t meshtastic_Nau7802Config_msg; /* Maximum encoded size of messages (where known) */ #define MESHTASTIC_MESHTASTIC_TELEMETRY_PB_H_MAX_SIZE meshtastic_Telemetry_size -#define meshtastic_AirQualityMetrics_size 106 +#define meshtastic_AirQualityMetrics_size 150 #define meshtastic_DeviceMetrics_size 27 #define meshtastic_EnvironmentMetrics_size 113 #define meshtastic_HealthMetrics_size 11 From 920aeeeba59dba6b14a11c3882453e52edf4cab4 Mon Sep 17 00:00:00 2001 From: Austin Date: Mon, 21 Jul 2025 15:03:13 -0400 Subject: [PATCH 42/45] Actions: pull_request_target is fun (#7398) --- .github/workflows/build_esp32.yml | 14 ++-- .github/workflows/build_esp32_c3.yml | 14 ++-- .github/workflows/build_esp32_c6.yml | 14 ++-- .github/workflows/build_esp32_s3.yml | 14 ++-- .github/workflows/build_nrf52.yml | 14 ++-- .github/workflows/build_rpi2040.yml | 14 ++-- .github/workflows/build_stm32.yml | 14 ++-- .github/workflows/main_matrix.yml | 112 ++++++++++++++------------- 8 files changed, 113 insertions(+), 97 deletions(-) diff --git a/.github/workflows/build_esp32.yml b/.github/workflows/build_esp32.yml index 32cd45000..2c4622f43 100644 --- a/.github/workflows/build_esp32.yml +++ b/.github/workflows/build_esp32.yml @@ -3,6 +3,9 @@ name: Build ESP32 on: workflow_call: inputs: + version: + required: true + type: string board: required: true type: string @@ -14,11 +17,10 @@ jobs: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - - - name: Get release version string - shell: bash - run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT - id: version + with: + submodules: recursive + ref: ${{github.event.pull_request.head.ref}} + repository: ${{github.event.pull_request.head.repo.full_name}} - name: Build ESP32 id: build @@ -33,7 +35,7 @@ jobs: - name: Store binaries as an artifact uses: actions/upload-artifact@v4 with: - name: firmware-esp32-${{ inputs.board }}-${{ steps.version.outputs.long }}.zip + name: firmware-esp32-${{ inputs.board }}-${{ inputs.version }}.zip overwrite: true path: | release/*.bin diff --git a/.github/workflows/build_esp32_c3.yml b/.github/workflows/build_esp32_c3.yml index 161786f99..3e7746166 100644 --- a/.github/workflows/build_esp32_c3.yml +++ b/.github/workflows/build_esp32_c3.yml @@ -3,6 +3,9 @@ name: Build ESP32-C3 on: workflow_call: inputs: + version: + required: true + type: string board: required: true type: string @@ -14,11 +17,10 @@ jobs: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - - - name: Get release version string - shell: bash - run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT - id: version + with: + submodules: recursive + ref: ${{github.event.pull_request.head.ref}} + repository: ${{github.event.pull_request.head.repo.full_name}} - name: Build ESP32-C3 id: build @@ -33,7 +35,7 @@ jobs: - name: Store binaries as an artifact uses: actions/upload-artifact@v4 with: - name: firmware-esp32c3-${{ inputs.board }}-${{ steps.version.outputs.long }}.zip + name: firmware-esp32c3-${{ inputs.board }}-${{ inputs.version }}.zip overwrite: true path: | release/*.bin diff --git a/.github/workflows/build_esp32_c6.yml b/.github/workflows/build_esp32_c6.yml index 90cdcc78e..6f32eb3c6 100644 --- a/.github/workflows/build_esp32_c6.yml +++ b/.github/workflows/build_esp32_c6.yml @@ -3,6 +3,9 @@ name: Build ESP32-C6 on: workflow_call: inputs: + version: + required: true + type: string board: required: true type: string @@ -14,11 +17,10 @@ jobs: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - - - name: Get release version string - shell: bash - run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT - id: version + with: + submodules: recursive + ref: ${{github.event.pull_request.head.ref}} + repository: ${{github.event.pull_request.head.repo.full_name}} - name: Build ESP32-C6 id: build @@ -33,7 +35,7 @@ jobs: - name: Store binaries as an artifact uses: actions/upload-artifact@v4 with: - name: firmware-esp32c6-${{ inputs.board }}-${{ steps.version.outputs.long }}.zip + name: firmware-esp32c6-${{ inputs.board }}-${{ inputs.version }}.zip overwrite: true path: | release/*.bin diff --git a/.github/workflows/build_esp32_s3.yml b/.github/workflows/build_esp32_s3.yml index e5ed48e3e..6527d6d7c 100644 --- a/.github/workflows/build_esp32_s3.yml +++ b/.github/workflows/build_esp32_s3.yml @@ -3,6 +3,9 @@ name: Build ESP32-S3 on: workflow_call: inputs: + version: + required: true + type: string board: required: true type: string @@ -14,11 +17,10 @@ jobs: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - - - name: Get release version string - shell: bash - run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT - id: version + with: + submodules: recursive + ref: ${{github.event.pull_request.head.ref}} + repository: ${{github.event.pull_request.head.repo.full_name}} - name: Build ESP32-S3 id: build @@ -33,7 +35,7 @@ jobs: - name: Store binaries as an artifact uses: actions/upload-artifact@v4 with: - name: firmware-esp32s3-${{ inputs.board }}-${{ steps.version.outputs.long }}.zip + name: firmware-esp32s3-${{ inputs.board }}-${{ inputs.version }}.zip overwrite: true path: | release/*.bin diff --git a/.github/workflows/build_nrf52.yml b/.github/workflows/build_nrf52.yml index 312aeb372..89be40187 100644 --- a/.github/workflows/build_nrf52.yml +++ b/.github/workflows/build_nrf52.yml @@ -3,6 +3,9 @@ name: Build NRF52 on: workflow_call: inputs: + version: + required: true + type: string board: required: true type: string @@ -14,11 +17,10 @@ jobs: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - - - name: Get release version string - shell: bash - run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT - id: version + with: + submodules: recursive + ref: ${{github.event.pull_request.head.ref}} + repository: ${{github.event.pull_request.head.repo.full_name}} - name: Build NRF52 id: build @@ -31,7 +33,7 @@ jobs: - name: Store binaries as an artifact uses: actions/upload-artifact@v4 with: - name: firmware-nrf52840-${{ inputs.board }}-${{ steps.version.outputs.long }}.zip + name: firmware-nrf52840-${{ inputs.board }}-${{ inputs.version }}.zip overwrite: true path: | release/*.uf2 diff --git a/.github/workflows/build_rpi2040.yml b/.github/workflows/build_rpi2040.yml index 2abd7a839..fbaa21684 100644 --- a/.github/workflows/build_rpi2040.yml +++ b/.github/workflows/build_rpi2040.yml @@ -3,6 +3,9 @@ name: Build RPI2040 on: workflow_call: inputs: + version: + required: true + type: string board: required: true type: string @@ -14,11 +17,10 @@ jobs: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - - - name: Get release version string - shell: bash - run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT - id: version + with: + submodules: recursive + ref: ${{github.event.pull_request.head.ref}} + repository: ${{github.event.pull_request.head.repo.full_name}} - name: Build Raspberry Pi 2040 id: build @@ -31,7 +33,7 @@ jobs: - name: Store binaries as an artifact uses: actions/upload-artifact@v4 with: - name: firmware-rp2040-${{ inputs.board }}-${{ steps.version.outputs.long }}.zip + name: firmware-rp2040-${{ inputs.board }}-${{ inputs.version }}.zip overwrite: true path: | release/*.uf2 diff --git a/.github/workflows/build_stm32.yml b/.github/workflows/build_stm32.yml index 10680f422..f06e8f3b8 100644 --- a/.github/workflows/build_stm32.yml +++ b/.github/workflows/build_stm32.yml @@ -3,6 +3,9 @@ name: Build STM32 on: workflow_call: inputs: + version: + required: true + type: string board: required: true type: string @@ -14,11 +17,10 @@ jobs: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - - - name: Get release version string - shell: bash - run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT - id: version + with: + submodules: recursive + ref: ${{github.event.pull_request.head.ref}} + repository: ${{github.event.pull_request.head.repo.full_name}} - name: Build STM32WL id: build @@ -31,7 +33,7 @@ jobs: - name: Store binaries as an artifact uses: actions/upload-artifact@v4 with: - name: firmware-stm32-${{ inputs.board }}-${{ steps.version.outputs.long }}.zip + name: firmware-stm32-${{ inputs.board }}-${{ inputs.version }}.zip overwrite: true path: | release/*.hex diff --git a/.github/workflows/main_matrix.yml b/.github/workflows/main_matrix.yml index a676efa1e..9d5cb0981 100644 --- a/.github/workflows/main_matrix.yml +++ b/.github/workflows/main_matrix.yml @@ -33,9 +33,7 @@ jobs: arch: [esp32, esp32s3, esp32c3, esp32c6, nrf52840, rp2040, stm32, check] runs-on: ubuntu-latest steps: - - id: checkout - uses: actions/checkout@v4 - name: Checkout base + - uses: actions/checkout@v4 - id: jsonStep run: | if [[ "$GITHUB_HEAD_REF" == "" ]]; then @@ -55,6 +53,21 @@ jobs: stm32: ${{ steps.jsonStep.outputs.stm32 }} check: ${{ steps.jsonStep.outputs.check }} + version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Get release version string + run: | + echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT + echo "deb=$(./bin/buildinfo.py deb)" >> $GITHUB_OUTPUT + id: version + env: + BUILD_LOCATION: local + outputs: + long: ${{ steps.version.outputs.long }} + deb: ${{ steps.version.outputs.deb }} + check: needs: setup strategy: @@ -72,66 +85,73 @@ jobs: run: bin/check-all.sh ${{ matrix.board }} build-esp32: - needs: setup + needs: [setup, version] strategy: fail-fast: false matrix: ${{ fromJson(needs.setup.outputs.esp32) }} uses: ./.github/workflows/build_esp32.yml with: + version: ${{ needs.version.outputs.long }} board: ${{ matrix.board }} build-esp32-s3: - needs: setup + needs: [setup, version] strategy: fail-fast: false matrix: ${{ fromJson(needs.setup.outputs.esp32s3) }} uses: ./.github/workflows/build_esp32_s3.yml with: + version: ${{ needs.version.outputs.long }} board: ${{ matrix.board }} build-esp32-c3: - needs: setup + needs: [setup, version] strategy: fail-fast: false matrix: ${{ fromJson(needs.setup.outputs.esp32c3) }} uses: ./.github/workflows/build_esp32_c3.yml with: + version: ${{ needs.version.outputs.long }} board: ${{ matrix.board }} build-esp32-c6: - needs: setup + needs: [setup, version] strategy: fail-fast: false matrix: ${{ fromJson(needs.setup.outputs.esp32c6) }} uses: ./.github/workflows/build_esp32_c6.yml with: + version: ${{ needs.version.outputs.long }} board: ${{ matrix.board }} build-nrf52: - needs: setup + needs: [setup, version] strategy: fail-fast: false matrix: ${{ fromJson(needs.setup.outputs.nrf52840) }} uses: ./.github/workflows/build_nrf52.yml with: + version: ${{ needs.version.outputs.long }} board: ${{ matrix.board }} build-rpi2040: - needs: setup + needs: [setup, version] strategy: fail-fast: false matrix: ${{ fromJson(needs.setup.outputs.rp2040) }} uses: ./.github/workflows/build_rpi2040.yml with: + version: ${{ needs.version.outputs.long }} board: ${{ matrix.board }} build-stm32: - needs: setup + needs: [setup, version] strategy: fail-fast: false matrix: ${{ fromJson(needs.setup.outputs.stm32) }} uses: ./.github/workflows/build_stm32.yml with: + version: ${{ needs.version.outputs.long }} board: ${{ matrix.board }} build-debian-src: @@ -214,6 +234,7 @@ jobs: runs-on: ubuntu-latest needs: [ + version, build-esp32, build-esp32-s3, build-esp32-c3, @@ -238,17 +259,13 @@ jobs: - name: Display structure of downloaded files run: ls -R - - name: Get release version string - run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT - id: version - - name: Move files up run: mv -b -t ./ ./bin/device-*.sh ./bin/device-*.bat - name: Repackage in single firmware zip uses: actions/upload-artifact@v4 with: - name: firmware-${{matrix.arch}}-${{ steps.version.outputs.long }} + name: firmware-${{matrix.arch}}-${{ needs.version.outputs.long }} overwrite: true path: | ./firmware-*.bin @@ -264,7 +281,7 @@ jobs: - uses: actions/download-artifact@v4 with: - name: firmware-${{matrix.arch}}-${{ steps.version.outputs.long }} + name: firmware-${{matrix.arch}}-${{ needs.version.outputs.long }} merge-multiple: true path: ./output @@ -278,12 +295,12 @@ jobs: chmod +x ./output/device-update.sh - name: Zip firmware - run: zip -j -9 -r ./firmware-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip ./output + run: zip -j -9 -r ./firmware-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip ./output - name: Repackage in single elfs zip uses: actions/upload-artifact@v4 with: - name: debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip + name: debug-elfs-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip overwrite: true path: ./*.elf retention-days: 30 @@ -291,8 +308,8 @@ jobs: - uses: scruplelesswizard/comment-artifact@main if: ${{ github.event_name == 'pull_request' }} with: - name: firmware-${{matrix.arch}}-${{ steps.version.outputs.long }} - description: "Download firmware-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip. This artifact will be available for 90 days from creation" + name: firmware-${{matrix.arch}}-${{ needs.version.outputs.long }} + description: "Download firmware-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip. This artifact will be available for 90 days from creation" github-token: ${{ secrets.GITHUB_TOKEN }} release-artifacts: @@ -301,6 +318,7 @@ jobs: outputs: upload_url: ${{ steps.create_release.outputs.upload_url }} needs: + - version - gather-artifacts - build-debian-src - package-pio-deps-native-tft @@ -313,44 +331,36 @@ jobs: with: python-version: 3.x - - name: Get release version string - run: | - echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT - echo "deb=$(./bin/buildinfo.py deb)" >> $GITHUB_OUTPUT - id: version - env: - BUILD_LOCATION: local - - name: Create release uses: softprops/action-gh-release@v2 id: create_release with: draft: true prerelease: true - name: Meshtastic Firmware ${{ steps.version.outputs.long }} Alpha - tag_name: v${{ steps.version.outputs.long }} + name: Meshtastic Firmware ${{ needs.version.outputs.long }} Alpha + tag_name: v${{ needs.version.outputs.long }} body: | Autogenerated by github action, developer should edit as required before publishing... - name: Download source deb uses: actions/download-artifact@v4 with: - pattern: firmware-debian-${{ steps.version.outputs.deb }}~UNRELEASED-src + pattern: firmware-debian-${{ needs.version.outputs.deb }}~UNRELEASED-src merge-multiple: true path: ./output/debian-src - name: Download `native-tft` pio deps uses: actions/download-artifact@v4 with: - pattern: platformio-deps-native-tft-${{ steps.version.outputs.long }} + pattern: platformio-deps-native-tft-${{ needs.version.outputs.long }} merge-multiple: true path: ./output/pio-deps-native-tft - name: Zip Linux sources working-directory: output run: | - zip -j -9 -r ./meshtasticd-${{ steps.version.outputs.deb }}-src.zip ./debian-src - zip -9 -r ./platformio-deps-native-tft-${{ steps.version.outputs.long }}.zip ./pio-deps-native-tft + zip -j -9 -r ./meshtasticd-${{ needs.version.outputs.deb }}-src.zip ./debian-src + zip -9 -r ./platformio-deps-native-tft-${{ needs.version.outputs.long }}.zip ./pio-deps-native-tft # For diagnostics - name: Display structure of downloaded files @@ -360,8 +370,8 @@ jobs: # Only run when targeting master branch with workflow_dispatch if: ${{ github.ref_name == 'master' }} run: | - gh release upload v${{ steps.version.outputs.long }} ./output/meshtasticd-${{ steps.version.outputs.deb }}-src.zip - gh release upload v${{ steps.version.outputs.long }} ./output/platformio-deps-native-tft-${{ steps.version.outputs.long }}.zip + gh release upload v${{ needs.version.outputs.long }} ./output/meshtasticd-${{ needs.version.outputs.deb }}-src.zip + gh release upload v${{ needs.version.outputs.long }} ./output/platformio-deps-native-tft-${{ needs.version.outputs.long }}.zip env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -372,7 +382,7 @@ jobs: arch: [esp32, esp32s3, esp32c3, esp32c6, nrf52840, rp2040, stm32] runs-on: ubuntu-latest if: ${{ github.event_name == 'workflow_dispatch' }} - needs: [release-artifacts] + needs: [release-artifacts, version] steps: - name: Checkout uses: actions/checkout@v4 @@ -382,13 +392,9 @@ jobs: with: python-version: 3.x - - name: Get release version string - run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT - id: version - - uses: actions/download-artifact@v4 with: - pattern: firmware-${{matrix.arch}}-${{ steps.version.outputs.long }} + pattern: firmware-${{matrix.arch}}-${{ needs.version.outputs.long }} merge-multiple: true path: ./output @@ -401,16 +407,16 @@ jobs: chmod +x ./output/device-update.sh - name: Zip firmware - run: zip -j -9 -r ./firmware-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip ./output + run: zip -j -9 -r ./firmware-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip ./output - uses: actions/download-artifact@v4 with: - name: debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip + name: debug-elfs-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip merge-multiple: true path: ./elfs - name: Zip debug elfs - run: zip -j -9 -r ./debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip ./elfs + run: zip -j -9 -r ./debug-elfs-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip ./elfs # For diagnostics - name: Display structure of downloaded files @@ -420,15 +426,15 @@ jobs: # Only run when targeting master branch with workflow_dispatch if: ${{ github.ref_name == 'master' }} run: | - gh release upload v${{ steps.version.outputs.long }} ./firmware-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip - gh release upload v${{ steps.version.outputs.long }} ./debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip + gh release upload v${{ needs.version.outputs.long }} ./firmware-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip + gh release upload v${{ needs.version.outputs.long }} ./debug-elfs-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} publish-firmware: runs-on: ubuntu-24.04 if: ${{ github.event_name == 'workflow_dispatch' }} - needs: [release-firmware] + needs: [release-firmware, version] env: targets: esp32,esp32s3,esp32c3,esp32c6,nrf52840,rp2040,stm32 steps: @@ -440,13 +446,9 @@ jobs: with: python-version: 3.x - - name: Get release version string - run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT - id: version - - uses: actions/download-artifact@v4 with: - pattern: firmware-{${{ env.targets }}}-${{ steps.version.outputs.long }} + pattern: firmware-{${{ env.targets }}}-${{ needs.version.outputs.long }} merge-multiple: true path: ./publish @@ -460,9 +462,9 @@ jobs: external_repository: meshtastic/meshtastic.github.io publish_branch: master publish_dir: ./publish - destination_dir: ${{ env.DEST_PREFIX }}firmware-${{ steps.version.outputs.long }} + destination_dir: ${{ env.DEST_PREFIX }}firmware-${{ needs.version.outputs.long }} keep_files: true user_name: github-actions[bot] user_email: github-actions[bot]@users.noreply.github.com - commit_message: ${{ steps.version.outputs.long }} + commit_message: ${{ needs.version.outputs.long }} enable_jekyll: true From 806bfa54b5d52fb4819af0ff8a9f17d1564bd147 Mon Sep 17 00:00:00 2001 From: Austin Date: Mon, 21 Jul 2025 15:04:46 -0400 Subject: [PATCH 43/45] Renovate: Use github-tags for XPowersLib updates (#7411) --- arch/esp32/esp32.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/esp32/esp32.ini b/arch/esp32/esp32.ini index 9d21562a8..8990053eb 100644 --- a/arch/esp32/esp32.ini +++ b/arch/esp32/esp32.ini @@ -54,8 +54,8 @@ lib_deps = h2zero/NimBLE-Arduino@^1.4.3 # renovate: datasource=git-refs depName=libpax packageName=https://github.com/dbinfrago/libpax gitBranch=master https://github.com/dbinfrago/libpax/archive/3cdc0371c375676a97967547f4065607d4c53fd1.zip - # renovate: datasource=git-refs depName=XPowersLib packageName=https://github.com/lewisxhe/XPowersLib gitBranch=master - https://github.com/lewisxhe/XPowersLib/archive/refs/tags/v0.3.0.zip + # renovate: datasource=github-tags depName=XPowersLib packageName=lewisxhe/XPowersLib + https://github.com/lewisxhe/XPowersLib/archive/v0.3.0.zip # renovate: datasource=git-refs depName=meshtastic-ESP32_Codec2 packageName=https://github.com/meshtastic/ESP32_Codec2 gitBranch=master https://github.com/meshtastic/ESP32_Codec2/archive/633326c78ac251c059ab3a8c430fcdf25b41672f.zip # renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto From 9b983b6487e01916f90bb3a3eedc50b601153b6a Mon Sep 17 00:00:00 2001 From: Austin Date: Mon, 21 Jul 2025 15:13:02 -0400 Subject: [PATCH 44/45] nRF52840: Migrate variants to new structure (#7396) --- .../niche/InkHUD/PlatformioConfig.ini | 1 - variants/diy/platformio.ini | 80 ------------------ .../platformio.ini | 6 +- .../Dongle_nRF52840-pca10059-v1/variant.cpp | 0 .../Dongle_nRF52840-pca10059-v1/variant.h | 0 .../ELECROW-ThinkNode-M1/nicheGraphics.h | 0 .../ELECROW-ThinkNode-M1/platformio.ini | 8 +- .../ELECROW-ThinkNode-M1/variant.cpp | 0 .../ELECROW-ThinkNode-M1/variant.h | 0 .../ME25LS01-4Y10TD/platformio.ini | 8 +- .../{ => nrf52840}/ME25LS01-4Y10TD/rfswitch.h | 0 .../ME25LS01-4Y10TD/variant.cpp | 0 .../{ => nrf52840}/ME25LS01-4Y10TD/variant.h | 0 .../ME25LS01-4Y10TD_e-ink/platformio.ini | 8 +- .../ME25LS01-4Y10TD_e-ink/rfswitch.h | 0 .../ME25LS01-4Y10TD_e-ink/variant.cpp | 0 .../ME25LS01-4Y10TD_e-ink/variant.h | 0 .../{ => nrf52840}/MS24SF1/platformio.ini | 7 +- variants/{ => nrf52840}/MS24SF1/variant.cpp | 0 variants/{ => nrf52840}/MS24SF1/variant.h | 0 .../MakePython_nRF52840_eink/platformio.ini | 6 +- .../MakePython_nRF52840_eink/variant.cpp | 0 .../MakePython_nRF52840_eink/variant.h | 0 .../MakePython_nRF52840_oled/platformio.ini | 6 +- .../MakePython_nRF52840_oled/variant.cpp | 0 .../MakePython_nRF52840_oled/variant.h | 0 .../{ => nrf52840}/TWC_mesh_v4/platformio.ini | 6 +- .../{ => nrf52840}/TWC_mesh_v4/variant.cpp | 0 variants/{ => nrf52840}/TWC_mesh_v4/variant.h | 0 .../{ => nrf52840}/canaryone/platformio.ini | 6 +- variants/{ => nrf52840}/canaryone/variant.cpp | 0 variants/{ => nrf52840}/canaryone/variant.h | 0 .../E80_RSSI_per_case.webp | Bin ...Schematic_Pro-Micro_Pinouts 2024-12-14.pdf | 0 .../custom_build_tasks.py | 0 .../nrf52_promicro_diy_tcxo/nicheGraphics.h | 0 .../nrf52_promicro_diy_tcxo/platformio.ini | 32 +++++++ .../diy/nrf52_promicro_diy_tcxo/readme.md | 2 + .../diy/nrf52_promicro_diy_tcxo/rfswitch.h | 0 .../diy/nrf52_promicro_diy_tcxo/variant.cpp | 0 .../diy/nrf52_promicro_diy_tcxo/variant.h | 0 .../nrf52_promicro_diy_xtal/platformio.ini | 12 +++ .../diy/nrf52_promicro_diy_xtal/variant.cpp | 0 .../diy/nrf52_promicro_diy_xtal/variant.h | 0 .../seeed-xiao-nrf52840-wio-sx1262/README.md | 0 .../platformio.ini | 15 ++++ .../variant.cpp | 0 .../seeed-xiao-nrf52840-wio-sx1262/variant.h | 0 .../seeed_xiao_nrf52840_e22/platformio.ini | 19 +++++ .../{ => nrf52840}/diy/xiao_ble/README.md | 0 variants/nrf52840/diy/xiao_ble/platformio.ini | 10 +++ .../{ => nrf52840}/feather_diy/platformio.ini | 6 +- .../{ => nrf52840}/feather_diy/variant.cpp | 0 variants/{ => nrf52840}/feather_diy/variant.h | 0 .../gat562_mesh_trial_tracker/platformio.ini | 8 +- .../gat562_mesh_trial_tracker/variant.cpp | 0 .../gat562_mesh_trial_tracker/variant.h | 0 .../custom_build_tasks.py | 0 .../nicheGraphics.h | 0 .../platformio.ini | 5 +- .../heltec_mesh_node_t114-inkhud/variant.cpp | 0 .../heltec_mesh_node_t114-inkhud/variant.h | 0 .../heltec_mesh_node_t114/platformio.ini | 9 +- .../heltec_mesh_node_t114/variant.cpp | 0 .../heltec_mesh_node_t114/variant.h | 0 .../heltec_mesh_pocket/nicheGraphics.h | 0 .../heltec_mesh_pocket/platformio.ini | 18 ++-- .../heltec_mesh_pocket/variant.cpp | 0 .../heltec_mesh_pocket/variant.h | 0 .../{ => nrf52840}/meshlink/platformio.ini | 6 +- variants/{ => nrf52840}/meshlink/variant.cpp | 0 variants/{ => nrf52840}/meshlink/variant.h | 0 .../meshlink_eink/platformio.ini | 6 +- .../{ => nrf52840}/meshlink_eink/variant.cpp | 0 .../{ => nrf52840}/meshlink_eink/variant.h | 0 .../monteops_hw1/platformio.ini | 6 +- .../{ => nrf52840}/monteops_hw1/variant.cpp | 0 .../{ => nrf52840}/monteops_hw1/variant.h | 0 .../nano-g2-ultra/platformio.ini | 6 +- .../{ => nrf52840}/nano-g2-ultra/variant.cpp | 0 .../{ => nrf52840}/nano-g2-ultra/variant.h | 0 .../{ => nrf52840}/rak2560/platformio.ini | 6 +- variants/{ => nrf52840}/rak2560/variant.cpp | 0 variants/{ => nrf52840}/rak2560/variant.h | 0 .../{ => nrf52840}/rak4631/platformio.ini | 6 +- variants/{ => nrf52840}/rak4631/variant.cpp | 0 variants/{ => nrf52840}/rak4631/variant.h | 0 .../rak4631_epaper/platformio.ini | 6 +- .../{ => nrf52840}/rak4631_epaper/variant.cpp | 0 .../{ => nrf52840}/rak4631_epaper/variant.h | 0 .../rak4631_epaper_onrxtx/platformio.ini | 6 +- .../rak4631_epaper_onrxtx/variant.cpp | 0 .../rak4631_epaper_onrxtx/variant.h | 0 .../rak4631_eth_gw/platformio.ini | 6 +- .../{ => nrf52840}/rak4631_eth_gw/variant.cpp | 0 .../{ => nrf52840}/rak4631_eth_gw/variant.h | 0 .../platformio.ini | 9 +- .../rak4631_nomadstar_meteor_pro/variant.cpp | 0 .../rak4631_nomadstar_meteor_pro/variant.h | 0 .../rak_wismeshtag/platformio.ini | 10 ++- .../{ => nrf52840}/rak_wismeshtag/variant.cpp | 0 .../{ => nrf52840}/rak_wismeshtag/variant.h | 3 +- .../rak_wismeshtap/platformio.ini | 7 +- .../{ => nrf52840}/rak_wismeshtap/variant.cpp | 0 .../{ => nrf52840}/rak_wismeshtap/variant.h | 0 .../seeed_solar_node/platformio.ini | 7 +- .../seeed_solar_node/variant.cpp | 0 .../{ => nrf52840}/seeed_solar_node/variant.h | 0 .../seeed_wio_tracker_L1/platformio.ini | 10 +-- .../seeed_wio_tracker_L1/variant.cpp | 0 .../seeed_wio_tracker_L1/variant.h | 0 .../seeed_wio_tracker_L1_eink/nicheGraphics.h | 0 .../seeed_wio_tracker_L1_eink/platformio.ini | 10 ++- .../seeed_wio_tracker_L1_eink/variant.cpp | 0 .../seeed_wio_tracker_L1_eink/variant.h | 0 .../seeed_xiao_nrf52840_kit/platformio.ini | 9 +- .../seeed_xiao_nrf52840_kit/variant.cpp | 0 .../seeed_xiao_nrf52840_kit/variant.h | 0 .../{ => nrf52840}/t-echo/nicheGraphics.h | 0 variants/{ => nrf52840}/t-echo/platformio.ini | 9 +- variants/{ => nrf52840}/t-echo/variant.cpp | 0 variants/{ => nrf52840}/t-echo/variant.h | 0 .../tracker-t1000-e/platformio.ini | 8 +- .../{ => nrf52840}/tracker-t1000-e/rfswitch.h | 0 .../tracker-t1000-e/variant.cpp | 0 .../{ => nrf52840}/tracker-t1000-e/variant.h | 0 .../wio-sdk-wm1110/platformio.ini | 10 ++- .../{ => nrf52840}/wio-sdk-wm1110/rfswitch.h | 0 .../{ => nrf52840}/wio-sdk-wm1110/variant.cpp | 0 .../{ => nrf52840}/wio-sdk-wm1110/variant.h | 0 .../{ => nrf52840}/wio-t1000-s/platformio.ini | 8 +- .../{ => nrf52840}/wio-t1000-s/rfswitch.h | 0 .../{ => nrf52840}/wio-t1000-s/variant.cpp | 0 variants/{ => nrf52840}/wio-t1000-s/variant.h | 0 .../wio-tracker-wm1110/platformio.ini | 8 +- .../wio-tracker-wm1110/rfswitch.h | 0 .../wio-tracker-wm1110/variant.cpp | 0 .../wio-tracker-wm1110/variant.h | 0 138 files changed, 264 insertions(+), 176 deletions(-) delete mode 100644 variants/diy/platformio.ini rename variants/{ => nrf52840}/Dongle_nRF52840-pca10059-v1/platformio.ini (67%) rename variants/{ => nrf52840}/Dongle_nRF52840-pca10059-v1/variant.cpp (100%) rename variants/{ => nrf52840}/Dongle_nRF52840-pca10059-v1/variant.h (100%) rename variants/{ => nrf52840}/ELECROW-ThinkNode-M1/nicheGraphics.h (100%) rename variants/{ => nrf52840}/ELECROW-ThinkNode-M1/platformio.ini (88%) rename variants/{ => nrf52840}/ELECROW-ThinkNode-M1/variant.cpp (100%) rename variants/{ => nrf52840}/ELECROW-ThinkNode-M1/variant.h (100%) rename variants/{ => nrf52840}/ME25LS01-4Y10TD/platformio.ini (76%) rename variants/{ => nrf52840}/ME25LS01-4Y10TD/rfswitch.h (100%) rename variants/{ => nrf52840}/ME25LS01-4Y10TD/variant.cpp (100%) rename variants/{ => nrf52840}/ME25LS01-4Y10TD/variant.h (100%) rename variants/{ => nrf52840}/ME25LS01-4Y10TD_e-ink/platformio.ini (78%) rename variants/{ => nrf52840}/ME25LS01-4Y10TD_e-ink/rfswitch.h (100%) rename variants/{ => nrf52840}/ME25LS01-4Y10TD_e-ink/variant.cpp (100%) rename variants/{ => nrf52840}/ME25LS01-4Y10TD_e-ink/variant.h (100%) rename variants/{ => nrf52840}/MS24SF1/platformio.ini (79%) rename variants/{ => nrf52840}/MS24SF1/variant.cpp (100%) rename variants/{ => nrf52840}/MS24SF1/variant.h (100%) rename variants/{ => nrf52840}/MakePython_nRF52840_eink/platformio.ini (77%) rename variants/{ => nrf52840}/MakePython_nRF52840_eink/variant.cpp (100%) rename variants/{ => nrf52840}/MakePython_nRF52840_eink/variant.h (100%) rename variants/{ => nrf52840}/MakePython_nRF52840_oled/platformio.ini (69%) rename variants/{ => nrf52840}/MakePython_nRF52840_oled/variant.cpp (100%) rename variants/{ => nrf52840}/MakePython_nRF52840_oled/variant.h (100%) rename variants/{ => nrf52840}/TWC_mesh_v4/platformio.ini (59%) rename variants/{ => nrf52840}/TWC_mesh_v4/variant.cpp (100%) rename variants/{ => nrf52840}/TWC_mesh_v4/variant.h (100%) rename variants/{ => nrf52840}/canaryone/platformio.ini (78%) rename variants/{ => nrf52840}/canaryone/variant.cpp (100%) rename variants/{ => nrf52840}/canaryone/variant.h (100%) rename variants/{ => nrf52840}/diy/nrf52_promicro_diy_tcxo/E80_RSSI_per_case.webp (100%) rename variants/{ => nrf52840}/diy/nrf52_promicro_diy_tcxo/Schematic_Pro-Micro_Pinouts 2024-12-14.pdf (100%) rename variants/{ => nrf52840}/diy/nrf52_promicro_diy_tcxo/custom_build_tasks.py (100%) rename variants/{ => nrf52840}/diy/nrf52_promicro_diy_tcxo/nicheGraphics.h (100%) create mode 100644 variants/nrf52840/diy/nrf52_promicro_diy_tcxo/platformio.ini rename variants/{ => nrf52840}/diy/nrf52_promicro_diy_tcxo/readme.md (99%) rename variants/{ => nrf52840}/diy/nrf52_promicro_diy_tcxo/rfswitch.h (100%) rename variants/{ => nrf52840}/diy/nrf52_promicro_diy_tcxo/variant.cpp (100%) rename variants/{ => nrf52840}/diy/nrf52_promicro_diy_tcxo/variant.h (100%) create mode 100644 variants/nrf52840/diy/nrf52_promicro_diy_xtal/platformio.ini rename variants/{ => nrf52840}/diy/nrf52_promicro_diy_xtal/variant.cpp (100%) rename variants/{ => nrf52840}/diy/nrf52_promicro_diy_xtal/variant.h (100%) rename variants/{ => nrf52840}/diy/seeed-xiao-nrf52840-wio-sx1262/README.md (100%) create mode 100644 variants/nrf52840/diy/seeed-xiao-nrf52840-wio-sx1262/platformio.ini rename variants/{ => nrf52840}/diy/seeed-xiao-nrf52840-wio-sx1262/variant.cpp (100%) rename variants/{ => nrf52840}/diy/seeed-xiao-nrf52840-wio-sx1262/variant.h (100%) create mode 100644 variants/nrf52840/diy/seeed_xiao_nrf52840_e22/platformio.ini rename variants/{ => nrf52840}/diy/xiao_ble/README.md (100%) create mode 100644 variants/nrf52840/diy/xiao_ble/platformio.ini rename variants/{ => nrf52840}/feather_diy/platformio.ini (79%) rename variants/{ => nrf52840}/feather_diy/variant.cpp (100%) rename variants/{ => nrf52840}/feather_diy/variant.h (100%) rename variants/{ => nrf52840}/gat562_mesh_trial_tracker/platformio.ini (75%) rename variants/{ => nrf52840}/gat562_mesh_trial_tracker/variant.cpp (100%) rename variants/{ => nrf52840}/gat562_mesh_trial_tracker/variant.h (100%) rename variants/{ => nrf52840}/heltec_mesh_node_t114-inkhud/custom_build_tasks.py (100%) rename variants/{ => nrf52840}/heltec_mesh_node_t114-inkhud/nicheGraphics.h (100%) rename variants/{ => nrf52840}/heltec_mesh_node_t114-inkhud/platformio.ini (66%) rename variants/{ => nrf52840}/heltec_mesh_node_t114-inkhud/variant.cpp (100%) rename variants/{ => nrf52840}/heltec_mesh_node_t114-inkhud/variant.h (100%) rename variants/{ => nrf52840}/heltec_mesh_node_t114/platformio.ini (74%) rename variants/{ => nrf52840}/heltec_mesh_node_t114/variant.cpp (100%) rename variants/{ => nrf52840}/heltec_mesh_node_t114/variant.h (100%) rename variants/{ => nrf52840}/heltec_mesh_pocket/nicheGraphics.h (100%) rename variants/{ => nrf52840}/heltec_mesh_pocket/platformio.ini (89%) rename variants/{ => nrf52840}/heltec_mesh_pocket/variant.cpp (100%) rename variants/{ => nrf52840}/heltec_mesh_pocket/variant.h (100%) rename variants/{ => nrf52840}/meshlink/platformio.ini (94%) rename variants/{ => nrf52840}/meshlink/variant.cpp (100%) rename variants/{ => nrf52840}/meshlink/variant.h (100%) rename variants/{ => nrf52840}/meshlink_eink/platformio.ini (93%) rename variants/{ => nrf52840}/meshlink_eink/variant.cpp (100%) rename variants/{ => nrf52840}/meshlink_eink/variant.h (100%) rename variants/{ => nrf52840}/monteops_hw1/platformio.ini (77%) rename variants/{ => nrf52840}/monteops_hw1/variant.cpp (100%) rename variants/{ => nrf52840}/monteops_hw1/variant.h (100%) rename variants/{ => nrf52840}/nano-g2-ultra/platformio.ini (70%) rename variants/{ => nrf52840}/nano-g2-ultra/variant.cpp (100%) rename variants/{ => nrf52840}/nano-g2-ultra/variant.h (100%) rename variants/{ => nrf52840}/rak2560/platformio.ini (87%) rename variants/{ => nrf52840}/rak2560/variant.cpp (100%) rename variants/{ => nrf52840}/rak2560/variant.h (100%) rename variants/{ => nrf52840}/rak4631/platformio.ini (94%) rename variants/{ => nrf52840}/rak4631/variant.cpp (100%) rename variants/{ => nrf52840}/rak4631/variant.h (100%) rename variants/{ => nrf52840}/rak4631_epaper/platformio.ini (86%) rename variants/{ => nrf52840}/rak4631_epaper/variant.cpp (100%) rename variants/{ => nrf52840}/rak4631_epaper/variant.h (100%) rename variants/{ => nrf52840}/rak4631_epaper_onrxtx/platformio.ini (87%) rename variants/{ => nrf52840}/rak4631_epaper_onrxtx/variant.cpp (100%) rename variants/{ => nrf52840}/rak4631_epaper_onrxtx/variant.h (100%) rename variants/{ => nrf52840}/rak4631_eth_gw/platformio.ini (95%) rename variants/{ => nrf52840}/rak4631_eth_gw/variant.cpp (100%) rename variants/{ => nrf52840}/rak4631_eth_gw/variant.h (100%) rename variants/{ => nrf52840}/rak4631_nomadstar_meteor_pro/platformio.ini (89%) rename variants/{ => nrf52840}/rak4631_nomadstar_meteor_pro/variant.cpp (100%) rename variants/{ => nrf52840}/rak4631_nomadstar_meteor_pro/variant.h (100%) rename variants/{ => nrf52840}/rak_wismeshtag/platformio.ini (71%) rename variants/{ => nrf52840}/rak_wismeshtag/variant.cpp (100%) rename variants/{ => nrf52840}/rak_wismeshtag/variant.h (99%) rename variants/{ => nrf52840}/rak_wismeshtap/platformio.ini (87%) rename variants/{ => nrf52840}/rak_wismeshtap/variant.cpp (100%) rename variants/{ => nrf52840}/rak_wismeshtap/variant.h (100%) rename variants/{ => nrf52840}/seeed_solar_node/platformio.ini (70%) rename variants/{ => nrf52840}/seeed_solar_node/variant.cpp (100%) rename variants/{ => nrf52840}/seeed_solar_node/variant.h (100%) rename variants/{ => nrf52840}/seeed_wio_tracker_L1/platformio.ini (61%) rename variants/{ => nrf52840}/seeed_wio_tracker_L1/variant.cpp (100%) rename variants/{ => nrf52840}/seeed_wio_tracker_L1/variant.h (100%) rename variants/{ => nrf52840}/seeed_wio_tracker_L1_eink/nicheGraphics.h (100%) rename variants/{ => nrf52840}/seeed_wio_tracker_L1_eink/platformio.ini (59%) rename variants/{ => nrf52840}/seeed_wio_tracker_L1_eink/variant.cpp (100%) rename variants/{ => nrf52840}/seeed_wio_tracker_L1_eink/variant.h (100%) rename variants/{ => nrf52840}/seeed_xiao_nrf52840_kit/platformio.ini (66%) rename variants/{ => nrf52840}/seeed_xiao_nrf52840_kit/variant.cpp (100%) rename variants/{ => nrf52840}/seeed_xiao_nrf52840_kit/variant.h (100%) rename variants/{ => nrf52840}/t-echo/nicheGraphics.h (100%) rename variants/{ => nrf52840}/t-echo/platformio.ini (89%) rename variants/{ => nrf52840}/t-echo/variant.cpp (100%) rename variants/{ => nrf52840}/t-echo/variant.h (100%) rename variants/{ => nrf52840}/tracker-t1000-e/platformio.ini (78%) rename variants/{ => nrf52840}/tracker-t1000-e/rfswitch.h (100%) rename variants/{ => nrf52840}/tracker-t1000-e/variant.cpp (100%) rename variants/{ => nrf52840}/tracker-t1000-e/variant.h (100%) rename variants/{ => nrf52840}/wio-sdk-wm1110/platformio.ini (80%) rename variants/{ => nrf52840}/wio-sdk-wm1110/rfswitch.h (100%) rename variants/{ => nrf52840}/wio-sdk-wm1110/variant.cpp (100%) rename variants/{ => nrf52840}/wio-sdk-wm1110/variant.h (100%) rename variants/{ => nrf52840}/wio-t1000-s/platformio.ini (77%) rename variants/{ => nrf52840}/wio-t1000-s/rfswitch.h (100%) rename variants/{ => nrf52840}/wio-t1000-s/variant.cpp (100%) rename variants/{ => nrf52840}/wio-t1000-s/variant.h (100%) rename variants/{ => nrf52840}/wio-tracker-wm1110/platformio.ini (73%) rename variants/{ => nrf52840}/wio-tracker-wm1110/rfswitch.h (100%) rename variants/{ => nrf52840}/wio-tracker-wm1110/variant.cpp (100%) rename variants/{ => nrf52840}/wio-tracker-wm1110/variant.h (100%) diff --git a/src/graphics/niche/InkHUD/PlatformioConfig.ini b/src/graphics/niche/InkHUD/PlatformioConfig.ini index e5a0e67df..80984f399 100644 --- a/src/graphics/niche/InkHUD/PlatformioConfig.ini +++ b/src/graphics/niche/InkHUD/PlatformioConfig.ini @@ -1,7 +1,6 @@ [inkhud] build_src_filter = +; Include the nicheGraphics directory - +<../variants/$PIOENV>; Include nicheGraphics.h from our variant folder build_flags = -D MESHTASTIC_INCLUDE_NICHE_GRAPHICS ; Use NicheGraphics -D MESHTASTIC_INCLUDE_INKHUD ; Use InkHUD (a NicheGraphics UI) diff --git a/variants/diy/platformio.ini b/variants/diy/platformio.ini deleted file mode 100644 index 6b3a2ed99..000000000 --- a/variants/diy/platformio.ini +++ /dev/null @@ -1,80 +0,0 @@ -; Promicro + E22(0)-xxxMM / RA-01SH modules board variant - DIY - without TCXO -[env:nrf52_promicro_diy_xtal] -extends = nrf52840_base -board = promicro-nrf52840 -board_level = extra -build_flags = ${nrf52840_base.build_flags} - -I variants/diy/nrf52_promicro_diy_xtal - -D NRF52_PROMICRO_DIY -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/diy/nrf52_promicro_diy_xtal> -lib_deps = - ${nrf52840_base.lib_deps} -debug_tool = jlink - - -; Promicro + E22(0)-xxxM / HT-RA62 modules board variant - DIY - with TCXO -[env:nrf52_promicro_diy_tcxo] -extends = nrf52840_base -board = promicro-nrf52840 -build_flags = ${nrf52840_base.build_flags} - -I variants/diy/nrf52_promicro_diy_tcxo - -D NRF52_PROMICRO_DIY -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/diy/nrf52_promicro_diy_tcxo> -lib_deps = - ${nrf52840_base.lib_deps} -debug_tool = jlink - -; NRF52 ProMicro w/ E-Ink display -[env:nrf52_promicro_diy-inkhud] -board_level = extra -extends = nrf52840_base, inkhud -board = promicro-nrf52840 -build_flags = - ${nrf52840_base.build_flags} - ${inkhud.build_flags} - -I variants/diy/nrf52_promicro_diy_tcxo - -D NRF52_PROMICRO_DIY -build_src_filter = - ${nrf52_base.build_src_filter} - ${inkhud.build_src_filter} - +<../variants/diy/nrf52_promicro_diy_tcxo> -lib_deps = - ${inkhud.lib_deps} ; InkHUD libs first, so we get GFXRoot instead of AdafruitGFX - ${nrf52840_base.lib_deps} -extra_scripts = - ${env.extra_scripts} - variants/diy/nrf52_promicro_diy_tcxo/custom_build_tasks.py ; Add to PIO's Project Tasks pane: preset builds for common displays - -; Seeed Xiao BLE: https://www.digikey.com/en/products/detail/seeed-technology-co-ltd/102010448/16652893 -[env:xiao_ble] -extends = env:seeed_xiao_nrf52840_kit -board_level = extra -build_flags = ${env:seeed_xiao_nrf52840_kit.build_flags} -D PRIVATE_HW -DXIAO_BLE_LEGACY_PINOUT -DEBYTE_E22 -DEBYTE_E22_900M30S -build_unflags = -DGPS_L76K - -; Seeed XIAO nRF52840 + EBYTE E22-900M30S - Pinout matching Wio-SX1262 (SKU 113010003) -[env:seeed_xiao_nrf52840_e22_900m30s] -extends = env:seeed_xiao_nrf52840_kit -board_level = extra -build_flags = ${env:seeed_xiao_nrf52840_kit.build_flags} -D PRIVATE_HW -DEBYTE_E22 -DEBYTE_E22_900M30S -build_unflags = -DGPS_L76K - -; Seeed XIAO nRF52840 + EBYTE E22-900M33S - Pinout matching Wio-SX1262 (SKU 113010003) -[env:seeed_xiao_nrf52840_e22_900m33s] -extends = env:seeed_xiao_nrf52840_kit -board_level = extra -build_flags = ${env:seeed_xiao_nrf52840_kit.build_flags} -D PRIVATE_HW -DEBYTE_E22 -DEBYTE_E22_900M33S -build_unflags = -DGPS_L76K - -; Seeed XIAO nRF52840 + XIAO Wio SX1262 DIY -[env:seeed-xiao-nrf52840-wio-sx1262] -board = xiao_ble_sense -extends = nrf52840_base -board_level = extra -build_flags = ${nrf52840_base.build_flags} -Ivariants/diy/seeed-xiao-nrf52840-wio-sx1262 -D PRIVATE_HW - -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 -board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/diy/seeed-xiao-nrf52840-wio-sx1262> -lib_deps = - ${nrf52840_base.lib_deps} -debug_tool = jlink diff --git a/variants/Dongle_nRF52840-pca10059-v1/platformio.ini b/variants/nrf52840/Dongle_nRF52840-pca10059-v1/platformio.ini similarity index 67% rename from variants/Dongle_nRF52840-pca10059-v1/platformio.ini rename to variants/nrf52840/Dongle_nRF52840-pca10059-v1/platformio.ini index ad944779d..83044c206 100644 --- a/variants/Dongle_nRF52840-pca10059-v1/platformio.ini +++ b/variants/nrf52840/Dongle_nRF52840-pca10059-v1/platformio.ini @@ -2,11 +2,13 @@ board_level = extra extends = nrf52840_base board = nordic_pca10059 -build_flags = ${nrf52840_base.build_flags} -Ivariants/Dongle_nRF52840-pca10059-v1 -D NORDIC_PCA10059 +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/Dongle_nRF52840-pca10059-v1 + -D NORDIC_PCA10059 -DEINK_DISPLAY_MODEL=GxEPD2_420_M01 -DEINK_WIDTH=300 -DEINK_HEIGHT=400 -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/Dongle_nRF52840-pca10059-v1> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/Dongle_nRF52840-pca10059-v1> lib_deps = ${nrf52840_base.lib_deps} zinggjm/GxEPD2@^1.6.2 diff --git a/variants/Dongle_nRF52840-pca10059-v1/variant.cpp b/variants/nrf52840/Dongle_nRF52840-pca10059-v1/variant.cpp similarity index 100% rename from variants/Dongle_nRF52840-pca10059-v1/variant.cpp rename to variants/nrf52840/Dongle_nRF52840-pca10059-v1/variant.cpp diff --git a/variants/Dongle_nRF52840-pca10059-v1/variant.h b/variants/nrf52840/Dongle_nRF52840-pca10059-v1/variant.h similarity index 100% rename from variants/Dongle_nRF52840-pca10059-v1/variant.h rename to variants/nrf52840/Dongle_nRF52840-pca10059-v1/variant.h diff --git a/variants/ELECROW-ThinkNode-M1/nicheGraphics.h b/variants/nrf52840/ELECROW-ThinkNode-M1/nicheGraphics.h similarity index 100% rename from variants/ELECROW-ThinkNode-M1/nicheGraphics.h rename to variants/nrf52840/ELECROW-ThinkNode-M1/nicheGraphics.h diff --git a/variants/ELECROW-ThinkNode-M1/platformio.ini b/variants/nrf52840/ELECROW-ThinkNode-M1/platformio.ini similarity index 88% rename from variants/ELECROW-ThinkNode-M1/platformio.ini rename to variants/nrf52840/ELECROW-ThinkNode-M1/platformio.ini index 2e9a20dfe..0578bcfe8 100644 --- a/variants/ELECROW-ThinkNode-M1/platformio.ini +++ b/variants/nrf52840/ELECROW-ThinkNode-M1/platformio.ini @@ -6,7 +6,8 @@ board_check = true debug_tool = jlink # add -DCFG_SYSVIEW if you want to use the Segger systemview tool for OS profiling. -build_flags = ${nrf52840_base.build_flags} -Ivariants/ELECROW-ThinkNode-M1 +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/ELECROW-ThinkNode-M1 -DELECROW_ThinkNode_M1 -DGPS_POWER_TOGGLE -DUSE_EINK @@ -20,7 +21,7 @@ build_flags = ${nrf52840_base.build_flags} -Ivariants/ELECROW-ThinkNode-M1 ; -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/ELECROW-ThinkNode-M1> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/ELECROW-ThinkNode-M1> lib_deps = ${nrf52840_base.lib_deps} https://github.com/meshtastic/GxEPD2/archive/33db3fa8ee6fc47d160bdb44f8f127c9a9203a10.zip @@ -36,11 +37,12 @@ debug_tool = jlink build_flags = ${nrf52840_base.build_flags} ${inkhud.build_flags} - -I variants/ELECROW-ThinkNode-M1 + -I variants/nrf52840/ELECROW-ThinkNode-M1 -D ELECROW_ThinkNode_M1 build_src_filter = ${nrf52_base.build_src_filter} ${inkhud.build_src_filter} + +<../variants/nrf52840/ELECROW-ThinkNode-M1> lib_deps = ${inkhud.lib_deps} ; InkHUD libs first, so we get GFXRoot instead of AdafruitGFX ${nrf52840_base.lib_deps} diff --git a/variants/ELECROW-ThinkNode-M1/variant.cpp b/variants/nrf52840/ELECROW-ThinkNode-M1/variant.cpp similarity index 100% rename from variants/ELECROW-ThinkNode-M1/variant.cpp rename to variants/nrf52840/ELECROW-ThinkNode-M1/variant.cpp diff --git a/variants/ELECROW-ThinkNode-M1/variant.h b/variants/nrf52840/ELECROW-ThinkNode-M1/variant.h similarity index 100% rename from variants/ELECROW-ThinkNode-M1/variant.h rename to variants/nrf52840/ELECROW-ThinkNode-M1/variant.h diff --git a/variants/ME25LS01-4Y10TD/platformio.ini b/variants/nrf52840/ME25LS01-4Y10TD/platformio.ini similarity index 76% rename from variants/ME25LS01-4Y10TD/platformio.ini rename to variants/nrf52840/ME25LS01-4Y10TD/platformio.ini index b452f0ad8..89a45694c 100644 --- a/variants/ME25LS01-4Y10TD/platformio.ini +++ b/variants/nrf52840/ME25LS01-4Y10TD/platformio.ini @@ -3,10 +3,14 @@ extends = nrf52840_base board = me25ls01-4y10td board_level = extra ; platform = https://github.com/maxgerhardt/platform-nordicnrf52#cac6fcf943a41accd2aeb4f3659ae297a73f422e -build_flags = ${nrf52840_base.build_flags} -Ivariants/ME25LS01-4Y10TD -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 -DME25LS01_4Y10TD +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/ME25LS01-4Y10TD + -Isrc/platform/nrf52/softdevice + -Isrc/platform/nrf52/softdevice/nrf52 + -DME25LS01_4Y10TD -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/ME25LS01-4Y10TD> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/ME25LS01-4Y10TD> lib_deps = ${nrf52840_base.lib_deps} ; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm) diff --git a/variants/ME25LS01-4Y10TD/rfswitch.h b/variants/nrf52840/ME25LS01-4Y10TD/rfswitch.h similarity index 100% rename from variants/ME25LS01-4Y10TD/rfswitch.h rename to variants/nrf52840/ME25LS01-4Y10TD/rfswitch.h diff --git a/variants/ME25LS01-4Y10TD/variant.cpp b/variants/nrf52840/ME25LS01-4Y10TD/variant.cpp similarity index 100% rename from variants/ME25LS01-4Y10TD/variant.cpp rename to variants/nrf52840/ME25LS01-4Y10TD/variant.cpp diff --git a/variants/ME25LS01-4Y10TD/variant.h b/variants/nrf52840/ME25LS01-4Y10TD/variant.h similarity index 100% rename from variants/ME25LS01-4Y10TD/variant.h rename to variants/nrf52840/ME25LS01-4Y10TD/variant.h diff --git a/variants/ME25LS01-4Y10TD_e-ink/platformio.ini b/variants/nrf52840/ME25LS01-4Y10TD_e-ink/platformio.ini similarity index 78% rename from variants/ME25LS01-4Y10TD_e-ink/platformio.ini rename to variants/nrf52840/ME25LS01-4Y10TD_e-ink/platformio.ini index f9788a521..ad5867bd5 100644 --- a/variants/ME25LS01-4Y10TD_e-ink/platformio.ini +++ b/variants/nrf52840/ME25LS01-4Y10TD_e-ink/platformio.ini @@ -3,13 +3,17 @@ extends = nrf52840_base board = me25ls01-4y10td board_level = extra ; platform = https://github.com/maxgerhardt/platform-nordicnrf52#cac6fcf943a41accd2aeb4f3659ae297a73f422e -build_flags = ${nrf52840_base.build_flags} -Ivariants/ME25LS01-4Y10TD_e-ink -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 -DME25LS01_4Y10TD +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/ME25LS01-4Y10TD_e-ink + -Isrc/platform/nrf52/softdevice + -Isrc/platform/nrf52/softdevice/nrf52 + -DME25LS01_4Y10TD -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -DEINK_DISPLAY_MODEL=GxEPD2_420_GDEY042T81 -DEINK_WIDTH=400 -DEINK_HEIGHT=300 board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/ME25LS01-4Y10TD_e-ink> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/ME25LS01-4Y10TD_e-ink> lib_deps = ${nrf52840_base.lib_deps} zinggjm/GxEPD2@^1.6.2 diff --git a/variants/ME25LS01-4Y10TD_e-ink/rfswitch.h b/variants/nrf52840/ME25LS01-4Y10TD_e-ink/rfswitch.h similarity index 100% rename from variants/ME25LS01-4Y10TD_e-ink/rfswitch.h rename to variants/nrf52840/ME25LS01-4Y10TD_e-ink/rfswitch.h diff --git a/variants/ME25LS01-4Y10TD_e-ink/variant.cpp b/variants/nrf52840/ME25LS01-4Y10TD_e-ink/variant.cpp similarity index 100% rename from variants/ME25LS01-4Y10TD_e-ink/variant.cpp rename to variants/nrf52840/ME25LS01-4Y10TD_e-ink/variant.cpp diff --git a/variants/ME25LS01-4Y10TD_e-ink/variant.h b/variants/nrf52840/ME25LS01-4Y10TD_e-ink/variant.h similarity index 100% rename from variants/ME25LS01-4Y10TD_e-ink/variant.h rename to variants/nrf52840/ME25LS01-4Y10TD_e-ink/variant.h diff --git a/variants/MS24SF1/platformio.ini b/variants/nrf52840/MS24SF1/platformio.ini similarity index 79% rename from variants/MS24SF1/platformio.ini rename to variants/nrf52840/MS24SF1/platformio.ini index 10e8d2c95..f162cbd60 100644 --- a/variants/MS24SF1/platformio.ini +++ b/variants/nrf52840/MS24SF1/platformio.ini @@ -3,10 +3,13 @@ extends = nrf52840_base board = ms24sf1 board_level = extra ; platform = https://github.com/maxgerhardt/platform-nordicnrf52#cac6fcf943a41accd2aeb4f3659ae297a73f422e -build_flags = ${nrf52840_base.build_flags} -Ivariants/MS24SF1 -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/MS24SF1 + -Isrc/platform/nrf52/softdevice + -Isrc/platform/nrf52/softdevice/nrf52 -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/MS24SF1> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/MS24SF1> lib_deps = ${nrf52840_base.lib_deps} ; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm) diff --git a/variants/MS24SF1/variant.cpp b/variants/nrf52840/MS24SF1/variant.cpp similarity index 100% rename from variants/MS24SF1/variant.cpp rename to variants/nrf52840/MS24SF1/variant.cpp diff --git a/variants/MS24SF1/variant.h b/variants/nrf52840/MS24SF1/variant.h similarity index 100% rename from variants/MS24SF1/variant.h rename to variants/nrf52840/MS24SF1/variant.h diff --git a/variants/MakePython_nRF52840_eink/platformio.ini b/variants/nrf52840/MakePython_nRF52840_eink/platformio.ini similarity index 77% rename from variants/MakePython_nRF52840_eink/platformio.ini rename to variants/nrf52840/MakePython_nRF52840_eink/platformio.ini index ef97172e9..50e5495f0 100644 --- a/variants/MakePython_nRF52840_eink/platformio.ini +++ b/variants/nrf52840/MakePython_nRF52840_eink/platformio.ini @@ -2,12 +2,14 @@ board_level = extra extends = nrf52840_base board = nordic_pca10059 -build_flags = ${nrf52840_base.build_flags} -Ivariants/MakePython_nRF52840_eink -D PRIVATE_HW +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/MakePython_nRF52840_eink + -D PRIVATE_HW -D PIN_EINK_EN -DEINK_DISPLAY_MODEL=GxEPD2_290_T5D -DEINK_WIDTH=296 -DEINK_HEIGHT=128 -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/MakePython_nRF52840_eink> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/MakePython_nRF52840_eink> lib_deps = ${nrf52840_base.lib_deps} https://github.com/meshtastic/ESP32_Codec2/archive/633326c78ac251c059ab3a8c430fcdf25b41672f.zip diff --git a/variants/MakePython_nRF52840_eink/variant.cpp b/variants/nrf52840/MakePython_nRF52840_eink/variant.cpp similarity index 100% rename from variants/MakePython_nRF52840_eink/variant.cpp rename to variants/nrf52840/MakePython_nRF52840_eink/variant.cpp diff --git a/variants/MakePython_nRF52840_eink/variant.h b/variants/nrf52840/MakePython_nRF52840_eink/variant.h similarity index 100% rename from variants/MakePython_nRF52840_eink/variant.h rename to variants/nrf52840/MakePython_nRF52840_eink/variant.h diff --git a/variants/MakePython_nRF52840_oled/platformio.ini b/variants/nrf52840/MakePython_nRF52840_oled/platformio.ini similarity index 69% rename from variants/MakePython_nRF52840_oled/platformio.ini rename to variants/nrf52840/MakePython_nRF52840_oled/platformio.ini index 57b9ecb79..c7418e53c 100644 --- a/variants/MakePython_nRF52840_oled/platformio.ini +++ b/variants/nrf52840/MakePython_nRF52840_oled/platformio.ini @@ -2,8 +2,10 @@ board_level = extra extends = nrf52840_base board = nordic_pca10059 -build_flags = ${nrf52840_base.build_flags} -Ivariants/MakePython_nRF52840_oled -D PRIVATE_HW -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/MakePython_nRF52840_oled> +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/MakePython_nRF52840_oled + -D PRIVATE_HW +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/MakePython_nRF52840_oled> lib_deps = ${nrf52840_base.lib_deps} https://github.com/meshtastic/ESP32_Codec2/archive/633326c78ac251c059ab3a8c430fcdf25b41672f.zip diff --git a/variants/MakePython_nRF52840_oled/variant.cpp b/variants/nrf52840/MakePython_nRF52840_oled/variant.cpp similarity index 100% rename from variants/MakePython_nRF52840_oled/variant.cpp rename to variants/nrf52840/MakePython_nRF52840_oled/variant.cpp diff --git a/variants/MakePython_nRF52840_oled/variant.h b/variants/nrf52840/MakePython_nRF52840_oled/variant.h similarity index 100% rename from variants/MakePython_nRF52840_oled/variant.h rename to variants/nrf52840/MakePython_nRF52840_oled/variant.h diff --git a/variants/TWC_mesh_v4/platformio.ini b/variants/nrf52840/TWC_mesh_v4/platformio.ini similarity index 59% rename from variants/TWC_mesh_v4/platformio.ini rename to variants/nrf52840/TWC_mesh_v4/platformio.ini index 2eb58bf9f..77aeee26e 100644 --- a/variants/TWC_mesh_v4/platformio.ini +++ b/variants/nrf52840/TWC_mesh_v4/platformio.ini @@ -2,8 +2,10 @@ extends = nrf52840_base board = nordic_pca10059 board_level = extra -build_flags = ${nrf52840_base.build_flags} -I variants/TWC_mesh_v4 -D TWC_mesh_v4 -L".pio\libdeps\TWC_mesh_v4\bsec2\src\cortex-m4\fpv4-sp-d16-hard" -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/TWC_mesh_v4> +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/TWC_mesh_v4 + -D TWC_mesh_v4 +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/TWC_mesh_v4> lib_deps = ${nrf52840_base.lib_deps} zinggjm/GxEPD2@^1.6.2 diff --git a/variants/TWC_mesh_v4/variant.cpp b/variants/nrf52840/TWC_mesh_v4/variant.cpp similarity index 100% rename from variants/TWC_mesh_v4/variant.cpp rename to variants/nrf52840/TWC_mesh_v4/variant.cpp diff --git a/variants/TWC_mesh_v4/variant.h b/variants/nrf52840/TWC_mesh_v4/variant.h similarity index 100% rename from variants/TWC_mesh_v4/variant.h rename to variants/nrf52840/TWC_mesh_v4/variant.h diff --git a/variants/canaryone/platformio.ini b/variants/nrf52840/canaryone/platformio.ini similarity index 78% rename from variants/canaryone/platformio.ini rename to variants/nrf52840/canaryone/platformio.ini index ad11305db..251937e9c 100644 --- a/variants/canaryone/platformio.ini +++ b/variants/nrf52840/canaryone/platformio.ini @@ -5,8 +5,10 @@ board = canaryone debug_tool = jlink # add -DCFG_SYSVIEW if you want to use the Segger systemview tool for OS profiling. -build_flags = ${nrf52840_base.build_flags} -Ivariants/canaryone -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/canaryone> +build_flags = + ${nrf52840_base.build_flags} + -I variants/nrf52840/canaryone +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/canaryone> lib_deps = ${nrf52840_base.lib_deps} lewisxhe/PCF8563_Library@^1.0.1 diff --git a/variants/canaryone/variant.cpp b/variants/nrf52840/canaryone/variant.cpp similarity index 100% rename from variants/canaryone/variant.cpp rename to variants/nrf52840/canaryone/variant.cpp diff --git a/variants/canaryone/variant.h b/variants/nrf52840/canaryone/variant.h similarity index 100% rename from variants/canaryone/variant.h rename to variants/nrf52840/canaryone/variant.h diff --git a/variants/diy/nrf52_promicro_diy_tcxo/E80_RSSI_per_case.webp b/variants/nrf52840/diy/nrf52_promicro_diy_tcxo/E80_RSSI_per_case.webp similarity index 100% rename from variants/diy/nrf52_promicro_diy_tcxo/E80_RSSI_per_case.webp rename to variants/nrf52840/diy/nrf52_promicro_diy_tcxo/E80_RSSI_per_case.webp diff --git a/variants/diy/nrf52_promicro_diy_tcxo/Schematic_Pro-Micro_Pinouts 2024-12-14.pdf b/variants/nrf52840/diy/nrf52_promicro_diy_tcxo/Schematic_Pro-Micro_Pinouts 2024-12-14.pdf similarity index 100% rename from variants/diy/nrf52_promicro_diy_tcxo/Schematic_Pro-Micro_Pinouts 2024-12-14.pdf rename to variants/nrf52840/diy/nrf52_promicro_diy_tcxo/Schematic_Pro-Micro_Pinouts 2024-12-14.pdf diff --git a/variants/diy/nrf52_promicro_diy_tcxo/custom_build_tasks.py b/variants/nrf52840/diy/nrf52_promicro_diy_tcxo/custom_build_tasks.py similarity index 100% rename from variants/diy/nrf52_promicro_diy_tcxo/custom_build_tasks.py rename to variants/nrf52840/diy/nrf52_promicro_diy_tcxo/custom_build_tasks.py diff --git a/variants/diy/nrf52_promicro_diy_tcxo/nicheGraphics.h b/variants/nrf52840/diy/nrf52_promicro_diy_tcxo/nicheGraphics.h similarity index 100% rename from variants/diy/nrf52_promicro_diy_tcxo/nicheGraphics.h rename to variants/nrf52840/diy/nrf52_promicro_diy_tcxo/nicheGraphics.h diff --git a/variants/nrf52840/diy/nrf52_promicro_diy_tcxo/platformio.ini b/variants/nrf52840/diy/nrf52_promicro_diy_tcxo/platformio.ini new file mode 100644 index 000000000..61a6eda07 --- /dev/null +++ b/variants/nrf52840/diy/nrf52_promicro_diy_tcxo/platformio.ini @@ -0,0 +1,32 @@ +; Promicro + E22(0)-xxxM / HT-RA62 modules board variant - DIY - with TCXO +[env:nrf52_promicro_diy_tcxo] +extends = nrf52840_base +board = promicro-nrf52840 +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/diy/nrf52_promicro_diy_tcxo + -D NRF52_PROMICRO_DIY +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/diy/nrf52_promicro_diy_tcxo> +lib_deps = + ${nrf52840_base.lib_deps} +debug_tool = jlink + +; NRF52 ProMicro w/ E-Ink display +[env:nrf52_promicro_diy-inkhud] +board_level = extra +extends = nrf52840_base, inkhud +board = promicro-nrf52840 +build_flags = + ${nrf52840_base.build_flags} + ${inkhud.build_flags} + -I variants/nrf52840/diy/nrf52_promicro_diy_tcxo + -D NRF52_PROMICRO_DIY +build_src_filter = + ${nrf52_base.build_src_filter} + ${inkhud.build_src_filter} + +<../variants/nrf52840/diy/nrf52_promicro_diy_tcxo> +lib_deps = + ${inkhud.lib_deps} ; InkHUD libs first, so we get GFXRoot instead of AdafruitGFX + ${nrf52840_base.lib_deps} +extra_scripts = + ${env.extra_scripts} + variants/nrf52840/diy/nrf52_promicro_diy_tcxo/custom_build_tasks.py ; Add to PIO's Project Tasks pane: preset builds for common displays diff --git a/variants/diy/nrf52_promicro_diy_tcxo/readme.md b/variants/nrf52840/diy/nrf52_promicro_diy_tcxo/readme.md similarity index 99% rename from variants/diy/nrf52_promicro_diy_tcxo/readme.md rename to variants/nrf52840/diy/nrf52_promicro_diy_tcxo/readme.md index 585ac36de..5a78103ee 100644 --- a/variants/diy/nrf52_promicro_diy_tcxo/readme.md +++ b/variants/nrf52840/diy/nrf52_promicro_diy_tcxo/readme.md @@ -1,3 +1,5 @@ + + # Notes ## General diff --git a/variants/diy/nrf52_promicro_diy_tcxo/rfswitch.h b/variants/nrf52840/diy/nrf52_promicro_diy_tcxo/rfswitch.h similarity index 100% rename from variants/diy/nrf52_promicro_diy_tcxo/rfswitch.h rename to variants/nrf52840/diy/nrf52_promicro_diy_tcxo/rfswitch.h diff --git a/variants/diy/nrf52_promicro_diy_tcxo/variant.cpp b/variants/nrf52840/diy/nrf52_promicro_diy_tcxo/variant.cpp similarity index 100% rename from variants/diy/nrf52_promicro_diy_tcxo/variant.cpp rename to variants/nrf52840/diy/nrf52_promicro_diy_tcxo/variant.cpp diff --git a/variants/diy/nrf52_promicro_diy_tcxo/variant.h b/variants/nrf52840/diy/nrf52_promicro_diy_tcxo/variant.h similarity index 100% rename from variants/diy/nrf52_promicro_diy_tcxo/variant.h rename to variants/nrf52840/diy/nrf52_promicro_diy_tcxo/variant.h diff --git a/variants/nrf52840/diy/nrf52_promicro_diy_xtal/platformio.ini b/variants/nrf52840/diy/nrf52_promicro_diy_xtal/platformio.ini new file mode 100644 index 000000000..278f578c5 --- /dev/null +++ b/variants/nrf52840/diy/nrf52_promicro_diy_xtal/platformio.ini @@ -0,0 +1,12 @@ +; Promicro + E22(0)-xxxMM / RA-01SH modules board variant - DIY - without TCXO +[env:nrf52_promicro_diy_xtal] +extends = nrf52840_base +board = promicro-nrf52840 +board_level = extra +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/diy/nrf52_promicro_diy_xtal + -D NRF52_PROMICRO_DIY +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/diy/nrf52_promicro_diy_xtal> +lib_deps = + ${nrf52840_base.lib_deps} +debug_tool = jlink diff --git a/variants/diy/nrf52_promicro_diy_xtal/variant.cpp b/variants/nrf52840/diy/nrf52_promicro_diy_xtal/variant.cpp similarity index 100% rename from variants/diy/nrf52_promicro_diy_xtal/variant.cpp rename to variants/nrf52840/diy/nrf52_promicro_diy_xtal/variant.cpp diff --git a/variants/diy/nrf52_promicro_diy_xtal/variant.h b/variants/nrf52840/diy/nrf52_promicro_diy_xtal/variant.h similarity index 100% rename from variants/diy/nrf52_promicro_diy_xtal/variant.h rename to variants/nrf52840/diy/nrf52_promicro_diy_xtal/variant.h diff --git a/variants/diy/seeed-xiao-nrf52840-wio-sx1262/README.md b/variants/nrf52840/diy/seeed-xiao-nrf52840-wio-sx1262/README.md similarity index 100% rename from variants/diy/seeed-xiao-nrf52840-wio-sx1262/README.md rename to variants/nrf52840/diy/seeed-xiao-nrf52840-wio-sx1262/README.md diff --git a/variants/nrf52840/diy/seeed-xiao-nrf52840-wio-sx1262/platformio.ini b/variants/nrf52840/diy/seeed-xiao-nrf52840-wio-sx1262/platformio.ini new file mode 100644 index 000000000..2df31d23c --- /dev/null +++ b/variants/nrf52840/diy/seeed-xiao-nrf52840-wio-sx1262/platformio.ini @@ -0,0 +1,15 @@ +; Seeed XIAO nRF52840 + XIAO Wio SX1262 DIY +[env:seeed-xiao-nrf52840-wio-sx1262] +board = xiao_ble_sense +extends = nrf52840_base +board_level = extra +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/diy/seeed-xiao-nrf52840-wio-sx1262 + -D PRIVATE_HW + -Isrc/platform/nrf52/softdevice + -Isrc/platform/nrf52/softdevice/nrf52 +board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/diy/seeed-xiao-nrf52840-wio-sx1262> +lib_deps = + ${nrf52840_base.lib_deps} +debug_tool = jlink diff --git a/variants/diy/seeed-xiao-nrf52840-wio-sx1262/variant.cpp b/variants/nrf52840/diy/seeed-xiao-nrf52840-wio-sx1262/variant.cpp similarity index 100% rename from variants/diy/seeed-xiao-nrf52840-wio-sx1262/variant.cpp rename to variants/nrf52840/diy/seeed-xiao-nrf52840-wio-sx1262/variant.cpp diff --git a/variants/diy/seeed-xiao-nrf52840-wio-sx1262/variant.h b/variants/nrf52840/diy/seeed-xiao-nrf52840-wio-sx1262/variant.h similarity index 100% rename from variants/diy/seeed-xiao-nrf52840-wio-sx1262/variant.h rename to variants/nrf52840/diy/seeed-xiao-nrf52840-wio-sx1262/variant.h diff --git a/variants/nrf52840/diy/seeed_xiao_nrf52840_e22/platformio.ini b/variants/nrf52840/diy/seeed_xiao_nrf52840_e22/platformio.ini new file mode 100644 index 000000000..a5d0aaf8f --- /dev/null +++ b/variants/nrf52840/diy/seeed_xiao_nrf52840_e22/platformio.ini @@ -0,0 +1,19 @@ +; Seeed XIAO nRF52840 + EBYTE E22-900M30S - Pinout matching Wio-SX1262 (SKU 113010003) +[env:seeed_xiao_nrf52840_e22_900m30s] +extends = env:seeed_xiao_nrf52840_kit +board_level = extra +build_flags = ${env:seeed_xiao_nrf52840_kit.build_flags} + -D PRIVATE_HW + -DEBYTE_E22 + -DEBYTE_E22_900M30S +build_unflags = -DGPS_L76K + +; Seeed XIAO nRF52840 + EBYTE E22-900M33S - Pinout matching Wio-SX1262 (SKU 113010003) +[env:seeed_xiao_nrf52840_e22_900m33s] +extends = env:seeed_xiao_nrf52840_kit +board_level = extra +build_flags = ${env:seeed_xiao_nrf52840_kit.build_flags} + -D PRIVATE_HW + -DEBYTE_E22 + -DEBYTE_E22_900M33S +build_unflags = -DGPS_L76K diff --git a/variants/diy/xiao_ble/README.md b/variants/nrf52840/diy/xiao_ble/README.md similarity index 100% rename from variants/diy/xiao_ble/README.md rename to variants/nrf52840/diy/xiao_ble/README.md diff --git a/variants/nrf52840/diy/xiao_ble/platformio.ini b/variants/nrf52840/diy/xiao_ble/platformio.ini new file mode 100644 index 000000000..6c764ea78 --- /dev/null +++ b/variants/nrf52840/diy/xiao_ble/platformio.ini @@ -0,0 +1,10 @@ +; Seeed Xiao BLE: https://www.digikey.com/en/products/detail/seeed-technology-co-ltd/102010448/16652893 +[env:xiao_ble] +extends = env:seeed_xiao_nrf52840_kit +board_level = extra +build_flags = ${env:seeed_xiao_nrf52840_kit.build_flags} + -D PRIVATE_HW + -DXIAO_BLE_LEGACY_PINOUT + -DEBYTE_E22 + -DEBYTE_E22_900M30S +build_unflags = -DGPS_L76K diff --git a/variants/feather_diy/platformio.ini b/variants/nrf52840/feather_diy/platformio.ini similarity index 79% rename from variants/feather_diy/platformio.ini rename to variants/nrf52840/feather_diy/platformio.ini index 84c582ab0..a17e418a2 100644 --- a/variants/feather_diy/platformio.ini +++ b/variants/nrf52840/feather_diy/platformio.ini @@ -2,8 +2,10 @@ [env:feather_diy] extends = nrf52840_base board = adafruit_feather_nrf52840 -build_flags = ${nrf52840_base.build_flags} -Ivariants/feather_diy -Dfeather_diy -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/feather_diy> +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/feather_diy + -Dfeather_diy +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/feather_diy> lib_deps = ${nrf52840_base.lib_deps} debug_tool = jlink diff --git a/variants/feather_diy/variant.cpp b/variants/nrf52840/feather_diy/variant.cpp similarity index 100% rename from variants/feather_diy/variant.cpp rename to variants/nrf52840/feather_diy/variant.cpp diff --git a/variants/feather_diy/variant.h b/variants/nrf52840/feather_diy/variant.h similarity index 100% rename from variants/feather_diy/variant.h rename to variants/nrf52840/feather_diy/variant.h diff --git a/variants/gat562_mesh_trial_tracker/platformio.ini b/variants/nrf52840/gat562_mesh_trial_tracker/platformio.ini similarity index 75% rename from variants/gat562_mesh_trial_tracker/platformio.ini rename to variants/nrf52840/gat562_mesh_trial_tracker/platformio.ini index e67f3ec8d..72ac6320d 100644 --- a/variants/gat562_mesh_trial_tracker/platformio.ini +++ b/variants/nrf52840/gat562_mesh_trial_tracker/platformio.ini @@ -3,11 +3,13 @@ extends = nrf52840_base board = gat562_mesh_trial_tracker board_check = true -build_flags = ${nrf52840_base.build_flags} -Ivariants/gat562_mesh_trial_tracker -D GAT562_MESH_TRIAL_TRACKER +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/gat562_mesh_trial_tracker + -D GAT562_MESH_TRIAL_TRACKER -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -DRADIOLIB_EXCLUDE_SX128X=1 -DRADIOLIB_EXCLUDE_SX127X=1 -DRADIOLIB_EXCLUDE_LR11X0=1 -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/gat562_mesh_trial_tracker> -lib_deps = +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/gat562_mesh_trial_tracker> +lib_deps = ${nrf52840_base.lib_deps} diff --git a/variants/gat562_mesh_trial_tracker/variant.cpp b/variants/nrf52840/gat562_mesh_trial_tracker/variant.cpp similarity index 100% rename from variants/gat562_mesh_trial_tracker/variant.cpp rename to variants/nrf52840/gat562_mesh_trial_tracker/variant.cpp diff --git a/variants/gat562_mesh_trial_tracker/variant.h b/variants/nrf52840/gat562_mesh_trial_tracker/variant.h similarity index 100% rename from variants/gat562_mesh_trial_tracker/variant.h rename to variants/nrf52840/gat562_mesh_trial_tracker/variant.h diff --git a/variants/heltec_mesh_node_t114-inkhud/custom_build_tasks.py b/variants/nrf52840/heltec_mesh_node_t114-inkhud/custom_build_tasks.py similarity index 100% rename from variants/heltec_mesh_node_t114-inkhud/custom_build_tasks.py rename to variants/nrf52840/heltec_mesh_node_t114-inkhud/custom_build_tasks.py diff --git a/variants/heltec_mesh_node_t114-inkhud/nicheGraphics.h b/variants/nrf52840/heltec_mesh_node_t114-inkhud/nicheGraphics.h similarity index 100% rename from variants/heltec_mesh_node_t114-inkhud/nicheGraphics.h rename to variants/nrf52840/heltec_mesh_node_t114-inkhud/nicheGraphics.h diff --git a/variants/heltec_mesh_node_t114-inkhud/platformio.ini b/variants/nrf52840/heltec_mesh_node_t114-inkhud/platformio.ini similarity index 66% rename from variants/heltec_mesh_node_t114-inkhud/platformio.ini rename to variants/nrf52840/heltec_mesh_node_t114-inkhud/platformio.ini index 9a5673040..2641a507d 100644 --- a/variants/heltec_mesh_node_t114-inkhud/platformio.ini +++ b/variants/nrf52840/heltec_mesh_node_t114-inkhud/platformio.ini @@ -6,14 +6,15 @@ board_check = true build_flags = ${nrf52840_base.build_flags} ${inkhud.build_flags} - -I variants/heltec_mesh_node_t114-inkhud + -I variants/nrf52840/heltec_mesh_node_t114-inkhud build_src_filter = ${nrf52_base.build_src_filter} ${inkhud.build_src_filter} + +<../variants/nrf52840/heltec_mesh_node_t114-inkhud> lib_deps = ${inkhud.lib_deps} ; InkHUD libs first, so we get GFXRoot instead of AdafruitGFX ${nrf52840_base.lib_deps} lewisxhe/PCF8563_Library@^1.0.1 extra_scripts = ${env.extra_scripts} - variants/diy/nrf52_promicro_diy_tcxo/custom_build_tasks.py ; Add to PIO's Project Tasks pane: preset builds for common displays \ No newline at end of file + variants/nrf52840/diy/nrf52_promicro_diy_tcxo/custom_build_tasks.py ; Add to PIO's Project Tasks pane: preset builds for common displays diff --git a/variants/heltec_mesh_node_t114-inkhud/variant.cpp b/variants/nrf52840/heltec_mesh_node_t114-inkhud/variant.cpp similarity index 100% rename from variants/heltec_mesh_node_t114-inkhud/variant.cpp rename to variants/nrf52840/heltec_mesh_node_t114-inkhud/variant.cpp diff --git a/variants/heltec_mesh_node_t114-inkhud/variant.h b/variants/nrf52840/heltec_mesh_node_t114-inkhud/variant.h similarity index 100% rename from variants/heltec_mesh_node_t114-inkhud/variant.h rename to variants/nrf52840/heltec_mesh_node_t114-inkhud/variant.h diff --git a/variants/heltec_mesh_node_t114/platformio.ini b/variants/nrf52840/heltec_mesh_node_t114/platformio.ini similarity index 74% rename from variants/heltec_mesh_node_t114/platformio.ini rename to variants/nrf52840/heltec_mesh_node_t114/platformio.ini index 3ba97bd04..ead787bb1 100644 --- a/variants/heltec_mesh_node_t114/platformio.ini +++ b/variants/nrf52840/heltec_mesh_node_t114/platformio.ini @@ -5,11 +5,12 @@ board = heltec_mesh_node_t114 debug_tool = jlink # add -DCFG_SYSVIEW if you want to use the Segger systemview tool for OS profiling. -build_flags = ${nrf52840_base.build_flags} -Ivariants/heltec_mesh_node_t114 - -DGPS_POWER_TOGGLE - -DHELTEC_T114 +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/heltec_mesh_node_t114 + -DGPS_POWER_TOGGLE + -DHELTEC_T114 -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/heltec_mesh_node_t114> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/heltec_mesh_node_t114> lib_deps = ${nrf52840_base.lib_deps} lewisxhe/PCF8563_Library@^1.0.1 diff --git a/variants/heltec_mesh_node_t114/variant.cpp b/variants/nrf52840/heltec_mesh_node_t114/variant.cpp similarity index 100% rename from variants/heltec_mesh_node_t114/variant.cpp rename to variants/nrf52840/heltec_mesh_node_t114/variant.cpp diff --git a/variants/heltec_mesh_node_t114/variant.h b/variants/nrf52840/heltec_mesh_node_t114/variant.h similarity index 100% rename from variants/heltec_mesh_node_t114/variant.h rename to variants/nrf52840/heltec_mesh_node_t114/variant.h diff --git a/variants/heltec_mesh_pocket/nicheGraphics.h b/variants/nrf52840/heltec_mesh_pocket/nicheGraphics.h similarity index 100% rename from variants/heltec_mesh_pocket/nicheGraphics.h rename to variants/nrf52840/heltec_mesh_pocket/nicheGraphics.h diff --git a/variants/heltec_mesh_pocket/platformio.ini b/variants/nrf52840/heltec_mesh_pocket/platformio.ini similarity index 89% rename from variants/heltec_mesh_pocket/platformio.ini rename to variants/nrf52840/heltec_mesh_pocket/platformio.ini index 2f3886887..2fb852226 100644 --- a/variants/heltec_mesh_pocket/platformio.ini +++ b/variants/nrf52840/heltec_mesh_pocket/platformio.ini @@ -5,7 +5,8 @@ board = heltec_mesh_pocket debug_tool = jlink # add -DCFG_SYSVIEW if you want to use the Segger systemview tool for OS profiling. -build_flags = ${nrf52840_base.build_flags} -Ivariants/heltec_mesh_pocket +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/heltec_mesh_pocket -DHELTEC_MESH_POCKET -DHELTEC_MESH_POCKET_BATTERY_5000 -DUSE_EINK @@ -21,7 +22,7 @@ build_flags = ${nrf52840_base.build_flags} -Ivariants/heltec_mesh_pocket -DEINK_HASQUIRK_GHOSTING ; Display model is identified as "prone to ghosting" -DEINK_HASQUIRK_WEAKFASTREFRESH ; Pixels set with fast-refresh are easy to clear, disrupted by sunlight -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/heltec_mesh_pocket> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/heltec_mesh_pocket> lib_deps = ${nrf52840_base.lib_deps} lewisxhe/PCF8563_Library@^1.0.1 @@ -31,11 +32,11 @@ lib_deps = [env:heltec-mesh-pocket-5000-inkhud] extends = nrf52840_base, inkhud board = heltec_mesh_pocket -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/heltec_mesh_pocket> ${inkhud.build_src_filter} +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/heltec_mesh_pocket> ${inkhud.build_src_filter} build_flags = ${inkhud.build_flags} ${nrf52840_base.build_flags} - -I variants/heltec_mesh_pocket + -I variants/nrf52840/heltec_mesh_pocket -D HELTEC_MESH_POCKET -D HELTEC_MESH_POCKET_BATTERY_5000 lib_deps = @@ -50,7 +51,8 @@ board = heltec_mesh_pocket debug_tool = jlink # add -DCFG_SYSVIEW if you want to use the Segger systemview tool for OS profiling. -build_flags = ${nrf52840_base.build_flags} -Ivariants/heltec_mesh_pocket +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/heltec_mesh_pocket -DHELTEC_MESH_POCKET -DHELTEC_MESH_POCKET_BATTERY_10000 -DUSE_EINK @@ -66,7 +68,7 @@ build_flags = ${nrf52840_base.build_flags} -Ivariants/heltec_mesh_pocket -DEINK_HASQUIRK_GHOSTING ; Display model is identified as "prone to ghosting" -DEINK_HASQUIRK_WEAKFASTREFRESH ; Pixels set with fast-refresh are easy to clear, disrupted by sunlight -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/heltec_mesh_pocket> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/heltec_mesh_pocket> lib_deps = ${nrf52840_base.lib_deps} lewisxhe/PCF8563_Library@^1.0.1 @@ -76,11 +78,11 @@ lib_deps = [env:heltec-mesh-pocket-10000-inkhud] extends = nrf52840_base, inkhud board = heltec_mesh_pocket -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/heltec_mesh_pocket> ${inkhud.build_src_filter} +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/heltec_mesh_pocket> ${inkhud.build_src_filter} build_flags = ${inkhud.build_flags} ${nrf52840_base.build_flags} - -I variants/heltec_mesh_pocket + -I variants/nrf52840/heltec_mesh_pocket -D HELTEC_MESH_POCKET -D HELTEC_MESH_POCKET_BATTERY_10000 lib_deps = diff --git a/variants/heltec_mesh_pocket/variant.cpp b/variants/nrf52840/heltec_mesh_pocket/variant.cpp similarity index 100% rename from variants/heltec_mesh_pocket/variant.cpp rename to variants/nrf52840/heltec_mesh_pocket/variant.cpp diff --git a/variants/heltec_mesh_pocket/variant.h b/variants/nrf52840/heltec_mesh_pocket/variant.h similarity index 100% rename from variants/heltec_mesh_pocket/variant.h rename to variants/nrf52840/heltec_mesh_pocket/variant.h diff --git a/variants/meshlink/platformio.ini b/variants/nrf52840/meshlink/platformio.ini similarity index 94% rename from variants/meshlink/platformio.ini rename to variants/nrf52840/meshlink/platformio.ini index 384858576..8216a704a 100644 --- a/variants/meshlink/platformio.ini +++ b/variants/nrf52840/meshlink/platformio.ini @@ -5,7 +5,9 @@ extends = nrf52840_base board = meshlink ;board_check = true -build_flags = ${nrf52840_base.build_flags} -I variants/meshlink -D MESHLINK +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/meshlink + -D MESHLINK -D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -D EINK_DISPLAY_MODEL=GxEPD2_213_B74 -D EINK_WIDTH=250 @@ -19,7 +21,7 @@ build_flags = ${nrf52840_base.build_flags} -I variants/meshlink -D MESHLINK -D EINK_HASQUIRK_VICIOUSFASTREFRESH ; Identify that pixels drawn by fast-refresh are harder to clear -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/meshlink> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/meshlink> lib_deps = ${nrf52840_base.lib_deps} https://github.com/meshtastic/GxEPD2/archive/55f618961db45a23eff0233546430f1e5a80f63a.zip diff --git a/variants/meshlink/variant.cpp b/variants/nrf52840/meshlink/variant.cpp similarity index 100% rename from variants/meshlink/variant.cpp rename to variants/nrf52840/meshlink/variant.cpp diff --git a/variants/meshlink/variant.h b/variants/nrf52840/meshlink/variant.h similarity index 100% rename from variants/meshlink/variant.h rename to variants/nrf52840/meshlink/variant.h diff --git a/variants/meshlink_eink/platformio.ini b/variants/nrf52840/meshlink_eink/platformio.ini similarity index 93% rename from variants/meshlink_eink/platformio.ini rename to variants/nrf52840/meshlink_eink/platformio.ini index 550b1e2fc..a48a9e695 100644 --- a/variants/meshlink_eink/platformio.ini +++ b/variants/nrf52840/meshlink_eink/platformio.ini @@ -5,7 +5,9 @@ extends = nrf52840_base board = meshlink ;board_check = true -build_flags = ${nrf52840_base.build_flags} -I variants/meshlink_eink -D MESHLINK +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/meshlink_eink + -D MESHLINK -D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -D EINK_DISPLAY_MODEL=GxEPD2_213_B74 -D EINK_WIDTH=250 @@ -19,7 +21,7 @@ build_flags = ${nrf52840_base.build_flags} -I variants/meshlink_eink -D MESHLINK -D EINK_HASQUIRK_VICIOUSFASTREFRESH ; Identify that pixels drawn by fast-refresh are harder to clear -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/meshlink_eink> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/meshlink_eink> lib_deps = ${nrf52840_base.lib_deps} https://github.com/meshtastic/GxEPD2/archive/55f618961db45a23eff0233546430f1e5a80f63a.zip diff --git a/variants/meshlink_eink/variant.cpp b/variants/nrf52840/meshlink_eink/variant.cpp similarity index 100% rename from variants/meshlink_eink/variant.cpp rename to variants/nrf52840/meshlink_eink/variant.cpp diff --git a/variants/meshlink_eink/variant.h b/variants/nrf52840/meshlink_eink/variant.h similarity index 100% rename from variants/meshlink_eink/variant.h rename to variants/nrf52840/meshlink_eink/variant.h diff --git a/variants/monteops_hw1/platformio.ini b/variants/nrf52840/monteops_hw1/platformio.ini similarity index 77% rename from variants/monteops_hw1/platformio.ini rename to variants/nrf52840/monteops_hw1/platformio.ini index 82567f614..5426aee7f 100644 --- a/variants/monteops_hw1/platformio.ini +++ b/variants/nrf52840/monteops_hw1/platformio.ini @@ -3,8 +3,10 @@ board_level = extra extends = nrf52840_base board = wiscore_rak4631 -build_flags = ${nrf52840_base.build_flags} -Ivariants/monteops_hw1 -D MONTEOPS_HW1 -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/monteops_hw1> + + + +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/monteops_hw1 + -D MONTEOPS_HW1 +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/monteops_hw1> + + + lib_deps = ${nrf52840_base.lib_deps} ${networking_base.lib_deps} diff --git a/variants/monteops_hw1/variant.cpp b/variants/nrf52840/monteops_hw1/variant.cpp similarity index 100% rename from variants/monteops_hw1/variant.cpp rename to variants/nrf52840/monteops_hw1/variant.cpp diff --git a/variants/monteops_hw1/variant.h b/variants/nrf52840/monteops_hw1/variant.h similarity index 100% rename from variants/monteops_hw1/variant.h rename to variants/nrf52840/monteops_hw1/variant.h diff --git a/variants/nano-g2-ultra/platformio.ini b/variants/nrf52840/nano-g2-ultra/platformio.ini similarity index 70% rename from variants/nano-g2-ultra/platformio.ini rename to variants/nrf52840/nano-g2-ultra/platformio.ini index 7da168b47..f697a90dd 100644 --- a/variants/nano-g2-ultra/platformio.ini +++ b/variants/nrf52840/nano-g2-ultra/platformio.ini @@ -4,8 +4,10 @@ extends = nrf52840_base board = nano-g2-ultra debug_tool = jlink -build_flags = ${nrf52840_base.build_flags} -Ivariants/nano-g2-ultra -D NANO_G2_ULTRA -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nano-g2-ultra> +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/nano-g2-ultra + -D NANO_G2_ULTRA +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/nano-g2-ultra> lib_deps = ${nrf52840_base.lib_deps} lewisxhe/PCF8563_Library@^1.0.1 diff --git a/variants/nano-g2-ultra/variant.cpp b/variants/nrf52840/nano-g2-ultra/variant.cpp similarity index 100% rename from variants/nano-g2-ultra/variant.cpp rename to variants/nrf52840/nano-g2-ultra/variant.cpp diff --git a/variants/nano-g2-ultra/variant.h b/variants/nrf52840/nano-g2-ultra/variant.h similarity index 100% rename from variants/nano-g2-ultra/variant.h rename to variants/nrf52840/nano-g2-ultra/variant.h diff --git a/variants/rak2560/platformio.ini b/variants/nrf52840/rak2560/platformio.ini similarity index 87% rename from variants/rak2560/platformio.ini rename to variants/nrf52840/rak2560/platformio.ini index 8a720ce5a..2b73aca03 100644 --- a/variants/rak2560/platformio.ini +++ b/variants/nrf52840/rak2560/platformio.ini @@ -3,13 +3,15 @@ extends = nrf52840_base board = wiscore_rak4631 board_check = true -build_flags = ${nrf52840_base.build_flags} -Ivariants/rak2560 -D RAK_4631 +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/rak2560 + -D RAK_4631 -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -DRADIOLIB_EXCLUDE_SX128X=1 -DRADIOLIB_EXCLUDE_SX127X=1 -DRADIOLIB_EXCLUDE_LR11X0=1 -DHAS_RAKPROT=1 ; Define if RAk OneWireSerial is used (disables GPS) -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/rak2560> + + +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/rak2560> + + lib_deps = ${nrf52840_base.lib_deps} ${networking_base.lib_deps} diff --git a/variants/rak2560/variant.cpp b/variants/nrf52840/rak2560/variant.cpp similarity index 100% rename from variants/rak2560/variant.cpp rename to variants/nrf52840/rak2560/variant.cpp diff --git a/variants/rak2560/variant.h b/variants/nrf52840/rak2560/variant.h similarity index 100% rename from variants/rak2560/variant.h rename to variants/nrf52840/rak2560/variant.h diff --git a/variants/rak4631/platformio.ini b/variants/nrf52840/rak4631/platformio.ini similarity index 94% rename from variants/rak4631/platformio.ini rename to variants/nrf52840/rak4631/platformio.ini index ee134e87a..7b695779c 100644 --- a/variants/rak4631/platformio.ini +++ b/variants/nrf52840/rak4631/platformio.ini @@ -3,7 +3,9 @@ extends = nrf52840_base board = wiscore_rak4631 board_check = true -build_flags = ${nrf52840_base.build_flags} -Ivariants/rak4631 -D RAK_4631 +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/rak4631 + -D RAK_4631 -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -DEINK_DISPLAY_MODEL=GxEPD2_213_BN -DEINK_WIDTH=250 @@ -11,7 +13,7 @@ build_flags = ${nrf52840_base.build_flags} -Ivariants/rak4631 -D RAK_4631 -DRADIOLIB_EXCLUDE_SX128X=1 -DRADIOLIB_EXCLUDE_SX127X=1 -DRADIOLIB_EXCLUDE_LR11X0=1 -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/rak4631> + + + +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/rak4631> + + + lib_deps = ${nrf52840_base.lib_deps} ${networking_base.lib_deps} diff --git a/variants/rak4631/variant.cpp b/variants/nrf52840/rak4631/variant.cpp similarity index 100% rename from variants/rak4631/variant.cpp rename to variants/nrf52840/rak4631/variant.cpp diff --git a/variants/rak4631/variant.h b/variants/nrf52840/rak4631/variant.h similarity index 100% rename from variants/rak4631/variant.h rename to variants/nrf52840/rak4631/variant.h diff --git a/variants/rak4631_epaper/platformio.ini b/variants/nrf52840/rak4631_epaper/platformio.ini similarity index 86% rename from variants/rak4631_epaper/platformio.ini rename to variants/nrf52840/rak4631_epaper/platformio.ini index 47e4451c7..704520f8d 100644 --- a/variants/rak4631_epaper/platformio.ini +++ b/variants/nrf52840/rak4631_epaper/platformio.ini @@ -2,14 +2,16 @@ [env:rak4631_eink] extends = nrf52840_base board = wiscore_rak4631 -build_flags = ${nrf52840_base.build_flags} -Ivariants/rak4631_epaper -D RAK_4631 +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/rak4631_epaper + -D RAK_4631 -DEINK_DISPLAY_MODEL=GxEPD2_213_BN -DEINK_WIDTH=250 -DEINK_HEIGHT=122 -DRADIOLIB_EXCLUDE_SX128X=1 -DRADIOLIB_EXCLUDE_SX127X=1 -DRADIOLIB_EXCLUDE_LR11X0=1 -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/rak4631_epaper> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/rak4631_epaper> lib_deps = ${nrf52840_base.lib_deps} zinggjm/GxEPD2@^1.6.2 diff --git a/variants/rak4631_epaper/variant.cpp b/variants/nrf52840/rak4631_epaper/variant.cpp similarity index 100% rename from variants/rak4631_epaper/variant.cpp rename to variants/nrf52840/rak4631_epaper/variant.cpp diff --git a/variants/rak4631_epaper/variant.h b/variants/nrf52840/rak4631_epaper/variant.h similarity index 100% rename from variants/rak4631_epaper/variant.h rename to variants/nrf52840/rak4631_epaper/variant.h diff --git a/variants/rak4631_epaper_onrxtx/platformio.ini b/variants/nrf52840/rak4631_epaper_onrxtx/platformio.ini similarity index 87% rename from variants/rak4631_epaper_onrxtx/platformio.ini rename to variants/nrf52840/rak4631_epaper_onrxtx/platformio.ini index 52a13f2a7..e0156668b 100644 --- a/variants/rak4631_epaper_onrxtx/platformio.ini +++ b/variants/nrf52840/rak4631_epaper_onrxtx/platformio.ini @@ -3,7 +3,9 @@ board_level = extra extends = nrf52840_base board = wiscore_rak4631 -build_flags = ${nrf52840_base.build_flags} -Ivariants/rak4631_epaper -D RAK_4631 +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/rak4631_epaper + -D RAK_4631 -D PIN_EINK_EN=34 -D EINK_DISPLAY_MODEL=GxEPD2_213_BN -D EINK_WIDTH=250 @@ -11,7 +13,7 @@ build_flags = ${nrf52840_base.build_flags} -Ivariants/rak4631_epaper -D RAK_4631 -D RADIOLIB_EXCLUDE_SX128X=1 -D RADIOLIB_EXCLUDE_SX127X=1 -D RADIOLIB_EXCLUDE_LR11X0=1 -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/rak4631_epaper_onrxtx> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/rak4631_epaper_onrxtx> lib_deps = ${nrf52840_base.lib_deps} zinggjm/GxEPD2@^1.6.2 diff --git a/variants/rak4631_epaper_onrxtx/variant.cpp b/variants/nrf52840/rak4631_epaper_onrxtx/variant.cpp similarity index 100% rename from variants/rak4631_epaper_onrxtx/variant.cpp rename to variants/nrf52840/rak4631_epaper_onrxtx/variant.cpp diff --git a/variants/rak4631_epaper_onrxtx/variant.h b/variants/nrf52840/rak4631_epaper_onrxtx/variant.h similarity index 100% rename from variants/rak4631_epaper_onrxtx/variant.h rename to variants/nrf52840/rak4631_epaper_onrxtx/variant.h diff --git a/variants/rak4631_eth_gw/platformio.ini b/variants/nrf52840/rak4631_eth_gw/platformio.ini similarity index 95% rename from variants/rak4631_eth_gw/platformio.ini rename to variants/nrf52840/rak4631_eth_gw/platformio.ini index 7e7b0e019..a1c1b4610 100644 --- a/variants/rak4631_eth_gw/platformio.ini +++ b/variants/nrf52840/rak4631_eth_gw/platformio.ini @@ -3,7 +3,9 @@ extends = nrf52840_base board = wiscore_rak4631 board_check = true -build_flags = ${nrf52840_base.build_flags} -Ivariants/rak4631_eth_gw -D RAK_4631 +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/rak4631_eth_gw + -D RAK_4631 -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -DHAS_UDP_MULTICAST=1 -DEINK_DISPLAY_MODEL=GxEPD2_213_BN @@ -22,7 +24,7 @@ build_flags = ${nrf52840_base.build_flags} -Ivariants/rak4631_eth_gw -D RAK_4631 -DMESHTASTIC_EXCLUDE_STOREFORWARD=1 -DMESHTASTIC_EXCLUDE_CANNEDMESSAGES=1 -DMESHTASTIC_EXCLUDE_WAYPOINT=1 -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/rak4631_eth_gw> + + + +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/rak4631_eth_gw> + + + lib_deps = ${nrf52840_base.lib_deps} ${networking_base.lib_deps} diff --git a/variants/rak4631_eth_gw/variant.cpp b/variants/nrf52840/rak4631_eth_gw/variant.cpp similarity index 100% rename from variants/rak4631_eth_gw/variant.cpp rename to variants/nrf52840/rak4631_eth_gw/variant.cpp diff --git a/variants/rak4631_eth_gw/variant.h b/variants/nrf52840/rak4631_eth_gw/variant.h similarity index 100% rename from variants/rak4631_eth_gw/variant.h rename to variants/nrf52840/rak4631_eth_gw/variant.h diff --git a/variants/rak4631_nomadstar_meteor_pro/platformio.ini b/variants/nrf52840/rak4631_nomadstar_meteor_pro/platformio.ini similarity index 89% rename from variants/rak4631_nomadstar_meteor_pro/platformio.ini rename to variants/nrf52840/rak4631_nomadstar_meteor_pro/platformio.ini index d5fbe6a16..e94eef1ee 100644 --- a/variants/rak4631_nomadstar_meteor_pro/platformio.ini +++ b/variants/nrf52840/rak4631_nomadstar_meteor_pro/platformio.ini @@ -3,8 +3,9 @@ extends = nrf52840_base board = wiscore_rak4631 board_check = true -build_flags = ${nrf52840_base.build_flags} -Ivariants/rak4631_nomadstar_meteor_pro -D NOMADSTAR_METEOR_PRO - -L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m4/fpv4-sp-d16-hard" +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/rak4631_nomadstar_meteor_pro + -D NOMADSTAR_METEOR_PRO ;-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -DEINK_DISPLAY_MODEL=GxEPD2_213_BN -DEINK_WIDTH=250 @@ -12,8 +13,8 @@ build_flags = ${nrf52840_base.build_flags} -Ivariants/rak4631_nomadstar_meteor_p -DRADIOLIB_EXCLUDE_SX128X=1 -DRADIOLIB_EXCLUDE_SX127X=1 -DRADIOLIB_EXCLUDE_LR11X0=1 -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/rak4631_nomadstar_meteor_pro> + + -lib_deps = +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/rak4631_nomadstar_meteor_pro> + + +lib_deps = ${nrf52840_base.lib_deps} https://github.com/NomadStar-outdoor/IOBoard-RGB-LP5562-Library.git#9c366c8 diff --git a/variants/rak4631_nomadstar_meteor_pro/variant.cpp b/variants/nrf52840/rak4631_nomadstar_meteor_pro/variant.cpp similarity index 100% rename from variants/rak4631_nomadstar_meteor_pro/variant.cpp rename to variants/nrf52840/rak4631_nomadstar_meteor_pro/variant.cpp diff --git a/variants/rak4631_nomadstar_meteor_pro/variant.h b/variants/nrf52840/rak4631_nomadstar_meteor_pro/variant.h similarity index 100% rename from variants/rak4631_nomadstar_meteor_pro/variant.h rename to variants/nrf52840/rak4631_nomadstar_meteor_pro/variant.h diff --git a/variants/rak_wismeshtag/platformio.ini b/variants/nrf52840/rak_wismeshtag/platformio.ini similarity index 71% rename from variants/rak_wismeshtag/platformio.ini rename to variants/nrf52840/rak_wismeshtag/platformio.ini index a066e5282..08e723302 100644 --- a/variants/rak_wismeshtag/platformio.ini +++ b/variants/nrf52840/rak_wismeshtag/platformio.ini @@ -3,13 +3,15 @@ extends = nrf52840_base board = wiscore_rak4631 board_check = true -build_flags = ${nrf52840_base.build_flags} -Ivariants/rak_wismeshtag -D WISMESH_TAG -D RAK_4631 - -L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m4/fpv4-sp-d16-hard" +build_flags = ${nrf52840_base.build_flags} + -I variants/nrf52840/rak_wismeshtag + -D WISMESH_TAG + -D RAK_4631 -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -DRADIOLIB_EXCLUDE_SX128X=1 -DRADIOLIB_EXCLUDE_SX127X=1 -DRADIOLIB_EXCLUDE_LR11X0=1 -DMESHTASTIC_EXCLUDE_WIFI=1 -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/rak_wismeshtag> -lib_deps = +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/rak_wismeshtag> +lib_deps = ${nrf52840_base.lib_deps} \ No newline at end of file diff --git a/variants/rak_wismeshtag/variant.cpp b/variants/nrf52840/rak_wismeshtag/variant.cpp similarity index 100% rename from variants/rak_wismeshtag/variant.cpp rename to variants/nrf52840/rak_wismeshtag/variant.cpp diff --git a/variants/rak_wismeshtag/variant.h b/variants/nrf52840/rak_wismeshtag/variant.h similarity index 99% rename from variants/rak_wismeshtag/variant.h rename to variants/nrf52840/rak_wismeshtag/variant.h index dd82b76a1..eba910dc1 100644 --- a/variants/rak_wismeshtag/variant.h +++ b/variants/nrf52840/rak_wismeshtag/variant.h @@ -150,7 +150,6 @@ static const uint8_t SCK = PIN_SPI_SCK; #define PIN_QSPI_IO2 28 #define PIN_QSPI_IO3 2 - /* @note RAK5005-O GPIO mapping to RAK4631 GPIO ports RAK5005-O <-> nRF52840 IO1 <-> P0.17 (Arduino GPIO number 17) @@ -219,7 +218,7 @@ SO GPIO 39/TXEN MAY NOT BE DEFINED FOR SUCCESSFUL OPERATION OF THE SX1262 - TG #define GPS_TX_PIN PIN_SERIAL1_TX // RAK WISMESHTAG -#define PIN_BUZZER 21 +#define PIN_BUZZER 21 // Battery // The battery sense is hooked to pin A0 (5) diff --git a/variants/rak_wismeshtap/platformio.ini b/variants/nrf52840/rak_wismeshtap/platformio.ini similarity index 87% rename from variants/rak_wismeshtap/platformio.ini rename to variants/nrf52840/rak_wismeshtap/platformio.ini index bfb3ea927..f6ee8fd23 100644 --- a/variants/rak_wismeshtap/platformio.ini +++ b/variants/nrf52840/rak_wismeshtap/platformio.ini @@ -2,7 +2,10 @@ [env:rak_wismeshtap] extends = nrf52840_base board = wiscore_rak4631 -build_flags = ${nrf52840_base.build_flags} -Ivariants/rak_wismeshtap -DWISMESH_TAP -DRAK_4631 +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/rak_wismeshtap + -DWISMESH_TAP + -DRAK_4631 -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -DEINK_DISPLAY_MODEL=GxEPD2_213_BN -DEINK_WIDTH=250 @@ -12,7 +15,7 @@ build_flags = ${nrf52840_base.build_flags} -Ivariants/rak_wismeshtap -DWISMESH_T -DMESHTASTIC_EXCLUDE_STOREFORWARD=1 -DMESHTASTIC_EXCLUDE_POWER_TELEMETRY=1 -DMESHTASTIC_EXCLUDE_ATAK=1 -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/rak_wismeshtap> + + + +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/rak_wismeshtap> + + + lib_deps = ${nrf52840_base.lib_deps} ${networking_base.lib_deps} diff --git a/variants/rak_wismeshtap/variant.cpp b/variants/nrf52840/rak_wismeshtap/variant.cpp similarity index 100% rename from variants/rak_wismeshtap/variant.cpp rename to variants/nrf52840/rak_wismeshtap/variant.cpp diff --git a/variants/rak_wismeshtap/variant.h b/variants/nrf52840/rak_wismeshtap/variant.h similarity index 100% rename from variants/rak_wismeshtap/variant.h rename to variants/nrf52840/rak_wismeshtap/variant.h diff --git a/variants/seeed_solar_node/platformio.ini b/variants/nrf52840/seeed_solar_node/platformio.ini similarity index 70% rename from variants/seeed_solar_node/platformio.ini rename to variants/nrf52840/seeed_solar_node/platformio.ini index eb91a435f..b2a128c57 100644 --- a/variants/seeed_solar_node/platformio.ini +++ b/variants/nrf52840/seeed_solar_node/platformio.ini @@ -3,11 +3,12 @@ board = seeed_solar_node extends = nrf52840_base ;board_level = extra build_flags = ${nrf52840_base.build_flags} - -I $PROJECT_DIR/variants/seeed_solar_node + -I variants/nrf52840/seeed_solar_node -D SEEED_SOLAR_NODE - -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 + -I src/platform/nrf52/softdevice + -I src/platform/nrf52/softdevice/nrf52 board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/seeed_solar_node> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/seeed_solar_node> lib_deps = ${nrf52840_base.lib_deps} debug_tool = jlink diff --git a/variants/seeed_solar_node/variant.cpp b/variants/nrf52840/seeed_solar_node/variant.cpp similarity index 100% rename from variants/seeed_solar_node/variant.cpp rename to variants/nrf52840/seeed_solar_node/variant.cpp diff --git a/variants/seeed_solar_node/variant.h b/variants/nrf52840/seeed_solar_node/variant.h similarity index 100% rename from variants/seeed_solar_node/variant.h rename to variants/nrf52840/seeed_solar_node/variant.h diff --git a/variants/seeed_wio_tracker_L1/platformio.ini b/variants/nrf52840/seeed_wio_tracker_L1/platformio.ini similarity index 61% rename from variants/seeed_wio_tracker_L1/platformio.ini rename to variants/nrf52840/seeed_wio_tracker_L1/platformio.ini index 3c4653d7e..6c137384d 100644 --- a/variants/seeed_wio_tracker_L1/platformio.ini +++ b/variants/nrf52840/seeed_wio_tracker_L1/platformio.ini @@ -1,13 +1,13 @@ [env:seeed_wio_tracker_L1] board = seeed_wio_tracker_L1 extends = nrf52840_base -;board_level = extra build_flags = ${nrf52840_base.build_flags} - -I $PROJECT_DIR/variants/seeed_wio_tracker_L1 - -D SEEED_WIO_TRACKER_L1 - -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 + -I variants/nrf52840/seeed_wio_tracker_L1 + -D SEEED_WIO_TRACKER_L1 + -I src/platform/nrf52/softdevice + -I src/platform/nrf52/softdevice/nrf52 board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/seeed_wio_tracker_L1> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/seeed_wio_tracker_L1> lib_deps = ${nrf52840_base.lib_deps} debug_tool = jlink diff --git a/variants/seeed_wio_tracker_L1/variant.cpp b/variants/nrf52840/seeed_wio_tracker_L1/variant.cpp similarity index 100% rename from variants/seeed_wio_tracker_L1/variant.cpp rename to variants/nrf52840/seeed_wio_tracker_L1/variant.cpp diff --git a/variants/seeed_wio_tracker_L1/variant.h b/variants/nrf52840/seeed_wio_tracker_L1/variant.h similarity index 100% rename from variants/seeed_wio_tracker_L1/variant.h rename to variants/nrf52840/seeed_wio_tracker_L1/variant.h diff --git a/variants/seeed_wio_tracker_L1_eink/nicheGraphics.h b/variants/nrf52840/seeed_wio_tracker_L1_eink/nicheGraphics.h similarity index 100% rename from variants/seeed_wio_tracker_L1_eink/nicheGraphics.h rename to variants/nrf52840/seeed_wio_tracker_L1_eink/nicheGraphics.h diff --git a/variants/seeed_wio_tracker_L1_eink/platformio.ini b/variants/nrf52840/seeed_wio_tracker_L1_eink/platformio.ini similarity index 59% rename from variants/seeed_wio_tracker_L1_eink/platformio.ini rename to variants/nrf52840/seeed_wio_tracker_L1_eink/platformio.ini index b310cce83..52ff39d49 100644 --- a/variants/seeed_wio_tracker_L1_eink/platformio.ini +++ b/variants/nrf52840/seeed_wio_tracker_L1_eink/platformio.ini @@ -2,13 +2,15 @@ board = seeed_wio_tracker_L1 extends = nrf52840_base, inkhud ;board_level = extra -build_flags = ${nrf52840_base.build_flags} ${inkhud.build_flags} - -I $PROJECT_DIR/variants/seeed_wio_tracker_L1_eink +build_flags = ${nrf52840_base.build_flags} + ${inkhud.build_flags} + -I variants/nrf52840/seeed_wio_tracker_L1_eink -D SEEED_WIO_TRACKER_L1_EINK -D SEEED_WIO_TRACKER_L1 - -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 + -I src/platform/nrf52/softdevice + -I src/platform/nrf52/softdevice/nrf52 board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/seeed_wio_tracker_L1_eink> ${inkhud.build_src_filter} +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/seeed_wio_tracker_L1_eink> ${inkhud.build_src_filter} lib_deps = ${inkhud.lib_deps} ${nrf52840_base.lib_deps} diff --git a/variants/seeed_wio_tracker_L1_eink/variant.cpp b/variants/nrf52840/seeed_wio_tracker_L1_eink/variant.cpp similarity index 100% rename from variants/seeed_wio_tracker_L1_eink/variant.cpp rename to variants/nrf52840/seeed_wio_tracker_L1_eink/variant.cpp diff --git a/variants/seeed_wio_tracker_L1_eink/variant.h b/variants/nrf52840/seeed_wio_tracker_L1_eink/variant.h similarity index 100% rename from variants/seeed_wio_tracker_L1_eink/variant.h rename to variants/nrf52840/seeed_wio_tracker_L1_eink/variant.h diff --git a/variants/seeed_xiao_nrf52840_kit/platformio.ini b/variants/nrf52840/seeed_xiao_nrf52840_kit/platformio.ini similarity index 66% rename from variants/seeed_xiao_nrf52840_kit/platformio.ini rename to variants/nrf52840/seeed_xiao_nrf52840_kit/platformio.ini index 0e1e94cd5..27352875d 100644 --- a/variants/seeed_xiao_nrf52840_kit/platformio.ini +++ b/variants/nrf52840/seeed_xiao_nrf52840_kit/platformio.ini @@ -2,9 +2,14 @@ [env:seeed_xiao_nrf52840_kit] extends = nrf52840_base board = xiao_ble_sense -build_flags = ${nrf52840_base.build_flags} -Ivariants/seeed_xiao_nrf52840_kit -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 -DSEEED_XIAO_NRF52840_KIT -DGPS_L76K +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/seeed_xiao_nrf52840_kit + -Isrc/platform/nrf52/softdevice + -Isrc/platform/nrf52/softdevice/nrf52 + -DSEEED_XIAO_NRF52840_KIT + -DGPS_L76K board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/seeed_xiao_nrf52840_kit> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/seeed_xiao_nrf52840_kit> lib_deps = ${nrf52840_base.lib_deps} debug_tool = jlink diff --git a/variants/seeed_xiao_nrf52840_kit/variant.cpp b/variants/nrf52840/seeed_xiao_nrf52840_kit/variant.cpp similarity index 100% rename from variants/seeed_xiao_nrf52840_kit/variant.cpp rename to variants/nrf52840/seeed_xiao_nrf52840_kit/variant.cpp diff --git a/variants/seeed_xiao_nrf52840_kit/variant.h b/variants/nrf52840/seeed_xiao_nrf52840_kit/variant.h similarity index 100% rename from variants/seeed_xiao_nrf52840_kit/variant.h rename to variants/nrf52840/seeed_xiao_nrf52840_kit/variant.h diff --git a/variants/t-echo/nicheGraphics.h b/variants/nrf52840/t-echo/nicheGraphics.h similarity index 100% rename from variants/t-echo/nicheGraphics.h rename to variants/nrf52840/t-echo/nicheGraphics.h diff --git a/variants/t-echo/platformio.ini b/variants/nrf52840/t-echo/platformio.ini similarity index 89% rename from variants/t-echo/platformio.ini rename to variants/nrf52840/t-echo/platformio.ini index 85c3b5799..b80958d5d 100644 --- a/variants/t-echo/platformio.ini +++ b/variants/nrf52840/t-echo/platformio.ini @@ -6,7 +6,8 @@ board_check = true debug_tool = jlink # add -DCFG_SYSVIEW if you want to use the Segger systemview tool for OS profiling. -build_flags = ${nrf52840_base.build_flags} -Ivariants/t-echo +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/t-echo -DGPS_POWER_TOGGLE -DEINK_DISPLAY_MODEL=GxEPD2_154_D67 -DEINK_WIDTH=200 @@ -16,7 +17,7 @@ build_flags = ${nrf52840_base.build_flags} -Ivariants/t-echo -DEINK_LIMIT_FASTREFRESH=20 ; How many consecutive fast-refreshes are permitted -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> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/t-echo> lib_deps = ${nrf52840_base.lib_deps} https://github.com/meshtastic/GxEPD2/archive/55f618961db45a23eff0233546430f1e5a80f63a.zip @@ -31,11 +32,11 @@ debug_tool = jlink build_flags = ${nrf52840_base.build_flags} ${inkhud.build_flags} - -I variants/t-echo + -I variants/nrf52840/t-echo build_src_filter = ${nrf52_base.build_src_filter} ${inkhud.build_src_filter} - +<../variants/t-echo> + +<../variants/nrf52840/t-echo> lib_deps = ${inkhud.lib_deps} ; InkHUD libs first, so we get GFXRoot instead of AdafruitGFX ${nrf52840_base.lib_deps} diff --git a/variants/t-echo/variant.cpp b/variants/nrf52840/t-echo/variant.cpp similarity index 100% rename from variants/t-echo/variant.cpp rename to variants/nrf52840/t-echo/variant.cpp diff --git a/variants/t-echo/variant.h b/variants/nrf52840/t-echo/variant.h similarity index 100% rename from variants/t-echo/variant.h rename to variants/nrf52840/t-echo/variant.h diff --git a/variants/tracker-t1000-e/platformio.ini b/variants/nrf52840/tracker-t1000-e/platformio.ini similarity index 78% rename from variants/tracker-t1000-e/platformio.ini rename to variants/nrf52840/tracker-t1000-e/platformio.ini index b1f11d524..45c8c5d00 100644 --- a/variants/tracker-t1000-e/platformio.ini +++ b/variants/nrf52840/tracker-t1000-e/platformio.ini @@ -1,7 +1,11 @@ [env:tracker-t1000-e] extends = nrf52840_base board = tracker-t1000-e -build_flags = ${nrf52840_base.build_flags} -Ivariants/tracker-t1000-e -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 -DTRACKER_T1000_E +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/tracker-t1000-e + -Isrc/platform/nrf52/softdevice + -Isrc/platform/nrf52/softdevice/nrf52 + -DTRACKER_T1000_E -DGPS_POWER_TOGGLE -DMESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR_EXTERNAL=1 -DMESHTASTIC_EXCLUDE_CANNEDMESSAGES=1 @@ -9,7 +13,7 @@ build_flags = ${nrf52840_base.build_flags} -Ivariants/tracker-t1000-e -Isrc/plat -DMESHTASTIC_EXCLUDE_DETECTIONSENSOR=1 -DMESHTASTIC_EXCLUDE_WIFI=1 board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/tracker-t1000-e> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/tracker-t1000-e> lib_deps = ${nrf52840_base.lib_deps} https://github.com/meshtastic/QMA6100P_Arduino_Library/archive/14c900b8b2e4feaac5007a7e41e0c1b7f0841136.zip diff --git a/variants/tracker-t1000-e/rfswitch.h b/variants/nrf52840/tracker-t1000-e/rfswitch.h similarity index 100% rename from variants/tracker-t1000-e/rfswitch.h rename to variants/nrf52840/tracker-t1000-e/rfswitch.h diff --git a/variants/tracker-t1000-e/variant.cpp b/variants/nrf52840/tracker-t1000-e/variant.cpp similarity index 100% rename from variants/tracker-t1000-e/variant.cpp rename to variants/nrf52840/tracker-t1000-e/variant.cpp diff --git a/variants/tracker-t1000-e/variant.h b/variants/nrf52840/tracker-t1000-e/variant.h similarity index 100% rename from variants/tracker-t1000-e/variant.h rename to variants/nrf52840/tracker-t1000-e/variant.h diff --git a/variants/wio-sdk-wm1110/platformio.ini b/variants/nrf52840/wio-sdk-wm1110/platformio.ini similarity index 80% rename from variants/wio-sdk-wm1110/platformio.ini rename to variants/nrf52840/wio-sdk-wm1110/platformio.ini index 4e1415678..2c65246b8 100644 --- a/variants/wio-sdk-wm1110/platformio.ini +++ b/variants/nrf52840/wio-sdk-wm1110/platformio.ini @@ -4,16 +4,20 @@ extends = nrf52840_base board = wio-sdk-wm1110 extra_scripts = - bin/platformio-custom.py + ${env.extra_scripts} extra_scripts/disable_adafruit_usb.py # Remove adafruit USB serial from the build (it is incompatible with using the ch340 serial chip on this board) build_unflags = ${nrf52840_base:build_unflags} -DUSBCON -DUSE_TINYUSB -build_flags = ${nrf52840_base.build_flags} -Ivariants/wio-sdk-wm1110 -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 -DWIO_WM1110 +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/wio-sdk-wm1110 + -Isrc/platform/nrf52/softdevice + -Isrc/platform/nrf52/softdevice/nrf52 + -DWIO_WM1110 -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -DCFG_TUD_CDC=0 board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/wio-sdk-wm1110> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/wio-sdk-wm1110> ;debug_tool = jlink debug_tool = stlink diff --git a/variants/wio-sdk-wm1110/rfswitch.h b/variants/nrf52840/wio-sdk-wm1110/rfswitch.h similarity index 100% rename from variants/wio-sdk-wm1110/rfswitch.h rename to variants/nrf52840/wio-sdk-wm1110/rfswitch.h diff --git a/variants/wio-sdk-wm1110/variant.cpp b/variants/nrf52840/wio-sdk-wm1110/variant.cpp similarity index 100% rename from variants/wio-sdk-wm1110/variant.cpp rename to variants/nrf52840/wio-sdk-wm1110/variant.cpp diff --git a/variants/wio-sdk-wm1110/variant.h b/variants/nrf52840/wio-sdk-wm1110/variant.h similarity index 100% rename from variants/wio-sdk-wm1110/variant.h rename to variants/nrf52840/wio-sdk-wm1110/variant.h diff --git a/variants/wio-t1000-s/platformio.ini b/variants/nrf52840/wio-t1000-s/platformio.ini similarity index 77% rename from variants/wio-t1000-s/platformio.ini rename to variants/nrf52840/wio-t1000-s/platformio.ini index 2eab1e1c5..3594bcf07 100644 --- a/variants/wio-t1000-s/platformio.ini +++ b/variants/nrf52840/wio-t1000-s/platformio.ini @@ -3,10 +3,14 @@ extends = nrf52840_base board = wio-t1000-s board_level = extra -build_flags = ${nrf52840_base.build_flags} -Ivariants/wio-t1000-s -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 -DWIO_WM1110 +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/wio-t1000-s + -Isrc/platform/nrf52/softdevice + -Isrc/platform/nrf52/softdevice/nrf52 + -DWIO_WM1110 -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/wio-t1000-s> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/wio-t1000-s> lib_deps = ${nrf52840_base.lib_deps} debug_tool = jlink diff --git a/variants/wio-t1000-s/rfswitch.h b/variants/nrf52840/wio-t1000-s/rfswitch.h similarity index 100% rename from variants/wio-t1000-s/rfswitch.h rename to variants/nrf52840/wio-t1000-s/rfswitch.h diff --git a/variants/wio-t1000-s/variant.cpp b/variants/nrf52840/wio-t1000-s/variant.cpp similarity index 100% rename from variants/wio-t1000-s/variant.cpp rename to variants/nrf52840/wio-t1000-s/variant.cpp diff --git a/variants/wio-t1000-s/variant.h b/variants/nrf52840/wio-t1000-s/variant.h similarity index 100% rename from variants/wio-t1000-s/variant.h rename to variants/nrf52840/wio-t1000-s/variant.h diff --git a/variants/wio-tracker-wm1110/platformio.ini b/variants/nrf52840/wio-tracker-wm1110/platformio.ini similarity index 73% rename from variants/wio-tracker-wm1110/platformio.ini rename to variants/nrf52840/wio-tracker-wm1110/platformio.ini index a6960b435..b383043bb 100644 --- a/variants/wio-tracker-wm1110/platformio.ini +++ b/variants/nrf52840/wio-tracker-wm1110/platformio.ini @@ -2,10 +2,14 @@ [env:wio-tracker-wm1110] extends = nrf52840_base board = wio-tracker-wm1110 -build_flags = ${nrf52840_base.build_flags} -Ivariants/wio-tracker-wm1110 -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 -DWIO_WM1110 +build_flags = ${nrf52840_base.build_flags} + -Ivariants/nrf52840/wio-tracker-wm1110 + -Isrc/platform/nrf52/softdevice + -Isrc/platform/nrf52/softdevice/nrf52 + -DWIO_WM1110 -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/wio-tracker-wm1110> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/wio-tracker-wm1110> lib_deps = ${nrf52840_base.lib_deps} ; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm) diff --git a/variants/wio-tracker-wm1110/rfswitch.h b/variants/nrf52840/wio-tracker-wm1110/rfswitch.h similarity index 100% rename from variants/wio-tracker-wm1110/rfswitch.h rename to variants/nrf52840/wio-tracker-wm1110/rfswitch.h diff --git a/variants/wio-tracker-wm1110/variant.cpp b/variants/nrf52840/wio-tracker-wm1110/variant.cpp similarity index 100% rename from variants/wio-tracker-wm1110/variant.cpp rename to variants/nrf52840/wio-tracker-wm1110/variant.cpp diff --git a/variants/wio-tracker-wm1110/variant.h b/variants/nrf52840/wio-tracker-wm1110/variant.h similarity index 100% rename from variants/wio-tracker-wm1110/variant.h rename to variants/nrf52840/wio-tracker-wm1110/variant.h From 29449a71d46daf3430868689521d8b642a82c7b4 Mon Sep 17 00:00:00 2001 From: whywilson Date: Mon, 21 Jul 2025 06:49:08 +0800 Subject: [PATCH 45/45] When outputting RTTTL ringtones, you can still hear a periodic buzzing sound. This problem is fixed in this commit. --- src/modules/ExternalNotificationModule.cpp | 32 +++++++++++++++------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/modules/ExternalNotificationModule.cpp b/src/modules/ExternalNotificationModule.cpp index 5d7233279..1f871f87e 100644 --- a/src/modules/ExternalNotificationModule.cpp +++ b/src/modules/ExternalNotificationModule.cpp @@ -126,9 +126,11 @@ int32_t ExternalNotificationModule::runOnce() millis()) { setExternalState(1, !getExternal(1)); } - if (externalTurnedOn[2] + (moduleConfig.external_notification.output_ms ? moduleConfig.external_notification.output_ms + // Only toggle buzzer output if not using PWM mode (to avoid conflict with RTTTL) + if (!moduleConfig.external_notification.use_pwm && + externalTurnedOn[2] + (moduleConfig.external_notification.output_ms ? moduleConfig.external_notification.output_ms : EXT_NOTIFICATION_MODULE_OUTPUT_MS) < - millis()) { + millis()) { LOG_DEBUG("EXTERNAL 2 %d compared to %d", externalTurnedOn[2] + moduleConfig.external_notification.output_ms, millis()); setExternalState(2, !getExternal(2)); @@ -247,7 +249,8 @@ void ExternalNotificationModule::setExternalState(uint8_t index, bool on) digitalWrite(moduleConfig.external_notification.output_vibra, on); break; case 2: - if (moduleConfig.external_notification.output_buzzer) + // Only control buzzer pin digitally if not using PWM mode + if (moduleConfig.external_notification.output_buzzer && !moduleConfig.external_notification.use_pwm) digitalWrite(moduleConfig.external_notification.output_buzzer, on); break; default: @@ -320,6 +323,11 @@ void ExternalNotificationModule::stopNow() #endif nagCycleCutoff = 1; // small value isNagging = false; + // Turn off all outputs + for (int i = 0; i < 3; i++) { + setExternalState(i, false); + externalTurnedOn[i] = 0; + } setIntervalFromNow(0); #ifdef T_WATCH_S3 drv.stop(); @@ -478,14 +486,17 @@ ProcessMessage ExternalNotificationModule::handleReceived(const meshtastic_MeshP if (containsBell) { LOG_INFO("externalNotificationModule - Notification Bell (Buzzer)"); isNagging = true; - if (!moduleConfig.external_notification.use_pwm) { + if (!moduleConfig.external_notification.use_pwm && !moduleConfig.external_notification.use_i2s_as_buzzer) { setExternalState(2, true); } else { #ifdef HAS_I2S - audioThread->beginRttl(rtttlConfig.ringtone, strlen_P(rtttlConfig.ringtone)); -#else - rtttl::begin(config.device.buzzer_gpio, rtttlConfig.ringtone); + if (moduleConfig.external_notification.use_i2s_as_buzzer) { + audioThread->beginRttl(rtttlConfig.ringtone, strlen_P(rtttlConfig.ringtone)); + } else #endif + if (moduleConfig.external_notification.use_pwm) { + rtttl::begin(config.device.buzzer_gpio, rtttlConfig.ringtone); + } } if (moduleConfig.external_notification.nag_timeout) { nagCycleCutoff = millis() + moduleConfig.external_notification.nag_timeout * 1000; @@ -526,10 +537,11 @@ ProcessMessage ExternalNotificationModule::handleReceived(const meshtastic_MeshP #ifdef HAS_I2S if (moduleConfig.external_notification.use_i2s_as_buzzer) { audioThread->beginRttl(rtttlConfig.ringtone, strlen_P(rtttlConfig.ringtone)); - } -#else - rtttl::begin(config.device.buzzer_gpio, rtttlConfig.ringtone); + } else #endif + if (moduleConfig.external_notification.use_pwm) { + rtttl::begin(config.device.buzzer_gpio, rtttlConfig.ringtone); + } } if (moduleConfig.external_notification.nag_timeout) { nagCycleCutoff = millis() + moduleConfig.external_notification.nag_timeout * 1000;