Merge branch 'master' into feature/veml7700
This commit is contained in:
@@ -16,6 +16,9 @@ body:
|
|||||||
options:
|
options:
|
||||||
- NRF52
|
- NRF52
|
||||||
- ESP32
|
- ESP32
|
||||||
|
- RP2040
|
||||||
|
- Linux Native
|
||||||
|
- other
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: textarea
|
- type: textarea
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ runs:
|
|||||||
using: "composite"
|
using: "composite"
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: "recursive"
|
submodules: "recursive"
|
||||||
ref: ${{github.event.pull_request.head.ref}}
|
ref: ${{github.event.pull_request.head.ref}}
|
||||||
@@ -30,12 +30,12 @@ runs:
|
|||||||
sudo apt-get install -y libyaml-cpp-dev
|
sudo apt-get install -y libyaml-cpp-dev
|
||||||
|
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: 3.x
|
python-version: 3.x
|
||||||
|
|
||||||
- name: Cache python libs
|
- name: Cache python libs
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v4
|
||||||
id: cache-pip # needed in if test
|
id: cache-pip # needed in if test
|
||||||
with:
|
with:
|
||||||
path: ~/.cache/pip
|
path: ~/.cache/pip
|
||||||
|
|||||||
@@ -11,13 +11,13 @@ jobs:
|
|||||||
build-esp32:
|
build-esp32:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: Build base
|
- name: Build base
|
||||||
id: base
|
id: base
|
||||||
uses: ./.github/actions/setup-base
|
uses: ./.github/actions/setup-base
|
||||||
|
|
||||||
- name: Pull web ui
|
- name: Pull web ui
|
||||||
uses: dsaltares/fetch-gh-release-asset@a40c8b4a0471f9ab81bdf73a010f74cc51476ad4
|
uses: dsaltares/fetch-gh-release-asset@master
|
||||||
with:
|
with:
|
||||||
repo: meshtastic/web
|
repo: meshtastic/web
|
||||||
file: build.tar
|
file: build.tar
|
||||||
@@ -41,7 +41,7 @@ jobs:
|
|||||||
run: bin/build-esp32.sh ${{ inputs.board }}
|
run: bin/build-esp32.sh ${{ inputs.board }}
|
||||||
|
|
||||||
- name: Pull OTA Firmware
|
- name: Pull OTA Firmware
|
||||||
uses: dsaltares/fetch-gh-release-asset@a40c8b4a0471f9ab81bdf73a010f74cc51476ad4
|
uses: dsaltares/fetch-gh-release-asset@master
|
||||||
with:
|
with:
|
||||||
repo: meshtastic/firmware-ota
|
repo: meshtastic/firmware-ota
|
||||||
file: firmware.bin
|
file: firmware.bin
|
||||||
@@ -54,9 +54,10 @@ jobs:
|
|||||||
id: version
|
id: version
|
||||||
|
|
||||||
- name: Store binaries as an artifact
|
- name: Store binaries as an artifact
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: firmware-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip
|
name: firmware-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip
|
||||||
|
overwrite: true
|
||||||
path: |
|
path: |
|
||||||
release/*.bin
|
release/*.bin
|
||||||
release/*.elf
|
release/*.elf
|
||||||
@@ -13,13 +13,13 @@ jobs:
|
|||||||
build-esp32-c3:
|
build-esp32-c3:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: Build base
|
- name: Build base
|
||||||
id: base
|
id: base
|
||||||
uses: ./.github/actions/setup-base
|
uses: ./.github/actions/setup-base
|
||||||
|
|
||||||
- name: Pull web ui
|
- name: Pull web ui
|
||||||
uses: dsaltares/fetch-gh-release-asset@a40c8b4a0471f9ab81bdf73a010f74cc51476ad4
|
uses: dsaltares/fetch-gh-release-asset@master
|
||||||
with:
|
with:
|
||||||
repo: meshtastic/web
|
repo: meshtastic/web
|
||||||
file: build.tar
|
file: build.tar
|
||||||
@@ -41,7 +41,7 @@ jobs:
|
|||||||
run: bin/build-esp32.sh ${{ inputs.board }}
|
run: bin/build-esp32.sh ${{ inputs.board }}
|
||||||
|
|
||||||
- name: Pull OTA Firmware
|
- name: Pull OTA Firmware
|
||||||
uses: dsaltares/fetch-gh-release-asset@a40c8b4a0471f9ab81bdf73a010f74cc51476ad4
|
uses: dsaltares/fetch-gh-release-asset@master
|
||||||
with:
|
with:
|
||||||
repo: meshtastic/firmware-ota
|
repo: meshtastic/firmware-ota
|
||||||
file: firmware-c3.bin
|
file: firmware-c3.bin
|
||||||
@@ -54,9 +54,10 @@ jobs:
|
|||||||
id: version
|
id: version
|
||||||
|
|
||||||
- name: Store binaries as an artifact
|
- name: Store binaries as an artifact
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: firmware-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip
|
name: firmware-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip
|
||||||
|
overwrite: true
|
||||||
path: |
|
path: |
|
||||||
release/*.bin
|
release/*.bin
|
||||||
release/*.elf
|
release/*.elf
|
||||||
@@ -11,13 +11,13 @@ jobs:
|
|||||||
build-esp32-s3:
|
build-esp32-s3:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: Build base
|
- name: Build base
|
||||||
id: base
|
id: base
|
||||||
uses: ./.github/actions/setup-base
|
uses: ./.github/actions/setup-base
|
||||||
|
|
||||||
- name: Pull web ui
|
- name: Pull web ui
|
||||||
uses: dsaltares/fetch-gh-release-asset@a40c8b4a0471f9ab81bdf73a010f74cc51476ad4
|
uses: dsaltares/fetch-gh-release-asset@master
|
||||||
with:
|
with:
|
||||||
repo: meshtastic/web
|
repo: meshtastic/web
|
||||||
file: build.tar
|
file: build.tar
|
||||||
@@ -39,7 +39,7 @@ jobs:
|
|||||||
run: bin/build-esp32.sh ${{ inputs.board }}
|
run: bin/build-esp32.sh ${{ inputs.board }}
|
||||||
|
|
||||||
- name: Pull OTA Firmware
|
- name: Pull OTA Firmware
|
||||||
uses: dsaltares/fetch-gh-release-asset@a40c8b4a0471f9ab81bdf73a010f74cc51476ad4
|
uses: dsaltares/fetch-gh-release-asset@master
|
||||||
with:
|
with:
|
||||||
repo: meshtastic/firmware-ota
|
repo: meshtastic/firmware-ota
|
||||||
file: firmware-s3.bin
|
file: firmware-s3.bin
|
||||||
@@ -52,9 +52,10 @@ jobs:
|
|||||||
id: version
|
id: version
|
||||||
|
|
||||||
- name: Store binaries as an artifact
|
- name: Store binaries as an artifact
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: firmware-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip
|
name: firmware-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip
|
||||||
|
overwrite: true
|
||||||
path: |
|
path: |
|
||||||
release/*.bin
|
release/*.bin
|
||||||
release/*.elf
|
release/*.elf
|
||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
build-nrf52:
|
build-nrf52:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: Build base
|
- name: Build base
|
||||||
id: base
|
id: base
|
||||||
uses: ./.github/actions/setup-base
|
uses: ./.github/actions/setup-base
|
||||||
@@ -24,9 +24,10 @@ jobs:
|
|||||||
id: version
|
id: version
|
||||||
|
|
||||||
- name: Store binaries as an artifact
|
- name: Store binaries as an artifact
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: firmware-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip
|
name: firmware-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip
|
||||||
|
overwrite: true
|
||||||
path: |
|
path: |
|
||||||
release/*.uf2
|
release/*.uf2
|
||||||
release/*.elf
|
release/*.elf
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
runs-on: [self-hosted, linux, ARM64]
|
runs-on: [self-hosted, linux, ARM64]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
ref: ${{github.event.pull_request.head.ref}}
|
ref: ${{github.event.pull_request.head.ref}}
|
||||||
@@ -37,9 +37,10 @@ jobs:
|
|||||||
id: version
|
id: version
|
||||||
|
|
||||||
- name: Store binaries as an artifact
|
- name: Store binaries as an artifact
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: firmware-raspbian-${{ steps.version.outputs.version }}.zip
|
name: firmware-raspbian-${{ steps.version.outputs.version }}.zip
|
||||||
|
overwrite: true
|
||||||
path: |
|
path: |
|
||||||
release/meshtasticd_linux_aarch64
|
release/meshtasticd_linux_aarch64
|
||||||
bin/config-dist.yaml
|
bin/config-dist.yaml
|
||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
build-rpi2040:
|
build-rpi2040:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: Build base
|
- name: Build base
|
||||||
id: base
|
id: base
|
||||||
uses: ./.github/actions/setup-base
|
uses: ./.github/actions/setup-base
|
||||||
@@ -24,9 +24,10 @@ jobs:
|
|||||||
id: version
|
id: version
|
||||||
|
|
||||||
- name: Store binaries as an artifact
|
- name: Store binaries as an artifact
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: firmware-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip
|
name: firmware-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip
|
||||||
|
overwrite: true
|
||||||
path: |
|
path: |
|
||||||
release/*.uf2
|
release/*.uf2
|
||||||
release/*.elf
|
release/*.elf
|
||||||
@@ -8,7 +8,7 @@ on:
|
|||||||
branches: [master, develop]
|
branches: [master, develop]
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- "**.md"
|
- "**.md"
|
||||||
- "version.properties"
|
- version.properties
|
||||||
|
|
||||||
# Note: This is different from "pull_request". Need to specify ref when doing checkouts.
|
# Note: This is different from "pull_request". Need to specify ref when doing checkouts.
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
@@ -20,128 +20,90 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check:
|
setup:
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
arch: [esp32, esp32s3, esp32c3, nrf52840, rp2040, check]
|
||||||
- board: rak11200
|
runs-on: ubuntu-latest
|
||||||
- board: tlora-v2-1-1_6
|
steps:
|
||||||
- board: tbeam
|
- id: checkout
|
||||||
- board: heltec-v2_1
|
uses: actions/checkout@v4
|
||||||
- board: meshtastic-diy-v1
|
name: Checkout base
|
||||||
- board: rak4631
|
- id: jsonStep
|
||||||
- board: t-echo
|
run: |
|
||||||
- board: station-g2
|
TARGETS=$(./bin/generate_ci_matrix.py ${{matrix.arch}})
|
||||||
- board: m5stack-coreink
|
echo "$TARGETS"
|
||||||
- board: tbeam-s3-core
|
echo "${{matrix.arch}}=$(jq -cn --argjson environments "$TARGETS" '{board: $environments}')" >> $GITHUB_OUTPUT
|
||||||
- board: tlora-t3s3-v1
|
outputs:
|
||||||
- board: t-watch-s3
|
esp32: ${{ steps.jsonStep.outputs.esp32 }}
|
||||||
- board: t-deck
|
esp32s3: ${{ steps.jsonStep.outputs.esp32s3 }}
|
||||||
#- board: rak11310
|
esp32c3: ${{ steps.jsonStep.outputs.esp32c3 }}
|
||||||
|
nrf52840: ${{ steps.jsonStep.outputs.nrf52840 }}
|
||||||
|
rp2040: ${{ steps.jsonStep.outputs.rp2040 }}
|
||||||
|
check: ${{ steps.jsonStep.outputs.check }}
|
||||||
|
|
||||||
|
check:
|
||||||
|
needs: setup
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix: ${{ fromJson(needs.setup.outputs.check) }}
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: Build base
|
- name: Build base
|
||||||
id: base
|
id: base
|
||||||
uses: ./.github/actions/setup-base
|
uses: ./.github/actions/setup-base
|
||||||
|
|
||||||
- name: Trunk Check
|
- name: Trunk Check
|
||||||
if: ${{ github.event_name != 'workflow_dispatch' }}
|
if: ${{ github.event_name != 'workflow_dispatch' }}
|
||||||
uses: trunk-io/trunk-action@782e83f803ca6e369f035d64c6ba2768174ba61b
|
uses: trunk-io/trunk-action@v1
|
||||||
|
|
||||||
- name: Check ${{ matrix.board }}
|
- name: Check ${{ matrix.board }}
|
||||||
run: bin/check-all.sh ${{ matrix.board }}
|
run: bin/check-all.sh ${{ matrix.board }}
|
||||||
|
|
||||||
build-esp32:
|
build-esp32:
|
||||||
|
needs: setup
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix: ${{ fromJson(needs.setup.outputs.esp32) }}
|
||||||
include:
|
|
||||||
- board: rak11200
|
|
||||||
- board: tlora-v2
|
|
||||||
- board: tlora-v1
|
|
||||||
- board: tlora_v1_3
|
|
||||||
- board: tlora-v2-1-1_6
|
|
||||||
- board: tlora-v2-1-1_6-tcxo
|
|
||||||
- board: tlora-v2-1-1_8
|
|
||||||
- board: tbeam
|
|
||||||
- board: heltec-v2_0
|
|
||||||
- board: heltec-v2_1
|
|
||||||
- board: tbeam0_7
|
|
||||||
- board: meshtastic-diy-v1
|
|
||||||
- board: hydra
|
|
||||||
- board: meshtastic-dr-dev
|
|
||||||
- board: nano-g1
|
|
||||||
- board: station-g1
|
|
||||||
- board: m5stack-core
|
|
||||||
- board: m5stack-coreink
|
|
||||||
- board: nano-g1-explorer
|
|
||||||
- board: chatter2
|
|
||||||
uses: ./.github/workflows/build_esp32.yml
|
uses: ./.github/workflows/build_esp32.yml
|
||||||
with:
|
with:
|
||||||
board: ${{ matrix.board }}
|
board: ${{ matrix.board }}
|
||||||
|
|
||||||
build-esp32-s3:
|
build-esp32-s3:
|
||||||
|
needs: setup
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix: ${{ fromJson(needs.setup.outputs.esp32s3) }}
|
||||||
include:
|
|
||||||
- board: heltec-v3
|
|
||||||
- board: heltec-wsl-v3
|
|
||||||
- board: heltec-wireless-tracker
|
|
||||||
- board: heltec-wireless-tracker-V1-0
|
|
||||||
- board: heltec-wireless-paper-v1_0
|
|
||||||
- board: heltec-wireless-paper #v1.1
|
|
||||||
- board: tbeam-s3-core
|
|
||||||
- board: tlora-t3s3-v1
|
|
||||||
- board: t-watch-s3
|
|
||||||
- board: t-deck
|
|
||||||
- board: picomputer-s3
|
|
||||||
- board: station-g2
|
|
||||||
- board: unphone
|
|
||||||
uses: ./.github/workflows/build_esp32_s3.yml
|
uses: ./.github/workflows/build_esp32_s3.yml
|
||||||
with:
|
with:
|
||||||
board: ${{ matrix.board }}
|
board: ${{ matrix.board }}
|
||||||
|
|
||||||
build-esp32-c3:
|
build-esp32-c3:
|
||||||
|
needs: setup
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix: ${{ fromJson(needs.setup.outputs.esp32c3) }}
|
||||||
include:
|
|
||||||
- board: heltec-ht62-esp32c3-sx1262
|
|
||||||
uses: ./.github/workflows/build_esp32_c3.yml
|
uses: ./.github/workflows/build_esp32_c3.yml
|
||||||
with:
|
with:
|
||||||
board: ${{ matrix.board }}
|
board: ${{ matrix.board }}
|
||||||
|
|
||||||
build-nrf52:
|
build-nrf52:
|
||||||
|
needs: setup
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix: ${{ fromJson(needs.setup.outputs.nrf52840) }}
|
||||||
include:
|
|
||||||
- board: rak4631
|
|
||||||
- board: rak4631_eink
|
|
||||||
- board: monteops_hw1
|
|
||||||
- board: t-echo
|
|
||||||
- board: canaryone
|
|
||||||
- board: pca10059_diy_eink
|
|
||||||
- board: feather_diy
|
|
||||||
- board: nano-g2-ultra
|
|
||||||
uses: ./.github/workflows/build_nrf52.yml
|
uses: ./.github/workflows/build_nrf52.yml
|
||||||
with:
|
with:
|
||||||
board: ${{ matrix.board }}
|
board: ${{ matrix.board }}
|
||||||
|
|
||||||
build-rpi2040:
|
build-rpi2040:
|
||||||
|
needs: setup
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix: ${{ fromJson(needs.setup.outputs.rp2040) }}
|
||||||
include:
|
|
||||||
- board: pico
|
|
||||||
- board: picow
|
|
||||||
- board: rak11310
|
|
||||||
- board: senselora_rp2040
|
|
||||||
- board: rp2040-lora
|
|
||||||
uses: ./.github/workflows/build_rpi2040.yml
|
uses: ./.github/workflows/build_rpi2040.yml
|
||||||
with:
|
with:
|
||||||
board: ${{ matrix.board }}
|
board: ${{ matrix.board }}
|
||||||
@@ -158,7 +120,7 @@ jobs:
|
|||||||
build-native:
|
build-native:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: Build base
|
- name: Build base
|
||||||
id: base
|
id: base
|
||||||
uses: ./.github/actions/setup-base
|
uses: ./.github/actions/setup-base
|
||||||
@@ -181,27 +143,27 @@ jobs:
|
|||||||
id: version
|
id: version
|
||||||
|
|
||||||
- name: Store binaries as an artifact
|
- name: Store binaries as an artifact
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: firmware-native-${{ steps.version.outputs.version }}.zip
|
name: firmware-native-${{ steps.version.outputs.version }}.zip
|
||||||
|
overwrite: true
|
||||||
path: |
|
path: |
|
||||||
release/device-*.sh
|
release/device-*.sh
|
||||||
release/device-*.bat
|
release/device-*.bat
|
||||||
|
|
||||||
- name: Docker login
|
- name: Docker login
|
||||||
if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }}
|
if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }}
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: meshtastic
|
username: meshtastic
|
||||||
password: ${{ secrets.DOCKER_TOKEN }}
|
password: ${{ secrets.DOCKER_TOKEN }}
|
||||||
|
|
||||||
- name: Docker setup
|
- name: Docker setup
|
||||||
if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }}
|
if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }}
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
- name: Docker build and push tagged versions
|
- name: Docker build and push tagged versions
|
||||||
if: ${{ github.event_name == 'workflow_dispatch' }}
|
if: ${{ github.event_name == 'workflow_dispatch' }}
|
||||||
uses: docker/build-push-action@v3
|
uses: docker/build-push-action@v5
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
@@ -210,7 +172,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Docker build and push
|
- name: Docker build and push
|
||||||
if: ${{ github.ref == 'refs/heads/master' && github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }}
|
if: ${{ github.ref == 'refs/heads/master' && github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }}
|
||||||
uses: docker/build-push-action@v3
|
uses: docker/build-push-action@v5
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
@@ -222,7 +184,7 @@ jobs:
|
|||||||
needs: [check]
|
needs: [check]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
ref: ${{github.event.pull_request.head.ref}}
|
ref: ${{github.event.pull_request.head.ref}}
|
||||||
repository: ${{github.event.pull_request.head.repo.full_name}}
|
repository: ${{github.event.pull_request.head.repo.full_name}}
|
||||||
@@ -245,14 +207,15 @@ jobs:
|
|||||||
]
|
]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
ref: ${{github.event.pull_request.head.ref}}
|
ref: ${{github.event.pull_request.head.ref}}
|
||||||
repository: ${{github.event.pull_request.head.repo.full_name}}
|
repository: ${{github.event.pull_request.head.repo.full_name}}
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
path: ./
|
path: ./
|
||||||
|
merge-multiple: true
|
||||||
|
|
||||||
- name: Display structure of downloaded files
|
- name: Display structure of downloaded files
|
||||||
run: ls -R
|
run: ls -R
|
||||||
@@ -262,25 +225,30 @@ jobs:
|
|||||||
id: version
|
id: version
|
||||||
|
|
||||||
- name: Move files up
|
- name: Move files up
|
||||||
run: mv -b -t ./ ./*tbeam-2*/littlefs*.bin ./*tbeam-2*/bleota.bin ./*tbeam-s3*/bleota-s3.bin ./*esp32c3*/bleota-c3.bin ./**/firmware*.bin ./*t-echo*/Meshtastic_nRF52_factory_erase_v2.uf2 ./**/firmware-*.uf2 ./**/firmware-*-ota.zip ./**/*.elf ./*native*/*device-*.sh ./*native*/*device-*.bat ./firmware-raspbian-*/release/meshtasticd_linux_aarch64 ./firmware-raspbian-*/bin/config-dist.yaml
|
run: mv -b -t ./ ./release/meshtasticd_linux_aarch64 ./bin/config-dist.yaml
|
||||||
|
|
||||||
- name: Repackage in single firmware zip
|
- name: Repackage in single firmware zip
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: firmware-${{ steps.version.outputs.version }}
|
name: firmware-${{ steps.version.outputs.version }}
|
||||||
|
overwrite: true
|
||||||
path: |
|
path: |
|
||||||
./*.bin
|
./firmware-*.bin
|
||||||
./*.uf2
|
./firmware-*.uf2
|
||||||
./firmware-*-ota.zip
|
./firmware-*-ota.zip
|
||||||
./device-*.sh
|
./device-*.sh
|
||||||
./device-*.bat
|
./device-*.bat
|
||||||
./meshtasticd_linux_arm64
|
./meshtasticd_linux_*64
|
||||||
./config-dist.yaml
|
./config-dist.yaml
|
||||||
|
./littlefs-*.bin
|
||||||
|
./bleota*bin
|
||||||
|
./Meshtastic_nRF52_factory_erase*.uf2
|
||||||
retention-days: 90
|
retention-days: 90
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: firmware-${{ steps.version.outputs.version }}
|
name: firmware-${{ steps.version.outputs.version }}
|
||||||
|
merge-multiple: true
|
||||||
path: ./output
|
path: ./output
|
||||||
|
|
||||||
# For diagnostics
|
# For diagnostics
|
||||||
@@ -296,9 +264,10 @@ jobs:
|
|||||||
run: zip -j -9 -r ./firmware-${{ steps.version.outputs.version }}.zip ./output
|
run: zip -j -9 -r ./firmware-${{ steps.version.outputs.version }}.zip ./output
|
||||||
|
|
||||||
- name: Repackage in single elfs zip
|
- name: Repackage in single elfs zip
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: debug-elfs-${{ steps.version.outputs.version }}.zip
|
name: debug-elfs-${{ steps.version.outputs.version }}.zip
|
||||||
|
overwrite: true
|
||||||
path: ./*.elf
|
path: ./*.elf
|
||||||
retention-days: 30
|
retention-days: 30
|
||||||
|
|
||||||
@@ -320,10 +289,10 @@ jobs:
|
|||||||
needs: [gather-artifacts, after-checks]
|
needs: [gather-artifacts, after-checks]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: 3.x
|
python-version: 3.x
|
||||||
|
|
||||||
@@ -331,13 +300,15 @@ jobs:
|
|||||||
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
|
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
|
||||||
id: version
|
id: version
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: firmware-${{ steps.version.outputs.version }}
|
name: firmware-${{ steps.version.outputs.version }}
|
||||||
|
merge-multiple: true
|
||||||
path: ./output
|
path: ./output
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
|
merge-multiple: true
|
||||||
name: artifact-deb
|
name: artifact-deb
|
||||||
|
|
||||||
- name: Display structure of downloaded files
|
- name: Display structure of downloaded files
|
||||||
@@ -351,9 +322,10 @@ jobs:
|
|||||||
- name: Zip firmware
|
- name: Zip firmware
|
||||||
run: zip -j -9 -r ./firmware-${{ steps.version.outputs.version }}.zip ./output
|
run: zip -j -9 -r ./firmware-${{ steps.version.outputs.version }}.zip ./output
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: debug-elfs-${{ steps.version.outputs.version }}.zip
|
name: debug-elfs-${{ steps.version.outputs.version }}.zip
|
||||||
|
merge-multiple: true
|
||||||
path: ./elfs
|
path: ./elfs
|
||||||
|
|
||||||
- name: Zip Elfs
|
- name: Zip Elfs
|
||||||
@@ -411,7 +383,7 @@ jobs:
|
|||||||
bin/bump_version.py
|
bin/bump_version.py
|
||||||
|
|
||||||
- name: Create version.properties pull request
|
- name: Create version.properties pull request
|
||||||
uses: peter-evans/create-pull-request@v3
|
uses: peter-evans/create-pull-request@v6
|
||||||
with:
|
with:
|
||||||
add-paths: |
|
add-paths: |
|
||||||
version.properties
|
version.properties
|
||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Trunk Check
|
- name: Trunk Check
|
||||||
uses: trunk-io/trunk-action@782e83f803ca6e369f035d64c6ba2768174ba61b
|
uses: trunk-io/trunk-action@782e83f803ca6e369f035d64c6ba2768174ba61b
|
||||||
|
|||||||
@@ -17,14 +17,14 @@ jobs:
|
|||||||
needs: build-raspbian
|
needs: build-raspbian
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
ref: ${{github.event.pull_request.head.ref}}
|
ref: ${{github.event.pull_request.head.ref}}
|
||||||
repository: ${{github.event.pull_request.head.repo.full_name}}
|
repository: ${{github.event.pull_request.head.repo.full_name}}
|
||||||
|
|
||||||
- name: Pull web ui
|
- name: Pull web ui
|
||||||
uses: dsaltares/fetch-gh-release-asset@a40c8b4a0471f9ab81bdf73a010f74cc51476ad4
|
uses: dsaltares/fetch-gh-release-asset@master
|
||||||
with:
|
with:
|
||||||
repo: meshtastic/web
|
repo: meshtastic/web
|
||||||
file: build.tar
|
file: build.tar
|
||||||
@@ -36,9 +36,10 @@ jobs:
|
|||||||
id: version
|
id: version
|
||||||
|
|
||||||
- name: Download artifacts
|
- name: Download artifacts
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: firmware-raspbian-${{ steps.version.outputs.version }}.zip
|
name: firmware-raspbian-${{ steps.version.outputs.version }}.zip
|
||||||
|
merge-multiple: true
|
||||||
|
|
||||||
- name: Display structure of downloaded files
|
- name: Display structure of downloaded files
|
||||||
run: ls -R
|
run: ls -R
|
||||||
@@ -68,8 +69,9 @@ jobs:
|
|||||||
depends: libyaml-cpp0.7, openssl, libulfius2.7
|
depends: libyaml-cpp0.7, openssl, libulfius2.7
|
||||||
desc: Native Linux Meshtastic binary.
|
desc: Native Linux Meshtastic binary.
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: artifact-deb
|
name: artifact-deb
|
||||||
|
overwrite: true
|
||||||
path: |
|
path: |
|
||||||
./*.deb
|
./*.deb
|
||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
# step 1
|
# step 1
|
||||||
- name: clone application source code
|
- name: clone application source code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
# step 2
|
# step 2
|
||||||
- name: flawfinder_scan
|
- name: flawfinder_scan
|
||||||
@@ -27,14 +27,15 @@ jobs:
|
|||||||
|
|
||||||
# step 3
|
# step 3
|
||||||
- name: save report as pipeline artifact
|
- name: save report as pipeline artifact
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: flawfinder_report.sarif
|
name: flawfinder_report.sarif
|
||||||
|
overwrite: true
|
||||||
path: flawfinder_report.sarif
|
path: flawfinder_report.sarif
|
||||||
|
|
||||||
# step 4
|
# step 4
|
||||||
- name: publish code scanning alerts
|
- name: publish code scanning alerts
|
||||||
uses: github/codeql-action/upload-sarif@v2
|
uses: github/codeql-action/upload-sarif@v3
|
||||||
with:
|
with:
|
||||||
sarif_file: flawfinder_report.sarif
|
sarif_file: flawfinder_report.sarif
|
||||||
category: flawfinder
|
category: flawfinder
|
||||||
@@ -17,7 +17,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
# step 1
|
# step 1
|
||||||
- name: clone application source code
|
- name: clone application source code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
# step 2
|
# step 2
|
||||||
- name: full scan
|
- name: full scan
|
||||||
@@ -29,14 +29,15 @@ jobs:
|
|||||||
|
|
||||||
# step 3
|
# step 3
|
||||||
- name: save report as pipeline artifact
|
- name: save report as pipeline artifact
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: report.sarif
|
name: report.sarif
|
||||||
|
overwrite: true
|
||||||
path: report.sarif
|
path: report.sarif
|
||||||
|
|
||||||
# step 4
|
# step 4
|
||||||
- name: publish code scanning alerts
|
- name: publish code scanning alerts
|
||||||
uses: github/codeql-action/upload-sarif@v2
|
uses: github/codeql-action/upload-sarif@v3
|
||||||
with:
|
with:
|
||||||
sarif_file: report.sarif
|
sarif_file: report.sarif
|
||||||
category: semgrep
|
category: semgrep
|
||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
# step 1
|
# step 1
|
||||||
- name: clone application source code
|
- name: clone application source code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Trunk Check
|
- name: Trunk Check
|
||||||
uses: trunk-io/trunk-action@v1
|
uses: trunk-io/trunk-action@v1
|
||||||
@@ -7,7 +7,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
./bin/regen-protos.sh
|
./bin/regen-protos.sh
|
||||||
|
|
||||||
- name: Create pull request
|
- name: Create pull request
|
||||||
uses: peter-evans/create-pull-request@v3
|
uses: peter-evans/create-pull-request@v6
|
||||||
with:
|
with:
|
||||||
add-paths: |
|
add-paths: |
|
||||||
protobufs
|
protobufs
|
||||||
|
|||||||
@@ -3,12 +3,13 @@
|
|||||||
platform = platformio/nordicnrf52@^10.4.0
|
platform = platformio/nordicnrf52@^10.4.0
|
||||||
extends = arduino_base
|
extends = arduino_base
|
||||||
|
|
||||||
build_type = release
|
build_type = debug
|
||||||
build_flags =
|
build_flags =
|
||||||
${arduino_base.build_flags}
|
${arduino_base.build_flags}
|
||||||
-DSERIAL_BUFFER_SIZE=1024
|
-DSERIAL_BUFFER_SIZE=1024
|
||||||
-Wno-unused-variable
|
-Wno-unused-variable
|
||||||
-Isrc/platform/nrf52
|
-Isrc/platform/nrf52
|
||||||
|
-DLFS_NO_ASSERT ; Disable LFS assertions , see https://github.com/meshtastic/firmware/pull/3818
|
||||||
|
|
||||||
build_src_filter =
|
build_src_filter =
|
||||||
${arduino_base.build_src_filter} -<platform/esp32/> -<platform/stm32wl> -<nimble/> -<mesh/wifi/> -<mesh/api/> -<mesh/http/> -<modules/esp32> -<platform/rp2040> -<mesh/eth/> -<mesh/raspihttp>
|
${arduino_base.build_src_filter} -<platform/esp32/> -<platform/stm32wl> -<nimble/> -<mesh/wifi/> -<mesh/api/> -<mesh/http/> -<modules/esp32> -<platform/rp2040> -<mesh/eth/> -<mesh/raspihttp>
|
||||||
|
|||||||
@@ -52,6 +52,8 @@ Lora:
|
|||||||
# TXen: x # TX and RX enable pins
|
# TXen: x # TX and RX enable pins
|
||||||
# RXen: x
|
# RXen: x
|
||||||
|
|
||||||
|
# ch341_quirk: true # Uncomment this to use the chunked SPI transfer that seems to fix the ch341
|
||||||
|
|
||||||
### Set gpio chip to use in /dev/. Defaults to 0.
|
### Set gpio chip to use in /dev/. Defaults to 0.
|
||||||
### Notably the Raspberry Pi 5 puts the GPIO header on gpiochip4
|
### Notably the Raspberry Pi 5 puts the GPIO header on gpiochip4
|
||||||
# gpiochip: 4
|
# gpiochip: 4
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""Generate the CI matrix"""
|
"""Generate the CI matrix."""
|
||||||
|
|
||||||
import configparser
|
import configparser
|
||||||
import json
|
import json
|
||||||
@@ -34,5 +34,10 @@ for subdir, dirs, files in os.walk(rootdir):
|
|||||||
outlist.append(section)
|
outlist.append(section)
|
||||||
else:
|
else:
|
||||||
outlist.append(section)
|
outlist.append(section)
|
||||||
|
if "board_check" in config[config[c].name]:
|
||||||
|
if (config[config[c].name]["board_check"] == "true") & (
|
||||||
|
"check" in options
|
||||||
|
):
|
||||||
|
outlist.append(section)
|
||||||
|
|
||||||
print(json.dumps(outlist))
|
print(json.dumps(outlist))
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"arduino": {
|
||||||
|
"ldscript": "nrf52840_s140_v6.ld"
|
||||||
|
},
|
||||||
|
"core": "nRF5",
|
||||||
|
"cpu": "cortex-m4",
|
||||||
|
"extra_flags": "-DARDUINO_NRF52840_FEATHER -DNRF52840_XXAA",
|
||||||
|
"f_cpu": "64000000L",
|
||||||
|
"hwids": [
|
||||||
|
["0x239A", "0x00B3"],
|
||||||
|
["0x239A", "0x8029"],
|
||||||
|
["0x239A", "0x0029"],
|
||||||
|
["0x239A", "0x002A"],
|
||||||
|
["0x239A", "0x802A"]
|
||||||
|
],
|
||||||
|
"usb_product": "ProMicro compatible nRF52840",
|
||||||
|
"mcu": "nrf52840",
|
||||||
|
"variant": "promicro_diy",
|
||||||
|
"bsp": {
|
||||||
|
"name": "adafruit"
|
||||||
|
},
|
||||||
|
"softdevice": {
|
||||||
|
"sd_flags": "-DS140",
|
||||||
|
"sd_name": "s140",
|
||||||
|
"sd_version": "6.1.1",
|
||||||
|
"sd_fwid": "0x00B6"
|
||||||
|
},
|
||||||
|
"bootloader": {
|
||||||
|
"settings_addr": "0xFF000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"connectivity": ["bluetooth"],
|
||||||
|
"debug": {
|
||||||
|
"jlink_device": "nRF52840_xxAA",
|
||||||
|
"svd_path": "nrf52840.svd"
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino"],
|
||||||
|
"name": "ProMicro compatible nRF52840",
|
||||||
|
"upload": {
|
||||||
|
"maximum_ram_size": 248832,
|
||||||
|
"maximum_size": 815104,
|
||||||
|
"speed": 115200,
|
||||||
|
"protocol": "nrfutil",
|
||||||
|
"protocols": ["nrfutil", "jlink", "nrfjprog", "stlink"],
|
||||||
|
"use_1200bps_touch": true,
|
||||||
|
"require_upload_port": true,
|
||||||
|
"wait_for_upload_port": true
|
||||||
|
},
|
||||||
|
"url": "https://www.nologo.tech/product/otherboard/NRF52840.html",
|
||||||
|
"vendor": "Nologo"
|
||||||
|
}
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
"ldscript": "esp32_out.ld"
|
"ldscript": "esp32_out.ld"
|
||||||
},
|
},
|
||||||
"core": "esp32",
|
"core": "esp32",
|
||||||
"extra_flags": "-DARDUINO_ESP32_DEV",
|
"extra_flags": ["-DBOARD_HAS_PSRAM", "-DARDUINO_ESP32_DEV"],
|
||||||
"f_cpu": "240000000L",
|
"f_cpu": "240000000L",
|
||||||
"f_flash": "40000000L",
|
"f_flash": "40000000L",
|
||||||
"flash_mode": "dio",
|
"flash_mode": "dio",
|
||||||
|
|||||||
+2
-1
@@ -133,5 +133,6 @@ lib_deps =
|
|||||||
https://github.com/lewisxhe/SensorLib#27fd0f721e20cd09e1f81383f0ba58a54fe84a17
|
https://github.com/lewisxhe/SensorLib#27fd0f721e20cd09e1f81383f0ba58a54fe84a17
|
||||||
adafruit/Adafruit LSM6DS@^4.7.2
|
adafruit/Adafruit LSM6DS@^4.7.2
|
||||||
mprograms/QMC5883LCompass@^1.2.0
|
mprograms/QMC5883LCompass@^1.2.0
|
||||||
|
|
||||||
adafruit/Adafruit VEML7700 Library@^2.1.6
|
adafruit/Adafruit VEML7700 Library@^2.1.6
|
||||||
|
https://github.com/adafruit/Adafruit_SHT4X#1.0.4
|
||||||
|
|
||||||
@@ -52,8 +52,8 @@ ButtonThread::ButtonThread() : OSThread("Button")
|
|||||||
|
|
||||||
#if defined(BUTTON_PIN) || defined(ARCH_PORTDUINO)
|
#if defined(BUTTON_PIN) || defined(ARCH_PORTDUINO)
|
||||||
userButton.attachClick(userButtonPressed);
|
userButton.attachClick(userButtonPressed);
|
||||||
userButton.setClickMs(250);
|
userButton.setClickMs(BUTTON_CLICK_MS);
|
||||||
userButton.setPressMs(c_longPressTime);
|
userButton.setPressMs(BUTTON_LONGPRESS_MS);
|
||||||
userButton.setDebounceMs(1);
|
userButton.setDebounceMs(1);
|
||||||
userButton.attachDoubleClick(userButtonDoublePressed);
|
userButton.attachDoubleClick(userButtonDoublePressed);
|
||||||
userButton.attachMultiClick(userButtonMultiPressed, this); // Reference to instance: get click count from non-static OneButton
|
userButton.attachMultiClick(userButtonMultiPressed, this); // Reference to instance: get click count from non-static OneButton
|
||||||
@@ -70,8 +70,8 @@ ButtonThread::ButtonThread() : OSThread("Button")
|
|||||||
pinMode(BUTTON_PIN_ALT, INPUT_PULLUP_SENSE);
|
pinMode(BUTTON_PIN_ALT, INPUT_PULLUP_SENSE);
|
||||||
#endif
|
#endif
|
||||||
userButtonAlt.attachClick(userButtonPressed);
|
userButtonAlt.attachClick(userButtonPressed);
|
||||||
userButtonAlt.setClickMs(250);
|
userButtonAlt.setClickMs(BUTTON_CLICK_MS);
|
||||||
userButtonAlt.setPressMs(c_longPressTime);
|
userButtonAlt.setPressMs(BUTTON_LONGPRESS_MS);
|
||||||
userButtonAlt.setDebounceMs(1);
|
userButtonAlt.setDebounceMs(1);
|
||||||
userButtonAlt.attachDoubleClick(userButtonDoublePressed);
|
userButtonAlt.attachDoubleClick(userButtonDoublePressed);
|
||||||
userButtonAlt.attachLongPressStart(userButtonPressedLongStart);
|
userButtonAlt.attachLongPressStart(userButtonPressedLongStart);
|
||||||
@@ -80,7 +80,7 @@ ButtonThread::ButtonThread() : OSThread("Button")
|
|||||||
|
|
||||||
#ifdef BUTTON_PIN_TOUCH
|
#ifdef BUTTON_PIN_TOUCH
|
||||||
userButtonTouch = OneButton(BUTTON_PIN_TOUCH, true, true);
|
userButtonTouch = OneButton(BUTTON_PIN_TOUCH, true, true);
|
||||||
userButtonTouch.setPressMs(400);
|
userButtonTouch.setPressMs(BUTTON_TOUCH_MS);
|
||||||
userButtonTouch.attachLongPressStart(touchPressedLongStart); // Better handling with longpress than click?
|
userButtonTouch.attachLongPressStart(touchPressedLongStart); // Better handling with longpress than click?
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -214,6 +214,7 @@ int32_t ButtonThread::runOnce()
|
|||||||
btnEvent = BUTTON_EVENT_NONE;
|
btnEvent = BUTTON_EVENT_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
runASAP = false;
|
||||||
return 50;
|
return 50;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,6 +235,7 @@ void ButtonThread::attachButtonInterrupts()
|
|||||||
BaseType_t higherWake = 0;
|
BaseType_t higherWake = 0;
|
||||||
mainDelay.interruptFromISR(&higherWake);
|
mainDelay.interruptFromISR(&higherWake);
|
||||||
ButtonThread::userButton.tick();
|
ButtonThread::userButton.tick();
|
||||||
|
runASAP = true;
|
||||||
},
|
},
|
||||||
CHANGE);
|
CHANGE);
|
||||||
#endif
|
#endif
|
||||||
@@ -280,6 +282,7 @@ void ButtonThread::wakeOnIrq(int irq, int mode)
|
|||||||
[] {
|
[] {
|
||||||
BaseType_t higherWake = 0;
|
BaseType_t higherWake = 0;
|
||||||
mainDelay.interruptFromISR(&higherWake);
|
mainDelay.interruptFromISR(&higherWake);
|
||||||
|
runASAP = true;
|
||||||
},
|
},
|
||||||
FALLING);
|
FALLING);
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-2
@@ -4,11 +4,22 @@
|
|||||||
#include "concurrency/OSThread.h"
|
#include "concurrency/OSThread.h"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
|
|
||||||
|
#ifndef BUTTON_CLICK_MS
|
||||||
|
#define BUTTON_CLICK_MS 250
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BUTTON_LONGPRESS_MS
|
||||||
|
#define BUTTON_LONGPRESS_MS 5000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BUTTON_TOUCH_MS
|
||||||
|
#define BUTTON_TOCH_MS 400
|
||||||
|
#endif
|
||||||
|
|
||||||
class ButtonThread : public concurrency::OSThread
|
class ButtonThread : public concurrency::OSThread
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static const uint32_t c_longPressTime = 5000; // shutdown after 5s
|
static const uint32_t c_holdOffTime = 30000; // hold off 30s after boot
|
||||||
static const uint32_t c_holdOffTime = 30000; // hold off 30s after boot
|
|
||||||
|
|
||||||
enum ButtonEventType {
|
enum ButtonEventType {
|
||||||
BUTTON_EVENT_NONE,
|
BUTTON_EVENT_NONE,
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
#define LOG_CRIT(...) SEGGER_RTT_printf(0, __VA_ARGS__)
|
#define LOG_CRIT(...) SEGGER_RTT_printf(0, __VA_ARGS__)
|
||||||
#define LOG_TRACE(...) SEGGER_RTT_printf(0, __VA_ARGS__)
|
#define LOG_TRACE(...) SEGGER_RTT_printf(0, __VA_ARGS__)
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_PORT
|
#if defined(DEBUG_PORT) && !defined(DEBUG_MUTE)
|
||||||
#define LOG_DEBUG(...) DEBUG_PORT.log(MESHTASTIC_LOG_LEVEL_DEBUG, __VA_ARGS__)
|
#define LOG_DEBUG(...) DEBUG_PORT.log(MESHTASTIC_LOG_LEVEL_DEBUG, __VA_ARGS__)
|
||||||
#define LOG_INFO(...) DEBUG_PORT.log(MESHTASTIC_LOG_LEVEL_INFO, __VA_ARGS__)
|
#define LOG_INFO(...) DEBUG_PORT.log(MESHTASTIC_LOG_LEVEL_INFO, __VA_ARGS__)
|
||||||
#define LOG_WARN(...) DEBUG_PORT.log(MESHTASTIC_LOG_LEVEL_WARN, __VA_ARGS__)
|
#define LOG_WARN(...) DEBUG_PORT.log(MESHTASTIC_LOG_LEVEL_WARN, __VA_ARGS__)
|
||||||
|
|||||||
+78
-8
@@ -205,6 +205,62 @@ void rmDir(const char *dirname)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool fsCheck()
|
||||||
|
{
|
||||||
|
#if defined(ARCH_NRF52)
|
||||||
|
size_t write_size = 0;
|
||||||
|
size_t read_size = 0;
|
||||||
|
char buf[32] = {0};
|
||||||
|
|
||||||
|
Adafruit_LittleFS_Namespace::File file(FSCom);
|
||||||
|
const char *text = "meshtastic fs test";
|
||||||
|
size_t text_length = strlen(text);
|
||||||
|
const char *filename = "/meshtastic.txt";
|
||||||
|
|
||||||
|
LOG_DEBUG("Try create file .\n");
|
||||||
|
if (file.open(filename, FILE_O_WRITE)) {
|
||||||
|
write_size = file.write(text);
|
||||||
|
} else {
|
||||||
|
LOG_DEBUG("Open file failed .\n");
|
||||||
|
goto FORMAT_FS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (write_size != text_length) {
|
||||||
|
LOG_DEBUG("Text bytes do not match .\n");
|
||||||
|
file.close();
|
||||||
|
goto FORMAT_FS;
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
if (!file.open(filename, FILE_O_READ)) {
|
||||||
|
LOG_DEBUG("Open file failed .\n");
|
||||||
|
goto FORMAT_FS;
|
||||||
|
}
|
||||||
|
|
||||||
|
read_size = file.readBytes(buf, text_length);
|
||||||
|
if (read_size != text_length) {
|
||||||
|
LOG_DEBUG("Text bytes do not match .\n");
|
||||||
|
file.close();
|
||||||
|
goto FORMAT_FS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (memcmp(buf, text, text_length) != 0) {
|
||||||
|
LOG_DEBUG("The written bytes do not match the read bytes .\n");
|
||||||
|
file.close();
|
||||||
|
goto FORMAT_FS;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
FORMAT_FS:
|
||||||
|
LOG_DEBUG("Format FS ....\n");
|
||||||
|
FSCom.format();
|
||||||
|
FSCom.begin();
|
||||||
|
return false;
|
||||||
|
#else
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void fsInit()
|
void fsInit()
|
||||||
{
|
{
|
||||||
#ifdef FSCom
|
#ifdef FSCom
|
||||||
@@ -219,15 +275,29 @@ void fsInit()
|
|||||||
* nRF52840 has a certain chance of automatic formatting failure.
|
* nRF52840 has a certain chance of automatic formatting failure.
|
||||||
* Try to create a file after initializing the file system. If the creation fails,
|
* Try to create a file after initializing the file system. If the creation fails,
|
||||||
* it means that the file system is not working properly. Please format it manually again.
|
* it means that the file system is not working properly. Please format it manually again.
|
||||||
|
* To check the normality of the file system, you need to disable the LFS_NO_ASSERT assertion.
|
||||||
|
* Otherwise, the assertion will be entered at the moment of reading or opening, and the FS will not be formatted.
|
||||||
* */
|
* */
|
||||||
Adafruit_LittleFS_Namespace::File file(FSCom);
|
bool ret = false;
|
||||||
const char *filename = "/meshtastic.txt";
|
uint8_t retry = 3;
|
||||||
if (!file.open(filename, FILE_O_WRITE)) {
|
|
||||||
LOG_DEBUG("Format ....");
|
while (retry--) {
|
||||||
FSCom.format();
|
ret = fsCheck();
|
||||||
FSCom.begin();
|
if (ret) {
|
||||||
} else {
|
LOG_DEBUG("File system check is OK.\n");
|
||||||
file.close();
|
break;
|
||||||
|
}
|
||||||
|
delay(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
// It may not be possible to reach this step.
|
||||||
|
// Add a loop here to prevent unpredictable situations from happening.
|
||||||
|
// Can add a screen to display error status later.
|
||||||
|
if (!ret) {
|
||||||
|
while (1) {
|
||||||
|
LOG_ERROR("The file system is damaged and cannot proceed to the next step.\n");
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
LOG_DEBUG("Filesystem files:\n");
|
LOG_DEBUG("Filesystem files:\n");
|
||||||
|
|||||||
+1
-1
@@ -126,7 +126,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define SHTC3_ADDR 0x70
|
#define SHTC3_ADDR 0x70
|
||||||
#define LPS22HB_ADDR 0x5C
|
#define LPS22HB_ADDR 0x5C
|
||||||
#define LPS22HB_ADDR_ALT 0x5D
|
#define LPS22HB_ADDR_ALT 0x5D
|
||||||
#define SHT31_ADDR 0x44
|
#define SHT31_4x_ADDR 0x44
|
||||||
#define PMSA0031_ADDR 0x12
|
#define PMSA0031_ADDR 0x12
|
||||||
#define RCWL9620_ADDR 0x57
|
#define RCWL9620_ADDR 0x57
|
||||||
#define VEML7700_ADDR 0x10
|
#define VEML7700_ADDR 0x10
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ class ScanI2C
|
|||||||
INA3221,
|
INA3221,
|
||||||
MCP9808,
|
MCP9808,
|
||||||
SHT31,
|
SHT31,
|
||||||
|
SHT4X,
|
||||||
SHTC3,
|
SHTC3,
|
||||||
LPS22HB,
|
LPS22HB,
|
||||||
QMC6310,
|
QMC6310,
|
||||||
|
|||||||
@@ -292,7 +292,18 @@ void ScanI2CTwoWire::scanPort(I2CPort port)
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
SCAN_SIMPLE_CASE(SHT31_ADDR, SHT31, "SHT31 sensor found\n")
|
case SHT31_4x_ADDR:
|
||||||
|
registerValue = getRegisterValue(ScanI2CTwoWire::RegisterLocation(addr, 0x89), 2);
|
||||||
|
if (registerValue == 0x11a2) {
|
||||||
|
type = SHT4X;
|
||||||
|
LOG_INFO("SHT4X sensor found\n");
|
||||||
|
} else {
|
||||||
|
type = SHT31;
|
||||||
|
LOG_INFO("SHT31 sensor found\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
SCAN_SIMPLE_CASE(SHTC3_ADDR, SHTC3, "SHTC3 sensor found\n")
|
SCAN_SIMPLE_CASE(SHTC3_ADDR, SHTC3, "SHTC3 sensor found\n")
|
||||||
SCAN_SIMPLE_CASE(RCWL9620_ADDR, RCWL9620, "RCWL9620 sensor found\n")
|
SCAN_SIMPLE_CASE(RCWL9620_ADDR, RCWL9620, "RCWL9620 sensor found\n")
|
||||||
|
|
||||||
|
|||||||
@@ -62,12 +62,19 @@ bool EInkDisplay::forceDisplay(uint32_t msecLimit)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// FIXME - only draw bits have changed (use backbuf similar to the other displays)
|
// FIXME - only draw bits have changed (use backbuf similar to the other displays)
|
||||||
|
const bool flipped = config.display.flip_screen;
|
||||||
for (uint32_t y = 0; y < displayHeight; y++) {
|
for (uint32_t y = 0; y < displayHeight; y++) {
|
||||||
for (uint32_t x = 0; x < displayWidth; x++) {
|
for (uint32_t x = 0; x < displayWidth; x++) {
|
||||||
// get src pixel in the page based ordering the OLED lib uses FIXME, super inefficient
|
// get src pixel in the page based ordering the OLED lib uses FIXME, super inefficient
|
||||||
auto b = buffer[x + (y / 8) * displayWidth];
|
auto b = buffer[x + (y / 8) * displayWidth];
|
||||||
auto isset = b & (1 << (y & 7));
|
auto isset = b & (1 << (y & 7));
|
||||||
adafruitDisplay->drawPixel(x, y, isset ? GxEPD_BLACK : GxEPD_WHITE);
|
|
||||||
|
// Handle flip here, rather than with setRotation(),
|
||||||
|
// Avoids issues when display width is not a multiple of 8
|
||||||
|
if (flipped)
|
||||||
|
adafruitDisplay->drawPixel((displayWidth - 1) - x, (displayHeight - 1) - y, isset ? GxEPD_BLACK : GxEPD_WHITE);
|
||||||
|
else
|
||||||
|
adafruitDisplay->drawPixel(x, y, isset ? GxEPD_BLACK : GxEPD_WHITE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -94,6 +94,11 @@ std::vector<MeshModule *> moduleFrames;
|
|||||||
// Stores the last 4 of our hardware ID, to make finding the device for pairing easier
|
// Stores the last 4 of our hardware ID, to make finding the device for pairing easier
|
||||||
static char ourId[5];
|
static char ourId[5];
|
||||||
|
|
||||||
|
// vector where symbols (string) are displayed in bottom corner of display.
|
||||||
|
std::vector<std::string> functionSymbals;
|
||||||
|
// string displayed in bottom right corner of display. Created from elements in functionSymbals vector
|
||||||
|
std::string functionSymbalString = "";
|
||||||
|
|
||||||
#if HAS_GPS
|
#if HAS_GPS
|
||||||
// GeoCoord object for the screen
|
// GeoCoord object for the screen
|
||||||
GeoCoord geoCoord;
|
GeoCoord geoCoord;
|
||||||
@@ -260,6 +265,18 @@ static void drawWelcomeScreen(OLEDDisplay *display, OLEDDisplayUiState *state, i
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// draw overlay in bottom right corner of screen to show when notifications are muted or modifier key is active
|
||||||
|
static void drawFunctionOverlay(OLEDDisplay *display, OLEDDisplayUiState *state)
|
||||||
|
{
|
||||||
|
// LOG_DEBUG("Drawing function overlay\n");
|
||||||
|
if (functionSymbals.begin() != functionSymbals.end()) {
|
||||||
|
char buf[64];
|
||||||
|
display->setFont(FONT_SMALL);
|
||||||
|
snprintf(buf, sizeof(buf), "%s", functionSymbalString.c_str());
|
||||||
|
display->drawString(SCREEN_WIDTH - display->getStringWidth(buf), SCREEN_HEIGHT - FONT_HEIGHT_SMALL, buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef USE_EINK
|
#ifdef USE_EINK
|
||||||
/// Used on eink displays while in deep sleep
|
/// Used on eink displays while in deep sleep
|
||||||
static void drawDeepSleepScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
|
static void drawDeepSleepScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
|
||||||
@@ -1023,7 +1040,14 @@ void Screen::handleSetOn(bool on, FrameCallback einkScreensaver)
|
|||||||
#if !ARCH_PORTDUINO
|
#if !ARCH_PORTDUINO
|
||||||
dispdev->displayOn();
|
dispdev->displayOn();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(ST7789_CS) && \
|
||||||
|
!defined(M5STACK) // set display brightness when turning on screens. Just moved function from TFTDisplay to here.
|
||||||
|
static_cast<TFTDisplay *>(dispdev)->setDisplayBrightness(brightness);
|
||||||
|
#endif
|
||||||
|
|
||||||
dispdev->displayOn();
|
dispdev->displayOn();
|
||||||
|
|
||||||
enabled = true;
|
enabled = true;
|
||||||
setInterval(0); // Draw ASAP
|
setInterval(0); // Draw ASAP
|
||||||
runASAP = true;
|
runASAP = true;
|
||||||
@@ -1490,6 +1514,11 @@ void Screen::setFrames()
|
|||||||
ui->setFrames(normalFrames, numframes);
|
ui->setFrames(normalFrames, numframes);
|
||||||
ui->enableAllIndicators();
|
ui->enableAllIndicators();
|
||||||
|
|
||||||
|
// Add function overlay here. This can show when notifications muted, modifier key is active etc
|
||||||
|
static OverlayCallback functionOverlay[] = {drawFunctionOverlay};
|
||||||
|
static const int functionOverlayCount = sizeof(functionOverlay) / sizeof(functionOverlay[0]);
|
||||||
|
ui->setOverlays(functionOverlay, functionOverlayCount);
|
||||||
|
|
||||||
prevFrame = -1; // Force drawNodeInfo to pick a new node (because our list
|
prevFrame = -1; // Force drawNodeInfo to pick a new node (because our list
|
||||||
// just changed)
|
// just changed)
|
||||||
|
|
||||||
@@ -1573,9 +1602,55 @@ void Screen::blink()
|
|||||||
delay(50);
|
delay(50);
|
||||||
count = count - 1;
|
count = count - 1;
|
||||||
}
|
}
|
||||||
|
// The dispdev->setBrightness does not work for t-deck display, it seems to run the setBrightness function in OLEDDisplay.
|
||||||
dispdev->setBrightness(brightness);
|
dispdev->setBrightness(brightness);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Screen::increaseBrightness()
|
||||||
|
{
|
||||||
|
brightness = ((brightness + 62) > 254) ? brightness : (brightness + 62);
|
||||||
|
|
||||||
|
#if defined(ST7789_CS)
|
||||||
|
// run the setDisplayBrightness function. This works on t-decks
|
||||||
|
static_cast<TFTDisplay *>(dispdev)->setDisplayBrightness(brightness);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* TO DO: add little popup in center of screen saying what brightness level it is set to*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void Screen::decreaseBrightness()
|
||||||
|
{
|
||||||
|
brightness = (brightness < 70) ? brightness : (brightness - 62);
|
||||||
|
|
||||||
|
#if defined(ST7789_CS)
|
||||||
|
static_cast<TFTDisplay *>(dispdev)->setDisplayBrightness(brightness);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* TO DO: add little popup in center of screen saying what brightness level it is set to*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void Screen::setFunctionSymbal(std::string sym)
|
||||||
|
{
|
||||||
|
if (std::find(functionSymbals.begin(), functionSymbals.end(), sym) == functionSymbals.end()) {
|
||||||
|
functionSymbals.push_back(sym);
|
||||||
|
functionSymbalString = "";
|
||||||
|
for (auto symbol : functionSymbals) {
|
||||||
|
functionSymbalString = symbol + " " + functionSymbalString;
|
||||||
|
}
|
||||||
|
setFastFramerate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Screen::removeFunctionSymbal(std::string sym)
|
||||||
|
{
|
||||||
|
functionSymbals.erase(std::remove(functionSymbals.begin(), functionSymbals.end(), sym), functionSymbals.end());
|
||||||
|
functionSymbalString = "";
|
||||||
|
for (auto symbol : functionSymbals) {
|
||||||
|
functionSymbalString = symbol + " " + functionSymbalString;
|
||||||
|
}
|
||||||
|
setFastFramerate();
|
||||||
|
}
|
||||||
|
|
||||||
std::string Screen::drawTimeDelta(uint32_t days, uint32_t hours, uint32_t minutes, uint32_t seconds)
|
std::string Screen::drawTimeDelta(uint32_t days, uint32_t hours, uint32_t minutes, uint32_t seconds)
|
||||||
{
|
{
|
||||||
std::string uptime;
|
std::string uptime;
|
||||||
|
|||||||
+10
-3
@@ -166,9 +166,6 @@ class Screen : public concurrency::OSThread
|
|||||||
void showPrevFrame() { enqueueCmd(ScreenCmd{.cmd = Cmd::SHOW_PREV_FRAME}); }
|
void showPrevFrame() { enqueueCmd(ScreenCmd{.cmd = Cmd::SHOW_PREV_FRAME}); }
|
||||||
void showNextFrame() { enqueueCmd(ScreenCmd{.cmd = Cmd::SHOW_NEXT_FRAME}); }
|
void showNextFrame() { enqueueCmd(ScreenCmd{.cmd = Cmd::SHOW_NEXT_FRAME}); }
|
||||||
|
|
||||||
// Implementation to Adjust Brightness
|
|
||||||
uint8_t brightness = BRIGHTNESS_DEFAULT;
|
|
||||||
|
|
||||||
/// Starts showing the Bluetooth PIN screen.
|
/// Starts showing the Bluetooth PIN screen.
|
||||||
//
|
//
|
||||||
// Switches over to a static frame showing the Bluetooth pairing screen
|
// Switches over to a static frame showing the Bluetooth pairing screen
|
||||||
@@ -202,6 +199,13 @@ class Screen : public concurrency::OSThread
|
|||||||
enqueueCmd(cmd);
|
enqueueCmd(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// functions for display brightness
|
||||||
|
void increaseBrightness();
|
||||||
|
void decreaseBrightness();
|
||||||
|
|
||||||
|
void setFunctionSymbal(std::string sym);
|
||||||
|
void removeFunctionSymbal(std::string sym);
|
||||||
|
|
||||||
/// Stops showing the bluetooth PIN screen.
|
/// Stops showing the bluetooth PIN screen.
|
||||||
void stopBluetoothPinScreen() { enqueueCmd(ScreenCmd{.cmd = Cmd::STOP_BLUETOOTH_PIN_SCREEN}); }
|
void stopBluetoothPinScreen() { enqueueCmd(ScreenCmd{.cmd = Cmd::STOP_BLUETOOTH_PIN_SCREEN}); }
|
||||||
|
|
||||||
@@ -395,6 +399,9 @@ class Screen : public concurrency::OSThread
|
|||||||
// Bluetooth PIN screen)
|
// Bluetooth PIN screen)
|
||||||
bool showingNormalScreen = false;
|
bool showingNormalScreen = false;
|
||||||
|
|
||||||
|
// Implementation to Adjust Brightness
|
||||||
|
uint8_t brightness = BRIGHTNESS_DEFAULT; // H = 254, MH = 192, ML = 130 L = 103
|
||||||
|
|
||||||
/// Holds state for debug information
|
/// Holds state for debug information
|
||||||
DebugInfo debugInfo;
|
DebugInfo debugInfo;
|
||||||
|
|
||||||
|
|||||||
@@ -596,7 +596,7 @@ void TFTDisplay::sendCommand(uint8_t com)
|
|||||||
unphone.backlight(true); // using unPhone library
|
unphone.backlight(true); // using unPhone library
|
||||||
#endif
|
#endif
|
||||||
#ifdef RAK14014
|
#ifdef RAK14014
|
||||||
#elif !defined(M5STACK)
|
#elif !defined(M5STACK) && !defined(ST7789_CS) // T-Deck gets brightness set in Screen.cpp in the handleSetOn function
|
||||||
tft->setBrightness(172);
|
tft->setBrightness(172);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
@@ -640,6 +640,12 @@ void TFTDisplay::sendCommand(uint8_t com)
|
|||||||
// Drop all other commands to device (we just update the buffer)
|
// Drop all other commands to device (we just update the buffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TFTDisplay::setDisplayBrightness(uint8_t _brightness)
|
||||||
|
{
|
||||||
|
tft->setBrightness(_brightness);
|
||||||
|
LOG_DEBUG("Brightness is set to value: %i \n", _brightness);
|
||||||
|
}
|
||||||
|
|
||||||
void TFTDisplay::flipScreenVertically()
|
void TFTDisplay::flipScreenVertically()
|
||||||
{
|
{
|
||||||
#if defined(T_WATCH_S3)
|
#if defined(T_WATCH_S3)
|
||||||
|
|||||||
@@ -30,6 +30,9 @@ class TFTDisplay : public OLEDDisplay
|
|||||||
static bool hasTouch(void);
|
static bool hasTouch(void);
|
||||||
static bool getTouch(int16_t *x, int16_t *y);
|
static bool getTouch(int16_t *x, int16_t *y);
|
||||||
|
|
||||||
|
// Functions for changing display brightness
|
||||||
|
void setDisplayBrightness(uint8_t);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* shim to make the abstraction happy
|
* shim to make the abstraction happy
|
||||||
*
|
*
|
||||||
|
|||||||
+79
-1
@@ -1,5 +1,4 @@
|
|||||||
#include "kbI2cBase.h"
|
#include "kbI2cBase.h"
|
||||||
|
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "detect/ScanI2C.h"
|
#include "detect/ScanI2C.h"
|
||||||
|
|
||||||
@@ -138,6 +137,9 @@ int32_t KbI2cBase::runOnce()
|
|||||||
break;
|
break;
|
||||||
case 0x13: // Code scanner says the SYM key is 0x13
|
case 0x13: // Code scanner says the SYM key is 0x13
|
||||||
is_sym = !is_sym;
|
is_sym = !is_sym;
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar =
|
||||||
|
is_sym ? 0xf1 : 0xf2; // send 0xf1 to tell CannedMessages to display that the modifier key is active
|
||||||
break;
|
break;
|
||||||
case 0x0a: // apparently Enter on Q10 is a line feed instead of carriage return
|
case 0x0a: // apparently Enter on Q10 is a line feed instead of carriage return
|
||||||
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT;
|
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT;
|
||||||
@@ -193,6 +195,75 @@ int32_t KbI2cBase::runOnce()
|
|||||||
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_NONE;
|
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_NONE;
|
||||||
e.source = this->_originName;
|
e.source = this->_originName;
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
case 0x71: // This is the button q. If modifier and q pressed, it cancels the input
|
||||||
|
if (is_sym) {
|
||||||
|
is_sym = false;
|
||||||
|
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_CANCEL;
|
||||||
|
} else {
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = c;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x74: // letter t. if modifier and t pressed call 'tab'
|
||||||
|
if (is_sym) {
|
||||||
|
is_sym = false;
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = 0x09; // TAB Scancode
|
||||||
|
} else {
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = c;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x6d: // letter m. Modifier makes it mute notifications
|
||||||
|
if (is_sym) {
|
||||||
|
is_sym = false;
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = 0xac; // mute notifications
|
||||||
|
} else {
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = c;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x6f: // letter o(+). Modifier makes screen increase in brightness
|
||||||
|
if (is_sym) {
|
||||||
|
is_sym = false;
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = 0x11; // Increase Brightness code
|
||||||
|
} else {
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = c;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x69: // letter i(-). Modifier makes screen decrease in brightness
|
||||||
|
if (is_sym) {
|
||||||
|
is_sym = false;
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = 0x12; // Decrease Brightness code
|
||||||
|
} else {
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = c;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x20: // Space. Send network ping like double press does
|
||||||
|
if (is_sym) {
|
||||||
|
is_sym = false;
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = 0xaf; // (fn + space)
|
||||||
|
} else {
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = c;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x67: // letter g. toggle gps
|
||||||
|
if (is_sym) {
|
||||||
|
is_sym = false;
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = 0x9e;
|
||||||
|
} else {
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = c;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 0x1b: // ESC
|
case 0x1b: // ESC
|
||||||
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_CANCEL;
|
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_CANCEL;
|
||||||
break;
|
break;
|
||||||
@@ -216,6 +287,12 @@ int32_t KbI2cBase::runOnce()
|
|||||||
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT;
|
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT;
|
||||||
e.kbchar = 0xb7;
|
e.kbchar = 0xb7;
|
||||||
break;
|
break;
|
||||||
|
case 0xc: // Modifier key: 0xc is alt+c (Other options could be: 0xea = shift+mic button or 0x4 shift+$(speaker))
|
||||||
|
// toggle moddifiers button.
|
||||||
|
is_sym = !is_sym;
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = is_sym ? 0xf1 : 0xf2; // send 0xf1 to tell CannedMessages to display that the modifier key is active
|
||||||
|
break;
|
||||||
case 0x90: // fn+r
|
case 0x90: // fn+r
|
||||||
case 0x91: // fn+t
|
case 0x91: // fn+t
|
||||||
case 0x9b: // fn+s
|
case 0x9b: // fn+s
|
||||||
@@ -239,6 +316,7 @@ int32_t KbI2cBase::runOnce()
|
|||||||
}
|
}
|
||||||
e.inputEvent = ANYKEY;
|
e.inputEvent = ANYKEY;
|
||||||
e.kbchar = c;
|
e.kbchar = c;
|
||||||
|
is_sym = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
-2
@@ -542,6 +542,8 @@ void setup()
|
|||||||
SCANNER_TO_SENSORS_MAP(ScanI2C::DeviceType::PMSA0031, meshtastic_TelemetrySensorType_PMSA003I)
|
SCANNER_TO_SENSORS_MAP(ScanI2C::DeviceType::PMSA0031, meshtastic_TelemetrySensorType_PMSA003I)
|
||||||
SCANNER_TO_SENSORS_MAP(ScanI2C::DeviceType::RCWL9620, meshtastic_TelemetrySensorType_RCWL9620)
|
SCANNER_TO_SENSORS_MAP(ScanI2C::DeviceType::RCWL9620, meshtastic_TelemetrySensorType_RCWL9620)
|
||||||
SCANNER_TO_SENSORS_MAP(ScanI2C::DeviceType::VEML7700, meshtastic_TelemetrySensorType_VEML7700)
|
SCANNER_TO_SENSORS_MAP(ScanI2C::DeviceType::VEML7700, meshtastic_TelemetrySensorType_VEML7700)
|
||||||
|
SCANNER_TO_SENSORS_MAP(ScanI2C::DeviceType::SHT4X, meshtastic_TelemetrySensorType_SHT4X)
|
||||||
|
|
||||||
|
|
||||||
i2cScanner.reset();
|
i2cScanner.reset();
|
||||||
|
|
||||||
@@ -739,7 +741,8 @@ void setup()
|
|||||||
if (settingsMap[use_sx1262]) {
|
if (settingsMap[use_sx1262]) {
|
||||||
if (!rIf) {
|
if (!rIf) {
|
||||||
LOG_DEBUG("Attempting to activate sx1262 radio on SPI port %s\n", settingsStrings[spidev].c_str());
|
LOG_DEBUG("Attempting to activate sx1262 radio on SPI port %s\n", settingsStrings[spidev].c_str());
|
||||||
LockingArduinoHal *RadioLibHAL = new LockingArduinoHal(SPI, spiSettings);
|
LockingArduinoHal *RadioLibHAL =
|
||||||
|
new LockingArduinoHal(SPI, spiSettings, (settingsMap[ch341Quirk] ? settingsMap[busy] : RADIOLIB_NC));
|
||||||
rIf = new SX1262Interface((LockingArduinoHal *)RadioLibHAL, settingsMap[cs], settingsMap[irq], settingsMap[reset],
|
rIf = new SX1262Interface((LockingArduinoHal *)RadioLibHAL, settingsMap[cs], settingsMap[irq], settingsMap[reset],
|
||||||
settingsMap[busy]);
|
settingsMap[busy]);
|
||||||
if (!rIf->init()) {
|
if (!rIf->init()) {
|
||||||
@@ -753,7 +756,8 @@ void setup()
|
|||||||
} else if (settingsMap[use_rf95]) {
|
} else if (settingsMap[use_rf95]) {
|
||||||
if (!rIf) {
|
if (!rIf) {
|
||||||
LOG_DEBUG("Attempting to activate rf95 radio on SPI port %s\n", settingsStrings[spidev].c_str());
|
LOG_DEBUG("Attempting to activate rf95 radio on SPI port %s\n", settingsStrings[spidev].c_str());
|
||||||
LockingArduinoHal *RadioLibHAL = new LockingArduinoHal(SPI, spiSettings);
|
LockingArduinoHal *RadioLibHAL =
|
||||||
|
new LockingArduinoHal(SPI, spiSettings, (settingsMap[ch341Quirk] ? settingsMap[busy] : RADIOLIB_NC));
|
||||||
rIf = new RF95Interface((LockingArduinoHal *)RadioLibHAL, settingsMap[cs], settingsMap[irq], settingsMap[reset],
|
rIf = new RF95Interface((LockingArduinoHal *)RadioLibHAL, settingsMap[cs], settingsMap[irq], settingsMap[reset],
|
||||||
settingsMap[busy]);
|
settingsMap[busy]);
|
||||||
if (!rIf->init()) {
|
if (!rIf->init()) {
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ uint32_t MemGet::getFreeHeap()
|
|||||||
return ESP.getFreeHeap();
|
return ESP.getFreeHeap();
|
||||||
#elif defined(ARCH_NRF52)
|
#elif defined(ARCH_NRF52)
|
||||||
return dbgHeapFree();
|
return dbgHeapFree();
|
||||||
|
#elif defined(ARCH_RP2040)
|
||||||
|
return rp2040.getFreeHeap();
|
||||||
#else
|
#else
|
||||||
// this platform does not have heap management function implemented
|
// this platform does not have heap management function implemented
|
||||||
return UINT32_MAX;
|
return UINT32_MAX;
|
||||||
@@ -38,6 +40,8 @@ uint32_t MemGet::getHeapSize()
|
|||||||
return ESP.getHeapSize();
|
return ESP.getHeapSize();
|
||||||
#elif defined(ARCH_NRF52)
|
#elif defined(ARCH_NRF52)
|
||||||
return dbgHeapTotal();
|
return dbgHeapTotal();
|
||||||
|
#elif defined(ARCH_RP2040)
|
||||||
|
return rp2040.getTotalHeap();
|
||||||
#else
|
#else
|
||||||
// this platform does not have heap management function implemented
|
// this platform does not have heap management function implemented
|
||||||
return UINT32_MAX;
|
return UINT32_MAX;
|
||||||
|
|||||||
+1
-1
@@ -273,7 +273,7 @@ void NodeDB::installDefaultConfig()
|
|||||||
// FIXME: Default to bluetooth capability of platform as default
|
// FIXME: Default to bluetooth capability of platform as default
|
||||||
config.bluetooth.enabled = true;
|
config.bluetooth.enabled = true;
|
||||||
config.bluetooth.fixed_pin = defaultBLEPin;
|
config.bluetooth.fixed_pin = defaultBLEPin;
|
||||||
#if defined(ST7735_CS) || defined(USE_EINK) || defined(ILI9341_DRIVER) || defined(ST7789_CS)
|
#if defined(ST7735_CS) || defined(USE_EINK) || defined(ILI9341_DRIVER) || defined(ST7789_CS) || defined(HX8357_CS)
|
||||||
bool hasScreen = true;
|
bool hasScreen = true;
|
||||||
#elif ARCH_PORTDUINO
|
#elif ARCH_PORTDUINO
|
||||||
bool hasScreen = false;
|
bool hasScreen = false;
|
||||||
|
|||||||
@@ -25,7 +25,31 @@ void LockingArduinoHal::spiEndTransaction()
|
|||||||
#if ARCH_PORTDUINO
|
#if ARCH_PORTDUINO
|
||||||
void LockingArduinoHal::spiTransfer(uint8_t *out, size_t len, uint8_t *in)
|
void LockingArduinoHal::spiTransfer(uint8_t *out, size_t len, uint8_t *in)
|
||||||
{
|
{
|
||||||
spi->transfer(out, in, len);
|
if (busy == RADIOLIB_NC) {
|
||||||
|
spi->transfer(out, in, len);
|
||||||
|
} else {
|
||||||
|
uint16_t offset = 0;
|
||||||
|
|
||||||
|
while (len) {
|
||||||
|
uint8_t block_size = (len < 20 ? len : 20);
|
||||||
|
spi->transfer((out != NULL ? out + offset : NULL), (in != NULL ? in + offset : NULL), block_size);
|
||||||
|
if (block_size == len)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// ensure GPIO is low
|
||||||
|
|
||||||
|
uint32_t start = millis();
|
||||||
|
while (digitalRead(busy)) {
|
||||||
|
if (millis() - start >= 2000) {
|
||||||
|
LOG_ERROR("GPIO mid-transfer timeout, is it connected?");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
offset += block_size;
|
||||||
|
len -= block_size;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -21,12 +21,20 @@
|
|||||||
class LockingArduinoHal : public ArduinoHal
|
class LockingArduinoHal : public ArduinoHal
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LockingArduinoHal(SPIClass &spi, SPISettings spiSettings) : ArduinoHal(spi, spiSettings){};
|
LockingArduinoHal(SPIClass &spi, SPISettings spiSettings, RADIOLIB_PIN_TYPE _busy = RADIOLIB_NC)
|
||||||
|
: ArduinoHal(spi, spiSettings)
|
||||||
|
{
|
||||||
|
#if ARCH_PORTDUINO
|
||||||
|
busy = _busy;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
void spiBeginTransaction() override;
|
void spiBeginTransaction() override;
|
||||||
void spiEndTransaction() override;
|
void spiEndTransaction() override;
|
||||||
#if ARCH_PORTDUINO
|
#if ARCH_PORTDUINO
|
||||||
|
RADIOLIB_PIN_TYPE busy;
|
||||||
void spiTransfer(uint8_t *out, size_t len, uint8_t *in) override;
|
void spiTransfer(uint8_t *out, size_t len, uint8_t *in) override;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -180,11 +180,75 @@ int CannedMessageModule::handleInputEvent(const InputEvent *event)
|
|||||||
(this->runState == CANNED_MESSAGE_RUN_STATE_DISABLED)) {
|
(this->runState == CANNED_MESSAGE_RUN_STATE_DISABLED)) {
|
||||||
this->runState = CANNED_MESSAGE_RUN_STATE_FREETEXT;
|
this->runState = CANNED_MESSAGE_RUN_STATE_FREETEXT;
|
||||||
}
|
}
|
||||||
// pass the pressed key
|
|
||||||
// LOG_DEBUG("Canned message ANYKEY (%x)\n", event->kbchar);
|
validEvent = false; // If key is normal than it will be set to true.
|
||||||
this->payload = event->kbchar;
|
|
||||||
this->lastTouchMillis = millis();
|
// Run modifier key code below, (doesnt inturrupt typing or reset to start screen page)
|
||||||
validEvent = true;
|
switch (event->kbchar) {
|
||||||
|
case 0x11: // make screen brighter
|
||||||
|
if (screen)
|
||||||
|
screen->increaseBrightness();
|
||||||
|
LOG_DEBUG("increasing Screen Brightness\n");
|
||||||
|
break;
|
||||||
|
case 0x12: // make screen dimmer
|
||||||
|
if (screen)
|
||||||
|
screen->decreaseBrightness();
|
||||||
|
LOG_DEBUG("Decreasing Screen Brightness\n");
|
||||||
|
break;
|
||||||
|
case 0xf1: // draw modifier (function) symbal
|
||||||
|
if (screen)
|
||||||
|
screen->setFunctionSymbal("Fn");
|
||||||
|
break;
|
||||||
|
case 0xf2: // remove modifier (function) symbal
|
||||||
|
if (screen)
|
||||||
|
screen->removeFunctionSymbal("Fn");
|
||||||
|
break;
|
||||||
|
// mute (switch off/toggle) external notifications on fn+m
|
||||||
|
case 0xac:
|
||||||
|
if (moduleConfig.external_notification.enabled == true) {
|
||||||
|
if (externalNotificationModule->getMute()) {
|
||||||
|
externalNotificationModule->setMute(false);
|
||||||
|
showTemporaryMessage("Notifications \nEnabled");
|
||||||
|
if (screen)
|
||||||
|
screen->removeFunctionSymbal("M"); // remove the mute symbol from the bottom right corner
|
||||||
|
} else {
|
||||||
|
externalNotificationModule->stopNow(); // this will turn off all GPIO and sounds and idle the loop
|
||||||
|
externalNotificationModule->setMute(true);
|
||||||
|
showTemporaryMessage("Notifications \nDisabled");
|
||||||
|
if (screen)
|
||||||
|
screen->setFunctionSymbal("M"); // add the mute symbol to the bottom right corner
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x9e: // toggle GPS like triple press does
|
||||||
|
#if !MESHTASTIC_EXCLUDE_GPS
|
||||||
|
if (gps != nullptr) {
|
||||||
|
gps->toggleGpsMode();
|
||||||
|
}
|
||||||
|
if (screen)
|
||||||
|
screen->forceDisplay();
|
||||||
|
showTemporaryMessage("GPS Toggled");
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case 0xaf: // fn+space send network ping like double press does
|
||||||
|
service.refreshLocalMeshNode();
|
||||||
|
if (service.trySendPosition(NODENUM_BROADCAST, true)) {
|
||||||
|
showTemporaryMessage("Position \nUpdate Sent");
|
||||||
|
} else {
|
||||||
|
showTemporaryMessage("Node Info \nUpdate Sent");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// pass the pressed key
|
||||||
|
// LOG_DEBUG("Canned message ANYKEY (%x)\n", event->kbchar);
|
||||||
|
this->payload = event->kbchar;
|
||||||
|
this->lastTouchMillis = millis();
|
||||||
|
validEvent = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (screen && (event->kbchar != 0xf1)) {
|
||||||
|
screen->removeFunctionSymbal("Fn"); // remove modifier (function) symbal
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (event->inputEvent == static_cast<char>(MATRIXKEY)) {
|
if (event->inputEvent == static_cast<char>(MATRIXKEY)) {
|
||||||
LOG_DEBUG("Canned message event Matrix key pressed\n");
|
LOG_DEBUG("Canned message event Matrix key pressed\n");
|
||||||
@@ -390,8 +454,9 @@ int32_t CannedMessageModule::runOnce()
|
|||||||
}
|
}
|
||||||
if (this->runState == CANNED_MESSAGE_RUN_STATE_FREETEXT) {
|
if (this->runState == CANNED_MESSAGE_RUN_STATE_FREETEXT) {
|
||||||
e.frameChanged = true;
|
e.frameChanged = true;
|
||||||
switch (this->payload) {
|
switch (this->payload) { // code below all trigger the freetext window (where you type to send a message) or reset the
|
||||||
case 0x08: // backspace
|
// display back to the default window
|
||||||
|
case 0x08: // backspace
|
||||||
if (this->freetext.length() > 0) {
|
if (this->freetext.length() > 0) {
|
||||||
if (this->cursor == this->freetext.length()) {
|
if (this->cursor == this->freetext.length()) {
|
||||||
this->freetext = this->freetext.substring(0, this->freetext.length() - 1);
|
this->freetext = this->freetext.substring(0, this->freetext.length() - 1);
|
||||||
@@ -403,7 +468,6 @@ int32_t CannedMessageModule::runOnce()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x09: // tab
|
case 0x09: // tab
|
||||||
case 0x91: // alt+t for T-Deck that doesn't have a tab key
|
|
||||||
if (this->destSelect == CANNED_MESSAGE_DESTINATION_TYPE_CHANNEL) {
|
if (this->destSelect == CANNED_MESSAGE_DESTINATION_TYPE_CHANNEL) {
|
||||||
this->destSelect = CANNED_MESSAGE_DESTINATION_TYPE_NONE;
|
this->destSelect = CANNED_MESSAGE_DESTINATION_TYPE_NONE;
|
||||||
} else if (this->destSelect == CANNED_MESSAGE_DESTINATION_TYPE_NODE) {
|
} else if (this->destSelect == CANNED_MESSAGE_DESTINATION_TYPE_NODE) {
|
||||||
@@ -416,7 +480,7 @@ int32_t CannedMessageModule::runOnce()
|
|||||||
case 0xb7: // right
|
case 0xb7: // right
|
||||||
// already handled above
|
// already handled above
|
||||||
break;
|
break;
|
||||||
// handle fn+s for shutdown
|
// handle fn+s for shutdown
|
||||||
case 0x9b:
|
case 0x9b:
|
||||||
if (screen)
|
if (screen)
|
||||||
screen->startShutdownScreen();
|
screen->startShutdownScreen();
|
||||||
@@ -430,37 +494,6 @@ int32_t CannedMessageModule::runOnce()
|
|||||||
rebootAtMsec = millis() + DEFAULT_REBOOT_SECONDS * 1000;
|
rebootAtMsec = millis() + DEFAULT_REBOOT_SECONDS * 1000;
|
||||||
runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
|
runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
|
||||||
break;
|
break;
|
||||||
case 0x9e: // toggle GPS like triple press does
|
|
||||||
#if !MESHTASTIC_EXCLUDE_GPS
|
|
||||||
if (gps != nullptr) {
|
|
||||||
gps->toggleGpsMode();
|
|
||||||
}
|
|
||||||
if (screen)
|
|
||||||
screen->forceDisplay();
|
|
||||||
showTemporaryMessage("GPS Toggled");
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
// mute (switch off/toggle) external notifications on fn+m
|
|
||||||
case 0xac:
|
|
||||||
if (moduleConfig.external_notification.enabled == true) {
|
|
||||||
if (externalNotificationModule->getMute()) {
|
|
||||||
externalNotificationModule->setMute(false);
|
|
||||||
showTemporaryMessage("Notifications \nEnabled");
|
|
||||||
} else {
|
|
||||||
externalNotificationModule->stopNow(); // this will turn off all GPIO and sounds and idle the loop
|
|
||||||
externalNotificationModule->setMute(true);
|
|
||||||
showTemporaryMessage("Notifications \nDisabled");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 0xaf: // fn+space send network ping like double press does
|
|
||||||
service.refreshLocalMeshNode();
|
|
||||||
if (service.trySendPosition(NODENUM_BROADCAST, true)) {
|
|
||||||
showTemporaryMessage("Position \nUpdate Sent");
|
|
||||||
} else {
|
|
||||||
showTemporaryMessage("Node Info \nUpdate Sent");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
if (this->cursor == this->freetext.length()) {
|
if (this->cursor == this->freetext.length()) {
|
||||||
this->freetext += this->payload;
|
this->freetext += this->payload;
|
||||||
@@ -476,6 +509,8 @@ int32_t CannedMessageModule::runOnce()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (screen)
|
||||||
|
screen->removeFunctionSymbal("Fn");
|
||||||
}
|
}
|
||||||
|
|
||||||
this->lastTouchMillis = millis();
|
this->lastTouchMillis = millis();
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
#include "modules/Telemetry/AirQualityTelemetry.h"
|
#include "modules/Telemetry/AirQualityTelemetry.h"
|
||||||
#include "modules/Telemetry/EnvironmentTelemetry.h"
|
#include "modules/Telemetry/EnvironmentTelemetry.h"
|
||||||
#endif
|
#endif
|
||||||
#if HAS_TELEMETRY && !defined(ARCH_PORTDUINO) && !MESHTASTIC_EXCLUDE_POWER_TELEMETRY
|
#if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_POWER_TELEMETRY
|
||||||
#include "modules/Telemetry/PowerTelemetry.h"
|
#include "modules/Telemetry/PowerTelemetry.h"
|
||||||
#endif
|
#endif
|
||||||
#ifdef ARCH_ESP32
|
#ifdef ARCH_ESP32
|
||||||
@@ -137,7 +137,7 @@ void setupModules()
|
|||||||
#if HAS_SCREEN && !MESHTASTIC_EXCLUDE_CANNEDMESSAGES
|
#if HAS_SCREEN && !MESHTASTIC_EXCLUDE_CANNEDMESSAGES
|
||||||
cannedMessageModule = new CannedMessageModule();
|
cannedMessageModule = new CannedMessageModule();
|
||||||
#endif
|
#endif
|
||||||
#if HAS_TELEMETRY && !defined(ARCH_PORTDUINO)
|
#if HAS_TELEMETRY
|
||||||
new DeviceTelemetryModule();
|
new DeviceTelemetryModule();
|
||||||
#endif
|
#endif
|
||||||
#if HAS_SENSOR && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR
|
#if HAS_SENSOR && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR
|
||||||
@@ -146,7 +146,7 @@ void setupModules()
|
|||||||
new AirQualityTelemetryModule();
|
new AirQualityTelemetryModule();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if HAS_TELEMETRY && !defined(ARCH_PORTDUINO) && !MESHTASTIC_EXCLUDE_POWER_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR
|
#if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_POWER_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR
|
||||||
new PowerTelemetryModule();
|
new PowerTelemetryModule();
|
||||||
#endif
|
#endif
|
||||||
#if (defined(ARCH_ESP32) || defined(ARCH_NRF52) || defined(ARCH_RP2040)) && !defined(CONFIG_IDF_TARGET_ESP32S2) && \
|
#if (defined(ARCH_ESP32) || defined(ARCH_NRF52) || defined(ARCH_RP2040)) && !defined(CONFIG_IDF_TARGET_ESP32S2) && \
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
#include "Sensor/MCP9808Sensor.h"
|
#include "Sensor/MCP9808Sensor.h"
|
||||||
#include "Sensor/RCWL9620Sensor.h"
|
#include "Sensor/RCWL9620Sensor.h"
|
||||||
#include "Sensor/SHT31Sensor.h"
|
#include "Sensor/SHT31Sensor.h"
|
||||||
|
#include "Sensor/SHT4XSensor.h"
|
||||||
#include "Sensor/SHTC3Sensor.h"
|
#include "Sensor/SHTC3Sensor.h"
|
||||||
#include "Sensor/VEML7700Sensor.h"
|
#include "Sensor/VEML7700Sensor.h"
|
||||||
|
|
||||||
@@ -38,6 +39,7 @@ SHTC3Sensor shtc3Sensor;
|
|||||||
LPS22HBSensor lps22hbSensor;
|
LPS22HBSensor lps22hbSensor;
|
||||||
SHT31Sensor sht31Sensor;
|
SHT31Sensor sht31Sensor;
|
||||||
VEML7700Sensor veml7700Sensor;
|
VEML7700Sensor veml7700Sensor;
|
||||||
|
SHT4XSensor sht4xSensor;
|
||||||
RCWL9620Sensor rcwl9620Sensor;
|
RCWL9620Sensor rcwl9620Sensor;
|
||||||
|
|
||||||
#define FAILED_STATE_SENSOR_READ_MULTIPLIER 10
|
#define FAILED_STATE_SENSOR_READ_MULTIPLIER 10
|
||||||
@@ -93,6 +95,8 @@ int32_t EnvironmentTelemetryModule::runOnce()
|
|||||||
result = lps22hbSensor.runOnce();
|
result = lps22hbSensor.runOnce();
|
||||||
if (sht31Sensor.hasSensor())
|
if (sht31Sensor.hasSensor())
|
||||||
result = sht31Sensor.runOnce();
|
result = sht31Sensor.runOnce();
|
||||||
|
if (sht4xSensor.hasSensor())
|
||||||
|
result = sht4xSensor.runOnce();
|
||||||
if (ina219Sensor.hasSensor())
|
if (ina219Sensor.hasSensor())
|
||||||
result = ina219Sensor.runOnce();
|
result = ina219Sensor.runOnce();
|
||||||
if (ina260Sensor.hasSensor())
|
if (ina260Sensor.hasSensor())
|
||||||
@@ -289,6 +293,7 @@ bool EnvironmentTelemetryModule::sendTelemetry(NodeNum dest, bool phoneOnly)
|
|||||||
}
|
}
|
||||||
valid = valid && hasSensor;
|
valid = valid && hasSensor;
|
||||||
|
|
||||||
|
|
||||||
if (valid) {
|
if (valid) {
|
||||||
LOG_INFO("(Sending): barometric_pressure=%f, current=%f, gas_resistance=%f, relative_humidity=%f, temperature=%f, "
|
LOG_INFO("(Sending): barometric_pressure=%f, current=%f, gas_resistance=%f, relative_humidity=%f, temperature=%f, "
|
||||||
"lux=%f\n",
|
"lux=%f\n",
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
#include "configuration.h"
|
||||||
|
|
||||||
|
#if !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR
|
||||||
|
|
||||||
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
|
#include "SHT4XSensor.h"
|
||||||
|
#include "TelemetrySensor.h"
|
||||||
|
#include <Adafruit_SHT4x.h>
|
||||||
|
|
||||||
|
SHT4XSensor::SHT4XSensor() : TelemetrySensor(meshtastic_TelemetrySensorType_SHT4X, "SHT4X") {}
|
||||||
|
|
||||||
|
int32_t SHT4XSensor::runOnce()
|
||||||
|
{
|
||||||
|
LOG_INFO("Init sensor: %s\n", sensorName);
|
||||||
|
if (!hasSensor()) {
|
||||||
|
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t serialNumber = 0;
|
||||||
|
|
||||||
|
sht4x.begin(nodeTelemetrySensorsMap[sensorType].second);
|
||||||
|
|
||||||
|
serialNumber = sht4x.readSerial();
|
||||||
|
if (serialNumber != 0) {
|
||||||
|
LOG_DEBUG("serialNumber : %x\n", serialNumber);
|
||||||
|
status = 1;
|
||||||
|
} else {
|
||||||
|
LOG_DEBUG("Error trying to execute readSerial(): ");
|
||||||
|
status = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return initI2CSensor();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHT4XSensor::setup()
|
||||||
|
{
|
||||||
|
// Set up oversampling and filter initialization
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SHT4XSensor::getMetrics(meshtastic_Telemetry *measurement)
|
||||||
|
{
|
||||||
|
sensors_event_t humidity, temp;
|
||||||
|
sht4x.getEvent(&humidity, &temp);
|
||||||
|
measurement->variant.environment_metrics.temperature = temp.temperature;
|
||||||
|
measurement->variant.environment_metrics.relative_humidity = humidity.relative_humidity;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#include "configuration.h"
|
||||||
|
|
||||||
|
#if !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR
|
||||||
|
|
||||||
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
|
#include "TelemetrySensor.h"
|
||||||
|
#include <Adafruit_SHT4x.h>
|
||||||
|
|
||||||
|
class SHT4XSensor : public TelemetrySensor
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
Adafruit_SHT4x sht4x = Adafruit_SHT4x();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void setup() override;
|
||||||
|
|
||||||
|
public:
|
||||||
|
SHT4XSensor();
|
||||||
|
virtual int32_t runOnce() override;
|
||||||
|
virtual bool getMetrics(meshtastic_Telemetry *measurement) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -54,6 +54,8 @@
|
|||||||
#define HW_VENDOR meshtastic_HardwareModel_NRF52840_PCA10059
|
#define HW_VENDOR meshtastic_HardwareModel_NRF52840_PCA10059
|
||||||
#elif defined(TWC_MESH_V4)
|
#elif defined(TWC_MESH_V4)
|
||||||
#define HW_VENDOR meshtastic_HardwareModel_TWC_MESH_V4
|
#define HW_VENDOR meshtastic_HardwareModel_TWC_MESH_V4
|
||||||
|
#elif defined(NRF52_PROMICRO_DIY)
|
||||||
|
#define HW_VENDOR meshtastic_HardwareModel_NRF52_PROMICRO_DIY
|
||||||
#elif defined(PRIVATE_HW) || defined(FEATHER_DIY)
|
#elif defined(PRIVATE_HW) || defined(FEATHER_DIY)
|
||||||
#define HW_VENDOR meshtastic_HardwareModel_PRIVATE_HW
|
#define HW_VENDOR meshtastic_HardwareModel_PRIVATE_HW
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -168,6 +168,7 @@ void portduinoSetup()
|
|||||||
settingsMap[txen] = yamlConfig["Lora"]["TXen"].as<int>(RADIOLIB_NC);
|
settingsMap[txen] = yamlConfig["Lora"]["TXen"].as<int>(RADIOLIB_NC);
|
||||||
settingsMap[rxen] = yamlConfig["Lora"]["RXen"].as<int>(RADIOLIB_NC);
|
settingsMap[rxen] = yamlConfig["Lora"]["RXen"].as<int>(RADIOLIB_NC);
|
||||||
settingsMap[gpiochip] = yamlConfig["Lora"]["gpiochip"].as<int>(0);
|
settingsMap[gpiochip] = yamlConfig["Lora"]["gpiochip"].as<int>(0);
|
||||||
|
settingsMap[ch341Quirk] = yamlConfig["Lora"]["ch341_quirk"].as<bool>(false);
|
||||||
gpioChipName += std::to_string(settingsMap[gpiochip]);
|
gpioChipName += std::to_string(settingsMap[gpiochip]);
|
||||||
|
|
||||||
settingsStrings[spidev] = "/dev/" + yamlConfig["Lora"]["spidev"].as<std::string>("spidev0.0");
|
settingsStrings[spidev] = "/dev/" + yamlConfig["Lora"]["spidev"].as<std::string>("spidev0.0");
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ enum configNames {
|
|||||||
rxen,
|
rxen,
|
||||||
dio2_as_rf_switch,
|
dio2_as_rf_switch,
|
||||||
dio3_tcxo_voltage,
|
dio3_tcxo_voltage,
|
||||||
|
ch341Quirk,
|
||||||
use_rf95,
|
use_rf95,
|
||||||
use_sx1280,
|
use_sx1280,
|
||||||
use_sx1268,
|
use_sx1268,
|
||||||
|
|||||||
@@ -264,7 +264,11 @@ void doDeepSleep(uint32_t msecToWake, bool skipPreflight = false)
|
|||||||
#ifdef BUTTON_PIN
|
#ifdef BUTTON_PIN
|
||||||
// Avoid leakage through button pin
|
// Avoid leakage through button pin
|
||||||
if (GPIO_IS_VALID_OUTPUT_GPIO(BUTTON_PIN)) {
|
if (GPIO_IS_VALID_OUTPUT_GPIO(BUTTON_PIN)) {
|
||||||
|
#ifdef BUTTON_NEED_PULLUP
|
||||||
|
pinMode(BUTTON_PIN, INPUT_PULLUP);
|
||||||
|
#else
|
||||||
pinMode(BUTTON_PIN, INPUT);
|
pinMode(BUTTON_PIN, INPUT);
|
||||||
|
#endif
|
||||||
gpio_hold_en((gpio_num_t)BUTTON_PIN);
|
gpio_hold_en((gpio_num_t)BUTTON_PIN);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
[env:CDEBYTE_EoRa-S3]
|
[env:CDEBYTE_EoRa-S3]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = CDEBYTE_EoRa-S3
|
board = CDEBYTE_EoRa-S3
|
||||||
|
board_level = extra
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32s3_base.build_flags}
|
${esp32s3_base.build_flags}
|
||||||
-D CDEBYTE_EORA_S3
|
-D CDEBYTE_EORA_S3
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
[env:pca10059_diy_eink]
|
[env:pca10059_diy_eink]
|
||||||
extends = nrf52840_base
|
extends = nrf52840_base
|
||||||
board = nordic_pca10059
|
board = nordic_pca10059
|
||||||
board_level = extra
|
|
||||||
build_flags = ${nrf52840_base.build_flags} -Ivariants/Dongle_nRF52840-pca10059-v1 -D NORDIC_PCA10059
|
build_flags = ${nrf52840_base.build_flags} -Ivariants/Dongle_nRF52840-pca10059-v1 -D NORDIC_PCA10059
|
||||||
-L "${platformio.libdeps_dir}/${this.__env__}/BSEC2 Software Library/src/cortex-m4/fpv4-sp-d16-hard"
|
-L "${platformio.libdeps_dir}/${this.__env__}/BSEC2 Software Library/src/cortex-m4/fpv4-sp-d16-hard"
|
||||||
-DEINK_DISPLAY_MODEL=GxEPD2_420_M01
|
-DEINK_DISPLAY_MODEL=GxEPD2_420_M01
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
[env:betafpv_900_tx_nano]
|
[env:betafpv_900_tx_nano]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = esp32doit-devkit-v1
|
board = esp32doit-devkit-v1
|
||||||
|
board_level = extra
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32_base.build_flags}
|
${esp32_base.build_flags}
|
||||||
-D BETAFPV_900_TX_NANO
|
-D BETAFPV_900_TX_NANO
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
[env:chatter2]
|
[env:chatter2]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = esp32doit-devkit-v1
|
board = esp32doit-devkit-v1
|
||||||
board_level = extra
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32_base.build_flags}
|
${esp32_base.build_flags}
|
||||||
-D CHATTER_2
|
-D CHATTER_2
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
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};
|
||||||
@@ -0,0 +1,154 @@
|
|||||||
|
#ifndef _VARIANT_PROMICRO_DIY_
|
||||||
|
#define _VARIANT_PROMICRO_DIY_
|
||||||
|
|
||||||
|
/** Master clock frequency */
|
||||||
|
#define VARIANT_MCK (64000000ul)
|
||||||
|
|
||||||
|
// #define USE_LFXO // Board uses 32khz crystal for LF
|
||||||
|
#define USE_LFRC // Board uses RC for LF
|
||||||
|
|
||||||
|
#define PROMICRO_DIY_TCXO
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
* Headers
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "WVariant.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
/*
|
||||||
|
NRF52 PRO MICRO PIN ASSIGNMENT
|
||||||
|
|
||||||
|
| Pin | Function | | Pin | Function |
|
||||||
|
|-------|------------|---|---------|-------------|
|
||||||
|
| Gnd | | | vbat | |
|
||||||
|
| P0.06 | Serial2 RX | | vbat | |
|
||||||
|
| P0.08 | Serial2 TX | | Gnd | |
|
||||||
|
| Gnd | | | reset | |
|
||||||
|
| Gnd | | | ext_vcc | *see 0.13 |
|
||||||
|
| P0.17 | RXEN | | P0.31 | BATTERY_PIN |
|
||||||
|
| P0.20 | GPS_RX | | P0.29 | BUSY |
|
||||||
|
| P0.22 | GPS_TX | | P0.02 | MISO |
|
||||||
|
| P0.24 | GPS_EN | | P1.15 | MOSI |
|
||||||
|
| P1.00 | BUTTON_PIN | | P1.13 | CS |
|
||||||
|
| P0.11 | SCL | | P1.11 | SCK |
|
||||||
|
| P1.04 | SDA | | P0.10 | DIO1/IRQ |
|
||||||
|
| P1.06 | Free pin | | P0.09 | RESET |
|
||||||
|
| | | | | |
|
||||||
|
| | Mid board | | | Internal |
|
||||||
|
| P1.01 | Free pin | | 0.15 | LED |
|
||||||
|
| P1.02 | Free pin | | 0.13 | 3V3_EN |
|
||||||
|
| P1.07 | Free pin | | | |
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Number of pins defined in PinDescription array
|
||||||
|
#define PINS_COUNT (48)
|
||||||
|
#define NUM_DIGITAL_PINS (48)
|
||||||
|
#define NUM_ANALOG_INPUTS (1)
|
||||||
|
#define NUM_ANALOG_OUTPUTS (0)
|
||||||
|
|
||||||
|
// Pin 13 enables 3.3V periphery. If the Lora module is on this pin, then it should stay enabled at all times.
|
||||||
|
#define PIN_3V3_EN (0 + 13) // P0.13
|
||||||
|
|
||||||
|
// Analog pins
|
||||||
|
#define BATTERY_PIN (0 + 31) // P0.31 Battery ADC
|
||||||
|
#define ADC_CHANNEL ADC1_GPIO4_CHANNEL
|
||||||
|
#define ADC_RESOLUTION 14
|
||||||
|
#define BATTERY_SENSE_RESOLUTION_BITS 12
|
||||||
|
#define BATTERY_SENSE_RESOLUTION 4096.0
|
||||||
|
// Definition of milliVolt per LSB => 3.0V ADC range and 12-bit ADC resolution = 3000mV/4096
|
||||||
|
#define VBAT_MV_PER_LSB (0.73242188F)
|
||||||
|
// Voltage divider value => 1.5M + 1M voltage divider on VBAT = (1.5M / (1M + 1.5M))
|
||||||
|
#define VBAT_DIVIDER (0.6F)
|
||||||
|
// Compensation factor for the VBAT divider
|
||||||
|
#define VBAT_DIVIDER_COMP (1.73)
|
||||||
|
// Fixed calculation of milliVolt from compensation value
|
||||||
|
#define REAL_VBAT_MV_PER_LSB (VBAT_DIVIDER_COMP * VBAT_MV_PER_LSB)
|
||||||
|
#undef AREF_VOLTAGE
|
||||||
|
#define AREF_VOLTAGE 3.0
|
||||||
|
#define VBAT_AR_INTERNAL AR_INTERNAL_3_0
|
||||||
|
#define ADC_MULTIPLIER VBAT_DIVIDER_COMP // REAL_VBAT_MV_PER_LSB
|
||||||
|
#define VBAT_RAW_TO_SCALED(x) (REAL_VBAT_MV_PER_LSB * x)
|
||||||
|
|
||||||
|
// WIRE IC AND IIC PINS
|
||||||
|
#define WIRE_INTERFACES_COUNT 1
|
||||||
|
|
||||||
|
#define PIN_WIRE_SDA (32 + 4) // P1.04
|
||||||
|
#define PIN_WIRE_SCL (0 + 11) // P0.11
|
||||||
|
|
||||||
|
// LED
|
||||||
|
#define PIN_LED1 (0 + 15) // P0.15
|
||||||
|
#define LED_BUILTIN PIN_LED1
|
||||||
|
// Actually red
|
||||||
|
#define LED_BLUE PIN_LED1
|
||||||
|
#define LED_STATE_ON 1 // State when LED is lit
|
||||||
|
|
||||||
|
// Button
|
||||||
|
#define BUTTON_PIN (32 + 0) // P1.00
|
||||||
|
|
||||||
|
// GPS
|
||||||
|
#define PIN_GPS_TX (0 + 22) // P0.22
|
||||||
|
#define PIN_GPS_RX (0 + 20) // P0.20
|
||||||
|
|
||||||
|
#define PIN_GPS_EN (0 + 24) // P0.24
|
||||||
|
#define GPS_POWER_TOGGLE
|
||||||
|
#define GPS_UBLOX
|
||||||
|
// define GPS_DEBUG
|
||||||
|
|
||||||
|
// UART interfaces
|
||||||
|
#define PIN_SERIAL1_RX PIN_GPS_TX
|
||||||
|
#define PIN_SERIAL1_TX PIN_GPS_RX
|
||||||
|
|
||||||
|
#define PIN_SERIAL2_RX (0 + 6) // P0.06
|
||||||
|
#define PIN_SERIAL2_TX (0 + 8) // P0.08
|
||||||
|
|
||||||
|
// Serial interfaces
|
||||||
|
#define SPI_INTERFACES_COUNT 1
|
||||||
|
|
||||||
|
#define PIN_SPI_MISO (0 + 2) // P0.02
|
||||||
|
#define PIN_SPI_MOSI (32 + 15) // P1.15
|
||||||
|
#define PIN_SPI_SCK (32 + 11) // P1.11
|
||||||
|
|
||||||
|
// LORA MODULES
|
||||||
|
#define USE_LLCC68
|
||||||
|
#define USE_SX1262
|
||||||
|
|
||||||
|
// LORA CONFIG
|
||||||
|
#define SX126X_CS (32 + 13) // P1.13 FIXME - we really should define LORA_CS instead
|
||||||
|
#define SX126X_DIO1 (0 + 10) // P0.10 IRQ
|
||||||
|
#define SX126X_DIO2_AS_RF_SWITCH // Note for E22 modules: DIO2 is not attached internally to TXEN for automatic TX/RX switching,
|
||||||
|
// so it needs connecting externally if it is used in this way
|
||||||
|
#define SX126X_BUSY (0 + 29) // P0.29
|
||||||
|
#define SX126X_RESET (0 + 9) // P0.09
|
||||||
|
#define SX126X_RXEN (0 + 17) // P0.17
|
||||||
|
#define SX126X_TXEN RADIOLIB_NC // Assuming that DIO2 is connected to TXEN pin. If not, TXEN must be connected.
|
||||||
|
|
||||||
|
/*
|
||||||
|
On the SX1262, DIO3 sets the voltage for an external TCXO, if one is present. If one is not present, then this should not be used.
|
||||||
|
|
||||||
|
Ebyte
|
||||||
|
e22-900mm22s has no TCXO
|
||||||
|
e22-900m22s has TCXO
|
||||||
|
e220-900mm22s has no TCXO, works with/without this definition, looks like DIO3 not connected at all
|
||||||
|
|
||||||
|
AI-thinker
|
||||||
|
RA-01SH does not have TCXO
|
||||||
|
|
||||||
|
Waveshare
|
||||||
|
Core1262 has TCXO
|
||||||
|
|
||||||
|
*/
|
||||||
|
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
* Arduino objects - C++ only
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
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};
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
#ifndef _VARIANT_PROMICRO_DIY_
|
||||||
|
#define _VARIANT_PROMICRO_DIY_
|
||||||
|
|
||||||
|
/** Master clock frequency */
|
||||||
|
#define VARIANT_MCK (64000000ul)
|
||||||
|
|
||||||
|
// #define USE_LFXO // Board uses 32khz crystal for LF
|
||||||
|
#define USE_LFRC // Board uses RC for LF
|
||||||
|
|
||||||
|
#define PROMICRO_DIY_XTAL
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
* Headers
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "WVariant.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
/*
|
||||||
|
NRF52 PRO MICRO PIN ASSIGNMENT
|
||||||
|
|
||||||
|
| Pin | Function | | Pin | Function |
|
||||||
|
|-------|------------|---|---------|-------------|
|
||||||
|
| Gnd | | | vbat | |
|
||||||
|
| P0.06 | Serial2 RX | | vbat | |
|
||||||
|
| P0.08 | Serial2 TX | | Gnd | |
|
||||||
|
| Gnd | | | reset | |
|
||||||
|
| Gnd | | | ext_vcc | *see 0.13 |
|
||||||
|
| P0.17 | RXEN | | P0.31 | BATTERY_PIN |
|
||||||
|
| P0.20 | GPS_RX | | P0.29 | BUSY |
|
||||||
|
| P0.22 | GPS_TX | | P0.02 | MISO |
|
||||||
|
| P0.24 | GPS_EN | | P1.15 | MOSI |
|
||||||
|
| P1.00 | BUTTON_PIN | | P1.13 | CS |
|
||||||
|
| P0.11 | SCL | | P1.11 | SCK |
|
||||||
|
| P1.04 | SDA | | P0.10 | DIO1/IRQ |
|
||||||
|
| P1.06 | Free pin | | P0.09 | RESET |
|
||||||
|
| | | | | |
|
||||||
|
| | Mid board | | | Internal |
|
||||||
|
| P1.01 | Free pin | | 0.15 | LED |
|
||||||
|
| P1.02 | Free pin | | 0.13 | 3V3_EN |
|
||||||
|
| P1.07 | Free pin | | | |
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Number of pins defined in PinDescription array
|
||||||
|
#define PINS_COUNT (48)
|
||||||
|
#define NUM_DIGITAL_PINS (48)
|
||||||
|
#define NUM_ANALOG_INPUTS (1)
|
||||||
|
#define NUM_ANALOG_OUTPUTS (0)
|
||||||
|
|
||||||
|
// Pin 13 enables 3.3V periphery. If the Lora module is on this pin, then it should stay enabled at all times.
|
||||||
|
#define PIN_3V3_EN (0 + 13) // P0.13
|
||||||
|
|
||||||
|
// Analog pins
|
||||||
|
#define BATTERY_PIN (0 + 31) // P0.31 Battery ADC
|
||||||
|
#define ADC_CHANNEL ADC1_GPIO4_CHANNEL
|
||||||
|
#define ADC_RESOLUTION 14
|
||||||
|
#define BATTERY_SENSE_RESOLUTION_BITS 12
|
||||||
|
#define BATTERY_SENSE_RESOLUTION 4096.0
|
||||||
|
// Definition of milliVolt per LSB => 3.0V ADC range and 12-bit ADC resolution = 3000mV/4096
|
||||||
|
#define VBAT_MV_PER_LSB (0.73242188F)
|
||||||
|
// Voltage divider value => 1.5M + 1M voltage divider on VBAT = (1.5M / (1M + 1.5M))
|
||||||
|
#define VBAT_DIVIDER (0.6F)
|
||||||
|
// Compensation factor for the VBAT divider
|
||||||
|
#define VBAT_DIVIDER_COMP (1.73)
|
||||||
|
// Fixed calculation of milliVolt from compensation value
|
||||||
|
#define REAL_VBAT_MV_PER_LSB (VBAT_DIVIDER_COMP * VBAT_MV_PER_LSB)
|
||||||
|
#undef AREF_VOLTAGE
|
||||||
|
#define AREF_VOLTAGE 3.0
|
||||||
|
#define VBAT_AR_INTERNAL AR_INTERNAL_3_0
|
||||||
|
#define ADC_MULTIPLIER VBAT_DIVIDER_COMP // REAL_VBAT_MV_PER_LSB
|
||||||
|
#define VBAT_RAW_TO_SCALED(x) (REAL_VBAT_MV_PER_LSB * x)
|
||||||
|
|
||||||
|
// WIRE IC AND IIC PINS
|
||||||
|
#define WIRE_INTERFACES_COUNT 1
|
||||||
|
|
||||||
|
#define PIN_WIRE_SDA (32 + 4) // P1.04
|
||||||
|
#define PIN_WIRE_SCL (0 + 11) // P0.11
|
||||||
|
|
||||||
|
// LED
|
||||||
|
#define PIN_LED1 (0 + 15) // P0.15
|
||||||
|
#define LED_BUILTIN PIN_LED1
|
||||||
|
// Actually red
|
||||||
|
#define LED_BLUE PIN_LED1
|
||||||
|
#define LED_STATE_ON 1 // State when LED is lit
|
||||||
|
|
||||||
|
// Button
|
||||||
|
#define BUTTON_PIN (32 + 0) // P1.00
|
||||||
|
|
||||||
|
// GPS
|
||||||
|
#define PIN_GPS_TX (0 + 22) // P0.22
|
||||||
|
#define PIN_GPS_RX (0 + 20) // P0.20
|
||||||
|
|
||||||
|
#define PIN_GPS_EN (0 + 24) // P0.24
|
||||||
|
#define GPS_POWER_TOGGLE
|
||||||
|
#define GPS_UBLOX
|
||||||
|
// define GPS_DEBUG
|
||||||
|
|
||||||
|
// UART interfaces
|
||||||
|
#define PIN_SERIAL1_RX PIN_GPS_TX
|
||||||
|
#define PIN_SERIAL1_TX PIN_GPS_RX
|
||||||
|
|
||||||
|
#define PIN_SERIAL2_RX (0 + 6) // P0.06
|
||||||
|
#define PIN_SERIAL2_TX (0 + 8) // P0.08
|
||||||
|
|
||||||
|
// Serial interfaces
|
||||||
|
#define SPI_INTERFACES_COUNT 1
|
||||||
|
|
||||||
|
#define PIN_SPI_MISO (0 + 2) // P0.02
|
||||||
|
#define PIN_SPI_MOSI (32 + 15) // P1.15
|
||||||
|
#define PIN_SPI_SCK (32 + 11) // P1.11
|
||||||
|
|
||||||
|
// LORA MODULES
|
||||||
|
#define USE_LLCC68
|
||||||
|
#define USE_SX1262
|
||||||
|
|
||||||
|
// LORA CONFIG
|
||||||
|
#define SX126X_CS (32 + 13) // P1.13 FIXME - we really should define LORA_CS instead
|
||||||
|
#define SX126X_DIO1 (0 + 10) // P0.10 IRQ
|
||||||
|
#define SX126X_DIO2_AS_RF_SWITCH // Note for E22 modules: DIO2 is not attached internally to TXEN for automatic TX/RX switching,
|
||||||
|
// so it needs connecting externally if it is used in this way
|
||||||
|
#define SX126X_BUSY (0 + 29) // P0.29
|
||||||
|
#define SX126X_RESET (0 + 9) // P0.09
|
||||||
|
#define SX126X_RXEN (0 + 17) // P0.17
|
||||||
|
#define SX126X_TXEN RADIOLIB_NC // Assuming that DIO2 is connected to TXEN pin. If not, TXEN must be connected.
|
||||||
|
|
||||||
|
/*
|
||||||
|
On the SX1262, DIO3 sets the voltage for an external TCXO, if one is present. If one is not present, then this should not be used.
|
||||||
|
|
||||||
|
Ebyte
|
||||||
|
e22-900mm22s has no TCXO
|
||||||
|
e22-900m22s has TCXO
|
||||||
|
e220-900mm22s has no TCXO, works with/without this definition, looks like DIO3 not connected at all
|
||||||
|
|
||||||
|
AI-thinker
|
||||||
|
RA-01SH does not have TCXO
|
||||||
|
|
||||||
|
Waveshare
|
||||||
|
Core1262 has TCXO
|
||||||
|
|
||||||
|
*/
|
||||||
|
// #define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
* Arduino objects - C++ only
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
[env:meshtastic-diy-v1]
|
[env:meshtastic-diy-v1]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = esp32doit-devkit-v1
|
board = esp32doit-devkit-v1
|
||||||
board_level = extra
|
board_check = true
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32_base.build_flags}
|
${esp32_base.build_flags}
|
||||||
-D DIY_V1
|
-D DIY_V1
|
||||||
@@ -26,7 +26,6 @@ build_flags =
|
|||||||
[env:meshtastic-dr-dev]
|
[env:meshtastic-dr-dev]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = esp32doit-devkit-v1
|
board = esp32doit-devkit-v1
|
||||||
board_level = extra
|
|
||||||
board_upload.maximum_size = 4194304
|
board_upload.maximum_size = 4194304
|
||||||
board_upload.maximum_ram_size = 532480
|
board_upload.maximum_ram_size = 532480
|
||||||
build_flags =
|
build_flags =
|
||||||
@@ -39,8 +38,39 @@ build_flags =
|
|||||||
[env:hydra]
|
[env:hydra]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = esp32doit-devkit-v1
|
board = esp32doit-devkit-v1
|
||||||
board_level = extra
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32_base.build_flags}
|
${esp32_base.build_flags}
|
||||||
-D DIY_V1
|
-D DIY_V1
|
||||||
-I variants/diy/hydra
|
-I variants/diy/hydra
|
||||||
|
|
||||||
|
|
||||||
|
; 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
|
||||||
|
-D OLED_RU
|
||||||
|
-L "${platformio.libdeps_dir}/${this.__env__}/BSEC2 Software Library/src/cortex-m4/fpv4-sp-d16-hard"
|
||||||
|
build_src_filter = ${nrf52_base.build_src_filter} +<../variants/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
|
||||||
|
board_level = extra
|
||||||
|
build_flags = ${nrf52840_base.build_flags}
|
||||||
|
-I variants/diy/nrf52_promicro_diy_tcxo
|
||||||
|
-D NRF52_PROMICRO_DIY
|
||||||
|
-D OLED_RU
|
||||||
|
-L "${platformio.libdeps_dir}/${this.__env__}/BSEC2 Software Library/src/cortex-m4/fpv4-sp-d16-hard"
|
||||||
|
build_src_filter = ${nrf52_base.build_src_filter} +<../variants/diy/nrf52_promicro_diy_tcxo>
|
||||||
|
lib_deps =
|
||||||
|
${nrf52840_base.lib_deps}
|
||||||
|
debug_tool = jlink
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
[env:feather_diy]
|
[env:feather_diy]
|
||||||
extends = nrf52840_base
|
extends = nrf52840_base
|
||||||
board = adafruit_feather_nrf52840
|
board = adafruit_feather_nrf52840
|
||||||
board_level = extra
|
|
||||||
build_flags = ${nrf52840_base.build_flags} -Ivariants/feather_diy -Dfeather_diy
|
build_flags = ${nrf52840_base.build_flags} -Ivariants/feather_diy -Dfeather_diy
|
||||||
-L "${platformio.libdeps_dir}/${this.__env__}/BSEC2 Software Library/src/cortex-m4/fpv4-sp-d16-hard"
|
-L "${platformio.libdeps_dir}/${this.__env__}/BSEC2 Software Library/src/cortex-m4/fpv4-sp-d16-hard"
|
||||||
build_src_filter = ${nrf52_base.build_src_filter} +<../variants/feather_diy>
|
build_src_filter = ${nrf52_base.build_src_filter} +<../variants/feather_diy>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
[env:heltec-ht62-esp32c3-sx1262]
|
[env:heltec-ht62-esp32c3-sx1262]
|
||||||
extends = esp32c3_base
|
extends = esp32c3_base
|
||||||
board = esp32-c3-devkitm-1
|
board = esp32-c3-devkitm-1
|
||||||
board_level = extra
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32_base.build_flags}
|
${esp32_base.build_flags}
|
||||||
-D HELTEC_HT62
|
-D HELTEC_HT62
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
;build_type = debug ; to make it possible to step through our jtag debugger
|
;build_type = debug ; to make it possible to step through our jtag debugger
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = heltec_wifi_lora_32_V2
|
board = heltec_wifi_lora_32_V2
|
||||||
board_level = extra
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32_base.build_flags} -D HELTEC_V2_1 -I variants/heltec_v2.1
|
${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.
|
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
||||||
@@ -2,6 +2,5 @@
|
|||||||
;build_type = debug ; to make it possible to step through our jtag debugger
|
;build_type = debug ; to make it possible to step through our jtag debugger
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = heltec_wifi_lora_32_V2
|
board = heltec_wifi_lora_32_V2
|
||||||
board_level = extra
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32_base.build_flags} -D HELTEC_V2_0 -I variants/heltec_v2
|
${esp32_base.build_flags} -D HELTEC_V2_0 -I variants/heltec_v2
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
[env:heltec-v3]
|
[env:heltec-v3]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wifi_lora_32_V3
|
board = heltec_wifi_lora_32_V3
|
||||||
|
board_check = true
|
||||||
# Temporary until espressif creates a release with this new target
|
# Temporary until espressif creates a release with this new target
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32s3_base.build_flags} -D HELTEC_V3 -I variants/heltec_v3
|
${esp32s3_base.build_flags} -D HELTEC_V3 -I variants/heltec_v3
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
[env:m5stack-core]
|
[env:m5stack-core]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = m5stack-core-esp32
|
board = m5stack-core-esp32
|
||||||
board_level = extra
|
|
||||||
monitor_filters = esp32_exception_decoder
|
monitor_filters = esp32_exception_decoder
|
||||||
build_src_filter =
|
build_src_filter =
|
||||||
${esp32_base.build_src_filter}
|
${esp32_base.build_src_filter}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[env:m5stack-coreink]
|
[env:m5stack-coreink]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = m5stack-coreink
|
board = m5stack-coreink
|
||||||
board_level = extra
|
board_check = true
|
||||||
build_src_filter =
|
build_src_filter =
|
||||||
${esp32_base.build_src_filter}
|
${esp32_base.build_src_filter}
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
; The very slick RAK wireless RAK10701 Field Tester device. Note you will have to flash to Arduino bootloader to use this firmware. Be aware touch is not currently working.
|
; The very slick RAK wireless RAK10701 Field Tester device. Note you will have to flash to Arduino bootloader to use this firmware. Be aware touch is not currently working.
|
||||||
[env:rak10701]
|
[env:rak10701]
|
||||||
extends = nrf52840_base
|
extends = nrf52840_base
|
||||||
|
board_level = extra
|
||||||
board = wiscore_rak4631
|
board = wiscore_rak4631
|
||||||
build_flags = ${nrf52840_base.build_flags} -Ivariants/rak10701 -D RAK_4631
|
build_flags = ${nrf52840_base.build_flags} -Ivariants/rak10701 -D RAK_4631
|
||||||
-L "${platformio.libdeps_dir}/${this.__env__}/BSEC2 Software Library/src/cortex-m4/fpv4-sp-d16-hard"
|
-L "${platformio.libdeps_dir}/${this.__env__}/BSEC2 Software Library/src/cortex-m4/fpv4-sp-d16-hard"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[env:rak11200]
|
[env:rak11200]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board_level = extra
|
|
||||||
board = wiscore_rak11200
|
board = wiscore_rak11200
|
||||||
|
board_check = true
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32_base.build_flags} -D RAK_11200 -I variants/rak11200
|
${esp32_base.build_flags} -D RAK_11200 -I variants/rak11200
|
||||||
upload_speed = 115200
|
upload_speed = 115200
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
[env:rak4631]
|
[env:rak4631]
|
||||||
extends = nrf52840_base
|
extends = nrf52840_base
|
||||||
board = wiscore_rak4631
|
board = wiscore_rak4631
|
||||||
|
board_check = true
|
||||||
build_flags = ${nrf52840_base.build_flags} -Ivariants/rak4631 -D RAK_4631
|
build_flags = ${nrf52840_base.build_flags} -Ivariants/rak4631 -D RAK_4631
|
||||||
-L "${platformio.libdeps_dir}/${this.__env__}/BSEC2 Software Library/src/cortex-m4/fpv4-sp-d16-hard"
|
-L "${platformio.libdeps_dir}/${this.__env__}/BSEC2 Software Library/src/cortex-m4/fpv4-sp-d16-hard"
|
||||||
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
[env:pico_slowclock]
|
[env:pico_slowclock]
|
||||||
extends = rp2040_base
|
extends = rp2040_base
|
||||||
board = rpipico
|
board = rpipico
|
||||||
|
board_level = extra
|
||||||
upload_protocol = jlink
|
upload_protocol = jlink
|
||||||
# debug settings for external openocd with RP2040 support (custom build)
|
# debug settings for external openocd with RP2040 support (custom build)
|
||||||
debug_tool = custom
|
debug_tool = custom
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
[env:picow]
|
[env:picow]
|
||||||
extends = rp2040_base
|
extends = rp2040_base
|
||||||
board = rpipicow
|
board = rpipicow
|
||||||
board_level = extra
|
|
||||||
upload_protocol = picotool
|
upload_protocol = picotool
|
||||||
|
|
||||||
# add our variants files to the include and src paths
|
# add our variants files to the include and src paths
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
[env:station-g2]
|
[env:station-g2]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = station-g2
|
board = station-g2
|
||||||
|
board_check = true
|
||||||
board_build.mcu = esp32s3
|
board_build.mcu = esp32s3
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
;upload_port = /dev/ttyACM0
|
;upload_port = /dev/ttyACM0
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
[env:t-deck]
|
[env:t-deck]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = t-deck
|
board = t-deck
|
||||||
|
board_check = true
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
#upload_port = COM29
|
#upload_port = COM29
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#define TFT_OFFSET_ROTATION 0
|
#define TFT_OFFSET_ROTATION 0
|
||||||
#define SCREEN_ROTATE
|
#define SCREEN_ROTATE
|
||||||
#define SCREEN_TRANSITION_FRAMERATE 5
|
#define SCREEN_TRANSITION_FRAMERATE 5
|
||||||
|
#define BRIGHTNESS_DEFAULT 130 // Medium Low Brightness
|
||||||
|
|
||||||
#define HAS_TOUCHSCREEN 1
|
#define HAS_TOUCHSCREEN 1
|
||||||
#define SCREEN_TOUCH_INT 16
|
#define SCREEN_TOUCH_INT 16
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
[env:t-echo]
|
[env:t-echo]
|
||||||
extends = nrf52840_base
|
extends = nrf52840_base
|
||||||
board = t-echo
|
board = t-echo
|
||||||
|
board_check = true
|
||||||
debug_tool = jlink
|
debug_tool = jlink
|
||||||
|
|
||||||
# add -DCFG_SYSVIEW if you want to use the Segger systemview tool for OS profiling.
|
# add -DCFG_SYSVIEW if you want to use the Segger systemview tool for OS profiling.
|
||||||
@@ -15,8 +16,9 @@ build_flags = ${nrf52840_base.build_flags} -Ivariants/t-echo
|
|||||||
-DEINK_LIMIT_FASTREFRESH=20 ; How many consecutive fast-refreshes are permitted
|
-DEINK_LIMIT_FASTREFRESH=20 ; How many consecutive fast-refreshes are permitted
|
||||||
-DEINK_LIMIT_RATE_BACKGROUND_SEC=30 ; Minimum interval between BACKGROUND updates
|
-DEINK_LIMIT_RATE_BACKGROUND_SEC=30 ; Minimum interval between BACKGROUND updates
|
||||||
-DEINK_LIMIT_RATE_RESPONSIVE_SEC=1 ; Minimum interval between RESPONSIVE updates
|
-DEINK_LIMIT_RATE_RESPONSIVE_SEC=1 ; Minimum interval between RESPONSIVE updates
|
||||||
-DEINK_LIMIT_GHOSTING_PX=2000 ; (Optional) How much image ghosting is tolerated
|
; -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.
|
-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/t-echo>
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${nrf52840_base.lib_deps}
|
${nrf52840_base.lib_deps}
|
||||||
|
|||||||
@@ -65,6 +65,9 @@ extern "C" {
|
|||||||
#define PIN_BUTTON2 (0 + 18) // 0.18 is labeled on the board as RESET but we configure it in the bootloader as a regular GPIO
|
#define PIN_BUTTON2 (0 + 18) // 0.18 is labeled on the board as RESET but we configure it in the bootloader as a regular GPIO
|
||||||
#define PIN_BUTTON_TOUCH (0 + 11) // 0.11 is the soft touch button on T-Echo
|
#define PIN_BUTTON_TOUCH (0 + 11) // 0.11 is the soft touch button on T-Echo
|
||||||
|
|
||||||
|
#define BUTTON_CLICK_MS 400
|
||||||
|
#define BUTTON_TOUCH_MS 200
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Analog pins
|
* Analog pins
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
[env:t-watch-s3]
|
[env:t-watch-s3]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = t-watch-s3
|
board = t-watch-s3
|
||||||
|
board_check = true
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
|
|
||||||
build_flags = ${esp32_base.build_flags}
|
build_flags = ${esp32_base.build_flags}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
[env:tbeam-s3-core]
|
[env:tbeam-s3-core]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = tbeam-s3-core
|
board = tbeam-s3-core
|
||||||
|
board_check = true
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32s3_base.lib_deps}
|
${esp32s3_base.lib_deps}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
[env:tbeam]
|
[env:tbeam]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = ttgo-t-beam
|
board = ttgo-t-beam
|
||||||
|
board_check = true
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32_base.lib_deps}
|
${esp32_base.lib_deps}
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -2,6 +2,5 @@
|
|||||||
[env:tbeam0_7]
|
[env:tbeam0_7]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = ttgo-t-beam
|
board = ttgo-t-beam
|
||||||
board_level = extra
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32_base.build_flags} -D TBEAM_V07 -I variants/tbeam_v07
|
${esp32_base.build_flags} -D TBEAM_V07 -I variants/tbeam_v07
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
[env:tlora-t3s3-v1]
|
[env:tlora-t3s3-v1]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = tlora-t3s3-v1
|
board = tlora-t3s3-v1
|
||||||
|
board_check = true
|
||||||
upload_protocol = esp-builtin
|
upload_protocol = esp-builtin
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
[env:tlora_v1_3]
|
[env:tlora_v1_3]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board_level = extra
|
|
||||||
board = ttgo-lora32-v1
|
board = ttgo-lora32-v1
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32_base.build_flags} -D TLORA_V1_3 -I variants/tlora_v1_3
|
${esp32_base.build_flags} -D TLORA_V1_3 -I variants/tlora_v1_3
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
[env:tlora-v2]
|
[env:tlora-v2]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = ttgo-lora32-v1
|
board = ttgo-lora32-v1
|
||||||
board_level = extra
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32_base.build_flags} -D TLORA_V2 -I variants/tlora_v2
|
${esp32_base.build_flags} -D TLORA_V2 -I variants/tlora_v2
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
[env:tlora-v2-1-1_6]
|
[env:tlora-v2-1-1_6]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = ttgo-lora32-v21
|
board = ttgo-lora32-v21
|
||||||
|
board_check = true
|
||||||
build_flags =
|
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/tlora_v2_1_16
|
||||||
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
#ifndef Pins_Arduino_h
|
||||||
|
#define Pins_Arduino_h
|
||||||
|
|
||||||
|
#include "soc/soc_caps.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define WIFI_LoRa_32_V3 true
|
||||||
|
#define DISPLAY_HEIGHT 80
|
||||||
|
#define DISPLAY_WIDTH 160
|
||||||
|
|
||||||
|
#define USB_VID 0x303a
|
||||||
|
#define USB_PID 0x1001
|
||||||
|
|
||||||
|
#define EXTERNAL_NUM_INTERRUPTS 46
|
||||||
|
#define NUM_DIGITAL_PINS 48
|
||||||
|
#define NUM_ANALOG_INPUTS 20
|
||||||
|
|
||||||
|
static const uint8_t LED_BUILTIN = 18;
|
||||||
|
#define BUILTIN_LED LED_BUILTIN // backward compatibility
|
||||||
|
#define LED_BUILTIN LED_BUILTIN
|
||||||
|
|
||||||
|
#define analogInputToDigitalPin(p) (((p) < 20) ? (analogChannelToDigitalPin(p)) : -1)
|
||||||
|
#define digitalPinToInterrupt(p) (((p) < 48) ? (p) : -1)
|
||||||
|
#define digitalPinHasPWM(p) (p < 46)
|
||||||
|
|
||||||
|
static const uint8_t TX = 43;
|
||||||
|
static const uint8_t RX = 44;
|
||||||
|
|
||||||
|
static const uint8_t SDA = 45;
|
||||||
|
static const uint8_t SCL = 46;
|
||||||
|
|
||||||
|
static const uint8_t SS = 8;
|
||||||
|
static const uint8_t MOSI = 10;
|
||||||
|
static const uint8_t MISO = 11;
|
||||||
|
static const uint8_t SCK = 9;
|
||||||
|
|
||||||
|
static const uint8_t A0 = 1;
|
||||||
|
static const uint8_t A1 = 2;
|
||||||
|
static const uint8_t A2 = 3;
|
||||||
|
static const uint8_t A3 = 4;
|
||||||
|
static const uint8_t A4 = 5;
|
||||||
|
static const uint8_t A5 = 6;
|
||||||
|
static const uint8_t A6 = 7;
|
||||||
|
static const uint8_t A7 = 8;
|
||||||
|
static const uint8_t A8 = 9;
|
||||||
|
static const uint8_t A9 = 10;
|
||||||
|
static const uint8_t A10 = 11;
|
||||||
|
static const uint8_t A11 = 12;
|
||||||
|
static const uint8_t A12 = 13;
|
||||||
|
static const uint8_t A13 = 14;
|
||||||
|
static const uint8_t A14 = 15;
|
||||||
|
static const uint8_t A15 = 16;
|
||||||
|
static const uint8_t A16 = 17;
|
||||||
|
static const uint8_t A17 = 18;
|
||||||
|
static const uint8_t A18 = 19;
|
||||||
|
static const uint8_t A19 = 20;
|
||||||
|
|
||||||
|
static const uint8_t T1 = 1;
|
||||||
|
static const uint8_t T2 = 2;
|
||||||
|
static const uint8_t T3 = 3;
|
||||||
|
static const uint8_t T4 = 4;
|
||||||
|
static const uint8_t T5 = 5;
|
||||||
|
static const uint8_t T6 = 6;
|
||||||
|
static const uint8_t T7 = 7;
|
||||||
|
static const uint8_t T8 = 8;
|
||||||
|
static const uint8_t T9 = 9;
|
||||||
|
static const uint8_t T10 = 10;
|
||||||
|
static const uint8_t T11 = 11;
|
||||||
|
static const uint8_t T12 = 12;
|
||||||
|
static const uint8_t T13 = 13;
|
||||||
|
static const uint8_t T14 = 14;
|
||||||
|
|
||||||
|
static const uint8_t Vext = 36;
|
||||||
|
static const uint8_t LED = 18;
|
||||||
|
|
||||||
|
static const uint8_t RST_LoRa = 12;
|
||||||
|
static const uint8_t BUSY_LoRa = 13;
|
||||||
|
static const uint8_t DIO0 = 14;
|
||||||
|
|
||||||
|
#endif /* Pins_Arduino_h */
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
#define LED_PIN 18
|
||||||
|
|
||||||
|
#define HELTEC_TRACKER_V1_X
|
||||||
|
|
||||||
|
// TRACKSENGER builtin LCD
|
||||||
|
|
||||||
|
// I2C
|
||||||
|
#define I2C_SDA SDA
|
||||||
|
#define I2C_SCL SCL
|
||||||
|
|
||||||
|
// ST7735S TFT LCD
|
||||||
|
#define ST7735S 1 // there are different (sub-)versions of ST7735
|
||||||
|
#define ST7735_CS 38
|
||||||
|
#define ST7735_RS 40 // DC
|
||||||
|
#define ST7735_SDA 42 // MOSI
|
||||||
|
#define ST7735_SCK 41
|
||||||
|
#define ST7735_RESET 39
|
||||||
|
#define ST7735_MISO -1
|
||||||
|
#define ST7735_BUSY -1
|
||||||
|
#define ST7735_BL_V05 21 /* V1.1 PCB marking */
|
||||||
|
#define ST7735_SPI_HOST SPI3_HOST
|
||||||
|
#define SPI_FREQUENCY 40000000
|
||||||
|
#define SPI_READ_FREQUENCY 16000000
|
||||||
|
#define SCREEN_ROTATE
|
||||||
|
#define TFT_HEIGHT DISPLAY_WIDTH
|
||||||
|
#define TFT_WIDTH DISPLAY_HEIGHT
|
||||||
|
#define TFT_OFFSET_X 26
|
||||||
|
#define TFT_OFFSET_Y -1
|
||||||
|
#define SCREEN_TRANSITION_FRAMERATE 3 // fps
|
||||||
|
#define DISPLAY_FORCE_SMALL_FONTS
|
||||||
|
|
||||||
|
#define VEXT_ENABLE_V05 3 // active HIGH, powers the lora antenna boost
|
||||||
|
#define BUTTON_PIN 0
|
||||||
|
|
||||||
|
#define BATTERY_PIN 1 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
|
||||||
|
#define ADC_CHANNEL ADC1_GPIO1_CHANNEL
|
||||||
|
#define ADC_ATTENUATION ADC_ATTEN_DB_2_5 // lower dB for high resistance voltage divider
|
||||||
|
#define ADC_MULTIPLIER 4.9
|
||||||
|
#define ADC_CTRL 2 // active HIGH, powers the voltage divider. Only on 1.1
|
||||||
|
#define ADC_CTRL_ENABLED HIGH
|
||||||
|
|
||||||
|
#undef GPS_RX_PIN
|
||||||
|
#undef GPS_TX_PIN
|
||||||
|
#define GPS_RX_PIN 33
|
||||||
|
#define GPS_TX_PIN 34
|
||||||
|
#define PIN_GPS_RESET 35
|
||||||
|
#define PIN_GPS_PPS 36
|
||||||
|
|
||||||
|
#define GPS_RESET_MODE LOW
|
||||||
|
#define GPS_UC6580
|
||||||
|
|
||||||
|
#define USE_SX1262
|
||||||
|
#define LORA_DIO0 -1 // a No connect on the SX1262 module
|
||||||
|
#define LORA_RESET 12
|
||||||
|
#define LORA_DIO1 14 // SX1262 IRQ
|
||||||
|
#define LORA_DIO2 13 // SX1262 BUSY
|
||||||
|
#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262, if DIO3 is high the TXCO is enabled
|
||||||
|
|
||||||
|
#define LORA_SCK 9
|
||||||
|
#define LORA_MISO 11
|
||||||
|
#define LORA_MOSI 10
|
||||||
|
#define LORA_CS 8
|
||||||
|
|
||||||
|
#define SX126X_CS LORA_CS
|
||||||
|
#define SX126X_DIO1 LORA_DIO1
|
||||||
|
#define SX126X_BUSY LORA_DIO2
|
||||||
|
#define SX126X_RESET LORA_RESET
|
||||||
|
|
||||||
|
#define SX126X_DIO2_AS_RF_SWITCH
|
||||||
|
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
||||||
|
|
||||||
|
// Picomputer gets a white on black display
|
||||||
|
#define TFT_MESH COLOR565(0xFF, 0xFF, 0xFF)
|
||||||
|
|
||||||
|
// keyboard changes
|
||||||
|
|
||||||
|
#define PIN_BUZZER 43
|
||||||
|
#define CANNED_MESSAGE_MODULE_ENABLE 1
|
||||||
|
|
||||||
|
#define INPUTBROKER_MATRIX_TYPE 1
|
||||||
|
|
||||||
|
#define KEYS_COLS \
|
||||||
|
{ \
|
||||||
|
44, 45, 46, 4, 5, 6 \
|
||||||
|
}
|
||||||
|
#define KEYS_ROWS \
|
||||||
|
{ \
|
||||||
|
26, 37, 17, 16, 15, 7 \
|
||||||
|
}
|
||||||
|
// #end keyboard
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
#ifndef Pins_Arduino_h
|
||||||
|
#define Pins_Arduino_h
|
||||||
|
|
||||||
|
#include "soc/soc_caps.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define WIFI_LoRa_32_V3 true
|
||||||
|
#define DISPLAY_HEIGHT 80
|
||||||
|
#define DISPLAY_WIDTH 160
|
||||||
|
|
||||||
|
#define USB_VID 0x303a
|
||||||
|
#define USB_PID 0x1001
|
||||||
|
|
||||||
|
#define EXTERNAL_NUM_INTERRUPTS 46
|
||||||
|
#define NUM_DIGITAL_PINS 48
|
||||||
|
#define NUM_ANALOG_INPUTS 20
|
||||||
|
|
||||||
|
static const uint8_t LED_BUILTIN = 18;
|
||||||
|
#define BUILTIN_LED LED_BUILTIN // backward compatibility
|
||||||
|
#define LED_BUILTIN LED_BUILTIN
|
||||||
|
|
||||||
|
#define analogInputToDigitalPin(p) (((p) < 20) ? (analogChannelToDigitalPin(p)) : -1)
|
||||||
|
#define digitalPinToInterrupt(p) (((p) < 48) ? (p) : -1)
|
||||||
|
#define digitalPinHasPWM(p) (p < 46)
|
||||||
|
|
||||||
|
static const uint8_t TX = 43;
|
||||||
|
static const uint8_t RX = 44;
|
||||||
|
|
||||||
|
static const uint8_t SDA = 45;
|
||||||
|
static const uint8_t SCL = 46;
|
||||||
|
|
||||||
|
static const uint8_t SS = 8;
|
||||||
|
static const uint8_t MOSI = 10;
|
||||||
|
static const uint8_t MISO = 11;
|
||||||
|
static const uint8_t SCK = 9;
|
||||||
|
|
||||||
|
static const uint8_t A0 = 1;
|
||||||
|
static const uint8_t A1 = 2;
|
||||||
|
static const uint8_t A2 = 3;
|
||||||
|
static const uint8_t A3 = 4;
|
||||||
|
static const uint8_t A4 = 5;
|
||||||
|
static const uint8_t A5 = 6;
|
||||||
|
static const uint8_t A6 = 7;
|
||||||
|
static const uint8_t A7 = 8;
|
||||||
|
static const uint8_t A8 = 9;
|
||||||
|
static const uint8_t A9 = 10;
|
||||||
|
static const uint8_t A10 = 11;
|
||||||
|
static const uint8_t A11 = 12;
|
||||||
|
static const uint8_t A12 = 13;
|
||||||
|
static const uint8_t A13 = 14;
|
||||||
|
static const uint8_t A14 = 15;
|
||||||
|
static const uint8_t A15 = 16;
|
||||||
|
static const uint8_t A16 = 17;
|
||||||
|
static const uint8_t A17 = 18;
|
||||||
|
static const uint8_t A18 = 19;
|
||||||
|
static const uint8_t A19 = 20;
|
||||||
|
|
||||||
|
static const uint8_t T1 = 1;
|
||||||
|
static const uint8_t T2 = 2;
|
||||||
|
static const uint8_t T3 = 3;
|
||||||
|
static const uint8_t T4 = 4;
|
||||||
|
static const uint8_t T5 = 5;
|
||||||
|
static const uint8_t T6 = 6;
|
||||||
|
static const uint8_t T7 = 7;
|
||||||
|
static const uint8_t T8 = 8;
|
||||||
|
static const uint8_t T9 = 9;
|
||||||
|
static const uint8_t T10 = 10;
|
||||||
|
static const uint8_t T11 = 11;
|
||||||
|
static const uint8_t T12 = 12;
|
||||||
|
static const uint8_t T13 = 13;
|
||||||
|
static const uint8_t T14 = 14;
|
||||||
|
|
||||||
|
static const uint8_t Vext = 36;
|
||||||
|
static const uint8_t LED = 18;
|
||||||
|
|
||||||
|
static const uint8_t RST_LoRa = 12;
|
||||||
|
static const uint8_t BUSY_LoRa = 13;
|
||||||
|
static const uint8_t DIO0 = 14;
|
||||||
|
|
||||||
|
#endif /* Pins_Arduino_h */
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
#define LED_PIN 18
|
||||||
|
|
||||||
|
#define HELTEC_TRACKER_V1_X
|
||||||
|
|
||||||
|
// TRACKSENGER 2.8" IPS 320x240
|
||||||
|
|
||||||
|
// I2C
|
||||||
|
// #define I2C_SDA 42
|
||||||
|
// #define I2C_SCL 41
|
||||||
|
// #define HAS_SCREEN 1
|
||||||
|
// #define USE_SSD1306
|
||||||
|
|
||||||
|
// Default SPI1 will be mapped to the display
|
||||||
|
#define ST7789_SDA 42
|
||||||
|
#define ST7789_SCK 41
|
||||||
|
#define ST7789_CS 38
|
||||||
|
#define ST7789_RS 40
|
||||||
|
#define ST7789_BL 21
|
||||||
|
// P#define ST7735_BL_V05 21 /* V1.1 PCB marking */
|
||||||
|
|
||||||
|
#define ST7789_RESET -1
|
||||||
|
#define ST7789_MISO -1
|
||||||
|
#define ST7789_BUSY -1
|
||||||
|
#define ST7789_SPI_HOST SPI3_HOST
|
||||||
|
#define ST7789_BACKLIGHT_EN 21
|
||||||
|
#define SPI_FREQUENCY 40000000
|
||||||
|
#define SPI_READ_FREQUENCY 16000000
|
||||||
|
#define TFT_HEIGHT 320
|
||||||
|
#define TFT_WIDTH 240
|
||||||
|
#define TFT_OFFSET_X 0
|
||||||
|
#define TFT_OFFSET_Y 0
|
||||||
|
#define TFT_OFFSET_ROTATION 0
|
||||||
|
#define SCREEN_ROTATE
|
||||||
|
|
||||||
|
// ST7735S TFT LCD
|
||||||
|
// #define ST7735S 1 // there are different (sub-)versions of ST7735
|
||||||
|
// #define ST7735_CS 38
|
||||||
|
// #define ST7735_RS 40 // DC
|
||||||
|
// #define ST7735_SDA 42 // MOSI
|
||||||
|
// #define ST7735_SCK 41
|
||||||
|
// #define ST7735_RESET 39
|
||||||
|
// #define ST7735_MISO -1
|
||||||
|
// #define ST7735_BUSY -1
|
||||||
|
#define ST7735_BL_V05 21 /* V1.1 PCB marking */
|
||||||
|
// #define ST7735_SPI_HOST SPI3_HOST
|
||||||
|
// #define SPI_FREQUENCY 40000000
|
||||||
|
// #define SPI_READ_FREQUENCY 16000000
|
||||||
|
// #define SCREEN_ROTATE
|
||||||
|
// #define TFT_HEIGHT DISPLAY_WIDTH
|
||||||
|
// #define TFT_WIDTH DISPLAY_HEIGHT
|
||||||
|
// #define TFT_OFFSET_X 26
|
||||||
|
// #define TFT_OFFSET_Y -1
|
||||||
|
#define SCREEN_TRANSITION_FRAMERATE 3 // fps
|
||||||
|
// #define DISPLAY_FORCE_SMALL_FONTS
|
||||||
|
|
||||||
|
#define VEXT_ENABLE_V05 3 // active HIGH, powers the lora antenna boost
|
||||||
|
#define BUTTON_PIN 0
|
||||||
|
|
||||||
|
#define BATTERY_PIN 1 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
|
||||||
|
#define ADC_CHANNEL ADC1_GPIO1_CHANNEL
|
||||||
|
#define ADC_ATTENUATION ADC_ATTEN_DB_2_5 // lower dB for high resistance voltage divider
|
||||||
|
#define ADC_MULTIPLIER 4.9
|
||||||
|
#define ADC_CTRL 2 // active HIGH, powers the voltage divider. Only on 1.1
|
||||||
|
#define ADC_CTRL_ENABLED HIGH
|
||||||
|
|
||||||
|
#undef GPS_RX_PIN
|
||||||
|
#undef GPS_TX_PIN
|
||||||
|
#define GPS_RX_PIN 33
|
||||||
|
#define GPS_TX_PIN 34
|
||||||
|
#define PIN_GPS_RESET 35
|
||||||
|
#define PIN_GPS_PPS 36
|
||||||
|
|
||||||
|
#define GPS_RESET_MODE LOW
|
||||||
|
#define GPS_UC6580
|
||||||
|
|
||||||
|
#define USE_SX1262
|
||||||
|
#define LORA_DIO0 -1 // a No connect on the SX1262 module
|
||||||
|
#define LORA_RESET 12
|
||||||
|
#define LORA_DIO1 14 // SX1262 IRQ
|
||||||
|
#define LORA_DIO2 13 // SX1262 BUSY
|
||||||
|
#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262, if DIO3 is high the TXCO is enabled
|
||||||
|
|
||||||
|
#define LORA_SCK 9
|
||||||
|
#define LORA_MISO 11
|
||||||
|
#define LORA_MOSI 10
|
||||||
|
#define LORA_CS 8
|
||||||
|
|
||||||
|
#define SX126X_CS LORA_CS
|
||||||
|
#define SX126X_DIO1 LORA_DIO1
|
||||||
|
#define SX126X_BUSY LORA_DIO2
|
||||||
|
#define SX126X_RESET LORA_RESET
|
||||||
|
|
||||||
|
#define SX126X_DIO2_AS_RF_SWITCH
|
||||||
|
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
||||||
|
|
||||||
|
// Picomputer gets a white on black display
|
||||||
|
#define TFT_MESH COLOR565(0xFF, 0xFF, 0xFF)
|
||||||
|
|
||||||
|
// keyboard changes
|
||||||
|
|
||||||
|
#define PIN_BUZZER 43
|
||||||
|
#define CANNED_MESSAGE_MODULE_ENABLE 1
|
||||||
|
|
||||||
|
#define INPUTBROKER_MATRIX_TYPE 1
|
||||||
|
|
||||||
|
#define KEYS_COLS \
|
||||||
|
{ \
|
||||||
|
44, 45, 46, 4, 5, 6 \
|
||||||
|
}
|
||||||
|
#define KEYS_ROWS \
|
||||||
|
{ \
|
||||||
|
26, 37, 17, 16, 15, 7 \
|
||||||
|
}
|
||||||
|
// #end keyboard
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
#ifndef Pins_Arduino_h
|
||||||
|
#define Pins_Arduino_h
|
||||||
|
|
||||||
|
#include "soc/soc_caps.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define WIFI_LoRa_32_V3 true
|
||||||
|
#define DISPLAY_HEIGHT 80
|
||||||
|
#define DISPLAY_WIDTH 160
|
||||||
|
|
||||||
|
#define USB_VID 0x303a
|
||||||
|
#define USB_PID 0x1001
|
||||||
|
|
||||||
|
#define EXTERNAL_NUM_INTERRUPTS 46
|
||||||
|
#define NUM_DIGITAL_PINS 48
|
||||||
|
#define NUM_ANALOG_INPUTS 20
|
||||||
|
|
||||||
|
static const uint8_t LED_BUILTIN = 18;
|
||||||
|
#define BUILTIN_LED LED_BUILTIN // backward compatibility
|
||||||
|
#define LED_BUILTIN LED_BUILTIN
|
||||||
|
|
||||||
|
#define analogInputToDigitalPin(p) (((p) < 20) ? (analogChannelToDigitalPin(p)) : -1)
|
||||||
|
#define digitalPinToInterrupt(p) (((p) < 48) ? (p) : -1)
|
||||||
|
#define digitalPinHasPWM(p) (p < 46)
|
||||||
|
|
||||||
|
static const uint8_t TX = 43;
|
||||||
|
static const uint8_t RX = 44;
|
||||||
|
|
||||||
|
static const uint8_t SDA = 45;
|
||||||
|
static const uint8_t SCL = 46;
|
||||||
|
|
||||||
|
static const uint8_t SS = 8;
|
||||||
|
static const uint8_t MOSI = 10;
|
||||||
|
static const uint8_t MISO = 11;
|
||||||
|
static const uint8_t SCK = 9;
|
||||||
|
|
||||||
|
static const uint8_t A0 = 1;
|
||||||
|
static const uint8_t A1 = 2;
|
||||||
|
static const uint8_t A2 = 3;
|
||||||
|
static const uint8_t A3 = 4;
|
||||||
|
static const uint8_t A4 = 5;
|
||||||
|
static const uint8_t A5 = 6;
|
||||||
|
static const uint8_t A6 = 7;
|
||||||
|
static const uint8_t A7 = 8;
|
||||||
|
static const uint8_t A8 = 9;
|
||||||
|
static const uint8_t A9 = 10;
|
||||||
|
static const uint8_t A10 = 11;
|
||||||
|
static const uint8_t A11 = 12;
|
||||||
|
static const uint8_t A12 = 13;
|
||||||
|
static const uint8_t A13 = 14;
|
||||||
|
static const uint8_t A14 = 15;
|
||||||
|
static const uint8_t A15 = 16;
|
||||||
|
static const uint8_t A16 = 17;
|
||||||
|
static const uint8_t A17 = 18;
|
||||||
|
static const uint8_t A18 = 19;
|
||||||
|
static const uint8_t A19 = 20;
|
||||||
|
|
||||||
|
static const uint8_t T1 = 1;
|
||||||
|
static const uint8_t T2 = 2;
|
||||||
|
static const uint8_t T3 = 3;
|
||||||
|
static const uint8_t T4 = 4;
|
||||||
|
static const uint8_t T5 = 5;
|
||||||
|
static const uint8_t T6 = 6;
|
||||||
|
static const uint8_t T7 = 7;
|
||||||
|
static const uint8_t T8 = 8;
|
||||||
|
static const uint8_t T9 = 9;
|
||||||
|
static const uint8_t T10 = 10;
|
||||||
|
static const uint8_t T11 = 11;
|
||||||
|
static const uint8_t T12 = 12;
|
||||||
|
static const uint8_t T13 = 13;
|
||||||
|
static const uint8_t T14 = 14;
|
||||||
|
|
||||||
|
static const uint8_t Vext = 36;
|
||||||
|
static const uint8_t LED = 18;
|
||||||
|
|
||||||
|
static const uint8_t RST_LoRa = 12;
|
||||||
|
static const uint8_t BUSY_LoRa = 13;
|
||||||
|
static const uint8_t DIO0 = 14;
|
||||||
|
|
||||||
|
#endif /* Pins_Arduino_h */
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
#define LED_PIN 18
|
||||||
|
|
||||||
|
#define HELTEC_TRACKER_V1_X
|
||||||
|
|
||||||
|
// TRACKSENGER 2.42" I2C OLED
|
||||||
|
|
||||||
|
// I2C
|
||||||
|
#define I2C_SDA 42
|
||||||
|
#define I2C_SCL 41
|
||||||
|
#define HAS_SCREEN 1
|
||||||
|
#define USE_SSD1306
|
||||||
|
|
||||||
|
// ST7735S TFT LCD
|
||||||
|
// #define ST7735S 1 // there are different (sub-)versions of ST7735
|
||||||
|
// #define ST7735_CS 38
|
||||||
|
// #define ST7735_RS 40 // DC
|
||||||
|
// #define ST7735_SDA 42 // MOSI
|
||||||
|
// #define ST7735_SCK 41
|
||||||
|
// #define ST7735_RESET 39
|
||||||
|
// #define ST7735_MISO -1
|
||||||
|
// #define ST7735_BUSY -1
|
||||||
|
#define ST7735_BL_V05 21 /* V1.1 PCB marking */
|
||||||
|
// #define ST7735_SPI_HOST SPI3_HOST
|
||||||
|
// #define SPI_FREQUENCY 40000000
|
||||||
|
// #define SPI_READ_FREQUENCY 16000000
|
||||||
|
// #define SCREEN_ROTATE
|
||||||
|
// #define TFT_HEIGHT DISPLAY_WIDTH
|
||||||
|
// #define TFT_WIDTH DISPLAY_HEIGHT
|
||||||
|
// #define TFT_OFFSET_X 26
|
||||||
|
// #define TFT_OFFSET_Y -1
|
||||||
|
#define SCREEN_TRANSITION_FRAMERATE 3 // fps
|
||||||
|
// #define DISPLAY_FORCE_SMALL_FONTS
|
||||||
|
|
||||||
|
#define VEXT_ENABLE_V05 3 // active HIGH, powers the lora antenna boost
|
||||||
|
#define BUTTON_PIN 0
|
||||||
|
|
||||||
|
#define BATTERY_PIN 1 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
|
||||||
|
#define ADC_CHANNEL ADC1_GPIO1_CHANNEL
|
||||||
|
#define ADC_ATTENUATION ADC_ATTEN_DB_2_5 // lower dB for high resistance voltage divider
|
||||||
|
#define ADC_MULTIPLIER 4.9
|
||||||
|
#define ADC_CTRL 2 // active HIGH, powers the voltage divider. Only on 1.1
|
||||||
|
#define ADC_CTRL_ENABLED HIGH
|
||||||
|
|
||||||
|
#undef GPS_RX_PIN
|
||||||
|
#undef GPS_TX_PIN
|
||||||
|
#define GPS_RX_PIN 33
|
||||||
|
#define GPS_TX_PIN 34
|
||||||
|
#define PIN_GPS_RESET 35
|
||||||
|
#define PIN_GPS_PPS 36
|
||||||
|
|
||||||
|
#define GPS_RESET_MODE LOW
|
||||||
|
#define GPS_UC6580
|
||||||
|
|
||||||
|
#define USE_SX1262
|
||||||
|
#define LORA_DIO0 -1 // a No connect on the SX1262 module
|
||||||
|
#define LORA_RESET 12
|
||||||
|
#define LORA_DIO1 14 // SX1262 IRQ
|
||||||
|
#define LORA_DIO2 13 // SX1262 BUSY
|
||||||
|
#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262, if DIO3 is high the TXCO is enabled
|
||||||
|
|
||||||
|
#define LORA_SCK 9
|
||||||
|
#define LORA_MISO 11
|
||||||
|
#define LORA_MOSI 10
|
||||||
|
#define LORA_CS 8
|
||||||
|
|
||||||
|
#define SX126X_CS LORA_CS
|
||||||
|
#define SX126X_DIO1 LORA_DIO1
|
||||||
|
#define SX126X_BUSY LORA_DIO2
|
||||||
|
#define SX126X_RESET LORA_RESET
|
||||||
|
|
||||||
|
#define SX126X_DIO2_AS_RF_SWITCH
|
||||||
|
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
||||||
|
|
||||||
|
// Picomputer gets a white on black display
|
||||||
|
#define TFT_MESH COLOR565(0xFF, 0xFF, 0xFF)
|
||||||
|
|
||||||
|
// keyboard changes
|
||||||
|
|
||||||
|
#define PIN_BUZZER 43
|
||||||
|
#define CANNED_MESSAGE_MODULE_ENABLE 1
|
||||||
|
|
||||||
|
#define INPUTBROKER_MATRIX_TYPE 1
|
||||||
|
|
||||||
|
#define KEYS_COLS \
|
||||||
|
{ \
|
||||||
|
44, 45, 46, 4, 5, 6 \
|
||||||
|
}
|
||||||
|
#define KEYS_ROWS \
|
||||||
|
{ \
|
||||||
|
26, 37, 17, 16, 15, 7 \
|
||||||
|
}
|
||||||
|
// #end keyboard
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
[env:tracksenger]
|
||||||
|
extends = esp32s3_base
|
||||||
|
board = heltec_wireless_tracker
|
||||||
|
upload_protocol = esp-builtin
|
||||||
|
|
||||||
|
build_flags =
|
||||||
|
${esp32s3_base.build_flags} -I variants/tracksenger/internal
|
||||||
|
-D HELTEC_TRACKER_V1_1
|
||||||
|
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
||||||
|
;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output
|
||||||
|
|
||||||
|
lib_deps =
|
||||||
|
${esp32s3_base.lib_deps}
|
||||||
|
lovyan03/LovyanGFX@^1.1.8
|
||||||
|
|
||||||
|
[env:tracksenger-lcd]
|
||||||
|
extends = esp32s3_base
|
||||||
|
board = heltec_wireless_tracker
|
||||||
|
upload_protocol = esp-builtin
|
||||||
|
|
||||||
|
build_flags =
|
||||||
|
${esp32s3_base.build_flags} -I variants/tracksenger/lcd
|
||||||
|
-D HELTEC_TRACKER_V1_1
|
||||||
|
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
||||||
|
;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output
|
||||||
|
|
||||||
|
lib_deps =
|
||||||
|
${esp32s3_base.lib_deps}
|
||||||
|
lovyan03/LovyanGFX@^1.1.8
|
||||||
|
|
||||||
|
[env:tracksenger-oled]
|
||||||
|
extends = esp32s3_base
|
||||||
|
board = heltec_wireless_tracker
|
||||||
|
upload_protocol = esp-builtin
|
||||||
|
|
||||||
|
build_flags =
|
||||||
|
${esp32s3_base.build_flags} -I variants/tracksenger/oled
|
||||||
|
-D HELTEC_TRACKER_V1_1
|
||||||
|
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
||||||
|
;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output
|
||||||
@@ -3,7 +3,6 @@
|
|||||||
[env:unphone]
|
[env:unphone]
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board_level = extra
|
|
||||||
board = unphone9
|
board = unphone9
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
[env:wiphone]
|
[env:wiphone]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = wiphone
|
board = wiphone
|
||||||
|
board_level = extra
|
||||||
monitor_filters = esp32_exception_decoder
|
monitor_filters = esp32_exception_decoder
|
||||||
board_build.partitions = default_16MB.csv
|
board_build.partitions = default_16MB.csv
|
||||||
build_flags =
|
build_flags =
|
||||||
@@ -10,4 +11,3 @@ lib_deps =
|
|||||||
lovyan03/LovyanGFX@^1.1.8
|
lovyan03/LovyanGFX@^1.1.8
|
||||||
sparkfun/SX1509 IO Expander@^3.0.5
|
sparkfun/SX1509 IO Expander@^3.0.5
|
||||||
pololu/APA102@^3.0.0
|
pololu/APA102@^3.0.0
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
[VERSION]
|
[VERSION]
|
||||||
major = 2
|
major = 2
|
||||||
minor = 3
|
minor = 3
|
||||||
build = 9
|
build = 10
|
||||||
Reference in New Issue
Block a user