mirror of
https://github.com/meshtastic/firmware.git
synced 2025-12-23 11:10:52 +00:00
Compare commits
309 Commits
NextHopRou
...
v2.6.7.2d6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2d6181fca0 | ||
|
|
a32e45f8f2 | ||
|
|
055fdcb7f6 | ||
|
|
8bb1f3e869 | ||
|
|
d75c91a760 | ||
|
|
9d31d9f43b | ||
|
|
152b8b1b02 | ||
|
|
10693c4569 | ||
|
|
7da8aea1df | ||
|
|
baae2503d5 | ||
|
|
947191a797 | ||
|
|
987623567a | ||
|
|
a8ab6e82e6 | ||
|
|
5c005aaed5 | ||
|
|
f9fbc3ff86 | ||
|
|
124f4daa71 | ||
|
|
00e2ac33ad | ||
|
|
845088e45b | ||
|
|
e0b1fdb5e8 | ||
|
|
a7ef9e9c08 | ||
|
|
216fbf2343 | ||
|
|
635de2d229 | ||
|
|
72eae42b81 | ||
|
|
b4e8f7dbb6 | ||
|
|
473ef1bc03 | ||
|
|
ca8c177363 | ||
|
|
77e6868d5d | ||
|
|
54c1423039 | ||
|
|
03f19bca0e | ||
|
|
89df9d7686 | ||
|
|
45fcd479f6 | ||
|
|
b1e35cd8b3 | ||
|
|
70ced735d9 | ||
|
|
24e9539d40 | ||
|
|
72dd5bd88d | ||
|
|
8812eadd44 | ||
|
|
48dc0e014c | ||
|
|
e03f3de185 | ||
|
|
5d48d2c0a7 | ||
|
|
2b57ffafd7 | ||
|
|
a30f431b6a | ||
|
|
916afb5098 | ||
|
|
d26b50b78c | ||
|
|
c6e5ec055f | ||
|
|
5ab1db0142 | ||
|
|
64a1cd3f99 | ||
|
|
9da141aa8c | ||
|
|
74b3dc34e4 | ||
|
|
e2f6600cb9 | ||
|
|
ef14967fbf | ||
|
|
c177c6d655 | ||
|
|
a36f21b29a | ||
|
|
d74359abf0 | ||
|
|
5fd64d4114 | ||
|
|
816d948ee5 | ||
|
|
e0dafc3618 | ||
|
|
4a9a59342a | ||
|
|
5699d8632e | ||
|
|
e5cd0d613c | ||
|
|
64c8bde04a | ||
|
|
4477031971 | ||
|
|
1138f74e2c | ||
|
|
cf5c8de92e | ||
|
|
7e8294dfad | ||
|
|
98411d408a | ||
|
|
040a34fca8 | ||
|
|
ecd9f015d8 | ||
|
|
4e30023a4b | ||
|
|
b46aad85cc | ||
|
|
c4dc3472ac | ||
|
|
28e62e53e5 | ||
|
|
3eb845eaae | ||
|
|
e4c2730f71 | ||
|
|
e7d0837d01 | ||
|
|
e7ce910c3b | ||
|
|
e957009019 | ||
|
|
7079f538ed | ||
|
|
baa05aacf5 | ||
|
|
4ef9eae695 | ||
|
|
854d74f8db | ||
|
|
91f38797a8 | ||
|
|
06ce6f3e8a | ||
|
|
3694805938 | ||
|
|
5c13f3451c | ||
|
|
1008a08c99 | ||
|
|
e98da27446 | ||
|
|
daa03aba30 | ||
|
|
456f94511f | ||
|
|
1888342a57 | ||
|
|
8e40d88e24 | ||
|
|
0d8e39cc2a | ||
|
|
78fa4c5c70 | ||
|
|
536b6d87c6 | ||
|
|
5256ae90dc | ||
|
|
fc3d9f2a15 | ||
|
|
69f938ea98 | ||
|
|
ec298199ee | ||
|
|
0d800b7a22 | ||
|
|
1b1d4625aa | ||
|
|
fb2010552f | ||
|
|
c94dd1e331 | ||
|
|
cfc2a96a45 | ||
|
|
c0dab4a672 | ||
|
|
12d1305618 | ||
|
|
a084073cc1 | ||
|
|
e2933bcb5b | ||
|
|
606abfc116 | ||
|
|
860e8eca5a | ||
|
|
5a9d70b445 | ||
|
|
2125c03974 | ||
|
|
56eb0c08b2 | ||
|
|
1b33189fe6 | ||
|
|
25237a15ff | ||
|
|
0110275494 | ||
|
|
4dfba50304 | ||
|
|
7494106170 | ||
|
|
0665802823 | ||
|
|
1017f6af35 | ||
|
|
11bafae287 | ||
|
|
31130fd49e | ||
|
|
594cb0cc1e | ||
|
|
ef18a9b5b5 | ||
|
|
67fddcc214 | ||
|
|
f6ed10f329 | ||
|
|
644849126c | ||
|
|
ea4ce8d827 | ||
|
|
128c347c64 | ||
|
|
ae88759059 | ||
|
|
2c01fad798 | ||
|
|
a5efbfccd7 | ||
|
|
886bffe8f3 | ||
|
|
39408fd3b1 | ||
|
|
3314b00fcc | ||
|
|
72db671e00 | ||
|
|
bd2d2981c9 | ||
|
|
da26ff5b95 | ||
|
|
f626f02005 | ||
|
|
f18f60cd0b | ||
|
|
850d21dcb9 | ||
|
|
e08177ba98 | ||
|
|
b52c355f2f | ||
|
|
e79d4492e8 | ||
|
|
95523a9659 | ||
|
|
32d91ed859 | ||
|
|
a93d779ec0 | ||
|
|
38c8c20a2b | ||
|
|
b89355ffa6 | ||
|
|
8a4a0cc932 | ||
|
|
cbcdc3ed00 | ||
|
|
d663d44647 | ||
|
|
3148e7277d | ||
|
|
7df327664e | ||
|
|
a902776e57 | ||
|
|
ea9485657e | ||
|
|
0491c890d7 | ||
|
|
4a3991a8c6 | ||
|
|
c602bfecbd | ||
|
|
6c7c0770f9 | ||
|
|
89cde1a8e6 | ||
|
|
02237f5ac6 | ||
|
|
4a12b4eb32 | ||
|
|
a2387c79ee | ||
|
|
d7504921fb | ||
|
|
4e1030ef9c | ||
|
|
1e41c994b3 | ||
|
|
4590ef2e7b | ||
|
|
769f0623be | ||
|
|
52527b24a7 | ||
|
|
6c17694b64 | ||
|
|
640e731ad2 | ||
|
|
ba81a8ad87 | ||
|
|
83d8e3cb09 | ||
|
|
6429eca5e4 | ||
|
|
13101c1bab | ||
|
|
d28af68b5a | ||
|
|
53a7afff41 | ||
|
|
eb375d8e62 | ||
|
|
33f2b7144f | ||
|
|
e5f8218d34 | ||
|
|
0ddb507055 | ||
|
|
3afe84c4f4 | ||
|
|
e9d8a3d7f9 | ||
|
|
e722a97987 | ||
|
|
daa4186d65 | ||
|
|
1ee800e901 | ||
|
|
cf7f0f9d08 | ||
|
|
1e4a0134e6 | ||
|
|
0951fdd49b | ||
|
|
848a3ed6a1 | ||
|
|
fd7a1f2ccb | ||
|
|
5acaf8f897 | ||
|
|
cff93adb5e | ||
|
|
e4d3ec1f59 | ||
|
|
ae27aaaf43 | ||
|
|
31c0e8fa2c | ||
|
|
0d95b1afcc | ||
|
|
46235f6f8b | ||
|
|
d1068fd1e4 | ||
|
|
f41afb14b1 | ||
|
|
f8ad02aab3 | ||
|
|
077759e15d | ||
|
|
22aa2d7582 | ||
|
|
6673cb9292 | ||
|
|
8efc9702d3 | ||
|
|
2876eec7ed | ||
|
|
9cc13e628a | ||
|
|
af8b64e84e | ||
|
|
96ba94843b | ||
|
|
2d565c2921 | ||
|
|
2525111c39 | ||
|
|
64b9cfe199 | ||
|
|
dc100e4d3e | ||
|
|
1640fb105d | ||
|
|
99e42b4d22 | ||
|
|
79233fe99d | ||
|
|
f66784ed2a | ||
|
|
f198d5d49f | ||
|
|
4d34b3d73c | ||
|
|
8efe8a2ea3 | ||
|
|
499ea56e3b | ||
|
|
2473af6995 | ||
|
|
508ab171d6 | ||
|
|
ec59f7d7dd | ||
|
|
f4c79530ec | ||
|
|
e9effb9fff | ||
|
|
cb6dfb66d2 | ||
|
|
8795a63427 | ||
|
|
186e509607 | ||
|
|
7c3eddebc2 | ||
|
|
78b4eff568 | ||
|
|
3c1f92ce84 | ||
|
|
5de6bc1851 | ||
|
|
c54fc5b7c5 | ||
|
|
94de2315c1 | ||
|
|
7f17747d8c | ||
|
|
16a0dce83c | ||
|
|
3fd47d9713 | ||
|
|
284598ed56 | ||
|
|
2a3e1f904d | ||
|
|
60e46cd765 | ||
|
|
563747c5cd | ||
|
|
5c77d42345 | ||
|
|
f0a2ae9ff3 | ||
|
|
f7afa9a81e | ||
|
|
c8bd6c32cc | ||
|
|
f6a9e7d741 | ||
|
|
e6a98b1d6b | ||
|
|
b2ef92a328 | ||
|
|
b25db1f42c | ||
|
|
a924b9d94a | ||
|
|
f5e0e282b6 | ||
|
|
a3a9b2fe84 | ||
|
|
6c8058e1d8 | ||
|
|
445efe9e21 | ||
|
|
b96b027926 | ||
|
|
239e5412b3 | ||
|
|
ede3f7b702 | ||
|
|
f0f2cd0e0e | ||
|
|
fdbadc992c | ||
|
|
2391982c1d | ||
|
|
41875d245e | ||
|
|
95bcd7ab0b | ||
|
|
050f0016c4 | ||
|
|
6715662281 | ||
|
|
b6562e175f | ||
|
|
f89f916f96 | ||
|
|
43a6e711da | ||
|
|
63b20e358f | ||
|
|
12fde696c1 | ||
|
|
5c8f1fb46b | ||
|
|
ce38ac10d1 | ||
|
|
d5ec205572 | ||
|
|
9893d24c62 | ||
|
|
ab61cd65d1 | ||
|
|
baef8dce79 | ||
|
|
99d3e5eb70 | ||
|
|
088fce7d11 | ||
|
|
b46bf16385 | ||
|
|
1c827f5512 | ||
|
|
b437f0fb54 | ||
|
|
ffe4e7b6be | ||
|
|
598cfcc081 | ||
|
|
f2e49aa4ee | ||
|
|
3a0ad9bb58 | ||
|
|
4e575872da | ||
|
|
bf958ed01d | ||
|
|
c93728eb75 | ||
|
|
01c717a41d | ||
|
|
7061fd1f16 | ||
|
|
7d8e0ede6c | ||
|
|
efca2b5849 | ||
|
|
cfcd9cc210 | ||
|
|
fe1ced7480 | ||
|
|
3787cf7803 | ||
|
|
1be28520a7 | ||
|
|
4942c7b71f | ||
|
|
4709d21df8 | ||
|
|
ec0eafedab | ||
|
|
994e22aba9 | ||
|
|
9930bba3f5 | ||
|
|
f1dc1b309a | ||
|
|
337265a07f | ||
|
|
bb73555209 | ||
|
|
93c64cb442 | ||
|
|
5da5803c4c | ||
|
|
79b3a1e60e | ||
|
|
191ca8ce12 | ||
|
|
c67aa25d19 | ||
|
|
3b0232de1b |
@@ -1,9 +1,10 @@
|
|||||||
|
# trunk-ignore-all(terrascan/AC_DOCKER_0002): Known terrascan issue
|
||||||
|
# trunk-ignore-all(hadolint/DL3008): Do not pin apt package versions
|
||||||
|
# trunk-ignore-all(hadolint/DL3013): Do not pin pip package versions
|
||||||
FROM mcr.microsoft.com/devcontainers/cpp:1-debian-12
|
FROM mcr.microsoft.com/devcontainers/cpp:1-debian-12
|
||||||
|
|
||||||
USER root
|
USER root
|
||||||
|
|
||||||
# trunk-ignore(terrascan/AC_DOCKER_0002): Known terrascan issue
|
|
||||||
# trunk-ignore(hadolint/DL3008): Use latest version of packages
|
|
||||||
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
||||||
&& apt-get -y install --no-install-recommends \
|
&& apt-get -y install --no-install-recommends \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
@@ -27,9 +28,15 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
|||||||
hwdata \
|
hwdata \
|
||||||
gpg \
|
gpg \
|
||||||
gnupg2 \
|
gnupg2 \
|
||||||
|
libusb-1.0-0-dev \
|
||||||
|
libuv1-dev \
|
||||||
|
libi2c-dev \
|
||||||
|
libxcb-xkb-dev \
|
||||||
|
libxkbcommon-dev \
|
||||||
|
libinput-dev \
|
||||||
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
RUN pipx install platformio==6.1.15
|
RUN pipx install platformio
|
||||||
|
|
||||||
COPY 99-platformio-udev.rules /etc/udev/rules.d/99-platformio-udev.rules
|
COPY 99-platformio-udev.rules /etc/udev/rules.d/99-platformio-udev.rules
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
#!/usr/bin/env sh
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
git submodule update --init
|
git submodule update --init
|
||||||
|
|
||||||
|
pip install --no-cache-dir setuptools
|
||||||
|
pipx install esptool
|
||||||
|
|||||||
5
.gitattributes
vendored
5
.gitattributes
vendored
@@ -1,4 +1,5 @@
|
|||||||
* text=auto eol=lf
|
* text=auto eol=lf
|
||||||
*.{cmd,[cC][mM][dD]} text eol=crlf
|
*.cmd text eol=crlf
|
||||||
*.{bat,[bB][aA][tT]} text eol=crlf
|
*.bat text eol=crlf
|
||||||
|
*.ps1 text eol=crlf
|
||||||
*.{sh,[sS][hH]} text eol=lf
|
*.{sh,[sS][hH]} text eol=lf
|
||||||
|
|||||||
11
.github/ISSUE_TEMPLATE/Bug Report.yml
vendored
11
.github/ISSUE_TEMPLATE/Bug Report.yml
vendored
@@ -1,7 +1,7 @@
|
|||||||
name: Bug Report
|
name: Bug Report
|
||||||
description: File a bug report
|
description: File a bug report
|
||||||
title: "[Bug]: "
|
title: "[Bug]: "
|
||||||
labels: ["bug", "triage"]
|
labels: [bug, triage]
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
@@ -72,6 +72,15 @@ body:
|
|||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
|
- type: checkboxes
|
||||||
|
id: mui
|
||||||
|
attributes:
|
||||||
|
label: Is this bug report about any UI component firmware like InkHUD or Meshtatic UI (MUI)?
|
||||||
|
options:
|
||||||
|
- label: Meshtastic UI aka MUI colorTFT
|
||||||
|
- label: InkHUD ePaper
|
||||||
|
- label: OLED slide UI on any display
|
||||||
|
|
||||||
- type: input
|
- type: input
|
||||||
id: version
|
id: version
|
||||||
attributes:
|
attributes:
|
||||||
|
|||||||
2
.github/ISSUE_TEMPLATE/New Board.yml
vendored
2
.github/ISSUE_TEMPLATE/New Board.yml
vendored
@@ -1,7 +1,7 @@
|
|||||||
name: New Board
|
name: New Board
|
||||||
description: Request us to support new hardware
|
description: Request us to support new hardware
|
||||||
title: "[Board]: "
|
title: "[Board]: "
|
||||||
labels: ["enhancement", "triage"]
|
labels: [enhancement, triage]
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
|
|||||||
2
.github/ISSUE_TEMPLATE/feature.yml
vendored
2
.github/ISSUE_TEMPLATE/feature.yml
vendored
@@ -1,7 +1,7 @@
|
|||||||
name: Feature Request
|
name: Feature Request
|
||||||
description: Request a new feature
|
description: Request a new feature
|
||||||
title: "[Feature Request]: "
|
title: "[Feature Request]: "
|
||||||
labels: ["enhancement"]
|
labels: [enhancement]
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
|
|||||||
5
.github/actionlint.yaml
vendored
Normal file
5
.github/actionlint.yaml
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# Configuration related to self-hosted runner.
|
||||||
|
self-hosted-runner:
|
||||||
|
# Labels of self-hosted runner in array of strings.
|
||||||
|
labels:
|
||||||
|
- test-runner
|
||||||
11
.github/actions/build-variant/action.yml
vendored
11
.github/actions/build-variant/action.yml
vendored
@@ -34,7 +34,7 @@ inputs:
|
|||||||
arch:
|
arch:
|
||||||
description: Processor arch name
|
description: Processor arch name
|
||||||
required: true
|
required: true
|
||||||
default: "esp32"
|
default: esp32
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: composite
|
using: composite
|
||||||
@@ -43,6 +43,13 @@ runs:
|
|||||||
id: base
|
id: base
|
||||||
uses: ./.github/actions/setup-base
|
uses: ./.github/actions/setup-base
|
||||||
|
|
||||||
|
- name: Get web ui version
|
||||||
|
if: inputs.include-web-ui == 'true'
|
||||||
|
id: webver
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "ver=$(cat bin/web.version)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Pull web ui
|
- name: Pull web ui
|
||||||
if: inputs.include-web-ui == 'true'
|
if: inputs.include-web-ui == 'true'
|
||||||
uses: dsaltares/fetch-gh-release-asset@master
|
uses: dsaltares/fetch-gh-release-asset@master
|
||||||
@@ -51,7 +58,7 @@ runs:
|
|||||||
file: build.tar
|
file: build.tar
|
||||||
target: build.tar
|
target: build.tar
|
||||||
token: ${{ inputs.github_token }}
|
token: ${{ inputs.github_token }}
|
||||||
version: tags/v2.5.3
|
version: tags/v${{ steps.webver.outputs.ver }}
|
||||||
|
|
||||||
- name: Unpack web ui
|
- name: Unpack web ui
|
||||||
if: inputs.include-web-ui == 'true'
|
if: inputs.include-web-ui == 'true'
|
||||||
|
|||||||
8
.github/actions/setup-base/action.yml
vendored
8
.github/actions/setup-base/action.yml
vendored
@@ -1,13 +1,13 @@
|
|||||||
name: "Setup Build Base Composite Action"
|
name: Setup Build Base Composite Action
|
||||||
description: "Base build actions for Meshtastic Platform IO steps"
|
description: Base build actions for Meshtastic Platform IO steps
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: composite
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
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}}
|
||||||
|
|
||||||
|
|||||||
2
.github/actions/setup-native/action.yml
vendored
2
.github/actions/setup-native/action.yml
vendored
@@ -11,4 +11,4 @@ runs:
|
|||||||
- name: Install libs needed for native build
|
- name: Install libs needed for native build
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get install -y libbluetooth-dev libgpiod-dev libyaml-cpp-dev openssl libssl-dev libulfius-dev liborcania-dev libusb-1.0-0-dev libi2c-dev
|
sudo apt-get install -y libbluetooth-dev libgpiod-dev libyaml-cpp-dev openssl libssl-dev libulfius-dev liborcania-dev libusb-1.0-0-dev libi2c-dev libuv1-dev
|
||||||
|
|||||||
26
.github/dependabot.yml
vendored
26
.github/dependabot.yml
vendored
@@ -1,26 +0,0 @@
|
|||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: docker
|
|
||||||
directory: devcontainer
|
|
||||||
schedule:
|
|
||||||
interval: daily
|
|
||||||
time: "05:00" # trunk-ignore(yamllint/quoted-strings): required by dependabot syntax check
|
|
||||||
timezone: US/Pacific
|
|
||||||
- package-ecosystem: docker
|
|
||||||
directory: /
|
|
||||||
schedule:
|
|
||||||
interval: daily
|
|
||||||
time: "05:00" # trunk-ignore(yamllint/quoted-strings): required by dependabot syntax check
|
|
||||||
timezone: US/Pacific
|
|
||||||
- package-ecosystem: gitsubmodule
|
|
||||||
directory: /
|
|
||||||
schedule:
|
|
||||||
interval: daily
|
|
||||||
time: "05:00" # trunk-ignore(yamllint/quoted-strings): required by dependabot syntax check
|
|
||||||
timezone: US/Pacific
|
|
||||||
- package-ecosystem: github-actions
|
|
||||||
directory: /.github/workflows
|
|
||||||
schedule:
|
|
||||||
interval: daily
|
|
||||||
time: "05:00" # trunk-ignore(yamllint/quoted-strings): required by dependabot syntax check
|
|
||||||
timezone: US/Pacific
|
|
||||||
BIN
.github/meshtastic_logo.png
vendored
Normal file
BIN
.github/meshtastic_logo.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 89 KiB |
18
.github/pull_request_template.md
vendored
18
.github/pull_request_template.md
vendored
@@ -1,7 +1,6 @@
|
|||||||
|
## 🙏 Thank you for sending in a pull request, here's some tips to get started!
|
||||||
|
|
||||||
### ❌ (Please delete all these tips and replace them with your text) ❌
|
### ❌ (Please delete all these tips and replace them with your text) ❌
|
||||||
|
|
||||||
## Thank you for sending in a pull request, here's some tips to get started!
|
|
||||||
|
|
||||||
- Before starting on some new big chunk of code, it it is optional but highly recommended to open an issue first
|
- Before starting on some new big chunk of code, it it is optional but highly recommended to open an issue first
|
||||||
to say "Hey, I think this idea X should be implemented and I'm starting work on it. My general plan is Y, any feedback
|
to say "Hey, I think this idea X should be implemented and I'm starting work on it. My general plan is Y, any feedback
|
||||||
is appreciated." This will allow other devs to potentially save you time by not accidentially duplicating work etc...
|
is appreciated." This will allow other devs to potentially save you time by not accidentially duplicating work etc...
|
||||||
@@ -12,4 +11,17 @@
|
|||||||
- If your PR fixes a bug, mention "fixes #bugnum" somewhere in your pull request description.
|
- If your PR fixes a bug, mention "fixes #bugnum" somewhere in your pull request description.
|
||||||
- If your other co-developers have comments on your PR please tweak as needed.
|
- If your other co-developers have comments on your PR please tweak as needed.
|
||||||
- Please also enable "Allow edits by maintainers".
|
- Please also enable "Allow edits by maintainers".
|
||||||
|
- Please do not submit untested code.
|
||||||
|
- If you do not have the affected hardware to test your code changes adequately against regressions, please indicate this, so that contributors and commnunity members can help test your changes.
|
||||||
- If your PR gets accepted you can request a "Contributor" role in the Meshtastic Discord
|
- If your PR gets accepted you can request a "Contributor" role in the Meshtastic Discord
|
||||||
|
|
||||||
|
|
||||||
|
## 🤝 Attestations
|
||||||
|
- [ ] I have tested that my proposed changes behave as described.
|
||||||
|
- [ ] I have tested that my proposed changes do not cause any obvious regressions on the following devices:
|
||||||
|
- [ ] Heltec (Lora32) V3
|
||||||
|
- [ ] LilyGo T-Deck
|
||||||
|
- [ ] LilyGo T-Beam
|
||||||
|
- [ ] RAK WisBlock 4631
|
||||||
|
- [ ] Seeed Studio T-1000E tracker card
|
||||||
|
- [ ] Other (please specify below)
|
||||||
|
|||||||
2
.github/workflows/build_debian_src.yml
vendored
2
.github/workflows/build_debian_src.yml
vendored
@@ -4,7 +4,7 @@ on:
|
|||||||
workflow_call:
|
workflow_call:
|
||||||
secrets:
|
secrets:
|
||||||
PPA_GPG_PRIVATE_KEY:
|
PPA_GPG_PRIVATE_KEY:
|
||||||
required: true
|
required: false
|
||||||
inputs:
|
inputs:
|
||||||
series:
|
series:
|
||||||
description: Ubuntu/Debian series to target
|
description: Ubuntu/Debian series to target
|
||||||
|
|||||||
2
.github/workflows/build_nrf52.yml
vendored
2
.github/workflows/build_nrf52.yml
vendored
@@ -7,6 +7,8 @@ on:
|
|||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-nrf52:
|
build-nrf52:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
2
.github/workflows/build_rpi2040.yml
vendored
2
.github/workflows/build_rpi2040.yml
vendored
@@ -7,6 +7,8 @@ on:
|
|||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-rpi2040:
|
build-rpi2040:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
2
.github/workflows/build_stm32.yml
vendored
2
.github/workflows/build_stm32.yml
vendored
@@ -7,6 +7,8 @@ on:
|
|||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-stm32:
|
build-stm32:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
7
.github/workflows/docker_build.yml
vendored
7
.github/workflows/docker_build.yml
vendored
@@ -26,6 +26,11 @@ on:
|
|||||||
required: false
|
required: false
|
||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
|
pio_env:
|
||||||
|
description: PlatformIO environment to build
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
default: native
|
||||||
outputs:
|
outputs:
|
||||||
digest:
|
digest:
|
||||||
description: Digest of built image
|
description: Digest of built image
|
||||||
@@ -90,3 +95,5 @@ jobs:
|
|||||||
push: ${{ inputs.push }}
|
push: ${{ inputs.push }}
|
||||||
tags: ${{ steps.meta.outputs.tags }} # Tag is only meant to be consumed by the "manifest" job
|
tags: ${{ steps.meta.outputs.tags }} # Tag is only meant to be consumed by the "manifest" job
|
||||||
platforms: ${{ inputs.platform }}
|
platforms: ${{ inputs.platform }}
|
||||||
|
build-args: |
|
||||||
|
PIO_ENV=${{ inputs.pio_env }}
|
||||||
|
|||||||
35
.github/workflows/generate-userprefs.yml
vendored
35
.github/workflows/generate-userprefs.yml
vendored
@@ -1,35 +0,0 @@
|
|||||||
name: Generate UsersPrefs JSON manifest
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths:
|
|
||||||
- userPrefs.h
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
generate-userprefs:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install Clang
|
|
||||||
run: sudo apt-get install -y clang
|
|
||||||
|
|
||||||
- name: Install trunk
|
|
||||||
run: curl https://get.trunk.io -fsSL | bash
|
|
||||||
|
|
||||||
- name: Generate userPrefs.jsom
|
|
||||||
run: python3 ./bin/build-userprefs-json.py
|
|
||||||
|
|
||||||
- name: Trunk format json
|
|
||||||
run: trunk format userPrefs.json
|
|
||||||
|
|
||||||
- name: Commit userPrefs.json
|
|
||||||
run: |
|
|
||||||
git config --global user.email "actions@github.com"
|
|
||||||
git config --global user.name "GitHub Actions"
|
|
||||||
git add userPrefs.json
|
|
||||||
git commit -m "Update userPrefs.json"
|
|
||||||
git push
|
|
||||||
136
.github/workflows/main_matrix.yml
vendored
136
.github/workflows/main_matrix.yml
vendored
@@ -5,14 +5,20 @@ concurrency:
|
|||||||
on:
|
on:
|
||||||
# # Triggers the workflow on push but only for the master branch
|
# # Triggers the workflow on push but only for the master branch
|
||||||
push:
|
push:
|
||||||
branches: [master, develop]
|
branches:
|
||||||
|
- master
|
||||||
|
- develop
|
||||||
|
- event/*
|
||||||
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:
|
||||||
branches: [master, develop]
|
branches:
|
||||||
|
- master
|
||||||
|
- develop
|
||||||
|
- event/*
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- "**.md"
|
- "**.md"
|
||||||
#- "**.yml"
|
#- "**.yml"
|
||||||
@@ -32,12 +38,12 @@ jobs:
|
|||||||
name: Checkout base
|
name: Checkout base
|
||||||
- id: jsonStep
|
- id: jsonStep
|
||||||
run: |
|
run: |
|
||||||
if [[ "${{ github.head_ref }}" == "" ]]; then
|
if [[ "$GITHUB_HEAD_REF" == "" ]]; then
|
||||||
TARGETS=$(./bin/generate_ci_matrix.py ${{matrix.arch}})
|
TARGETS=$(./bin/generate_ci_matrix.py ${{matrix.arch}})
|
||||||
else
|
else
|
||||||
TARGETS=$(./bin/generate_ci_matrix.py ${{matrix.arch}} quick)
|
TARGETS=$(./bin/generate_ci_matrix.py ${{matrix.arch}} quick)
|
||||||
fi
|
fi
|
||||||
echo "Name: ${{ github.ref_name }} Base: ${{ github.base_ref }} } Ref: ${{ github.ref }} Targets: $TARGETS"
|
echo "Name: $GITHUB_REF_NAME Base: $GITHUB_BASE_REF Ref: $GITHUB_REF Targets: $TARGETS"
|
||||||
echo "${{matrix.arch}}=$(jq -cn --argjson environments "$TARGETS" '{board: $environments}')" >> $GITHUB_OUTPUT
|
echo "${{matrix.arch}}=$(jq -cn --argjson environments "$TARGETS" '{board: $environments}')" >> $GITHUB_OUTPUT
|
||||||
outputs:
|
outputs:
|
||||||
esp32: ${{ steps.jsonStep.outputs.esp32 }}
|
esp32: ${{ steps.jsonStep.outputs.esp32 }}
|
||||||
@@ -135,16 +141,17 @@ jobs:
|
|||||||
build_location: local
|
build_location: local
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
package-pio-deps-native:
|
package-pio-deps-native-tft:
|
||||||
|
if: ${{ github.event_name == 'workflow_dispatch' }}
|
||||||
uses: ./.github/workflows/package_pio_deps.yml
|
uses: ./.github/workflows/package_pio_deps.yml
|
||||||
with:
|
with:
|
||||||
pio_env: native
|
pio_env: native-tft
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
test-native:
|
test-native:
|
||||||
uses: ./.github/workflows/test_native.yml
|
uses: ./.github/workflows/test_native.yml
|
||||||
|
|
||||||
docker-debian-amd64:
|
docker-deb-amd64:
|
||||||
uses: ./.github/workflows/docker_build.yml
|
uses: ./.github/workflows/docker_build.yml
|
||||||
with:
|
with:
|
||||||
distro: debian
|
distro: debian
|
||||||
@@ -152,7 +159,16 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
push: false
|
push: false
|
||||||
|
|
||||||
docker-alpine-amd64:
|
docker-deb-amd64-tft:
|
||||||
|
uses: ./.github/workflows/docker_build.yml
|
||||||
|
with:
|
||||||
|
distro: debian
|
||||||
|
platform: linux/amd64
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
push: false
|
||||||
|
pio_env: native-tft
|
||||||
|
|
||||||
|
docker-alp-amd64:
|
||||||
uses: ./.github/workflows/docker_build.yml
|
uses: ./.github/workflows/docker_build.yml
|
||||||
with:
|
with:
|
||||||
distro: alpine
|
distro: alpine
|
||||||
@@ -160,7 +176,16 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
push: false
|
push: false
|
||||||
|
|
||||||
docker-debian-arm64:
|
docker-alp-amd64-tft:
|
||||||
|
uses: ./.github/workflows/docker_build.yml
|
||||||
|
with:
|
||||||
|
distro: alpine
|
||||||
|
platform: linux/amd64
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
push: false
|
||||||
|
pio_env: native-tft
|
||||||
|
|
||||||
|
docker-deb-arm64:
|
||||||
uses: ./.github/workflows/docker_build.yml
|
uses: ./.github/workflows/docker_build.yml
|
||||||
with:
|
with:
|
||||||
distro: debian
|
distro: debian
|
||||||
@@ -168,7 +193,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04-arm
|
runs-on: ubuntu-24.04-arm
|
||||||
push: false
|
push: false
|
||||||
|
|
||||||
docker-debian-armv7:
|
docker-deb-armv7:
|
||||||
uses: ./.github/workflows/docker_build.yml
|
uses: ./.github/workflows/docker_build.yml
|
||||||
with:
|
with:
|
||||||
distro: debian
|
distro: debian
|
||||||
@@ -176,17 +201,6 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04-arm
|
runs-on: ubuntu-24.04-arm
|
||||||
push: false
|
push: false
|
||||||
|
|
||||||
after-checks:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event_name != 'workflow_dispatch' }}
|
|
||||||
needs: [check]
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
ref: ${{github.event.pull_request.head.ref}}
|
|
||||||
repository: ${{github.event.pull_request.head.repo.full_name}}
|
|
||||||
|
|
||||||
gather-artifacts:
|
gather-artifacts:
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
@@ -288,7 +302,7 @@ jobs:
|
|||||||
needs:
|
needs:
|
||||||
- gather-artifacts
|
- gather-artifacts
|
||||||
- build-debian-src
|
- build-debian-src
|
||||||
- package-pio-deps-native
|
- package-pio-deps-native-tft
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@@ -324,46 +338,32 @@ jobs:
|
|||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
path: ./output/debian-src
|
path: ./output/debian-src
|
||||||
|
|
||||||
- name: Download native pio deps
|
- name: Download `native-tft` pio deps
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
pattern: platformio-deps-native-${{ steps.version.outputs.long }}
|
pattern: platformio-deps-native-tft-${{ steps.version.outputs.long }}
|
||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
path: ./output/pio-deps-native
|
path: ./output/pio-deps-native-tft
|
||||||
|
|
||||||
- name: Zip linux sources
|
- name: Zip Linux sources
|
||||||
working-directory: output
|
working-directory: output
|
||||||
run: |
|
run: |
|
||||||
zip -j -9 -r ./meshtasticd-${{ steps.version.outputs.deb }}-src.zip ./debian-src
|
zip -j -9 -r ./meshtasticd-${{ steps.version.outputs.deb }}-src.zip ./debian-src
|
||||||
zip -9 -r ./platformio-deps-native-${{ steps.version.outputs.long }}.zip ./pio-deps-native
|
zip -9 -r ./platformio-deps-native-tft-${{ steps.version.outputs.long }}.zip ./pio-deps-native-tft
|
||||||
|
|
||||||
# For diagnostics
|
# For diagnostics
|
||||||
- name: Display structure of downloaded files
|
- name: Display structure of downloaded files
|
||||||
run: ls -lR
|
run: ls -lR
|
||||||
|
|
||||||
- name: Add linux sources to release
|
- name: Add Linux sources to GtiHub Release
|
||||||
|
# Only run when targeting master branch with workflow_dispatch
|
||||||
|
if: ${{ github.ref_name == 'master' }}
|
||||||
run: |
|
run: |
|
||||||
gh release upload v${{ steps.version.outputs.long }} ./output/meshtasticd-${{ steps.version.outputs.deb }}-src.zip
|
gh release upload v${{ steps.version.outputs.long }} ./output/meshtasticd-${{ steps.version.outputs.deb }}-src.zip
|
||||||
gh release upload v${{ steps.version.outputs.long }} ./output/platformio-deps-native-${{ steps.version.outputs.long }}.zip
|
gh release upload v${{ steps.version.outputs.long }} ./output/platformio-deps-native-tft-${{ steps.version.outputs.long }}.zip
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Bump version.properties
|
|
||||||
run: >-
|
|
||||||
bin/bump_version.py
|
|
||||||
|
|
||||||
- name: Update debian changelog
|
|
||||||
run: >-
|
|
||||||
debian/ci_changelog.sh
|
|
||||||
|
|
||||||
- name: Create version.properties pull request
|
|
||||||
uses: peter-evans/create-pull-request@v7
|
|
||||||
with:
|
|
||||||
title: Bump version.properties
|
|
||||||
add-paths: |
|
|
||||||
version.properties
|
|
||||||
debian/changelog
|
|
||||||
|
|
||||||
release-firmware:
|
release-firmware:
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
@@ -415,9 +415,53 @@ jobs:
|
|||||||
- name: Display structure of downloaded files
|
- name: Display structure of downloaded files
|
||||||
run: ls -lR
|
run: ls -lR
|
||||||
|
|
||||||
- name: Add bins and debug elfs to release
|
- name: Add bins and debug elfs to GitHub Release
|
||||||
|
# Only run when targeting master branch with workflow_dispatch
|
||||||
|
if: ${{ github.ref_name == 'master' }}
|
||||||
run: |
|
run: |
|
||||||
gh release upload v${{ steps.version.outputs.long }} ./firmware-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip
|
gh release upload v${{ steps.version.outputs.long }} ./firmware-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip
|
||||||
gh release upload v${{ steps.version.outputs.long }} ./debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip
|
gh release upload v${{ steps.version.outputs.long }} ./debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
publish-firmware:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: ${{ github.event_name == 'workflow_dispatch' }}
|
||||||
|
needs: [release-firmware]
|
||||||
|
env:
|
||||||
|
targets: esp32,esp32s3,esp32c3,esp32c6,nrf52840,rp2040,stm32
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: 3.x
|
||||||
|
|
||||||
|
- name: Get release version string
|
||||||
|
run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
|
||||||
|
id: version
|
||||||
|
|
||||||
|
- uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
pattern: firmware-{${{ env.targets }}}-${{ steps.version.outputs.long }}
|
||||||
|
merge-multiple: true
|
||||||
|
path: ./publish
|
||||||
|
|
||||||
|
- name: Publish firmware to meshtastic.github.io
|
||||||
|
uses: peaceiris/actions-gh-pages@v4
|
||||||
|
env:
|
||||||
|
# On event/* branches, use the event name as the destination prefix
|
||||||
|
DEST_PREFIX: ${{ contains(github.ref_name, 'event/') && format('{0}/', github.ref_name) || '' }}
|
||||||
|
with:
|
||||||
|
deploy_key: ${{ secrets.DIST_PAGES_DEPLOY_KEY }}
|
||||||
|
external_repository: meshtastic/meshtastic.github.io
|
||||||
|
publish_branch: master
|
||||||
|
publish_dir: ./publish
|
||||||
|
destination_dir: ${{ env.DEST_PREFIX }}firmware-${{ steps.version.outputs.long }}
|
||||||
|
keep_files: true
|
||||||
|
user_name: github-actions[bot]
|
||||||
|
user_email: github-actions[bot]@users.noreply.github.com
|
||||||
|
commit_message: ${{ steps.version.outputs.long }}
|
||||||
|
enable_jekyll: true
|
||||||
|
|||||||
24
.github/workflows/nightly.yml
vendored
24
.github/workflows/nightly.yml
vendored
@@ -4,16 +4,34 @@ on:
|
|||||||
- cron: 0 8 * * 1-5
|
- cron: 0 8 * * 1-5
|
||||||
workflow_dispatch: {}
|
workflow_dispatch: {}
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
trunk_check:
|
trunk_check:
|
||||||
name: Trunk Check Upload
|
name: Trunk Check and Upload
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Trunk Check
|
- name: Trunk Check
|
||||||
uses: trunk-io/trunk-action@782e83f803ca6e369f035d64c6ba2768174ba61b
|
uses: trunk-io/trunk-action@v1
|
||||||
with:
|
with:
|
||||||
trunk-token: ${{ secrets.TRUNK_TOKEN }}
|
trunk-token: ${{ secrets.TRUNK_TOKEN }}
|
||||||
|
|
||||||
|
trunk_upgrade:
|
||||||
|
# See: https://github.com/trunk-io/trunk-action/blob/v1/readme.md#automatic-upgrades
|
||||||
|
name: Trunk Upgrade (PR)
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
permissions:
|
||||||
|
contents: write # For trunk to create PRs
|
||||||
|
pull-requests: write # For trunk to create PRs
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Trunk Upgrade
|
||||||
|
uses: trunk-io/trunk-action/upgrade@v1
|
||||||
|
with:
|
||||||
|
base: master
|
||||||
|
|||||||
65
.github/workflows/release_channels.yml
vendored
65
.github/workflows/release_channels.yml
vendored
@@ -43,3 +43,68 @@ jobs:
|
|||||||
copr_project: |-
|
copr_project: |-
|
||||||
${{ contains(github.event.release.name, 'Beta') && 'beta' || contains(github.event.release.name, 'Alpha') && 'alpha' }}
|
${{ contains(github.event.release.name, 'Beta') && 'beta' || contains(github.event.release.name, 'Alpha') && 'alpha' }}
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
|
# Create a PR to bump version when a release is Published
|
||||||
|
bump-version:
|
||||||
|
if: github.event.action == 'published'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
contents: write
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: 3.x
|
||||||
|
|
||||||
|
- name: Get release version string
|
||||||
|
run: |
|
||||||
|
echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
|
||||||
|
echo "short=$(./bin/buildinfo.py short)" >> $GITHUB_OUTPUT
|
||||||
|
echo "deb=$(./bin/buildinfo.py deb)" >> $GITHUB_OUTPUT
|
||||||
|
id: version
|
||||||
|
env:
|
||||||
|
BUILD_LOCATION: local
|
||||||
|
|
||||||
|
- name: Bump version.properties
|
||||||
|
run: |
|
||||||
|
# Bump version.properties
|
||||||
|
chmod +x ./bin/bump_version.py
|
||||||
|
./bin/bump_version.py
|
||||||
|
|
||||||
|
- name: Ensure debian deps are installed
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -y --fix-missing
|
||||||
|
sudo apt-get install -y devscripts
|
||||||
|
|
||||||
|
- name: Update debian changelog
|
||||||
|
run: |
|
||||||
|
# Update debian changelog
|
||||||
|
chmod +x ./debian/ci_changelog.sh
|
||||||
|
./debian/ci_changelog.sh
|
||||||
|
|
||||||
|
- name: Bump org.meshtastic.meshtasticd.metainfo.xml
|
||||||
|
run: |
|
||||||
|
# Bump org.meshtastic.meshtasticd.metainfo.xml
|
||||||
|
pip install -r bin/bump_metainfo/requirements.txt -q
|
||||||
|
chmod +x ./bin/bump_metainfo/bump_metainfo.py
|
||||||
|
./bin/bump_metainfo/bump_metainfo.py --file bin/org.meshtastic.meshtasticd.metainfo.xml "${{ steps.version.outputs.short }}"
|
||||||
|
env:
|
||||||
|
PIP_DISABLE_PIP_VERSION_CHECK: 1
|
||||||
|
|
||||||
|
- name: Create Bumps pull request
|
||||||
|
uses: peter-evans/create-pull-request@v7
|
||||||
|
with:
|
||||||
|
base: ${{ github.event.repository.default_branch }}
|
||||||
|
title: Bump release version
|
||||||
|
commit-message: automated bumps
|
||||||
|
add-paths: |
|
||||||
|
version.properties
|
||||||
|
debian/changelog
|
||||||
|
bin/org.meshtastic.meshtasticd.metainfo.xml
|
||||||
|
|||||||
41
.github/workflows/sec_sast_flawfinder.yml
vendored
41
.github/workflows/sec_sast_flawfinder.yml
vendored
@@ -1,41 +0,0 @@
|
|||||||
---
|
|
||||||
name: Flawfinder Scan
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [master, develop]
|
|
||||||
paths-ignore:
|
|
||||||
- "**.md"
|
|
||||||
- "version.properties"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
flawfinder:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
name: Flawfinder
|
|
||||||
|
|
||||||
steps:
|
|
||||||
# step 1
|
|
||||||
- name: clone application source code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
# step 2
|
|
||||||
- name: flawfinder_scan
|
|
||||||
uses: david-a-wheeler/flawfinder@2.0.19
|
|
||||||
with:
|
|
||||||
arguments: "--sarif ./"
|
|
||||||
output: "flawfinder_report.sarif"
|
|
||||||
|
|
||||||
# step 3
|
|
||||||
- name: save report as pipeline artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: flawfinder_report.sarif
|
|
||||||
overwrite: true
|
|
||||||
path: flawfinder_report.sarif
|
|
||||||
|
|
||||||
# step 4
|
|
||||||
- name: publish code scanning alerts
|
|
||||||
uses: github/codeql-action/upload-sarif@v3
|
|
||||||
with:
|
|
||||||
sarif_file: flawfinder_report.sarif
|
|
||||||
category: flawfinder
|
|
||||||
11
.github/workflows/sec_sast_semgrep_cron.yml
vendored
11
.github/workflows/sec_sast_semgrep_cron.yml
vendored
@@ -3,14 +3,17 @@ name: Semgrep Full Scan
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
schedule:
|
schedule:
|
||||||
- cron: "0 1 * * 6"
|
- cron: 0 1 * * 6
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
semgrep-full:
|
semgrep-full:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
container:
|
container:
|
||||||
image: semgrep/semgrep
|
image: semgrep/semgrep
|
||||||
|
|
||||||
|
|||||||
4
.github/workflows/sec_sast_semgrep_pull.yml
vendored
4
.github/workflows/sec_sast_semgrep_pull.yml
vendored
@@ -2,9 +2,11 @@
|
|||||||
name: Semgrep Differential Scan
|
name: Semgrep Differential Scan
|
||||||
on: pull_request
|
on: pull_request
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
semgrep-diff:
|
semgrep-diff:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
container:
|
container:
|
||||||
image: semgrep/semgrep
|
image: semgrep/semgrep
|
||||||
|
|
||||||
|
|||||||
3
.github/workflows/stale_bot.yml
vendored
3
.github/workflows/stale_bot.yml
vendored
@@ -16,7 +16,8 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Stale PR+Issues
|
- name: Stale PR+Issues
|
||||||
uses: actions/stale@v9.0.0
|
uses: actions/stale@v9.1.0
|
||||||
with:
|
with:
|
||||||
|
days-before-stale: 45
|
||||||
exempt-issue-labels: pinned,3.0
|
exempt-issue-labels: pinned,3.0
|
||||||
exempt-pr-labels: pinned,3.0
|
exempt-pr-labels: pinned,3.0
|
||||||
|
|||||||
2
.github/workflows/test_native.yml
vendored
2
.github/workflows/test_native.yml
vendored
@@ -143,7 +143,7 @@ jobs:
|
|||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
|
|
||||||
- name: Test Report
|
- name: Test Report
|
||||||
uses: dorny/test-reporter@v1.9.1
|
uses: dorny/test-reporter@v2.0.0
|
||||||
with:
|
with:
|
||||||
name: PlatformIO Tests
|
name: PlatformIO Tests
|
||||||
path: testreport.xml
|
path: testreport.xml
|
||||||
|
|||||||
4
.github/workflows/tests.yml
vendored
4
.github/workflows/tests.yml
vendored
@@ -2,9 +2,11 @@ name: End to end tests
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: "0 0 * * *" # Run every day at midnight
|
- cron: 0 0 * * * # Run every day at midnight
|
||||||
workflow_dispatch: {}
|
workflow_dispatch: {}
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
native-tests:
|
native-tests:
|
||||||
uses: ./.github/workflows/test_native.yml
|
uses: ./.github/workflows/test_native.yml
|
||||||
|
|||||||
26
.github/workflows/trunk_annotate_pr.yml
vendored
Normal file
26
.github/workflows/trunk_annotate_pr.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
name: Annotate PR with trunk issues
|
||||||
|
# See: https://github.com/trunk-io/trunk-action/blob/v1/readme.md#getting-inline-annotations-for-fork-prs
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_run:
|
||||||
|
workflows: [Pull Request] # Name from `trunk_check.yml`
|
||||||
|
types: [completed]
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
trunk_check:
|
||||||
|
name: Trunk Code Quality Annotate
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
permissions:
|
||||||
|
checks: write # For trunk to post annotations
|
||||||
|
contents: read # For repo checkout
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Trunk Check
|
||||||
|
uses: trunk-io/trunk-action@v1
|
||||||
|
with:
|
||||||
|
post-annotations: true
|
||||||
@@ -9,7 +9,7 @@ permissions: read-all
|
|||||||
jobs:
|
jobs:
|
||||||
trunk_check:
|
trunk_check:
|
||||||
name: Trunk Check Runner
|
name: Trunk Check Runner
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
checks: write # For trunk to post annotations
|
checks: write # For trunk to post annotations
|
||||||
contents: read # For repo checkout
|
contents: read # For repo checkout
|
||||||
@@ -20,3 +20,5 @@ jobs:
|
|||||||
|
|
||||||
- name: Trunk Check
|
- name: Trunk Check
|
||||||
uses: trunk-io/trunk-action@v1
|
uses: trunk-io/trunk-action@v1
|
||||||
|
with:
|
||||||
|
save-annotations: true
|
||||||
6
.github/workflows/trunk_format_pr.yml
vendored
6
.github/workflows/trunk_format_pr.yml
vendored
@@ -4,11 +4,15 @@ on:
|
|||||||
issue_comment:
|
issue_comment:
|
||||||
types: [created]
|
types: [created]
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
trunk-fmt:
|
trunk-fmt:
|
||||||
if: github.event.issue.pull_request != null && contains(github.event.comment.body, 'trunk fmt')
|
if: github.event.issue.pull_request != null && contains(github.event.comment.body, 'trunk fmt')
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|||||||
6
.github/workflows/update_protobufs.yml
vendored
6
.github/workflows/update_protobufs.yml
vendored
@@ -1,10 +1,14 @@
|
|||||||
name: Update protobufs and regenerate classes
|
name: Update protobufs and regenerate classes
|
||||||
on: workflow_dispatch
|
on: workflow_dispatch
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
update-protobufs:
|
update-protobufs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|||||||
@@ -8,3 +8,4 @@ line_length: false
|
|||||||
spaces: false
|
spaces: false
|
||||||
url: false
|
url: false
|
||||||
whitespace: false
|
whitespace: false
|
||||||
|
headings: false
|
||||||
|
|||||||
@@ -1,37 +1,35 @@
|
|||||||
version: 0.1
|
version: 0.1
|
||||||
cli:
|
cli:
|
||||||
version: 1.22.8
|
version: 1.22.15
|
||||||
plugins:
|
plugins:
|
||||||
sources:
|
sources:
|
||||||
- id: trunk
|
- id: trunk
|
||||||
ref: v1.6.6
|
ref: v1.6.8
|
||||||
uri: https://github.com/trunk-io/plugins
|
uri: https://github.com/trunk-io/plugins
|
||||||
lint:
|
lint:
|
||||||
enabled:
|
enabled:
|
||||||
- prettier@3.4.2
|
- renovate@40.0.6
|
||||||
- trufflehog@3.86.1
|
- prettier@3.5.3
|
||||||
- yamllint@1.35.1
|
- trufflehog@3.88.26
|
||||||
- bandit@1.8.0
|
- yamllint@1.37.0
|
||||||
- checkov@3.2.334
|
- bandit@1.8.3
|
||||||
- terrascan@1.19.9
|
- terrascan@1.19.9
|
||||||
- trivy@0.58.0
|
- trivy@0.61.1
|
||||||
#- trufflehog@3.63.2-rc0
|
|
||||||
- taplo@0.9.3
|
- taplo@0.9.3
|
||||||
- ruff@0.8.3
|
- ruff@0.11.8
|
||||||
- isort@5.13.2
|
- isort@6.0.1
|
||||||
- markdownlint@0.43.0
|
- markdownlint@0.44.0
|
||||||
- oxipng@9.1.3
|
- oxipng@9.1.5
|
||||||
- svgo@3.3.2
|
- svgo@3.3.2
|
||||||
- actionlint@1.7.4
|
- actionlint@1.7.7
|
||||||
- flake8@7.1.1
|
- flake8@7.2.0
|
||||||
- hadolint@2.12.1-beta
|
- hadolint@2.12.1-beta
|
||||||
- shfmt@3.6.0
|
- shfmt@3.6.0
|
||||||
- shellcheck@0.10.0
|
- shellcheck@0.10.0
|
||||||
- black@24.10.0
|
- black@25.1.0
|
||||||
- git-diff-check
|
- git-diff-check
|
||||||
- gitleaks@8.21.2
|
- gitleaks@8.25.1
|
||||||
- clang-format@16.0.3
|
- clang-format@16.0.3
|
||||||
#- prettier@3.3.3
|
|
||||||
ignore:
|
ignore:
|
||||||
- linters: [ALL]
|
- linters: [ALL]
|
||||||
paths:
|
paths:
|
||||||
|
|||||||
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@@ -7,5 +7,8 @@
|
|||||||
"cmake.configureOnOpen": false,
|
"cmake.configureOnOpen": false,
|
||||||
"[cpp]": {
|
"[cpp]": {
|
||||||
"editor.defaultFormatter": "trunk.io"
|
"editor.defaultFormatter": "trunk.io"
|
||||||
|
},
|
||||||
|
"[powershell]": {
|
||||||
|
"editor.defaultFormatter": "ms-vscode.powershell"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
39
Dockerfile
39
Dockerfile
@@ -1,30 +1,39 @@
|
|||||||
# trunk-ignore-all(terrascan/AC_DOCKER_0002): Known terrascan issue
|
# trunk-ignore-all(terrascan/AC_DOCKER_0002): Known terrascan issue
|
||||||
# trunk-ignore-all(hadolint/DL3008): Use latest version of apt packages for buildchain
|
|
||||||
# trunk-ignore-all(trivy/DS002): We must run as root for this container
|
# trunk-ignore-all(trivy/DS002): We must run as root for this container
|
||||||
# trunk-ignore-all(checkov/CKV_DOCKER_8): We must run as root for this container
|
|
||||||
# trunk-ignore-all(hadolint/DL3002): We must run as root for this container
|
# trunk-ignore-all(hadolint/DL3002): We must run as root for this container
|
||||||
|
# trunk-ignore-all(hadolint/DL3008): Do not pin apt package versions
|
||||||
|
# trunk-ignore-all(hadolint/DL3013): Do not pin pip package versions
|
||||||
|
|
||||||
FROM python:3.12-bookworm AS builder
|
FROM python:3.13-bookworm AS builder
|
||||||
|
ARG PIO_ENV=native
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
ENV TZ=Etc/UTC
|
ENV TZ=Etc/UTC
|
||||||
|
|
||||||
# Install Dependencies
|
# Install Dependencies
|
||||||
ENV PIP_ROOT_USER_ACTION=ignore
|
ENV PIP_ROOT_USER_ACTION=ignore
|
||||||
RUN apt-get update && apt-get install --no-install-recommends -y wget g++ zip git ca-certificates \
|
RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||||
libgpiod-dev libyaml-cpp-dev libbluetooth-dev libi2c-dev \
|
curl wget g++ zip git ca-certificates pkg-config \
|
||||||
libusb-1.0-0-dev libulfius-dev liborcania-dev libssl-dev pkg-config && \
|
libgpiod-dev libyaml-cpp-dev libbluetooth-dev libi2c-dev libuv1-dev \
|
||||||
apt-get clean && rm -rf /var/lib/apt/lists/* && \
|
libusb-1.0-0-dev libulfius-dev liborcania-dev libssl-dev \
|
||||||
pip install --no-cache-dir -U platformio==6.1.16 && \
|
libx11-dev libinput-dev libxkbcommon-x11-dev \
|
||||||
mkdir /tmp/firmware
|
&& apt-get clean && rm -rf /var/lib/apt/lists/* \
|
||||||
|
&& pip install --no-cache-dir -U platformio \
|
||||||
|
&& mkdir /tmp/firmware
|
||||||
|
|
||||||
# Copy source code
|
# Copy source code
|
||||||
WORKDIR /tmp/firmware
|
WORKDIR /tmp/firmware
|
||||||
COPY . /tmp/firmware
|
COPY . /tmp/firmware
|
||||||
|
|
||||||
# Build
|
# Build
|
||||||
RUN bash ./bin/build-native.sh && \
|
RUN bash ./bin/build-native.sh "$PIO_ENV" && \
|
||||||
cp "/tmp/firmware/release/meshtasticd_linux_$(uname -m)" "/tmp/firmware/release/meshtasticd"
|
cp "/tmp/firmware/release/meshtasticd_linux_$(uname -m)" "/tmp/firmware/release/meshtasticd"
|
||||||
|
|
||||||
|
# Fetch web assets
|
||||||
|
RUN curl -L "https://github.com/meshtastic/web/releases/download/v$(cat /tmp/firmware/bin/web.version)/build.tar" -o /tmp/web.tar \
|
||||||
|
&& mkdir -p /tmp/web \
|
||||||
|
&& tar -xf /tmp/web.tar -C /tmp/web/ \
|
||||||
|
&& gzip -dr /tmp/web \
|
||||||
|
&& rm /tmp/web.tar
|
||||||
|
|
||||||
##### PRODUCTION BUILD #############
|
##### PRODUCTION BUILD #############
|
||||||
|
|
||||||
@@ -35,14 +44,18 @@ ENV TZ=Etc/UTC
|
|||||||
# nosemgrep: dockerfile.security.last-user-is-root.last-user-is-root
|
# nosemgrep: dockerfile.security.last-user-is-root.last-user-is-root
|
||||||
USER root
|
USER root
|
||||||
|
|
||||||
RUN apt-get update && apt-get --no-install-recommends -y install libc-bin libc6 libgpiod2 libyaml-cpp0.7 libi2c0 libulfius2.7 libusb-1.0-0-dev liborcania2.3 libssl3 && \
|
RUN apt-get update && apt-get --no-install-recommends -y install \
|
||||||
apt-get clean && rm -rf /var/lib/apt/lists/* \
|
libc-bin libc6 libgpiod2 libyaml-cpp0.7 libi2c0 libuv1 libusb-1.0-0-dev \
|
||||||
|
liborcania2.3 libulfius2.7 libssl3 \
|
||||||
|
libx11-6 libinput10 libxkbcommon-x11-0 \
|
||||||
|
&& apt-get clean && rm -rf /var/lib/apt/lists/* \
|
||||||
&& mkdir -p /var/lib/meshtasticd \
|
&& mkdir -p /var/lib/meshtasticd \
|
||||||
&& mkdir -p /etc/meshtasticd/config.d \
|
&& mkdir -p /etc/meshtasticd/config.d \
|
||||||
&& mkdir -p /etc/meshtasticd/ssl
|
&& mkdir -p /etc/meshtasticd/ssl
|
||||||
|
|
||||||
# Fetch compiled binary from the builder
|
# Fetch compiled binary from the builder
|
||||||
COPY --from=builder /tmp/firmware/release/meshtasticd /usr/sbin/
|
COPY --from=builder /tmp/firmware/release/meshtasticd /usr/sbin/
|
||||||
|
COPY --from=builder /tmp/web /usr/share/meshtasticd/
|
||||||
# Copy config templates
|
# Copy config templates
|
||||||
COPY ./bin/config.d /etc/meshtasticd/available.d
|
COPY ./bin/config.d /etc/meshtasticd/available.d
|
||||||
|
|
||||||
@@ -51,6 +64,8 @@ VOLUME /var/lib/meshtasticd
|
|||||||
|
|
||||||
# Expose Meshtastic TCP API port from the host
|
# Expose Meshtastic TCP API port from the host
|
||||||
EXPOSE 4403
|
EXPOSE 4403
|
||||||
|
# Expose Meshtastic Web UI port from the host
|
||||||
|
EXPOSE 443
|
||||||
|
|
||||||
CMD [ "sh", "-cx", "meshtasticd -d /var/lib/meshtasticd" ]
|
CMD [ "sh", "-cx", "meshtasticd -d /var/lib/meshtasticd" ]
|
||||||
|
|
||||||
|
|||||||
31
README.md
31
README.md
@@ -1,4 +1,7 @@
|
|||||||
# Meshtastic Firmware
|
<div align="center" markdown="1">
|
||||||
|
|
||||||
|
<img src=".github/meshtastic_logo.png" alt="Meshtastic Logo" width="80"/>
|
||||||
|
<h1>Meshtastic Firmware</h1>
|
||||||
|
|
||||||

|

|
||||||
[](https://github.com/meshtastic/firmware/actions/workflows/ci.yml)
|
[](https://github.com/meshtastic/firmware/actions/workflows/ci.yml)
|
||||||
@@ -6,13 +9,31 @@
|
|||||||
[](https://opencollective.com/meshtastic/)
|
[](https://opencollective.com/meshtastic/)
|
||||||
[](https://vercel.com?utm_source=meshtastic&utm_campaign=oss)
|
[](https://vercel.com?utm_source=meshtastic&utm_campaign=oss)
|
||||||
|
|
||||||
|
<a href="https://trendshift.io/repositories/5524" target="_blank"><img src="https://trendshift.io/api/badge/repositories/5524" alt="meshtastic%2Ffirmware | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
<a href="https://meshtastic.org">Website</a>
|
||||||
|
-
|
||||||
|
<a href="https://meshtastic.org/docs/">Documentation</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
This repository contains the device firmware for the Meshtastic project.
|
This repository contains the official device firmware for Meshtastic, an open-source LoRa mesh networking project designed for long-range, low-power communication without relying on internet or cellular infrastructure. The firmware supports various hardware platforms, including ESP32, nRF52, RP2040/RP2350, and Linux-based devices.
|
||||||
|
|
||||||
- **[Building Instructions](https://meshtastic.org/docs/development/firmware/build)**
|
Meshtastic enables text messaging, location sharing, and telemetry over a decentralized mesh network, making it ideal for outdoor adventures, emergency preparedness, and remote operations.
|
||||||
- **[Flashing Instructions](https://meshtastic.org/docs/getting-started/flashing-firmware/)**
|
|
||||||
|
### Get Started
|
||||||
|
|
||||||
|
- 🔧 **[Building Instructions](https://meshtastic.org/docs/development/firmware/build)** – Learn how to compile the firmware from source.
|
||||||
|
- ⚡ **[Flashing Instructions](https://meshtastic.org/docs/getting-started/flashing-firmware/)** – Install or update the firmware on your device.
|
||||||
|
|
||||||
|
Join our community and help improve Meshtastic! 🚀
|
||||||
|
|
||||||
## Stats
|
## Stats
|
||||||
|
|
||||||

|

|
||||||
|
|||||||
@@ -1,14 +1,19 @@
|
|||||||
# trunk-ignore-all(trivy/DS002): We must run as root for this container
|
# trunk-ignore-all(trivy/DS002): We must run as root for this container
|
||||||
# trunk-ignore-all(checkov/CKV_DOCKER_8): We must run as root for this container
|
|
||||||
# trunk-ignore-all(hadolint/DL3002): We must run as root for this container
|
# trunk-ignore-all(hadolint/DL3002): We must run as root for this container
|
||||||
|
# trunk-ignore-all(hadolint/DL3018): Do not pin apk package versions
|
||||||
|
# trunk-ignore-all(hadolint/DL3013): Do not pin pip package versions
|
||||||
|
|
||||||
FROM python:3.12-alpine3.21 AS builder
|
FROM python:3.13-alpine3.21 AS builder
|
||||||
|
ARG PIO_ENV=native
|
||||||
ENV PIP_ROOT_USER_ACTION=ignore
|
ENV PIP_ROOT_USER_ACTION=ignore
|
||||||
RUN apk add bash g++ libstdc++-dev linux-headers zip git ca-certificates libgpiod-dev yaml-cpp-dev bluez-dev \
|
|
||||||
libusb-dev i2c-tools-dev openssl-dev pkgconf argp-standalone && \
|
RUN apk --no-cache add \
|
||||||
pip install --no-cache-dir -U platformio==6.1.16 && \
|
bash g++ libstdc++-dev linux-headers zip git ca-certificates libgpiod-dev yaml-cpp-dev bluez-dev \
|
||||||
mkdir /tmp/firmware
|
libusb-dev i2c-tools-dev libuv-dev openssl-dev pkgconf argp-standalone \
|
||||||
|
libx11-dev libinput-dev libxkbcommon-dev \
|
||||||
|
&& rm -rf /var/cache/apk/* \
|
||||||
|
&& pip install --no-cache-dir -U platformio \
|
||||||
|
&& mkdir /tmp/firmware
|
||||||
|
|
||||||
WORKDIR /tmp/firmware
|
WORKDIR /tmp/firmware
|
||||||
COPY . /tmp/firmware
|
COPY . /tmp/firmware
|
||||||
@@ -17,7 +22,7 @@ COPY . /tmp/firmware
|
|||||||
# Add `argp` for musl
|
# Add `argp` for musl
|
||||||
ENV PLATFORMIO_BUILD_FLAGS="-Os -ffunction-sections -fdata-sections -Wl,--gc-sections -largp"
|
ENV PLATFORMIO_BUILD_FLAGS="-Os -ffunction-sections -fdata-sections -Wl,--gc-sections -largp"
|
||||||
|
|
||||||
RUN bash ./bin/build-native.sh && \
|
RUN bash ./bin/build-native.sh "$PIO_ENV" && \
|
||||||
cp "/tmp/firmware/release/meshtasticd_linux_$(uname -m)" "/tmp/firmware/release/meshtasticd"
|
cp "/tmp/firmware/release/meshtasticd_linux_$(uname -m)" "/tmp/firmware/release/meshtasticd"
|
||||||
|
|
||||||
# ##### PRODUCTION BUILD #############
|
# ##### PRODUCTION BUILD #############
|
||||||
@@ -27,11 +32,18 @@ FROM alpine:3.21
|
|||||||
# nosemgrep: dockerfile.security.last-user-is-root.last-user-is-root
|
# nosemgrep: dockerfile.security.last-user-is-root.last-user-is-root
|
||||||
USER root
|
USER root
|
||||||
|
|
||||||
RUN apk add libstdc++ libgpiod yaml-cpp libusb i2c-tools \
|
RUN apk --no-cache add \
|
||||||
|
libstdc++ libgpiod yaml-cpp libusb i2c-tools libuv \
|
||||||
|
libx11 libinput libxkbcommon \
|
||||||
|
&& rm -rf /var/cache/apk/* \
|
||||||
&& mkdir -p /var/lib/meshtasticd \
|
&& mkdir -p /var/lib/meshtasticd \
|
||||||
&& mkdir -p /etc/meshtasticd/config.d \
|
&& mkdir -p /etc/meshtasticd/config.d \
|
||||||
&& mkdir -p /etc/meshtasticd/ssl
|
&& mkdir -p /etc/meshtasticd/ssl
|
||||||
|
|
||||||
|
# Fetch compiled binary from the builder
|
||||||
COPY --from=builder /tmp/firmware/release/meshtasticd /usr/sbin/
|
COPY --from=builder /tmp/firmware/release/meshtasticd /usr/sbin/
|
||||||
|
# Copy config templates
|
||||||
|
COPY ./bin/config.d /etc/meshtasticd/available.d
|
||||||
|
|
||||||
WORKDIR /var/lib/meshtasticd
|
WORKDIR /var/lib/meshtasticd
|
||||||
VOLUME /var/lib/meshtasticd
|
VOLUME /var/lib/meshtasticd
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
[esp32_base]
|
[esp32_base]
|
||||||
extends = arduino_base
|
extends = arduino_base
|
||||||
custom_esp32_kind = esp32
|
custom_esp32_kind = esp32
|
||||||
platform = platformio/espressif32@6.9.0
|
platform =
|
||||||
|
# renovate: datasource=custom.pio depName=platformio/espressif32 packageName=platformio/platform/espressif32
|
||||||
|
platformio/espressif32@6.10.0
|
||||||
|
|
||||||
build_src_filter =
|
build_src_filter =
|
||||||
${arduino_base.build_src_filter} -<platform/nrf52/> -<platform/stm32wl> -<platform/rp2xx0> -<mesh/eth/> -<mesh/raspihttp>
|
${arduino_base.build_src_filter} -<platform/nrf52/> -<platform/stm32wl> -<platform/rp2xx0> -<mesh/eth/> -<mesh/raspihttp>
|
||||||
@@ -37,19 +39,27 @@ build_flags =
|
|||||||
-DLIBPAX_ARDUINO
|
-DLIBPAX_ARDUINO
|
||||||
-DLIBPAX_WIFI
|
-DLIBPAX_WIFI
|
||||||
-DLIBPAX_BLE
|
-DLIBPAX_BLE
|
||||||
|
-DHAS_UDP_MULTICAST=1
|
||||||
;-DDEBUG_HEAP
|
;-DDEBUG_HEAP
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${arduino_base.lib_deps}
|
${arduino_base.lib_deps}
|
||||||
${networking_base.lib_deps}
|
${networking_base.lib_deps}
|
||||||
${environmental_base.lib_deps}
|
${environmental_base.lib_deps}
|
||||||
|
${environmental_extra.lib_deps}
|
||||||
${radiolib_base.lib_deps}
|
${radiolib_base.lib_deps}
|
||||||
https://github.com/meshtastic/esp32_https_server.git#23665b3adc080a311dcbb586ed5941b5f94d6ea2
|
# renovate: datasource=git-refs depName=meshtastic-esp32_https_server packageName=https://github.com/meshtastic/esp32_https_server gitBranch=master
|
||||||
h2zero/NimBLE-Arduino@^1.4.2
|
https://github.com/meshtastic/esp32_https_server/archive/896f1771ceb5979987a0b41028bf1b4e7aad419b.zip
|
||||||
https://github.com/dbinfrago/libpax.git#3cdc0371c375676a97967547f4065607d4c53fd1
|
# renovate: datasource=custom.pio depName=NimBLE-Arduino packageName=h2zero/library/NimBLE-Arduino
|
||||||
lewisxhe/XPowersLib@^0.2.6
|
h2zero/NimBLE-Arduino@^1.4.3
|
||||||
https://github.com/meshtastic/ESP32_Codec2.git#633326c78ac251c059ab3a8c430fcdf25b41672f
|
# renovate: datasource=git-refs depName=libpax packageName=https://github.com/dbinfrago/libpax gitBranch=master
|
||||||
rweather/Crypto@^0.4.0
|
https://github.com/dbinfrago/libpax/archive/3cdc0371c375676a97967547f4065607d4c53fd1.zip
|
||||||
|
# renovate: datasource=custom.pio depName=XPowersLib packageName=lewisxhe/library/XPowersLib
|
||||||
|
lewisxhe/XPowersLib@^0.2.7
|
||||||
|
# renovate: datasource=git-refs depName=meshtastic-ESP32_Codec2 packageName=https://github.com/meshtastic/ESP32_Codec2 gitBranch=master
|
||||||
|
https://github.com/meshtastic/ESP32_Codec2/archive/633326c78ac251c059ab3a8c430fcdf25b41672f.zip
|
||||||
|
# renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto
|
||||||
|
rweather/Crypto@0.4.0
|
||||||
|
|
||||||
lib_ignore =
|
lib_ignore =
|
||||||
segger_rtt
|
segger_rtt
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
[esp32c6_base]
|
[esp32c6_base]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
platform = https://github.com/Jason2866/platform-espressif32.git#22faa566df8c789000f8136cd8d0aca49617af55
|
platform =
|
||||||
|
# Do not renovate until we have switched to pioarduino tagged builds
|
||||||
|
https://github.com/Jason2866/platform-espressif32/archive/22faa566df8c789000f8136cd8d0aca49617af55.zip
|
||||||
build_flags =
|
build_flags =
|
||||||
${arduino_base.build_flags}
|
${arduino_base.build_flags}
|
||||||
-Wall
|
-Wall
|
||||||
@@ -23,10 +25,14 @@ lib_deps =
|
|||||||
${arduino_base.lib_deps}
|
${arduino_base.lib_deps}
|
||||||
${networking_base.lib_deps}
|
${networking_base.lib_deps}
|
||||||
${environmental_base.lib_deps}
|
${environmental_base.lib_deps}
|
||||||
|
${environmental_extra.lib_deps}
|
||||||
${radiolib_base.lib_deps}
|
${radiolib_base.lib_deps}
|
||||||
lewisxhe/XPowersLib@^0.2.6
|
# renovate: datasource=custom.pio depName=XPowersLib packageName=lewisxhe/library/XPowersLib
|
||||||
https://github.com/meshtastic/ESP32_Codec2.git#633326c78ac251c059ab3a8c430fcdf25b41672f
|
lewisxhe/XPowersLib@^0.2.7
|
||||||
rweather/Crypto@^0.4.0
|
# renovate: datasource=git-refs depName=meshtastic-ESP32_Codec2 packageName=https://github.com/meshtastic/ESP32_Codec2 gitBranch=master
|
||||||
|
https://github.com/meshtastic/ESP32_Codec2/archive/633326c78ac251c059ab3a8c430fcdf25b41672f.zip
|
||||||
|
# renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto
|
||||||
|
rweather/Crypto@0.4.0
|
||||||
|
|
||||||
build_src_filter =
|
build_src_filter =
|
||||||
${esp32_base.build_src_filter} -<mesh/http>
|
${esp32_base.build_src_filter} -<mesh/http>
|
||||||
|
|||||||
@@ -3,4 +3,3 @@ extends = esp32_base
|
|||||||
custom_esp32_kind = esp32s3
|
custom_esp32_kind = esp32s3
|
||||||
|
|
||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
[nrf52_base]
|
[nrf52_base]
|
||||||
; Instead of the standard nordicnrf52 platform, we use our fork which has our added variant files
|
; Instead of the standard nordicnrf52 platform, we use our fork which has our added variant files
|
||||||
platform = platformio/nordicnrf52@^10.7.0
|
platform =
|
||||||
|
# renovate: datasource=custom.pio depName=platformio/nordicnrf52 packageName=platformio/platform/nordicnrf52
|
||||||
|
platformio/nordicnrf52@^10.8.0
|
||||||
extends = arduino_base
|
extends = arduino_base
|
||||||
platform_packages =
|
platform_packages =
|
||||||
; our custom Git version until they merge our PR
|
; our custom Git version until they merge our PR
|
||||||
framework-arduinoadafruitnrf52 @ https://github.com/meshtastic/Adafruit_nRF52_Arduino.git#e13f5820002a4fb2a5e6754b42ace185277e5adf
|
# TODO renovate
|
||||||
toolchain-gccarmnoneeabi@~1.90301.0
|
platformio/framework-arduinoadafruitnrf52 @ https://github.com/meshtastic/Adafruit_nRF52_Arduino#e13f5820002a4fb2a5e6754b42ace185277e5adf
|
||||||
|
; Don't renovate toolchain-gccarmnoneeabi
|
||||||
|
platformio/toolchain-gccarmnoneeabi@~1.90301.0
|
||||||
|
|
||||||
build_type = debug
|
build_type = debug
|
||||||
build_flags =
|
build_flags =
|
||||||
@@ -17,7 +21,6 @@ build_flags =
|
|||||||
-DLFS_NO_ASSERT ; Disable LFS assertions , see https://github.com/meshtastic/firmware/pull/3818
|
-DLFS_NO_ASSERT ; Disable LFS assertions , see https://github.com/meshtastic/firmware/pull/3818
|
||||||
-DMESHTASTIC_EXCLUDE_AUDIO=1
|
-DMESHTASTIC_EXCLUDE_AUDIO=1
|
||||||
-DMESHTASTIC_EXCLUDE_PAXCOUNTER=1
|
-DMESHTASTIC_EXCLUDE_PAXCOUNTER=1
|
||||||
-DMAX_NUM_NODES=80
|
|
||||||
|
|
||||||
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/rp2xx0> -<mesh/eth/> -<mesh/raspihttp>
|
${arduino_base.build_src_filter} -<platform/esp32/> -<platform/stm32wl> -<nimble/> -<mesh/wifi/> -<mesh/api/> -<mesh/http/> -<modules/esp32> -<platform/rp2xx0> -<mesh/eth/> -<mesh/raspihttp>
|
||||||
@@ -25,7 +28,8 @@ build_src_filter =
|
|||||||
lib_deps=
|
lib_deps=
|
||||||
${arduino_base.lib_deps}
|
${arduino_base.lib_deps}
|
||||||
${radiolib_base.lib_deps}
|
${radiolib_base.lib_deps}
|
||||||
rweather/Crypto@^0.4.0
|
# renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto
|
||||||
|
rweather/Crypto@0.4.0
|
||||||
|
|
||||||
lib_ignore =
|
lib_ignore =
|
||||||
BluetoothOTA
|
BluetoothOTA
|
||||||
|
|||||||
@@ -6,7 +6,9 @@ build_flags = ${nrf52_base.build_flags}
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${nrf52_base.lib_deps}
|
${nrf52_base.lib_deps}
|
||||||
${environmental_base.lib_deps}
|
${environmental_base.lib_deps}
|
||||||
https://github.com/Kongduino/Adafruit_nRFCrypto.git#e31a8825ea3300b163a0a3c1ddd5de34e10e1371
|
${environmental_extra.lib_deps}
|
||||||
|
# renovate: datasource=git-refs depName=Kongduino-Adafruit_nRFCrypto packageName=https://github.com/Kongduino/Adafruit_nRFCrypto gitBranch=master
|
||||||
|
https://github.com/Kongduino/Adafruit_nRFCrypto/archive/5f838d2709461a2c981f642917aa50254a25c14c.zip
|
||||||
|
|
||||||
; Common NRF52 debugging settings follow. See the Meshtastic developer docs for how to connect SWD debugging probes to your board.
|
; Common NRF52 debugging settings follow. See the Meshtastic developer docs for how to connect SWD debugging probes to your board.
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
; The Portduino based 'native' environment. Currently supported on Linux targets with real LoRa hardware (or simulated).
|
; The Portduino based 'native' environment. Currently supported on Linux targets with real LoRa hardware (or simulated).
|
||||||
[portduino_base]
|
[portduino_base]
|
||||||
platform = https://github.com/meshtastic/platform-native.git#562d189828f09fbf4c4093b3c0104bae9d8e9ff9
|
platform =
|
||||||
|
# renovate: datasource=git-refs depName=platform-native packageName=https://github.com/meshtastic/platform-native gitBranch=develop
|
||||||
|
https://github.com/meshtastic/platform-native/archive/622341c6de8a239704318b10c3dbb00c21a3eab3.zip
|
||||||
framework = arduino
|
framework = arduino
|
||||||
|
|
||||||
build_src_filter =
|
build_src_filter =
|
||||||
@@ -15,18 +17,19 @@ build_src_filter =
|
|||||||
+<mesh/raspihttp/>
|
+<mesh/raspihttp/>
|
||||||
-<mesh/eth/>
|
-<mesh/eth/>
|
||||||
-<modules/esp32>
|
-<modules/esp32>
|
||||||
-<modules/Telemetry/EnvironmentTelemetry.cpp>
|
|
||||||
-<modules/Telemetry/AirQualityTelemetry.cpp>
|
|
||||||
-<modules/Telemetry/Sensor>
|
|
||||||
+<../variants/portduino>
|
+<../variants/portduino>
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
${networking_base.lib_deps}
|
${networking_base.lib_deps}
|
||||||
${radiolib_base.lib_deps}
|
${radiolib_base.lib_deps}
|
||||||
rweather/Crypto@^0.4.0
|
${environmental_base.lib_deps}
|
||||||
|
# renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto
|
||||||
|
rweather/Crypto@0.4.0
|
||||||
|
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||||
lovyan03/LovyanGFX@^1.2.0
|
lovyan03/LovyanGFX@^1.2.0
|
||||||
https://github.com/pine64/libch341-spi-userspace#a9b17e3452f7fb747000d9b4ad4409155b39f6ef
|
# renovate: datasource=git-refs depName=libch341-spi-userspace packageName=https://github.com/pine64/libch341-spi-userspace gitBranch=main
|
||||||
|
https://github.com/pine64/libch341-spi-userspace/archive/af9bc27c9c30fa90772279925b7c5913dff789b4.zip
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${arduino_base.build_flags}
|
${arduino_base.build_flags}
|
||||||
@@ -34,10 +37,15 @@ build_flags =
|
|||||||
-Isrc/platform/portduino
|
-Isrc/platform/portduino
|
||||||
-DRADIOLIB_EEPROM_UNSUPPORTED
|
-DRADIOLIB_EEPROM_UNSUPPORTED
|
||||||
-DPORTDUINO_LINUX_HARDWARE
|
-DPORTDUINO_LINUX_HARDWARE
|
||||||
|
-DHAS_UDP_MULTICAST
|
||||||
-lpthread
|
-lpthread
|
||||||
-lstdc++fs
|
-lstdc++fs
|
||||||
-lbluetooth
|
-lbluetooth
|
||||||
-lgpiod
|
-lgpiod
|
||||||
-lyaml-cpp
|
-lyaml-cpp
|
||||||
-li2c
|
-li2c
|
||||||
|
-luv
|
||||||
|
-std=gnu17
|
||||||
-std=c++17
|
-std=c++17
|
||||||
|
|
||||||
|
lib_ignore = Adafruit NeoPixel
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
; Common settings for rp2040 Processor based targets
|
; Common settings for rp2040 Processor based targets
|
||||||
[rp2040_base]
|
[rp2040_base]
|
||||||
platform = https://github.com/maxgerhardt/platform-raspberrypi.git#19e30129fb1428b823be585c787dcb4ac0d9014c ; For arduino-pico >=4.2.1
|
platform =
|
||||||
|
# TODO renovate
|
||||||
|
https://github.com/maxgerhardt/platform-raspberrypi#76ecf3c7e9dd4503af0331154c4ca1cddc4b03e5
|
||||||
|
; For arduino-pico >= 4.4.3
|
||||||
extends = arduino_base
|
extends = arduino_base
|
||||||
platform_packages = framework-arduinopico@https://github.com/earlephilhower/arduino-pico.git#6024e9a7e82a72e38dd90f42029ba3748835eb2e ; 4.3.0 with fix MDNS
|
platform_packages =
|
||||||
|
# TODO renovate
|
||||||
|
framework-arduinopico@https://github.com/earlephilhower/arduino-pico#4.4.3
|
||||||
|
|
||||||
board_build.core = earlephilhower
|
board_build.core = earlephilhower
|
||||||
board_build.filesystem_size = 0.5m
|
board_build.filesystem_size = 0.5m
|
||||||
@@ -18,9 +23,12 @@ build_src_filter =
|
|||||||
|
|
||||||
lib_ignore =
|
lib_ignore =
|
||||||
BluetoothOTA
|
BluetoothOTA
|
||||||
|
lvgl
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${arduino_base.lib_deps}
|
${arduino_base.lib_deps}
|
||||||
${environmental_base.lib_deps}
|
${environmental_base.lib_deps}
|
||||||
|
${environmental_extra.lib_deps}
|
||||||
${radiolib_base.lib_deps}
|
${radiolib_base.lib_deps}
|
||||||
rweather/Crypto
|
# renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto
|
||||||
|
rweather/Crypto@0.4.0
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
; Common settings for rp2040 Processor based targets
|
; Common settings for rp2350 Processor based targets
|
||||||
[rp2350_base]
|
[rp2350_base]
|
||||||
platform = https://github.com/maxgerhardt/platform-raspberrypi.git#19e30129fb1428b823be585c787dcb4ac0d9014c ; For arduino-pico >=4.2.1
|
platform =
|
||||||
|
# TODO renovate
|
||||||
|
https://github.com/maxgerhardt/platform-raspberrypi#76ecf3c7e9dd4503af0331154c4ca1cddc4b03e5
|
||||||
|
; For arduino-pico >= 4.4.3
|
||||||
extends = arduino_base
|
extends = arduino_base
|
||||||
platform_packages = framework-arduinopico@https://github.com/earlephilhower/arduino-pico.git#6024e9a7e82a72e38dd90f42029ba3748835eb2e ; 4.3.0 with fix MDNS
|
platform_packages =
|
||||||
|
# TODO renovate
|
||||||
|
framework-arduinopico@https://github.com/earlephilhower/arduino-pico#4.4.3
|
||||||
|
|
||||||
board_build.core = earlephilhower
|
board_build.core = earlephilhower
|
||||||
board_build.filesystem_size = 0.5m
|
board_build.filesystem_size = 0.5m
|
||||||
@@ -10,7 +15,6 @@ build_flags =
|
|||||||
${arduino_base.build_flags} -Wno-unused-variable -Wcast-align
|
${arduino_base.build_flags} -Wno-unused-variable -Wcast-align
|
||||||
-Isrc/platform/rp2xx0
|
-Isrc/platform/rp2xx0
|
||||||
-D__PLAT_RP2350__
|
-D__PLAT_RP2350__
|
||||||
# -D _POSIX_THREADS
|
|
||||||
build_src_filter =
|
build_src_filter =
|
||||||
${arduino_base.build_src_filter} -<platform/esp32/> -<nimble/> -<modules/esp32> -<platform/nrf52/> -<platform/stm32wl> -<mesh/eth/> -<mesh/wifi/> -<mesh/http/> -<mesh/raspihttp> -<platform/rp2xx0/pico_sleep> -<platform/rp2xx0/hardware_rosc>
|
${arduino_base.build_src_filter} -<platform/esp32/> -<nimble/> -<modules/esp32> -<platform/nrf52/> -<platform/stm32wl> -<mesh/eth/> -<mesh/wifi/> -<mesh/http/> -<mesh/raspihttp> -<platform/rp2xx0/pico_sleep> -<platform/rp2xx0/hardware_rosc>
|
||||||
|
|
||||||
@@ -21,5 +25,7 @@ lib_ignore =
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${arduino_base.lib_deps}
|
${arduino_base.lib_deps}
|
||||||
${environmental_base.lib_deps}
|
${environmental_base.lib_deps}
|
||||||
|
${environmental_extra.lib_deps}
|
||||||
${radiolib_base.lib_deps}
|
${radiolib_base.lib_deps}
|
||||||
rweather/Crypto
|
# renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto
|
||||||
|
rweather/Crypto@0.4.0
|
||||||
|
|||||||
@@ -1,12 +1,17 @@
|
|||||||
[stm32_base]
|
[stm32_base]
|
||||||
extends = arduino_base
|
extends = arduino_base
|
||||||
platform = ststm32
|
platform =
|
||||||
platform_packages = platformio/framework-arduinoststm32@https://github.com/stm32duino/Arduino_Core_STM32.git#ea74156acd823b6d14739f389e6cdc648f8ee36e
|
# renovate: datasource=custom.pio depName=platformio/ststm32 packageName=platformio/platform/ststm32
|
||||||
|
platformio/ststm32@19.1.0
|
||||||
|
platform_packages =
|
||||||
|
# TODO renovate
|
||||||
|
platformio/framework-arduinoststm32@https://github.com/stm32duino/Arduino_Core_STM32/archive/2.10.1.zip
|
||||||
|
extra_scripts =
|
||||||
|
${env.extra_scripts}
|
||||||
|
post:extra_scripts/extra_stm32.py
|
||||||
|
|
||||||
build_type = release
|
build_type = release
|
||||||
|
|
||||||
;board_build.flash_offset = 0x08000000
|
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${arduino_base.build_flags}
|
${arduino_base.build_flags}
|
||||||
-flto
|
-flto
|
||||||
@@ -18,11 +23,8 @@ build_flags =
|
|||||||
-DMESHTASTIC_EXCLUDE_SCREEN
|
-DMESHTASTIC_EXCLUDE_SCREEN
|
||||||
-DMESHTASTIC_EXCLUDE_MQTT
|
-DMESHTASTIC_EXCLUDE_MQTT
|
||||||
-DMESHTASTIC_EXCLUDE_BLUETOOTH
|
-DMESHTASTIC_EXCLUDE_BLUETOOTH
|
||||||
-DMESHTASTIC_EXCLUDE_PKI
|
|
||||||
-DMESHTASTIC_EXCLUDE_GPS
|
-DMESHTASTIC_EXCLUDE_GPS
|
||||||
; -DVECT_TAB_OFFSET=0x08000000
|
;-DDEBUG_MUTE
|
||||||
-DconfigUSE_CMSIS_RTOS_V2=1
|
|
||||||
; -DSPI_MODE_0=SPI_MODE0
|
|
||||||
-fmerge-all-constants
|
-fmerge-all-constants
|
||||||
-ffunction-sections
|
-ffunction-sections
|
||||||
-fdata-sections
|
-fdata-sections
|
||||||
@@ -32,12 +34,13 @@ build_src_filter =
|
|||||||
|
|
||||||
board_upload.offset_address = 0x08000000
|
board_upload.offset_address = 0x08000000
|
||||||
upload_protocol = stlink
|
upload_protocol = stlink
|
||||||
|
debug_tool = stlink
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
charlesbaynham/OSFS@^1.2.3
|
${radiolib_base.lib_deps}
|
||||||
jgromes/RadioLib@7.0.2
|
# renovate: datasource=git-refs depName=caveman99-stm32-Crypto packageName=https://github.com/caveman99/Crypto gitBranch=main
|
||||||
https://github.com/caveman99/Crypto.git#f61ae26a53f7a2d0ba5511625b8bf8eff3a35d5e
|
https://github.com/caveman99/Crypto/archive/eae9c768054118a9399690f8af202853d1ae8516.zip
|
||||||
|
|
||||||
lib_ignore =
|
lib_ignore =
|
||||||
mathertel/OneButton@2.6.1
|
mathertel/OneButton@2.6.1
|
||||||
|
|||||||
@@ -35,11 +35,11 @@ cp $SRCBIN $OUTDIR/$basename-update.bin
|
|||||||
|
|
||||||
echo "Building Filesystem for ESP32 targets"
|
echo "Building Filesystem for ESP32 targets"
|
||||||
pio run --environment $1 -t buildfs
|
pio run --environment $1 -t buildfs
|
||||||
cp .pio/build/$1/littlefs.bin $OUTDIR/littlefswebui-$VERSION.bin
|
cp .pio/build/$1/littlefs.bin $OUTDIR/littlefswebui-$1-$VERSION.bin
|
||||||
# Remove webserver files from the filesystem and rebuild
|
# Remove webserver files from the filesystem and rebuild
|
||||||
ls -l data/static # Diagnostic list of files
|
ls -l data/static # Diagnostic list of files
|
||||||
rm -rf data/static
|
rm -rf data/static
|
||||||
pio run --environment $1 -t buildfs
|
pio run --environment $1 -t buildfs
|
||||||
cp .pio/build/$1/littlefs.bin $OUTDIR/littlefs-$VERSION.bin
|
cp .pio/build/$1/littlefs.bin $OUTDIR/littlefs-$1-$VERSION.bin
|
||||||
cp bin/device-install.* $OUTDIR
|
cp bin/device-install.* $OUTDIR
|
||||||
cp bin/device-update.* $OUTDIR
|
cp bin/device-update.* $OUTDIR
|
||||||
@@ -15,6 +15,7 @@ platformioFailed() {
|
|||||||
|
|
||||||
VERSION=$(bin/buildinfo.py long)
|
VERSION=$(bin/buildinfo.py long)
|
||||||
SHORT_VERSION=$(bin/buildinfo.py short)
|
SHORT_VERSION=$(bin/buildinfo.py short)
|
||||||
|
PIO_ENV=${1:-native}
|
||||||
|
|
||||||
OUTDIR=release/
|
OUTDIR=release/
|
||||||
|
|
||||||
@@ -24,7 +25,7 @@ mkdir -p $OUTDIR/
|
|||||||
rm -r $OUTDIR/* || true
|
rm -r $OUTDIR/* || true
|
||||||
|
|
||||||
# Important to pull latest version of libs into all device flavors, otherwise some devices might be stale
|
# Important to pull latest version of libs into all device flavors, otherwise some devices might be stale
|
||||||
platformio pkg update --environment native || platformioFailed
|
pio pkg update --environment "$PIO_ENV" || platformioFailed
|
||||||
pio run --environment native || platformioFailed
|
pio run --environment "$PIO_ENV" || platformioFailed
|
||||||
cp .pio/build/native/program "$OUTDIR/meshtasticd_linux_$(uname -m)"
|
cp ".pio/build/$PIO_ENV/program" "$OUTDIR/meshtasticd_linux_$(uname -m)"
|
||||||
cp bin/native-install.* $OUTDIR
|
cp bin/native-install.* $OUTDIR
|
||||||
|
|||||||
72
bin/bump_metainfo/bump_metainfo.py
Executable file
72
bin/bump_metainfo/bump_metainfo.py
Executable file
@@ -0,0 +1,72 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import argparse
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
from defusedxml.ElementTree import parse
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
|
|
||||||
|
# Indent by 2 spaces to align with xml formatting.
|
||||||
|
def indent(elem, level=0):
|
||||||
|
i = "\n" + level * " "
|
||||||
|
if len(elem):
|
||||||
|
if not elem.text or not elem.text.strip():
|
||||||
|
elem.text = i + " "
|
||||||
|
for child in elem:
|
||||||
|
indent(child, level + 1)
|
||||||
|
if not child.tail or not child.tail.strip():
|
||||||
|
child.tail = i
|
||||||
|
if level and (not elem.tail or not elem.tail.strip()):
|
||||||
|
elem.tail = i
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Prepend new release entry to metainfo.xml file.")
|
||||||
|
parser.add_argument("--file", help="Path to the metainfo.xml file",
|
||||||
|
default="org.meshtastic.meshtasticd.metainfo.xml")
|
||||||
|
parser.add_argument("version", help="Version string (e.g. 2.6.4)")
|
||||||
|
parser.add_argument("--date", help="Release date (YYYY-MM-DD), defaults to today",
|
||||||
|
default=datetime.now(timezone.utc).date().isoformat())
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
tree = parse(args.file)
|
||||||
|
root = tree.getroot()
|
||||||
|
|
||||||
|
releases = root.find('releases')
|
||||||
|
if releases is None:
|
||||||
|
raise RuntimeError("<releases> element not found in XML.")
|
||||||
|
|
||||||
|
existing_versions = {
|
||||||
|
release.get('version'): release
|
||||||
|
for release in releases.findall('release')
|
||||||
|
}
|
||||||
|
existing_release = existing_versions.get(args.version)
|
||||||
|
|
||||||
|
if existing_release is not None:
|
||||||
|
if not existing_release.get('date'):
|
||||||
|
print(f"Version {args.version} found without date. Adding date...")
|
||||||
|
existing_release.set('date', args.date)
|
||||||
|
else:
|
||||||
|
print(
|
||||||
|
f"Version {args.version} is already present with date, skipping insertion.")
|
||||||
|
else:
|
||||||
|
new_release = ET.Element('release', {
|
||||||
|
'version': args.version,
|
||||||
|
'date': args.date
|
||||||
|
})
|
||||||
|
url = ET.SubElement(new_release, 'url', {'type': 'details'})
|
||||||
|
url.text = f"https://github.com/meshtastic/firmware/releases?q=tag%3Av{args.version}"
|
||||||
|
|
||||||
|
releases.insert(0, new_release)
|
||||||
|
|
||||||
|
indent(releases, level=1)
|
||||||
|
releases.tail = "\n"
|
||||||
|
|
||||||
|
print(f"Inserted new release: {args.version}")
|
||||||
|
|
||||||
|
tree.write(args.file, encoding='UTF-8', xml_declaration=True)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
1
bin/bump_metainfo/requirements.txt
Normal file
1
bin/bump_metainfo/requirements.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
defusedxml==0.7.1
|
||||||
@@ -6,6 +6,12 @@
|
|||||||
### Including the "Module:" line!
|
### Including the "Module:" line!
|
||||||
---
|
---
|
||||||
Lora:
|
Lora:
|
||||||
|
# Default to auto-detecting the module type
|
||||||
|
# This will be overridden by configs from config.d
|
||||||
|
Module: auto
|
||||||
|
|
||||||
|
# # Uncomment to enable Simulation mode, or use --sim
|
||||||
|
# Module: sim
|
||||||
|
|
||||||
# Module: sx1262 # Waveshare SX1302 LISTEN ONLY AT THIS TIME!
|
# Module: sx1262 # Waveshare SX1302 LISTEN ONLY AT THIS TIME!
|
||||||
# CS: 7
|
# CS: 7
|
||||||
@@ -191,5 +197,6 @@ General:
|
|||||||
MaxNodes: 200
|
MaxNodes: 200
|
||||||
MaxMessageQueue: 100
|
MaxMessageQueue: 100
|
||||||
ConfigDirectory: /etc/meshtasticd/config.d/
|
ConfigDirectory: /etc/meshtasticd/config.d/
|
||||||
|
AvailableDirectory: /etc/meshtasticd/available.d/
|
||||||
# MACAddress: AA:BB:CC:DD:EE:FF
|
# MACAddress: AA:BB:CC:DD:EE:FF
|
||||||
# MACAddressSource: eth0
|
# MACAddressSource: eth0
|
||||||
4
bin/config.d/MUI/X11_480x480.yaml
Normal file
4
bin/config.d/MUI/X11_480x480.yaml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
Display:
|
||||||
|
Panel: X11
|
||||||
|
Width: 480
|
||||||
|
Height: 480
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
# Module: RF95 # Adafruit RFM9x
|
|
||||||
# Reset: 25
|
|
||||||
# CS: 7
|
|
||||||
# IRQ: 22
|
|
||||||
# Busy: 23
|
|
||||||
6
bin/config.d/lora-Adafruit-RFM9x.yaml
Normal file
6
bin/config.d/lora-Adafruit-RFM9x.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Lora:
|
||||||
|
Module: RF95 # Adafruit RFM9x
|
||||||
|
Reset: 25
|
||||||
|
CS: 7
|
||||||
|
IRQ: 22
|
||||||
|
# Busy: 23
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# MeshAdv-Pi E22-900M30S
|
||||||
|
# https://github.com/chrismyers2000/MeshAdv-Pi-Hat
|
||||||
Lora:
|
Lora:
|
||||||
Module: sx1262
|
Module: sx1262
|
||||||
CS: 21
|
CS: 21
|
||||||
|
|||||||
11
bin/config.d/lora-MeshAdv-Mini-900M22S.yaml
Normal file
11
bin/config.d/lora-MeshAdv-Mini-900M22S.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# MeshAdv Mini E22-900M22S
|
||||||
|
# https://github.com/chrismyers2000/MeshAdv-Mini
|
||||||
|
Lora:
|
||||||
|
Module: sx1262 # Ebyte E22-900M22S
|
||||||
|
CS: 8
|
||||||
|
IRQ: 16
|
||||||
|
Busy: 20
|
||||||
|
Reset: 24
|
||||||
|
TXen: 13
|
||||||
|
DIO2_AS_RF_SWITCH: true
|
||||||
|
DIO3_TCXO_VOLTAGE: true
|
||||||
11
bin/config.d/lora-piggystick-lr1121.yaml
Normal file
11
bin/config.d/lora-piggystick-lr1121.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
Lora:
|
||||||
|
Module: lr1121
|
||||||
|
CS: 0
|
||||||
|
IRQ: 6
|
||||||
|
Reset: 2
|
||||||
|
Busy: 4
|
||||||
|
spidev: ch341
|
||||||
|
DIO3_TCXO_VOLTAGE: 1.8
|
||||||
|
# USB_Serialnum: 12345678
|
||||||
|
USB_PID: 0x5512
|
||||||
|
USB_VID: 0x1A86
|
||||||
49
bin/config.d/lora-raxda-rock2f-starter-edition-hat.yaml
Normal file
49
bin/config.d/lora-raxda-rock2f-starter-edition-hat.yaml
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
Lora:
|
||||||
|
|
||||||
|
### Raxda Rock 2F running Armbian Linux 6.1.99-vendor-rk35xx
|
||||||
|
### https://github.com/markbirss/rock-2f
|
||||||
|
### https://github.com/markbirss/lora-starter-edition-sx1262-i2c
|
||||||
|
### https://github.com/radxa-pkg/radxa-overlays/blob/main/arch/arm64/boot/dts/rockchip/overlays/rk3528-spi0-cs1-spidev.dts
|
||||||
|
### Require install of https://github.com/radxa-pkg/radxa-overlays and rk3528-spi0-cs1-spidev.dtbo copied to /boot/dtb/rockchip/overlay and enabled
|
||||||
|
### in /boot/armbianEnv.txt - overlays=rk3528-spi0-cs1-spidev
|
||||||
|
### The Radxa Rock 2F employs multiple gpio chips.
|
||||||
|
### Each gpio pin must be unique, but can be assigned to a specific gpio chip and line.
|
||||||
|
### In case solely a no. is given, the default gpio chip and pin == line will be employed.
|
||||||
|
###
|
||||||
|
Module: sx1262 # Radxa Rock 2F + Starter Edition SX1262 HAT by Mark Birss
|
||||||
|
DIO2_AS_RF_SWITCH: true
|
||||||
|
DIO3_TCXO_VOLTAGE: 1.8
|
||||||
|
spidev: spidev0.1
|
||||||
|
CS: # NSS PIN_24 -> chip 4, line 14
|
||||||
|
pin: 24
|
||||||
|
gpiochip: 4
|
||||||
|
line: 14
|
||||||
|
SCK: # SCK PIN_23 -> chip 4, line 12
|
||||||
|
pin: 23
|
||||||
|
gpiochip: 4
|
||||||
|
line: 12
|
||||||
|
Busy: # BUSY PIN_7 -> chip 4, line 6
|
||||||
|
pin: 7
|
||||||
|
gpiochip: 4
|
||||||
|
line: 6
|
||||||
|
MOSI: # MOSI PIN_19 -> chip 4, line 10
|
||||||
|
pin: 19
|
||||||
|
gpiochip: 4
|
||||||
|
line: 10
|
||||||
|
MISO: # MISO PIN_21 -> chip 4, line 11
|
||||||
|
pin: 21
|
||||||
|
gpiochip: 4
|
||||||
|
line: 11
|
||||||
|
Reset: # NRST PIN_12 -> chip 1, line 13
|
||||||
|
pin: 12
|
||||||
|
gpiochip: 1
|
||||||
|
line: 13
|
||||||
|
IRQ: # DIO1 PIN_15 -> chip 4, line 22
|
||||||
|
pin: 15
|
||||||
|
gpiochip: 4
|
||||||
|
line: 22
|
||||||
|
# RXen: # RXEN PIN_22 -> chip 3!, line 17
|
||||||
|
# pin: 22
|
||||||
|
# gpiochip: 3
|
||||||
|
# line: 17
|
||||||
|
# TXen: RADIOLIB_NC # TXEN no PIN, no line, fallback to default gpio chip
|
||||||
10
bin/config.d/lora-starter-edition-sx1262-i2c.yaml
Normal file
10
bin/config.d/lora-starter-edition-sx1262-i2c.yaml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# https://www.waveshare.com/core1262-868m.htm
|
||||||
|
# https://github.com/markbirss/lora-starter-edition-sx1262-i2c
|
||||||
|
Lora:
|
||||||
|
Module: sx1262 # Starter Edition SX1262 I2C Raspberry Pi HAT
|
||||||
|
DIO2_AS_RF_SWITCH: true
|
||||||
|
DIO3_TCXO_VOLTAGE: true
|
||||||
|
CS: 8
|
||||||
|
IRQ: 22
|
||||||
|
Busy: 4
|
||||||
|
Reset: 18
|
||||||
17
bin/config.d/lora-usb-meshtoad-e22.yaml
Normal file
17
bin/config.d/lora-usb-meshtoad-e22.yaml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
Lora:
|
||||||
|
Module: sx1262
|
||||||
|
CS: 0
|
||||||
|
IRQ: 6
|
||||||
|
Reset: 2
|
||||||
|
Busy: 4
|
||||||
|
RXen: 1
|
||||||
|
DIO2_AS_RF_SWITCH: true
|
||||||
|
DIO3_TCXO_VOLTAGE: true
|
||||||
|
spidev: ch341
|
||||||
|
USB_PID: 0x5512
|
||||||
|
USB_VID: 0x1A86
|
||||||
|
# Optional: Reduce power to 10 dBm to
|
||||||
|
# avoid over-drawing the USB port
|
||||||
|
# SX126X_MAX_POWER: 10
|
||||||
|
# Optional: Set the serial number for multi-radio support
|
||||||
|
# USB_Serialnum: 13374201
|
||||||
10
bin/config.d/lora-ws-raspberry-pi-pico-to-rpi-adapter.yaml
Normal file
10
bin/config.d/lora-ws-raspberry-pi-pico-to-rpi-adapter.yaml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# https://www.waveshare.com/pico-lora-sx1262-868m.htm
|
||||||
|
# https://github.com/markbirss/lora-ws-raspberry-pi-pico-to-rpi-adapter
|
||||||
|
Lora:
|
||||||
|
Module: sx1262 # Waveshare Raspberry Pi Pico to Raspberry Pi HAT Adapter
|
||||||
|
DIO2_AS_RF_SWITCH: true
|
||||||
|
DIO3_TCXO_VOLTAGE: true
|
||||||
|
CS: 21
|
||||||
|
IRQ: 16
|
||||||
|
Busy: 20
|
||||||
|
Reset: 18
|
||||||
@@ -1,72 +1,295 @@
|
|||||||
@ECHO OFF
|
@ECHO OFF
|
||||||
|
SETLOCAL EnableDelayedExpansion
|
||||||
|
TITLE Meshtastic device-install
|
||||||
|
|
||||||
set PYTHON=python
|
SET "SCRIPT_NAME=%~nx0"
|
||||||
set WEB_APP=0
|
SET "DEBUG=0"
|
||||||
|
SET "PYTHON="
|
||||||
|
SET "WEB_APP=0"
|
||||||
|
SET "TFT_BUILD=0"
|
||||||
|
SET "BIGDB8=0"
|
||||||
|
SET "BIGDB16=0"
|
||||||
|
SET "ESPTOOL_BAUD=115200"
|
||||||
|
SET "ESPTOOL_CMD="
|
||||||
|
SET "LOGCOUNTER=0"
|
||||||
|
|
||||||
:: Determine the correct esptool command to use
|
@REM FIXME: Determine mcu from PlatformIO variant, this is unmaintainable.
|
||||||
where esptool >nul 2>&1
|
SET "S3=s3 v3 t-deck wireless-paper wireless-tracker station-g2 unphone"
|
||||||
if %ERRORLEVEL% EQU 0 (
|
SET "C3=esp32c3"
|
||||||
set "ESPTOOL_CMD=esptool"
|
@REM FIXME: Determine flash size from PlatformIO variant, this is unmaintainable.
|
||||||
) else (
|
SET "BIGDB_8MB=picomputer-s3 unphone seeed-sensecap-indicator crowpanel-esp32s3 heltec_capsule_sensor_v3 heltec-v3 heltec-vision-master-e213 heltec-vision-master-e290 heltec-vision-master-t190 heltec-wireless-paper heltec-wireless-tracker heltec-wsl-v3 icarus seeed-xiao-s3 tbeam-s3-core tracksenger"
|
||||||
set "ESPTOOL_CMD=%PYTHON% -m esptool"
|
SET "BIGDB_16MB=t-deck mesh-tab t-energy-s3 dreamcatcher ESP32-S3-Pico m5stack-cores3 station-g2 t-eth-elite t-watch-s3"
|
||||||
)
|
|
||||||
|
|
||||||
goto GETOPTS
|
GOTO getopts
|
||||||
:HELP
|
:help
|
||||||
echo Usage: %~nx0 [-h] [-p ESPTOOL_PORT] [-P PYTHON] [-f FILENAME^|FILENAME] [--web]
|
ECHO Flash image file to device, but first erasing and writing system information.
|
||||||
echo Flash image file to device, but first erasing and writing system information
|
ECHO.
|
||||||
echo.
|
ECHO Usage: %SCRIPT_NAME% -f filename [-p PORT] [-P python] (--web)
|
||||||
echo -h Display this help and exit
|
ECHO.
|
||||||
echo -p ESPTOOL_PORT Set the environment variable for ESPTOOL_PORT. If not set, ESPTOOL iterates all ports (Dangerrous).
|
ECHO Options:
|
||||||
echo -P PYTHON Specify alternate python interpreter to use to invoke esptool. (Default: %PYTHON%)
|
ECHO -f filename The firmware .bin file to flash. Custom to your device type and region. (required)
|
||||||
echo -f FILENAME The .bin file to flash. Custom to your device type and region.
|
ECHO The file must be located in this current directory.
|
||||||
echo --web Flash WEB APP.
|
ECHO -p PORT Set the environment variable for ESPTOOL_PORT.
|
||||||
goto EOF
|
ECHO If not set, ESPTOOL iterates all ports (Dangerous).
|
||||||
|
ECHO -P python Specify alternate python interpreter to use to invoke esptool. (default: python)
|
||||||
|
ECHO If supplied the script will use python.
|
||||||
|
ECHO If not supplied the script will try to find esptool in Path.
|
||||||
|
ECHO --web Enable WebUI. (default: false)
|
||||||
|
ECHO.
|
||||||
|
ECHO Example: %SCRIPT_NAME% -f firmware-t-deck-tft-2.6.0.0b106d4.bin -p COM11
|
||||||
|
ECHO Example: %SCRIPT_NAME% -f firmware-unphone-2.6.0.0b106d4.bin -p COM11 --web
|
||||||
|
GOTO eof
|
||||||
|
|
||||||
:GETOPTS
|
:version
|
||||||
if /I "%1"=="-h" goto HELP
|
ECHO %SCRIPT_NAME% [Version 2.6.1]
|
||||||
if /I "%1"=="--help" goto HELP
|
ECHO Meshtastic
|
||||||
if /I "%1"=="-F" set "FILENAME=%2" & SHIFT
|
GOTO eof
|
||||||
if /I "%1"=="-p" set ESPTOOL_PORT=%2 & SHIFT
|
|
||||||
if /I "%1"=="-P" set PYTHON=%2 & SHIFT
|
:getopts
|
||||||
if /I "%1"=="--web" set WEB_APP=1 & SHIFT
|
IF "%~1"=="" GOTO endopts
|
||||||
|
IF /I "%~1"=="-?" GOTO help
|
||||||
|
IF /I "%~1"=="-h" GOTO help
|
||||||
|
IF /I "%~1"=="--help" GOTO help
|
||||||
|
IF /I "%~1"=="-v" GOTO version
|
||||||
|
IF /I "%~1"=="--version" GOTO version
|
||||||
|
IF /I "%~1"=="--debug" SET "DEBUG=1" & CALL :LOG_MESSAGE DEBUG "DEBUG mode: enabled."
|
||||||
|
IF /I "%~1"=="-f" SET "FILENAME=%~2" & SHIFT
|
||||||
|
IF "%~1"=="-p" SET "ESPTOOL_PORT=%~2" & SHIFT
|
||||||
|
IF /I "%~1"=="--port" SET "ESPTOOL_PORT=%~2" & SHIFT
|
||||||
|
IF "%~1"=="-P" SET "PYTHON=%~2" & SHIFT
|
||||||
|
IF /I "%~1"=="--web" SET "WEB_APP=1"
|
||||||
SHIFT
|
SHIFT
|
||||||
IF NOT "__%1__"=="____" goto GETOPTS
|
GOTO getopts
|
||||||
|
:endopts
|
||||||
|
|
||||||
IF "__%FILENAME%__" == "____" (
|
CALL :LOG_MESSAGE DEBUG "Checking FILENAME parameter..."
|
||||||
echo "Missing FILENAME"
|
IF "__!FILENAME!__"=="____" (
|
||||||
goto HELP
|
CALL :LOG_MESSAGE DEBUG "Missing -f filename input."
|
||||||
)
|
GOTO help
|
||||||
IF EXIST %FILENAME% IF x%FILENAME:update=%==x%FILENAME% (
|
) ELSE (
|
||||||
echo Trying to flash update %FILENAME%, but first erasing and writing system information"
|
CALL :LOG_MESSAGE DEBUG "Filename: !FILENAME!"
|
||||||
%ESPTOOL_CMD% --baud 115200 erase_flash
|
IF NOT "__!FILENAME: =!__"=="__!FILENAME!__" (
|
||||||
%ESPTOOL_CMD% --baud 115200 write_flash 0x00 %FILENAME%
|
CALL :LOG_MESSAGE ERROR "Filename containing spaces are not supported."
|
||||||
|
GOTO help
|
||||||
@REM Account for S3 and C3 board's different OTA partition
|
|
||||||
IF x%FILENAME:s3=%==x%FILENAME% IF x%FILENAME:v3=%==x%FILENAME% IF x%FILENAME:t-deck=%==x%FILENAME% IF x%FILENAME:wireless-paper=%==x%FILENAME% IF x%FILENAME:wireless-tracker=%==x%FILENAME% IF x%FILENAME:station-g2=%==x%FILENAME% IF x%FILENAME:unphone=%==x%FILENAME% (
|
|
||||||
IF x%FILENAME:esp32c3=%==x%FILENAME% (
|
|
||||||
%ESPTOOL_CMD% --baud 115200 write_flash 0x260000 bleota.bin
|
|
||||||
) else (
|
|
||||||
%ESPTOOL_CMD% --baud 115200 write_flash 0x260000 bleota-c3.bin
|
|
||||||
)
|
)
|
||||||
) else (
|
IF "__!FILENAME:firmware-=!__"=="__!FILENAME!__" (
|
||||||
%ESPTOOL_CMD% --baud 115200 write_flash 0x260000 bleota-s3.bin
|
CALL :LOG_MESSAGE ERROR "Filename must be a firmware-* file."
|
||||||
|
GOTO help
|
||||||
)
|
)
|
||||||
IF %WEB_APP%==1 (
|
@REM Remove ".\" or "./" file prefix if present.
|
||||||
for %%f in (littlefswebui-*.bin) do (
|
SET "FILENAME=!FILENAME:.\=!"
|
||||||
%ESPTOOL_CMD% --baud 115200 write_flash 0x300000 %%f
|
SET "FILENAME=!FILENAME:./=!"
|
||||||
)
|
|
||||||
) else (
|
|
||||||
for %%f in (littlefs-*.bin) do (
|
|
||||||
%ESPTOOL_CMD% --baud 115200 write_flash 0x300000 %%f
|
|
||||||
)
|
|
||||||
)
|
|
||||||
) else (
|
|
||||||
echo "Invalid file: %FILENAME%"
|
|
||||||
goto HELP
|
|
||||||
) else (
|
|
||||||
echo "Invalid file: %FILENAME%"
|
|
||||||
goto HELP
|
|
||||||
)
|
)
|
||||||
|
|
||||||
:EOF
|
CALL :LOG_MESSAGE DEBUG "Checking if !FILENAME! exists..."
|
||||||
|
IF NOT EXIST !FILENAME! (
|
||||||
|
CALL :LOG_MESSAGE ERROR "File does not exist: !FILENAME!. Terminating."
|
||||||
|
GOTO eof
|
||||||
|
)
|
||||||
|
|
||||||
|
IF NOT "!FILENAME:update=!"=="!FILENAME!" (
|
||||||
|
CALL :LOG_MESSAGE DEBUG "We are working with a *update* file. !FILENAME!"
|
||||||
|
CALL :LOG_MESSAGE INFO "Use script device-update.bat to flash update !FILENAME!."
|
||||||
|
GOTO eof
|
||||||
|
) ELSE (
|
||||||
|
CALL :LOG_MESSAGE DEBUG "We are NOT working with a *update* file. !FILENAME!"
|
||||||
|
)
|
||||||
|
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Determine the correct esptool command to use..."
|
||||||
|
IF NOT "__%PYTHON%__"=="____" (
|
||||||
|
SET "ESPTOOL_CMD=!PYTHON! -m esptool"
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Python interpreter supplied."
|
||||||
|
) ELSE (
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Python interpreter NOT supplied. Looking for esptool...
|
||||||
|
WHERE esptool >nul 2>&1
|
||||||
|
IF %ERRORLEVEL% EQU 0 (
|
||||||
|
@REM WHERE exits with code 0 if esptool is found.
|
||||||
|
SET "ESPTOOL_CMD=esptool"
|
||||||
|
) ELSE (
|
||||||
|
SET "ESPTOOL_CMD=python -m esptool"
|
||||||
|
CALL :RESET_ERROR
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Checking esptool command !ESPTOOL_CMD!..."
|
||||||
|
!ESPTOOL_CMD! >nul 2>&1
|
||||||
|
IF %ERRORLEVEL% GEQ 2 (
|
||||||
|
@REM esptool exits with code 1 if help is displayed.
|
||||||
|
CALL :LOG_MESSAGE ERROR "esptool not found: !ESPTOOL_CMD!"
|
||||||
|
EXIT /B 1
|
||||||
|
GOTO eof
|
||||||
|
)
|
||||||
|
IF %DEBUG% EQU 1 (
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Skipping ESPTOOL_CMD steps."
|
||||||
|
SET "ESPTOOL_CMD=REM !ESPTOOL_CMD!"
|
||||||
|
)
|
||||||
|
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Using esptool command: !ESPTOOL_CMD!"
|
||||||
|
IF "__!ESPTOOL_PORT!__" == "____" (
|
||||||
|
CALL :LOG_MESSAGE WARN "Using esptool port: UNSET."
|
||||||
|
) ELSE (
|
||||||
|
SET "ESPTOOL_CMD=!ESPTOOL_CMD! --port !ESPTOOL_PORT!"
|
||||||
|
CALL :LOG_MESSAGE INFO "Using esptool port: !ESPTOOL_PORT!."
|
||||||
|
)
|
||||||
|
CALL :LOG_MESSAGE INFO "Using esptool baud: !ESPTOOL_BAUD!."
|
||||||
|
|
||||||
|
@REM Check if FILENAME contains "-tft-" and set target partitionScheme accordingly.
|
||||||
|
@REM https://github.com/meshtastic/web-flasher/blob/main/types/resources.ts#L3
|
||||||
|
IF NOT "!FILENAME:-tft-=!"=="!FILENAME!" (
|
||||||
|
CALL :LOG_MESSAGE DEBUG "We are working with a *-tft-* file. !FILENAME!"
|
||||||
|
IF %WEB_APP% EQU 1 (
|
||||||
|
CALL :LOG_MESSAGE ERROR "Cannot enable WebUI (--web) and MUI." & GOTO eof
|
||||||
|
)
|
||||||
|
SET "TFT_BUILD=1"
|
||||||
|
) ELSE (
|
||||||
|
CALL :LOG_MESSAGE DEBUG "We are NOT working with a *-tft-* file. !FILENAME!"
|
||||||
|
)
|
||||||
|
|
||||||
|
FOR %%a IN (%BIGDB_8MB%) DO (
|
||||||
|
IF NOT "!FILENAME:%%a=!"=="!FILENAME!" (
|
||||||
|
@REM We are working with any of %BIGDB_8MB%.
|
||||||
|
SET "BIGDB8=1"
|
||||||
|
GOTO end_loop_bigdb_8mb
|
||||||
|
)
|
||||||
|
)
|
||||||
|
:end_loop_bigdb_8mb
|
||||||
|
|
||||||
|
FOR %%a IN (%BIGDB_16MB%) DO (
|
||||||
|
IF NOT "!FILENAME:%%a=!"=="!FILENAME!" (
|
||||||
|
@REM We are working with any of %BIGDB_16MB%.
|
||||||
|
SET "BIGDB16=1"
|
||||||
|
GOTO end_loop_bigdb_16mb
|
||||||
|
)
|
||||||
|
)
|
||||||
|
:end_loop_bigdb_16mb
|
||||||
|
|
||||||
|
IF %BIGDB8% EQU 1 CALL :LOG_MESSAGE INFO "BigDB 8mb partition selected."
|
||||||
|
IF %BIGDB16% EQU 1 CALL :LOG_MESSAGE INFO "BigDB 16mb partition selected."
|
||||||
|
|
||||||
|
@REM Extract BASENAME from %FILENAME% for later use.
|
||||||
|
SET "BASENAME=!FILENAME:firmware-=!"
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Computed firmware basename: !BASENAME!"
|
||||||
|
|
||||||
|
@REM Account for S3 and C3 board's different OTA partition.
|
||||||
|
FOR %%a IN (%S3%) DO (
|
||||||
|
IF NOT "!FILENAME:%%a=!"=="!FILENAME!" (
|
||||||
|
@REM We are working with any of %S3%.
|
||||||
|
SET "OTA_FILENAME=bleota-s3.bin"
|
||||||
|
GOTO :end_loop_s3
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
FOR %%a IN (%C3%) DO (
|
||||||
|
IF NOT "!FILENAME:%%a=!"=="!FILENAME!" (
|
||||||
|
@REM We are working with any of %C3%.
|
||||||
|
SET "OTA_FILENAME=bleota-c3.bin"
|
||||||
|
GOTO :end_loop_c3
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
@REM Everything else
|
||||||
|
SET "OTA_FILENAME=bleota.bin"
|
||||||
|
:end_loop_s3
|
||||||
|
:end_loop_c3
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Set OTA_FILENAME to: !OTA_FILENAME!"
|
||||||
|
|
||||||
|
@REM Check if (--web) is enabled and prefix BASENAME with "littlefswebui-" else "littlefs-".
|
||||||
|
IF %WEB_APP% EQU 1 (
|
||||||
|
CALL :LOG_MESSAGE INFO "WebUI selected."
|
||||||
|
SET "SPIFFS_FILENAME=littlefswebui-%BASENAME%"
|
||||||
|
) ELSE (
|
||||||
|
SET "SPIFFS_FILENAME=littlefs-%BASENAME%"
|
||||||
|
)
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Set SPIFFS_FILENAME to: !SPIFFS_FILENAME!"
|
||||||
|
|
||||||
|
@REM Default offsets.
|
||||||
|
@REM https://github.com/meshtastic/web-flasher/blob/main/stores/firmwareStore.ts#L202
|
||||||
|
SET "OTA_OFFSET=0x260000"
|
||||||
|
SET "SPIFFS_OFFSET=0x300000"
|
||||||
|
|
||||||
|
@REM Offsets for BigDB 8mb.
|
||||||
|
IF %BIGDB8% EQU 1 (
|
||||||
|
SET "OTA_OFFSET=0x340000"
|
||||||
|
SET "SPIFFS_OFFSET=0x670000"
|
||||||
|
)
|
||||||
|
|
||||||
|
@REM Offsets for BigDB 16mb.
|
||||||
|
IF %BIGDB16% EQU 1 (
|
||||||
|
SET "OTA_OFFSET=0x650000"
|
||||||
|
SET "SPIFFS_OFFSET=0xc90000"
|
||||||
|
)
|
||||||
|
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Set OTA_OFFSET to: !OTA_OFFSET!"
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Set SPIFFS_OFFSET to: !SPIFFS_OFFSET!"
|
||||||
|
|
||||||
|
@REM Ensure target files exist before flashing operations.
|
||||||
|
IF NOT EXIST !FILENAME! CALL :LOG_MESSAGE ERROR "File does not exist: "!FILENAME!". Terminating." & EXIT /B 2 & GOTO eof
|
||||||
|
IF NOT EXIST !OTA_FILENAME! CALL :LOG_MESSAGE ERROR "File does not exist: "!OTA_FILENAME!". Terminating." & EXIT /B 2 & GOTO eof
|
||||||
|
IF NOT EXIST !SPIFFS_FILENAME! CALL :LOG_MESSAGE ERROR "File does not exist: "!SPIFFS_FILENAME!". Terminating." & EXIT /B 2 & GOTO eof
|
||||||
|
|
||||||
|
@REM Flashing operations.
|
||||||
|
CALL :LOG_MESSAGE INFO "Trying to flash "!FILENAME!", but first erasing and writing system information..."
|
||||||
|
CALL :RUN_ESPTOOL !ESPTOOL_BAUD! erase_flash || GOTO eof
|
||||||
|
CALL :RUN_ESPTOOL !ESPTOOL_BAUD! write_flash 0x00 "!FILENAME!" || GOTO eof
|
||||||
|
|
||||||
|
CALL :LOG_MESSAGE INFO "Trying to flash BLEOTA "!OTA_FILENAME!" at OTA_OFFSET !OTA_OFFSET!..."
|
||||||
|
CALL :RUN_ESPTOOL !ESPTOOL_BAUD! write_flash !OTA_OFFSET! "!OTA_FILENAME!" || GOTO eof
|
||||||
|
|
||||||
|
CALL :LOG_MESSAGE INFO "Trying to flash SPIFFS "!SPIFFS_FILENAME!" at SPIFFS_OFFSET !SPIFFS_OFFSET!..."
|
||||||
|
CALL :RUN_ESPTOOL !ESPTOOL_BAUD! write_flash !SPIFFS_OFFSET! "!SPIFFS_FILENAME!" || GOTO eof
|
||||||
|
|
||||||
|
CALL :LOG_MESSAGE INFO "Script complete!."
|
||||||
|
|
||||||
|
:eof
|
||||||
|
ENDLOCAL
|
||||||
|
EXIT /B %ERRORLEVEL%
|
||||||
|
|
||||||
|
|
||||||
|
:RUN_ESPTOOL
|
||||||
|
@REM Subroutine used to run ESPTOOL_CMD with arguments.
|
||||||
|
@REM Also handles %ERRORLEVEL%.
|
||||||
|
@REM CALL :RUN_ESPTOOL [Baud] [erase_flash|write_flash] [OFFSET] [Filename]
|
||||||
|
@REM.
|
||||||
|
@REM Example:: CALL :RUN_ESPTOOL 115200 write_flash 0x10000 "firmwarefile.bin"
|
||||||
|
IF %DEBUG% EQU 1 CALL :LOG_MESSAGE DEBUG "About to run command: !ESPTOOL_CMD! --baud %~1 %~2 %~3 %~4"
|
||||||
|
CALL :RESET_ERROR
|
||||||
|
!ESPTOOL_CMD! --baud %~1 %~2 %~3 %~4
|
||||||
|
IF %ERRORLEVEL% NEQ 0 (
|
||||||
|
CALL :LOG_MESSAGE ERROR "Error running command: !ESPTOOL_CMD! --baud %~1 %~2 %~3 %~4"
|
||||||
|
EXIT /B %ERRORLEVEL%
|
||||||
|
)
|
||||||
|
GOTO :eof
|
||||||
|
|
||||||
|
:LOG_MESSAGE
|
||||||
|
@REM Subroutine used to print log messages in four different levels.
|
||||||
|
@REM DEBUG messages only get printed if [-d] flag is passed to script.
|
||||||
|
@REM CALL :LOG_MESSAGE [ERROR|INFO|WARN|DEBUG] "Message"
|
||||||
|
@REM.
|
||||||
|
@REM Example:: CALL :LOG_MESSAGE INFO "Message."
|
||||||
|
SET /A LOGCOUNTER=LOGCOUNTER+1
|
||||||
|
IF "%1" == "ERROR" CALL :GET_TIMESTAMP & ECHO [91m%1 [0m[37m^| !TIMESTAMP! !LOGCOUNTER! [0m[91m%~2[0m
|
||||||
|
IF "%1" == "INFO" CALL :GET_TIMESTAMP & ECHO [32m%1 [0m[37m^| !TIMESTAMP! !LOGCOUNTER! [0m[32m%~2[0m
|
||||||
|
IF "%1" == "WARN" CALL :GET_TIMESTAMP & ECHO [33m%1 [0m[37m^| !TIMESTAMP! !LOGCOUNTER! [0m[33m%~2[0m
|
||||||
|
IF "%1" == "DEBUG" IF %DEBUG% EQU 1 CALL :GET_TIMESTAMP & ECHO [34m%1 [0m[37m^| !TIMESTAMP! !LOGCOUNTER! [0m[34m%~2[0m
|
||||||
|
GOTO :eof
|
||||||
|
|
||||||
|
:GET_TIMESTAMP
|
||||||
|
@REM Subroutine used to set !TIMESTAMP! to HH:MM:ss.
|
||||||
|
@REM CALL :GET_TIMESTAMP
|
||||||
|
@REM.
|
||||||
|
@REM Updates: !TIMESTAMP!
|
||||||
|
FOR /F "tokens=1,2,3 delims=:,." %%a IN ("%TIME%") DO (
|
||||||
|
SET "HH=%%a"
|
||||||
|
SET "MM=%%b"
|
||||||
|
SET "ss=%%c"
|
||||||
|
)
|
||||||
|
SET "TIMESTAMP=!HH!:!MM!:!ss!"
|
||||||
|
GOTO :eof
|
||||||
|
|
||||||
|
:RESET_ERROR
|
||||||
|
@REM Subroutine to reset %ERRORLEVEL% to 0.
|
||||||
|
@REM CALL :RESET_ERROR
|
||||||
|
@REM.
|
||||||
|
@REM Updates: %ERRORLEVEL%
|
||||||
|
EXIT /B 0
|
||||||
|
GOTO :eof
|
||||||
|
|||||||
@@ -1,7 +1,49 @@
|
|||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
|
|
||||||
PYTHON=${PYTHON:-$(which python3 python | head -n 1)}
|
PYTHON=${PYTHON:-$(which python3 python | head -n 1)}
|
||||||
WEB_APP=false
|
WEB_APP=false
|
||||||
|
TFT_BUILD=false
|
||||||
|
MCU=""
|
||||||
|
|
||||||
|
# Variant groups
|
||||||
|
BIGDB_8MB=(
|
||||||
|
"picomputer-s3"
|
||||||
|
"unphone"
|
||||||
|
"seeed-sensecap-indicator"
|
||||||
|
"crowpanel-esp32s3"
|
||||||
|
"heltec_capsule_sensor_v3"
|
||||||
|
"heltec-v3"
|
||||||
|
"heltec-vision-master-e213"
|
||||||
|
"heltec-vision-master-e290"
|
||||||
|
"heltec-vision-master-t190"
|
||||||
|
"heltec-wireless-paper"
|
||||||
|
"heltec-wireless-tracker"
|
||||||
|
"heltec-wsl-v3"
|
||||||
|
"icarus"
|
||||||
|
"seeed-xiao-s3"
|
||||||
|
"tbeam-s3-core"
|
||||||
|
"tracksenger"
|
||||||
|
)
|
||||||
|
BIGDB_16MB=(
|
||||||
|
"t-deck"
|
||||||
|
"mesh-tab"
|
||||||
|
"t-energy-s3"
|
||||||
|
"dreamcatcher"
|
||||||
|
"ESP32-S3-Pico"
|
||||||
|
"m5stack-cores3"
|
||||||
|
"station-g2"
|
||||||
|
"t-eth-elite"
|
||||||
|
"t-watch-s3"
|
||||||
|
)
|
||||||
|
S3_VARIANTS=(
|
||||||
|
"s3"
|
||||||
|
"-v3"
|
||||||
|
"t-deck"
|
||||||
|
"wireless-paper"
|
||||||
|
"wireless-tracker"
|
||||||
|
"station-g2"
|
||||||
|
"unphone"
|
||||||
|
)
|
||||||
|
|
||||||
# Determine the correct esptool command to use
|
# Determine the correct esptool command to use
|
||||||
if "$PYTHON" -m esptool version >/dev/null 2>&1; then
|
if "$PYTHON" -m esptool version >/dev/null 2>&1; then
|
||||||
@@ -20,75 +62,141 @@ set -e
|
|||||||
# Usage info
|
# Usage info
|
||||||
show_help() {
|
show_help() {
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
Usage: $(basename $0) [-h] [-p ESPTOOL_PORT] [-P PYTHON] [-f FILENAME|FILENAME] [--web]
|
Usage: $(basename $0) [-h] [-p ESPTOOL_PORT] [-P PYTHON] [-f FILENAME] [--web]
|
||||||
Flash image file to device, but first erasing and writing system information"
|
Flash image file to device, but first erasing and writing system information.
|
||||||
|
|
||||||
-h Display this help and exit
|
-h Display this help and exit.
|
||||||
-p ESPTOOL_PORT Set the environment variable for ESPTOOL_PORT. If not set, ESPTOOL iterates all ports (Dangerous).
|
-p ESPTOOL_PORT Set the environment variable for ESPTOOL_PORT. If not set, ESPTOOL iterates all ports (Dangerous).
|
||||||
-P PYTHON Specify alternate python interpreter to use to invoke esptool. (Default: "$PYTHON")
|
-P PYTHON Specify alternate python interpreter to use to invoke esptool. (Default: "$PYTHON")
|
||||||
-f FILENAME The .bin file to flash. Custom to your device type and region.
|
-f FILENAME The firmware .bin file to flash. Custom to your device type and region.
|
||||||
--web Flash WEB APP.
|
--web Enable WebUI. (Default: false)
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
# Preprocess long options like --web
|
# Parse arguments using a single while loop
|
||||||
for arg in "$@"; do
|
while [ $# -gt 0 ]; do
|
||||||
case "$arg" in
|
case "$1" in
|
||||||
--web)
|
-h | --help)
|
||||||
WEB_APP=true
|
|
||||||
shift # Remove this argument from the list
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
while getopts ":hp:P:f:" opt; do
|
|
||||||
case "${opt}" in
|
|
||||||
h)
|
|
||||||
show_help
|
show_help
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
p)
|
-p)
|
||||||
export ESPTOOL_PORT=${OPTARG}
|
ESPTOOL_CMD="$ESPTOOL_CMD --port $2"
|
||||||
|
shift
|
||||||
;;
|
;;
|
||||||
P)
|
-P)
|
||||||
PYTHON=${OPTARG}
|
PYTHON="$2"
|
||||||
|
shift
|
||||||
;;
|
;;
|
||||||
f)
|
-f)
|
||||||
FILENAME=${OPTARG}
|
FILENAME="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--web)
|
||||||
|
WEB_APP=true
|
||||||
|
;;
|
||||||
|
--) # Stop parsing options
|
||||||
|
shift
|
||||||
|
break
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Invalid flag."
|
echo "Unknown argument: $1" >&2
|
||||||
show_help >&2
|
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
shift # Move to the next argument
|
||||||
done
|
done
|
||||||
shift "$((OPTIND - 1))"
|
|
||||||
|
|
||||||
[ -z "$FILENAME" -a -n "$1" ] && {
|
[ -z "$FILENAME" -a -n "$1" ] && {
|
||||||
FILENAME=$1
|
FILENAME=$1
|
||||||
shift
|
shift
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if [[ $FILENAME != firmware-* ]]; then
|
||||||
|
echo "Filename must be a firmware-* file."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if FILENAME contains "-tft-" and prevent web/mui comingling.
|
||||||
|
if [[ ${FILENAME//-tft-/} != "$FILENAME" ]]; then
|
||||||
|
TFT_BUILD=true
|
||||||
|
if [[ $WEB_APP == true ]] && [[ $TFT_BUILD == true ]]; then
|
||||||
|
echo "Cannot enable WebUI (--web) and MUI."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract BASENAME from %FILENAME% for later use.
|
||||||
|
BASENAME="${FILENAME/firmware-/}"
|
||||||
|
|
||||||
if [ -f "${FILENAME}" ] && [ -n "${FILENAME##*"update"*}" ]; then
|
if [ -f "${FILENAME}" ] && [ -n "${FILENAME##*"update"*}" ]; then
|
||||||
|
# Default littlefs* offset (--web).
|
||||||
|
OFFSET=0x300000
|
||||||
|
|
||||||
|
# Default OTA Offset
|
||||||
|
OTA_OFFSET=0x260000
|
||||||
|
|
||||||
|
# littlefs* offset for BigDB 8mb and OTA OFFSET.
|
||||||
|
for variant in "${BIGDB_8MB[@]}"; do
|
||||||
|
if [ -z "${FILENAME##*"$variant"*}" ]; then
|
||||||
|
OFFSET=0x670000
|
||||||
|
OTA_OFFSET=0x340000
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# littlefs* offset for BigDB 16mb and OTA OFFSET.
|
||||||
|
for variant in "${BIGDB_16MB[@]}"; do
|
||||||
|
if [ -z "${FILENAME##*"$variant"*}" ]; then
|
||||||
|
OFFSET=0xc90000
|
||||||
|
OTA_OFFSET=0x650000
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Account for S3 board's different OTA partition
|
||||||
|
# FIXME: Use PlatformIO info to determine MCU type, this is unmaintainable
|
||||||
|
for variant in "${S3_VARIANTS[@]}"; do
|
||||||
|
if [ -z "${FILENAME##*"$variant"*}" ]; then
|
||||||
|
MCU="esp32s3"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$MCU" != "esp32s3" ]; then
|
||||||
|
if [ -n "${FILENAME##*"esp32c3"*}" ]; then
|
||||||
|
OTAFILE=bleota.bin
|
||||||
|
else
|
||||||
|
OTAFILE=bleota-c3.bin
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
OTAFILE=bleota-s3.bin
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if WEB_APP (--web) is enabled and add "littlefswebui-" to BASENAME else "littlefs-".
|
||||||
|
if [ "$WEB_APP" = true ]; then
|
||||||
|
SPIFFSFILE=littlefswebui-${BASENAME}
|
||||||
|
else
|
||||||
|
SPIFFSFILE=littlefs-${BASENAME}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f $FILENAME ]]; then
|
||||||
|
echo "Error: file ${FILENAME} wasn't found. Terminating."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ ! -f $OTAFILE ]]; then
|
||||||
|
echo "Error: file ${OTAFILE} wasn't found. Terminating."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ ! -f $SPIFFSFILE ]]; then
|
||||||
|
echo "Error: file ${SPIFFSFILE} wasn't found. Terminating."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Trying to flash ${FILENAME}, but first erasing and writing system information"
|
echo "Trying to flash ${FILENAME}, but first erasing and writing system information"
|
||||||
$ESPTOOL_CMD erase_flash
|
$ESPTOOL_CMD erase_flash
|
||||||
$ESPTOOL_CMD write_flash 0x00 "${FILENAME}"
|
$ESPTOOL_CMD write_flash 0x00 "${FILENAME}"
|
||||||
# Account for S3 board's different OTA partition
|
echo "Trying to flash ${OTAFILE} at offset ${OTA_OFFSET}"
|
||||||
if [ -n "${FILENAME##*"s3"*}" ] && [ -n "${FILENAME##*"-v3"*}" ] && [ -n "${FILENAME##*"t-deck"*}" ] && [ -n "${FILENAME##*"wireless-paper"*}" ] && [ -n "${FILENAME##*"wireless-tracker"*}" ] && [ -n "${FILENAME##*"station-g2"*}" ] && [ -n "${FILENAME##*"unphone"*}" ]; then
|
$ESPTOOL_CMD write_flash $OTA_OFFSET "${OTAFILE}"
|
||||||
if [ -n "${FILENAME##*"esp32c3"*}" ]; then
|
echo "Trying to flash ${SPIFFSFILE}, at offset ${OFFSET}"
|
||||||
$ESPTOOL_CMD write_flash 0x260000 bleota.bin
|
$ESPTOOL_CMD write_flash $OFFSET "${SPIFFSFILE}"
|
||||||
else
|
|
||||||
$ESPTOOL_CMD write_flash 0x260000 bleota-c3.bin
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
$ESPTOOL_CMD write_flash 0x260000 bleota-s3.bin
|
|
||||||
fi
|
|
||||||
if [ "$WEB_APP" = true ]; then
|
|
||||||
$ESPTOOL_CMD write_flash 0x300000 littlefswebui-*.bin
|
|
||||||
else
|
|
||||||
$ESPTOOL_CMD write_flash 0x300000 littlefs-*.bin
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
else
|
||||||
show_help
|
show_help
|
||||||
|
|||||||
112
bin/device-install_test.ps1
Normal file
112
bin/device-install_test.ps1
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Unit-test for .\device-install.bat.
|
||||||
|
|
||||||
|
.DESCRIPTION
|
||||||
|
This script performs a positive unit-test on .\device-install.bat by creating the expected .bin
|
||||||
|
files for a device followed by running the .bat script without flashing the firmware (--debug).
|
||||||
|
If any errors are hit they are presented in the standard output. Investigate accordingly.
|
||||||
|
|
||||||
|
This script needs to be placed in the same directory as .\device-install.bat.
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
.\device-install_test.ps1
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
.\device-install_test.ps1 -Verbose
|
||||||
|
|
||||||
|
.LINK
|
||||||
|
.\device-install.bat --help
|
||||||
|
#>
|
||||||
|
|
||||||
|
[CmdletBinding()]
|
||||||
|
param()
|
||||||
|
|
||||||
|
function New-EmptyFile() {
|
||||||
|
[CmdletBinding()]
|
||||||
|
param (
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
# Specifies the file name.
|
||||||
|
[string]$FileName,
|
||||||
|
[Parameter(Position = 1)]
|
||||||
|
# Specifies the target path. (Get-Location).Path is the default.
|
||||||
|
[string]$Directory = (Get-Location).Path
|
||||||
|
)
|
||||||
|
|
||||||
|
$filePath = Join-Path -Path $Directory -ChildPath $FileName
|
||||||
|
|
||||||
|
Write-Verbose -Message "Create empty test file if it doesn't exist: $($FileName)"
|
||||||
|
New-Item -Path "$filePath" -ItemType File -ErrorAction SilentlyContinue | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
|
function Remove-EmptyFile() {
|
||||||
|
[CmdletBinding()]
|
||||||
|
param (
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
# Specifies the file name.
|
||||||
|
[string]$FileName,
|
||||||
|
[Parameter(Position = 1)]
|
||||||
|
# Specifies the target path. (Get-Location).Path is the default.
|
||||||
|
[string]$Directory = (Get-Location).Path
|
||||||
|
)
|
||||||
|
|
||||||
|
$filePath = Join-Path -Path $Directory -ChildPath $FileName
|
||||||
|
|
||||||
|
Write-Verbose -Message "Deleted empty test file: $($FileName)"
|
||||||
|
Remove-Item -Path "$filePath" | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$TestCases = New-Object -TypeName PSObject -Property @{
|
||||||
|
# Use this PSObject to define testcases according to this syntax:
|
||||||
|
# "testname" = @("firmware-testname","bleota","littlefs-testname","args")
|
||||||
|
"t-deck" = @("firmware-t-deck-2.6.0.0b106d4.bin", "bleota-s3.bin", "littlefs-t-deck-2.6.0.0b106d4.bin", "")
|
||||||
|
"t-deck_web" = @("firmware-t-deck-2.6.0.0b106d4.bin", "bleota-s3.bin", "littlefswebui-t-deck-2.6.0.0b106d4.bin", "--web")
|
||||||
|
"t-deck-tft" = @("firmware-t-deck-tft-2.6.0.0b106d4.bin", "bleota-s3.bin", "littlefs-t-deck-tft-2.6.0.0b106d4.bin", "")
|
||||||
|
"heltec-ht62-esp32c3" = @("firmware-heltec-ht62-esp32c3-sx1262-2.6.0.0b106d4.bin", "bleota-c3.bin", "littlefs-heltec-ht62-esp32c3-sx1262-2.6.0.0b106d4.bin", "")
|
||||||
|
"tlora-c6" = @("firmware-tlora-c6-2.6.0.0b106d4.bin", "bleota.bin", "littlefs-tlora-c6-2.6.0.0b106d4.bin", "")
|
||||||
|
"heltec-v3_web" = @("firmware-heltec-v3-2.6.0.0b106d4.bin", "bleota-s3.bin", "littlefswebui-heltec-v3-2.6.0.0b106d4.bin", "--web")
|
||||||
|
"seeed-sensecap-indicator-tft" = @("firmware-seeed-sensecap-indicator-tft-2.6.0.0b106d4.bin", "bleota.bin", "littlefs-seeed-sensecap-indicator-tft-2.6.0.0b106d4.bin", "")
|
||||||
|
"picomputer-s3-tft" = @("firmware-picomputer-s3-tft-2.6.0.0b106d4.bin", "bleota-s3.bin", "littlefs-picomputer-s3-tft-2.6.0.0b106d4.bin", "")
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($TestCase in $TestCases.PSObject.Properties) {
|
||||||
|
$Name = $TestCase.Name
|
||||||
|
$Files = $TestCase.Value
|
||||||
|
$Errors = $null
|
||||||
|
$Counter = 0
|
||||||
|
|
||||||
|
Write-Host -Object "Testcase: $Name`:" -ForegroundColor Green
|
||||||
|
foreach ($File in $Files) {
|
||||||
|
if ($File.EndsWith(".bin")) {
|
||||||
|
New-EmptyFile -FileName $File
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host -Object "Performing test on $Name..." -ForegroundColor Blue
|
||||||
|
$Test = Invoke-Expression -Command "cmd /c .\device-install.bat --debug -f $($TestCases."$Name"[0]) $($TestCases."$Name"[3])"
|
||||||
|
|
||||||
|
foreach ($Line in $Test) {
|
||||||
|
if ($Line -match "Set OTA_OFFSET to" -or `
|
||||||
|
$Line -match "Set SPIFFS_OFFSET to") {
|
||||||
|
Write-Host -Object "$($Line -replace "^.*?Set","Set")" -ForegroundColor Blue
|
||||||
|
}
|
||||||
|
elseif ($VerbosePreference -eq "Continue") {
|
||||||
|
Write-Host -Object $Line
|
||||||
|
}
|
||||||
|
if ($Line -match "ERROR") {
|
||||||
|
$Errors += $Line
|
||||||
|
$Counter++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($null -ne $Errors) {
|
||||||
|
Write-Host -Object "$Counter ERROR(s) detected!" -ForegroundColor Red
|
||||||
|
if (-not ($VerbosePreference -eq "Continue")) { Write-Host -Object $Errors }
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($File in $Files) {
|
||||||
|
if ($File.EndsWith(".bin")) {
|
||||||
|
Remove-EmptyFile -FileName $File
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,48 +1,176 @@
|
|||||||
@ECHO OFF
|
@ECHO OFF
|
||||||
|
SETLOCAL EnableDelayedExpansion
|
||||||
|
TITLE Meshtastic device-update
|
||||||
|
|
||||||
set PYTHON=python
|
SET "SCRIPT_NAME=%~nx0"
|
||||||
|
SET "DEBUG=0"
|
||||||
|
SET "PYTHON="
|
||||||
|
SET "ESPTOOL_BAUD=115200"
|
||||||
|
SET "ESPTOOL_CMD="
|
||||||
|
SET "LOGCOUNTER=0"
|
||||||
|
|
||||||
:: Determine the correct esptool command to use
|
GOTO getopts
|
||||||
where esptool >nul 2>&1
|
:help
|
||||||
if %ERRORLEVEL% EQU 0 (
|
ECHO Flash image file to device, but leave existing system intact.
|
||||||
set "ESPTOOL_CMD=esptool"
|
ECHO.
|
||||||
) else (
|
ECHO Usage: %SCRIPT_NAME% -f filename [-p PORT] [-P python]
|
||||||
set "ESPTOOL_CMD=%PYTHON% -m esptool"
|
ECHO.
|
||||||
)
|
ECHO Options:
|
||||||
|
ECHO -f filename The update .bin file to flash. Custom to your device type and region. (required)
|
||||||
|
ECHO The file must be located in this current directory.
|
||||||
|
ECHO -p PORT Set the environment variable for ESPTOOL_PORT.
|
||||||
|
ECHO If not set, ESPTOOL iterates all ports (Dangerous).
|
||||||
|
ECHO -P python Specify alternate python interpreter to use to invoke esptool. (default: python)
|
||||||
|
ECHO If supplied the script will use python.
|
||||||
|
ECHO If not supplied the script will try to find esptool in Path.
|
||||||
|
ECHO.
|
||||||
|
ECHO Example: %SCRIPT_NAME% -f firmware-t-deck-tft-2.6.0.0b106d4-update.bin -p COM11
|
||||||
|
GOTO eof
|
||||||
|
|
||||||
goto GETOPTS
|
:version
|
||||||
:HELP
|
ECHO %SCRIPT_NAME% [Version 2.6.1]
|
||||||
echo Usage: %~nx0 [-h] [-p ESPTOOL_PORT] [-P PYTHON] [-f FILENAME^|FILENAME]
|
ECHO Meshtastic
|
||||||
echo Flash image file to device, leave existing system intact.
|
GOTO eof
|
||||||
echo.
|
|
||||||
echo -h Display this help and exit
|
|
||||||
echo -p ESPTOOL_PORT Set the environment variable for ESPTOOL_PORT. If not set, ESPTOOL iterates all ports (Dangerrous).
|
|
||||||
echo -P PYTHON Specify alternate python interpreter to use to invoke esptool. (Default: %PYTHON%)
|
|
||||||
echo -f FILENAME The *update.bin file to flash. Custom to your device type.
|
|
||||||
goto EOF
|
|
||||||
|
|
||||||
:GETOPTS
|
:getopts
|
||||||
if /I "%1"=="-h" goto HELP
|
IF "%~1"=="" GOTO endopts
|
||||||
if /I "%1"=="--help" goto HELP
|
IF /I "%~1"=="-?" GOTO help
|
||||||
if /I "%1"=="-F" set "FILENAME=%2" & SHIFT
|
IF /I "%~1"=="-h" GOTO help
|
||||||
if /I "%1"=="-p" set ESPTOOL_PORT=%2 & SHIFT
|
IF /I "%~1"=="--help" GOTO help
|
||||||
if /I "%1"=="-P" set PYTHON=%2 & SHIFT
|
IF /I "%~1"=="-v" GOTO version
|
||||||
|
IF /I "%~1"=="--version" GOTO version
|
||||||
|
IF /I "%~1"=="--debug" SET "DEBUG=1" & CALL :LOG_MESSAGE DEBUG "DEBUG mode: enabled."
|
||||||
|
IF /I "%~1"=="-f" SET "FILENAME=%~2" & SHIFT
|
||||||
|
IF "%~1"=="-p" SET "ESPTOOL_PORT=%~2" & SHIFT
|
||||||
|
IF /I "%~1"=="--port" SET "ESPTOOL_PORT=%~2" & SHIFT
|
||||||
|
IF "%~1"=="-P" SET "PYTHON=%~2" & SHIFT
|
||||||
SHIFT
|
SHIFT
|
||||||
IF NOT "__%1__"=="____" goto GETOPTS
|
GOTO getopts
|
||||||
|
:endopts
|
||||||
|
|
||||||
IF "__%FILENAME%__" == "____" (
|
CALL :LOG_MESSAGE DEBUG "Checking FILENAME parameter..."
|
||||||
echo "Missing FILENAME"
|
IF "__!FILENAME!__"=="____" (
|
||||||
goto HELP
|
CALL :LOG_MESSAGE DEBUG "Missing -f filename input."
|
||||||
)
|
GOTO help
|
||||||
IF EXIST %FILENAME% IF NOT x%FILENAME:update=%==x%FILENAME% (
|
) ELSE (
|
||||||
echo Trying to flash update %FILENAME%
|
CALL :LOG_MESSAGE DEBUG "Filename: !FILENAME!"
|
||||||
%ESPTOOL_CMD% --baud 115200 write_flash 0x10000 %FILENAME%
|
IF NOT "__!FILENAME: =!__"=="__!FILENAME!__" (
|
||||||
) else (
|
CALL :LOG_MESSAGE ERROR "Filename containing spaces are not supported."
|
||||||
echo "Invalid file: %FILENAME%"
|
GOTO help
|
||||||
goto HELP
|
)
|
||||||
) else (
|
@REM Remove ".\" or "./" file prefix if present.
|
||||||
echo "Invalid file: %FILENAME%"
|
SET "FILENAME=!FILENAME:.\=!"
|
||||||
goto HELP
|
SET "FILENAME=!FILENAME:./=!"
|
||||||
)
|
)
|
||||||
|
|
||||||
:EOF
|
CALL :LOG_MESSAGE DEBUG "Checking if !FILENAME! exists..."
|
||||||
|
IF NOT EXIST !FILENAME! (
|
||||||
|
CALL :LOG_MESSAGE ERROR "File does not exist: !FILENAME!. Terminating."
|
||||||
|
GOTO eof
|
||||||
|
)
|
||||||
|
|
||||||
|
IF "!FILENAME:update=!"=="!FILENAME!" (
|
||||||
|
CALL :LOG_MESSAGE DEBUG "We are NOT working with a *update* file. !FILENAME!"
|
||||||
|
CALL :LOG_MESSAGE INFO "Use script device-install.bat to flash !FILENAME!."
|
||||||
|
GOTO eof
|
||||||
|
) ELSE (
|
||||||
|
CALL :LOG_MESSAGE DEBUG "We are working with a *update* file. !FILENAME!"
|
||||||
|
)
|
||||||
|
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Determine the correct esptool command to use..."
|
||||||
|
IF NOT "__%PYTHON%__"=="____" (
|
||||||
|
SET "ESPTOOL_CMD=!PYTHON! -m esptool"
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Python interpreter supplied."
|
||||||
|
) ELSE (
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Python interpreter NOT supplied. Looking for esptool...
|
||||||
|
WHERE esptool >nul 2>&1
|
||||||
|
IF %ERRORLEVEL% EQU 0 (
|
||||||
|
@REM WHERE exits with code 0 if esptool is found.
|
||||||
|
SET "ESPTOOL_CMD=esptool"
|
||||||
|
) ELSE (
|
||||||
|
SET "ESPTOOL_CMD=python -m esptool"
|
||||||
|
CALL :RESET_ERROR
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Checking esptool command !ESPTOOL_CMD!..."
|
||||||
|
!ESPTOOL_CMD! >nul 2>&1
|
||||||
|
IF %ERRORLEVEL% GEQ 2 (
|
||||||
|
@REM esptool exits with code 1 if help is displayed.
|
||||||
|
CALL :LOG_MESSAGE ERROR "esptool not found: !ESPTOOL_CMD!"
|
||||||
|
EXIT /B 1
|
||||||
|
GOTO eof
|
||||||
|
)
|
||||||
|
IF %DEBUG% EQU 1 (
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Skipping ESPTOOL_CMD steps."
|
||||||
|
SET "ESPTOOL_CMD=REM !ESPTOOL_CMD!"
|
||||||
|
)
|
||||||
|
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Using esptool command: !ESPTOOL_CMD!"
|
||||||
|
IF "__!ESPTOOL_PORT!__" == "____" (
|
||||||
|
CALL :LOG_MESSAGE WARN "Using esptool port: UNSET."
|
||||||
|
) ELSE (
|
||||||
|
SET "ESPTOOL_CMD=!ESPTOOL_CMD! --port !ESPTOOL_PORT!"
|
||||||
|
CALL :LOG_MESSAGE INFO "Using esptool port: !ESPTOOL_PORT!."
|
||||||
|
)
|
||||||
|
CALL :LOG_MESSAGE INFO "Using esptool baud: !ESPTOOL_BAUD!."
|
||||||
|
|
||||||
|
@REM Flashing operations.
|
||||||
|
CALL :LOG_MESSAGE INFO "Trying to flash update "!FILENAME!" at OFFSET 0x10000..."
|
||||||
|
CALL :RUN_ESPTOOL !ESPTOOL_BAUD! write_flash 0x10000 "!FILENAME!" || GOTO eof
|
||||||
|
|
||||||
|
CALL :LOG_MESSAGE INFO "Script complete!."
|
||||||
|
|
||||||
|
:eof
|
||||||
|
ENDLOCAL
|
||||||
|
EXIT /B %ERRORLEVEL%
|
||||||
|
|
||||||
|
|
||||||
|
:RUN_ESPTOOL
|
||||||
|
@REM Subroutine used to run ESPTOOL_CMD with arguments.
|
||||||
|
@REM Also handles %ERRORLEVEL%.
|
||||||
|
@REM CALL :RUN_ESPTOOL [Baud] [erase_flash|write_flash] [OFFSET] [Filename]
|
||||||
|
@REM.
|
||||||
|
@REM Example:: CALL :RUN_ESPTOOL 115200 write_flash 0x10000 "firmwarefile.bin"
|
||||||
|
IF %DEBUG% EQU 1 CALL :LOG_MESSAGE DEBUG "About to run command: !ESPTOOL_CMD! --baud %~1 %~2 %~3 %~4"
|
||||||
|
CALL :RESET_ERROR
|
||||||
|
!ESPTOOL_CMD! --baud %~1 %~2 %~3 %~4
|
||||||
|
IF %ERRORLEVEL% NEQ 0 (
|
||||||
|
CALL :LOG_MESSAGE ERROR "Error running command: !ESPTOOL_CMD! --baud %~1 %~2 %~3 %~4"
|
||||||
|
EXIT /B %ERRORLEVEL%
|
||||||
|
)
|
||||||
|
GOTO :eof
|
||||||
|
|
||||||
|
:LOG_MESSAGE
|
||||||
|
@REM Subroutine used to print log messages in four different levels.
|
||||||
|
@REM DEBUG messages only get printed if [-d] flag is passed to script.
|
||||||
|
@REM CALL :LOG_MESSAGE [ERROR|INFO|WARN|DEBUG] "Message"
|
||||||
|
@REM.
|
||||||
|
@REM Example:: CALL :LOG_MESSAGE INFO "Message."
|
||||||
|
SET /A LOGCOUNTER=LOGCOUNTER+1
|
||||||
|
IF "%1" == "ERROR" CALL :GET_TIMESTAMP & ECHO [91m%1 [0m[37m^| !TIMESTAMP! !LOGCOUNTER! [0m[91m%~2[0m
|
||||||
|
IF "%1" == "INFO" CALL :GET_TIMESTAMP & ECHO [32m%1 [0m[37m^| !TIMESTAMP! !LOGCOUNTER! [0m[32m%~2[0m
|
||||||
|
IF "%1" == "WARN" CALL :GET_TIMESTAMP & ECHO [33m%1 [0m[37m^| !TIMESTAMP! !LOGCOUNTER! [0m[33m%~2[0m
|
||||||
|
IF "%1" == "DEBUG" IF %DEBUG% EQU 1 CALL :GET_TIMESTAMP & ECHO [34m%1 [0m[37m^| !TIMESTAMP! !LOGCOUNTER! [0m[34m%~2[0m
|
||||||
|
GOTO :eof
|
||||||
|
|
||||||
|
:GET_TIMESTAMP
|
||||||
|
@REM Subroutine used to set !TIMESTAMP! to HH:MM:ss.
|
||||||
|
@REM CALL :GET_TIMESTAMP
|
||||||
|
@REM.
|
||||||
|
@REM Updates: !TIMESTAMP!
|
||||||
|
FOR /F "tokens=1,2,3 delims=:,." %%a IN ("%TIME%") DO (
|
||||||
|
SET "HH=%%a"
|
||||||
|
SET "MM=%%b"
|
||||||
|
SET "ss=%%c"
|
||||||
|
)
|
||||||
|
SET "TIMESTAMP=!HH!:!MM!:!ss!"
|
||||||
|
GOTO :eof
|
||||||
|
|
||||||
|
:RESET_ERROR
|
||||||
|
@REM Subroutine to reset %ERRORLEVEL% to 0.
|
||||||
|
@REM CALL :RESET_ERROR
|
||||||
|
@REM.
|
||||||
|
@REM Updates: %ERRORLEVEL%
|
||||||
|
EXIT /B 0
|
||||||
|
GOTO :eof
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ while getopts ":hp:P:f:" opt; do
|
|||||||
show_help
|
show_help
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
p) export ESPTOOL_PORT=${OPTARG}
|
p) ESPTOOL_CMD="$ESPTOOL_CMD --port ${OPTARG}"
|
||||||
;;
|
;;
|
||||||
P) PYTHON=${OPTARG}
|
P) PYTHON=${OPTARG}
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -35,6 +35,11 @@ for subdir, dirs, files in os.walk(rootdir):
|
|||||||
outlist.append(section)
|
outlist.append(section)
|
||||||
else:
|
else:
|
||||||
outlist.append(section)
|
outlist.append(section)
|
||||||
|
# Add the TFT variants if the base variant is selected
|
||||||
|
elif section.replace("-tft", "") in outlist and config[config[c].name].get("board_level") != "extra":
|
||||||
|
outlist.append(section)
|
||||||
|
elif section.replace("-inkhud", "") in outlist and config[config[c].name].get("board_level") != "extra":
|
||||||
|
outlist.append(section)
|
||||||
if "board_check" in config[config[c].name]:
|
if "board_check" in config[config[c].name]:
|
||||||
if (config[config[c].name]["board_check"] == "true") & (
|
if (config[config[c].name]["board_check"] == "true") & (
|
||||||
"check" in options
|
"check" in options
|
||||||
|
|||||||
8
bin/org.meshtastic.meshtasticd.desktop
Normal file
8
bin/org.meshtastic.meshtasticd.desktop
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Name=Meshtastic
|
||||||
|
Comment=Meshtastic App
|
||||||
|
Exec=meshtasticd
|
||||||
|
Icon=org.meshtastic.meshtasticd
|
||||||
|
Terminal=true
|
||||||
|
Type=Application
|
||||||
|
Categories=Network;Chat;HamRadio;
|
||||||
103
bin/org.meshtastic.meshtasticd.metainfo.xml
Normal file
103
bin/org.meshtastic.meshtasticd.metainfo.xml
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<component type="desktop-application">
|
||||||
|
<id>org.meshtastic.meshtasticd</id>
|
||||||
|
|
||||||
|
<name>Meshtastic</name>
|
||||||
|
<summary>Decentralized mesh communication</summary>
|
||||||
|
|
||||||
|
<metadata_license>CC-BY-4.0</metadata_license>
|
||||||
|
<project_license>GPL-3.0-or-later</project_license>
|
||||||
|
|
||||||
|
<developer id="org.meshtastic">
|
||||||
|
<name>Meshtastic</name>
|
||||||
|
</developer>
|
||||||
|
|
||||||
|
<description>
|
||||||
|
<p>
|
||||||
|
Meshtastic is an open source project for creating off-grid, affordable, and resilient communication with LoRa mesh networks.
|
||||||
|
</p>
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<launchable type="desktop-id">org.meshtastic.meshtasticd.desktop</launchable>
|
||||||
|
|
||||||
|
<categories>
|
||||||
|
<category>Network</category>
|
||||||
|
<category>Chat</category>
|
||||||
|
<category>HamRadio</category>
|
||||||
|
</categories>
|
||||||
|
<keywords>
|
||||||
|
<keyword>mesh</keyword>
|
||||||
|
<keyword>LoRa</keyword>
|
||||||
|
</keywords>
|
||||||
|
|
||||||
|
<recommends>
|
||||||
|
<control>keyboard</control>
|
||||||
|
<control>pointing</control>
|
||||||
|
<control>touch</control>
|
||||||
|
</recommends>
|
||||||
|
<requires>
|
||||||
|
<display_length compare="ge">360</display_length>
|
||||||
|
</requires>
|
||||||
|
|
||||||
|
<branding>
|
||||||
|
<color type="primary" scheme_preference="light">#97be89</color>
|
||||||
|
<color type="primary" scheme_preference="dark">#206538</color>
|
||||||
|
</branding>
|
||||||
|
|
||||||
|
<content_rating type="oars-1.1">
|
||||||
|
<content_attribute id="social-chat">intense</content_attribute>
|
||||||
|
<content_attribute id="social-location">intense</content_attribute>
|
||||||
|
</content_rating>
|
||||||
|
|
||||||
|
<url type="bugtracker">https://github.com/meshtastic/firmware/issues</url>
|
||||||
|
<url type="homepage">https://meshtastic.org/</url>
|
||||||
|
<url type="donation">https://opencollective.com/meshtastic</url>
|
||||||
|
<url type="faq">https://meshtastic.org/docs/software/linux/usage/</url>
|
||||||
|
<url type="vcs-browser">https://github.com/meshtastic/firmware/</url>
|
||||||
|
|
||||||
|
<screenshots>
|
||||||
|
<screenshot type="default">
|
||||||
|
<image>https://meshtastic.org/img/software/meshtastic-ui/mui_home_dashboard_dark.webp</image>
|
||||||
|
<caption>Home Dashboard</caption>
|
||||||
|
</screenshot>
|
||||||
|
<screenshot>
|
||||||
|
<image>https://meshtastic.org/img/software/meshtastic-ui/mui_initial_boot.webp</image>
|
||||||
|
<caption>Setup</caption>
|
||||||
|
</screenshot>
|
||||||
|
<screenshot>
|
||||||
|
<image>https://meshtastic.org/img/software/meshtastic-ui/mui_node_list_dark.webp</image>
|
||||||
|
<caption>Nodes List</caption>
|
||||||
|
</screenshot>
|
||||||
|
<screenshot>
|
||||||
|
<image>https://meshtastic.org/img/software/meshtastic-ui/mui_chat_list_dark.webp</image>
|
||||||
|
<caption>Chats List</caption>
|
||||||
|
</screenshot>
|
||||||
|
<screenshot>
|
||||||
|
<image>https://meshtastic.org/img/software/meshtastic-ui/mui_chat_message_dark.webp</image>
|
||||||
|
<caption>Messages</caption>
|
||||||
|
</screenshot>
|
||||||
|
<screenshot>
|
||||||
|
<image>https://meshtastic.org/img/software/meshtastic-ui/mui_map_dark.webp</image>
|
||||||
|
<caption>Map</caption>
|
||||||
|
</screenshot>
|
||||||
|
<screenshot>
|
||||||
|
<image>https://meshtastic.org/img/software/meshtastic-ui/mui_settings_dark.webp</image>
|
||||||
|
<caption>Settings</caption>
|
||||||
|
</screenshot>
|
||||||
|
</screenshots>
|
||||||
|
|
||||||
|
<releases>
|
||||||
|
<release version="2.6.7" date="2025-04-28">
|
||||||
|
<url type="details">https://github.com/meshtastic/firmware/releases?q=tag%3Av2.6.7</url>
|
||||||
|
</release>
|
||||||
|
<release version="2.6.6" date="2025-04-15">
|
||||||
|
<url type="details">https://github.com/meshtastic/firmware/releases?q=tag%3Av2.6.6</url>
|
||||||
|
</release>
|
||||||
|
<release version="2.6.5" date="2025-03-30">
|
||||||
|
<url type="details">https://github.com/meshtastic/firmware/releases?q=tag%3Av2.6.5</url>
|
||||||
|
</release>
|
||||||
|
<release version="2.6.4" date="2025-03-28">
|
||||||
|
<url type="details">https://github.com/meshtastic/firmware/releases?q=tag%3Av2.6.4</url>
|
||||||
|
</release>
|
||||||
|
</releases>
|
||||||
|
</component>
|
||||||
16
bin/org.meshtastic.meshtasticd.svg
Normal file
16
bin/org.meshtastic.meshtasticd.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="512" height="512" viewBox="0 0 512 512" xml:space="preserve">
|
||||||
|
<desc>Created with Fabric.js 4.6.0</desc>
|
||||||
|
<defs>
|
||||||
|
</defs>
|
||||||
|
<g transform="matrix(1 0 0 1 256 256)" id="xYQ9Gk9Jwpgj_HMOXB3F_" >
|
||||||
|
<path style="stroke: rgb(213,130,139); stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(103,234,148); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(-256, -256)" d="M 0 0 L 512 0 L 512 512 L 0 512 z" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1.79 0 0 1.79 313.74 258.36)" id="1xBsk2n9FZp60Rz1O-ceJ" >
|
||||||
|
<path style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: round; stroke-miterlimit: 2; fill: rgb(44,45,60); fill-rule: evenodd; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(-250.97, -362.41)" d="M 250.908 330.267 L 193.126 415.005 L 180.938 406.694 L 244.802 313.037 C 246.174 311.024 248.453 309.819 250.889 309.816 C 253.326 309.814 255.606 311.015 256.982 313.026 L 320.994 406.536 L 308.821 414.869 L 250.908 330.267 Z" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1.81 0 0 1.81 145 256.15)" id="KxN7E9YpbyPgz0S4z4Cl6" >
|
||||||
|
<path style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: round; stroke-miterlimit: 2; fill: rgb(44,45,60); fill-rule: evenodd; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(-115.14, -528.06)" d="M 87.642 581.398 L 154.757 482.977 L 142.638 474.713 L 75.523 573.134 L 87.642 581.398 Z" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
@@ -83,7 +83,7 @@ if platform.name == "espressif32":
|
|||||||
|
|
||||||
if platform.name == "nordicnrf52":
|
if platform.name == "nordicnrf52":
|
||||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.hex",
|
env.AddPostAction("$BUILD_DIR/${PROGNAME}.hex",
|
||||||
env.VerboseAction(f"{sys.executable} ./bin/uf2conv.py $BUILD_DIR/firmware.hex -c -f 0xADA52840 -o $BUILD_DIR/firmware.uf2",
|
env.VerboseAction(f"\"{sys.executable}\" ./bin/uf2conv.py $BUILD_DIR/firmware.hex -c -f 0xADA52840 -o $BUILD_DIR/firmware.uf2",
|
||||||
"Generating UF2 file"))
|
"Generating UF2 file"))
|
||||||
|
|
||||||
Import("projenv")
|
Import("projenv")
|
||||||
@@ -126,3 +126,8 @@ for flag in flags:
|
|||||||
projenv.Append(
|
projenv.Append(
|
||||||
CCFLAGS=flags,
|
CCFLAGS=flags,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
for lb in env.GetLibBuilders():
|
||||||
|
if lb.name == "meshtastic-device-ui":
|
||||||
|
lb.env.Append(CPPDEFINES=[("APP_VERSION", verObj["long"])])
|
||||||
|
break
|
||||||
|
|||||||
@@ -1 +1,10 @@
|
|||||||
cd protobufs && ..\nanopb-0.4.9\generator-bin\protoc.exe --experimental_allow_proto3_optional "--nanopb_out=-S.cpp -v:..\src\mesh\generated" -I=..\protobufs\ ..\protobufs\meshtastic\*.proto
|
@ECHO OFF
|
||||||
|
SETLOCAL
|
||||||
|
|
||||||
|
cd protobufs
|
||||||
|
..\nanopb-0.4.9\generator-bin\protoc.exe --experimental_allow_proto3_optional "--nanopb_out=-S.cpp -v:..\src\mesh\generated" -I=..\protobufs\ ..\protobufs\meshtastic\*.proto
|
||||||
|
GOTO eof
|
||||||
|
|
||||||
|
:eof
|
||||||
|
ENDLOCAL
|
||||||
|
EXIT /B %ERRORLEVEL%
|
||||||
|
|||||||
@@ -2,6 +2,10 @@ function meshtastic_version {
|
|||||||
meshtastic_version=$(python3 bin/buildinfo.py short)
|
meshtastic_version=$(python3 bin/buildinfo.py short)
|
||||||
echo -n "$meshtastic_version"
|
echo -n "$meshtastic_version"
|
||||||
}
|
}
|
||||||
|
function web_version {
|
||||||
|
web_version=$(cat bin/web.version)
|
||||||
|
echo -n "$web_version"
|
||||||
|
}
|
||||||
function git_commits_num {
|
function git_commits_num {
|
||||||
total_commits=$(git rev-list --all --count)
|
total_commits=$(git rev-list --all --count)
|
||||||
echo -n "$total_commits"
|
echo -n "$total_commits"
|
||||||
|
|||||||
@@ -1,2 +1,124 @@
|
|||||||
@echo off
|
@ECHO OFF
|
||||||
if [%1]==[] (echo "Please specify a platformio NRF target (i.e. rak4631) as the first argument.") else (python3 .\bin\uf2conv.py .\.pio\build\%1\firmware.hex -c -o .\.pio\build\%1\firmware.uf2 -f 0xADA52840)
|
SETLOCAL EnableDelayedExpansion
|
||||||
|
TITLE Meshtastic uf2-convert
|
||||||
|
|
||||||
|
SET "SCRIPT_NAME=%~nx0"
|
||||||
|
SET "DEBUG=0"
|
||||||
|
SET "NRF=0"
|
||||||
|
SET "UF2CONV_CMD=python3 .\bin\uf2conv.py"
|
||||||
|
|
||||||
|
GOTO getopts
|
||||||
|
:help
|
||||||
|
ECHO.
|
||||||
|
ECHO Usage: %SCRIPT_NAME% -t [t-echo^|rak4631^|nano-g2-ultra^|wio-tracker-wm1110^|canaryone^|
|
||||||
|
ECHO heltec-mesh-node-t114^|tracker-t1000-e^|rak_wismeshtap^|rak2560^|
|
||||||
|
ECHO nrf52_promicro_diy_tcxo]
|
||||||
|
ECHO.
|
||||||
|
ECHO Options:
|
||||||
|
ECHO -t target Specify a platformio NRF target to build for. (required)
|
||||||
|
ECHO.
|
||||||
|
ECHO Example: %SCRIPT_NAME% -t rak4631
|
||||||
|
GOTO eof
|
||||||
|
|
||||||
|
:version
|
||||||
|
ECHO %SCRIPT_NAME% [Version 2.6.0]
|
||||||
|
ECHO Meshtastic
|
||||||
|
GOTO eof
|
||||||
|
|
||||||
|
:getopts
|
||||||
|
IF "%~1"=="" GOTO endopts
|
||||||
|
IF /I "%~1"=="-?" GOTO help
|
||||||
|
IF /I "%~1"=="-h" GOTO help
|
||||||
|
IF /I "%~1"=="--help" GOTO help
|
||||||
|
IF /I "%~1"=="-v" GOTO version
|
||||||
|
IF /I "%~1"=="--version" GOTO version
|
||||||
|
IF /I "%~1"=="--debug" SET "DEBUG=1" & CALL :LOG_MESSAGE DEBUG "DEBUG mode: enabled."
|
||||||
|
IF /I "%~1"=="-t" SET "TARGETNAME=%~2" & SHIFT
|
||||||
|
IF /I "%~1"=="--target" SET "TARGETNAME=%~2" & SHIFT
|
||||||
|
SHIFT
|
||||||
|
GOTO getopts
|
||||||
|
:endopts
|
||||||
|
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Checking TARGETNAME parameter..."
|
||||||
|
IF "__!TARGETNAME!__"=="____" (
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Missing -t target input."
|
||||||
|
GOTO help
|
||||||
|
)
|
||||||
|
|
||||||
|
IF %DEBUG% EQU 1 SET "UF2CONV_CMD=REM python3 .\bin\uf2conv.py"
|
||||||
|
|
||||||
|
SET "NRFTARGETS=t-echo rak4631 nano-g2-ultra wio-tracker-wm1110 canaryone heltec-mesh-node-t114 tracker-t1000-e rak_wismeshtap rak2560 nrf52_promicro_diy_tcxo"
|
||||||
|
FOR %%a IN (%NRFTARGETS%) DO (
|
||||||
|
IF /I "%%a"=="!TARGETNAME!" (
|
||||||
|
@REM We are working with any of %NRFTARGETS%.
|
||||||
|
SET "NRF=1"
|
||||||
|
GOTO end_loop_nrf
|
||||||
|
)
|
||||||
|
)
|
||||||
|
:end_loop_nrf
|
||||||
|
|
||||||
|
@REM Building operations.
|
||||||
|
IF !NRF! EQU 1 (
|
||||||
|
CALL :LOG_MESSAGE INFO "Trying to build for !TARGETNAME!..."
|
||||||
|
CALL :RUN_UF2CONV !TARGETNAME! || GOTO eof
|
||||||
|
) ELSE (
|
||||||
|
CALL :LOG_MESSAGE WARN "!TARGETNAME! is not supported..."
|
||||||
|
GOTO eof
|
||||||
|
)
|
||||||
|
|
||||||
|
CALL :LOG_MESSAGE INFO "Script complete!."
|
||||||
|
|
||||||
|
|
||||||
|
:eof
|
||||||
|
ENDLOCAL
|
||||||
|
EXIT /B %ERRORLEVEL%
|
||||||
|
|
||||||
|
|
||||||
|
:RUN_UF2CONV
|
||||||
|
@REM Subroutine used to run .\bin\uf2conv.py with arguments.
|
||||||
|
@REM Also handles %ERRORLEVEL%.
|
||||||
|
@REM CALL :RUN_UF2CONV [target]
|
||||||
|
@REM.
|
||||||
|
@REM Example:: CALL :RUN_UF2CONV rak4631
|
||||||
|
IF %DEBUG% EQU 1 CALL :LOG_MESSAGE DEBUG "About to run command: !UF2CONV_CMD! .\.pio\build\%~1\firmware.hex -c -o .\.pio\build\%~1\firmware.uf2 -f 0xADA52840"
|
||||||
|
CALL :RESET_ERROR
|
||||||
|
!UF2CONV_CMD! .\.pio\build\%~1\firmware.hex -c -o .\.pio\build\%~1\firmware.uf2 -f 0xADA52840
|
||||||
|
IF %ERRORLEVEL% NEQ 0 (
|
||||||
|
CALL :LOG_MESSAGE ERROR "Error running command: !UF2CONV_CMD! .\.pio\build\%~1\firmware.hex -c -o .\.pio\build\%~1\firmware.uf2 -f 0xADA52840"
|
||||||
|
EXIT /B %ERRORLEVEL%
|
||||||
|
)
|
||||||
|
GOTO :eof
|
||||||
|
|
||||||
|
:LOG_MESSAGE
|
||||||
|
@REM Subroutine used to print log messages in four different levels.
|
||||||
|
@REM DEBUG messages only get printed if [-d] flag is passed to script.
|
||||||
|
@REM CALL :LOG_MESSAGE [ERROR|INFO|WARN|DEBUG] "Message"
|
||||||
|
@REM.
|
||||||
|
@REM Example:: CALL :LOG_MESSAGE INFO "Message."
|
||||||
|
SET /A LOGCOUNTER=LOGCOUNTER+1
|
||||||
|
IF "%1" == "ERROR" CALL :GET_TIMESTAMP & ECHO [91m%1 [0m[37m^| !TIMESTAMP! !LOGCOUNTER! [0m[91m%~2[0m
|
||||||
|
IF "%1" == "INFO" CALL :GET_TIMESTAMP & ECHO [32m%1 [0m[37m^| !TIMESTAMP! !LOGCOUNTER! [0m[32m%~2[0m
|
||||||
|
IF "%1" == "WARN" CALL :GET_TIMESTAMP & ECHO [33m%1 [0m[37m^| !TIMESTAMP! !LOGCOUNTER! [0m[33m%~2[0m
|
||||||
|
IF "%1" == "DEBUG" IF %DEBUG% EQU 1 CALL :GET_TIMESTAMP & ECHO [34m%1 [0m[37m^| !TIMESTAMP! !LOGCOUNTER! [0m[34m%~2[0m
|
||||||
|
GOTO :eof
|
||||||
|
|
||||||
|
:GET_TIMESTAMP
|
||||||
|
@REM Subroutine used to set !TIMESTAMP! to HH:MM:ss.
|
||||||
|
@REM CALL :GET_TIMESTAMP
|
||||||
|
@REM.
|
||||||
|
@REM Updates: !TIMESTAMP!
|
||||||
|
FOR /F "tokens=1,2,3 delims=:,." %%a IN ("%TIME%") DO (
|
||||||
|
SET "HH=%%a"
|
||||||
|
SET "MM=%%b"
|
||||||
|
SET "ss=%%c"
|
||||||
|
)
|
||||||
|
SET "TIMESTAMP=!HH!:!MM!:!ss!"
|
||||||
|
GOTO :eof
|
||||||
|
|
||||||
|
:RESET_ERROR
|
||||||
|
@REM Subroutine to reset %ERRORLEVEL% to 0.
|
||||||
|
@REM CALL :RESET_ERROR
|
||||||
|
@REM.
|
||||||
|
@REM Updates: %ERRORLEVEL%
|
||||||
|
EXIT /B 0
|
||||||
|
GOTO :eof
|
||||||
|
|||||||
1
bin/web.version
Normal file
1
bin/web.version
Normal file
@@ -0,0 +1 @@
|
|||||||
|
2.5.3
|
||||||
54
boards/Seeed_Solar_Node.json
Normal file
54
boards/Seeed_Solar_Node.json
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"arduino": {
|
||||||
|
"ldscript": "nrf52840_s140_v7.ld"
|
||||||
|
},
|
||||||
|
"core": "nRF5",
|
||||||
|
"cpu": "cortex-m4",
|
||||||
|
"extra_flags": "-DARDUINO_MDBT50Q_RX -DNRF52840_XXAA",
|
||||||
|
"f_cpu": "64000000L",
|
||||||
|
"hwids": [["0x2886", "0x0059"]],
|
||||||
|
"usb_product": "XIAO-BOOT",
|
||||||
|
"mcu": "nrf52840",
|
||||||
|
"variant": "Seeed_Solar_Node",
|
||||||
|
"bsp": {
|
||||||
|
"name": "adafruit"
|
||||||
|
},
|
||||||
|
"softdevice": {
|
||||||
|
"sd_flags": "-DS140",
|
||||||
|
"sd_name": "s140",
|
||||||
|
"sd_version": "7.3.0",
|
||||||
|
"sd_fwid": "0x0123"
|
||||||
|
},
|
||||||
|
"bootloader": {
|
||||||
|
"settings_addr": "0xFF000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"connectivity": ["bluetooth"],
|
||||||
|
"debug": {
|
||||||
|
"jlink_device": "nRF52840_xxAA",
|
||||||
|
"svd_path": "nrf52840.svd",
|
||||||
|
"openocd_target": "nrf52840-mdk-rs"
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino"],
|
||||||
|
"name": "Seeed_Solar_Node",
|
||||||
|
"upload": {
|
||||||
|
"maximum_ram_size": 248832,
|
||||||
|
"maximum_size": 815104,
|
||||||
|
"speed": 115200,
|
||||||
|
"protocol": "nrfutil",
|
||||||
|
"protocols": [
|
||||||
|
"jlink",
|
||||||
|
"nrfjprog",
|
||||||
|
"nrfutil",
|
||||||
|
"stlink",
|
||||||
|
"cmsis-dap",
|
||||||
|
"blackmagic"
|
||||||
|
],
|
||||||
|
"use_1200bps_touch": true,
|
||||||
|
"require_upload_port": true,
|
||||||
|
"wait_for_upload_port": true
|
||||||
|
},
|
||||||
|
"url": "https://www.seeedstudio.com/Seeed-XIAO-BLE-Sense-nRF52840-p-5253.html",
|
||||||
|
"vendor": "Seeed Studio"
|
||||||
|
}
|
||||||
53
boards/ThinkNode-M1.json
Normal file
53
boards/ThinkNode-M1.json
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"arduino": {
|
||||||
|
"ldscript": "nrf52840_s140_v6.ld"
|
||||||
|
},
|
||||||
|
"core": "nRF5",
|
||||||
|
"cpu": "cortex-m4",
|
||||||
|
"extra_flags": "-DARDUINO_NRF52840_TTGO_EINK -DNRF52840_XXAA",
|
||||||
|
"f_cpu": "64000000L",
|
||||||
|
"hwids": [
|
||||||
|
["0x239A", "0x4405"],
|
||||||
|
["0x239A", "0x0029"],
|
||||||
|
["0x239A", "0x002A"]
|
||||||
|
],
|
||||||
|
"usb_product": "elecrow_eink",
|
||||||
|
"mcu": "nrf52840",
|
||||||
|
"variant": "ELECROW-ThinkNode-M1",
|
||||||
|
"variants_dir": "variants",
|
||||||
|
"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",
|
||||||
|
"onboard_tools": ["jlink"],
|
||||||
|
"svd_path": "nrf52840.svd",
|
||||||
|
"openocd_target": "nrf52840-mdk-rs"
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino"],
|
||||||
|
"name": "elecrow eink",
|
||||||
|
"upload": {
|
||||||
|
"maximum_ram_size": 248832,
|
||||||
|
"maximum_size": 815104,
|
||||||
|
"speed": 115200,
|
||||||
|
"protocol": "nrfutil",
|
||||||
|
"protocols": ["jlink", "nrfjprog", "nrfutil", "stlink"],
|
||||||
|
"use_1200bps_touch": true,
|
||||||
|
"require_upload_port": true,
|
||||||
|
"wait_for_upload_port": true
|
||||||
|
},
|
||||||
|
"url": "FIXME",
|
||||||
|
"vendor": "ELECROW"
|
||||||
|
}
|
||||||
43
boards/crowpanel.json
Normal file
43
boards/crowpanel.json
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"arduino": {
|
||||||
|
"ldscript": "esp32s3_out.ld",
|
||||||
|
"memory_type": "qio_opi",
|
||||||
|
"partitions": "default_16MB.csv"
|
||||||
|
},
|
||||||
|
"core": "esp32",
|
||||||
|
"extra_flags": [
|
||||||
|
"-DBOARD_HAS_PSRAM",
|
||||||
|
"-DARDUINO_USB_CDC_ON_BOOT=1",
|
||||||
|
"-DARDUINO_USB_MODE=0",
|
||||||
|
"-DARDUINO_RUNNING_CORE=1",
|
||||||
|
"-DARDUINO_EVENT_RUNNING_CORE=0"
|
||||||
|
],
|
||||||
|
"f_cpu": "240000000L",
|
||||||
|
"f_flash": "80000000L",
|
||||||
|
"flash_mode": "qio",
|
||||||
|
"hwids": [["0x303A", "0x1001"]],
|
||||||
|
"mcu": "esp32s3",
|
||||||
|
"variant": "ESP32-S3-WROOM-1-N16R8"
|
||||||
|
},
|
||||||
|
"connectivity": ["wifi", "bluetooth", "lora"],
|
||||||
|
"debug": {
|
||||||
|
"default_tool": "esp-builtin",
|
||||||
|
"onboard_tools": ["esp-builtin"],
|
||||||
|
"openocd_target": "esp32s3.cfg"
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino", "espidf"],
|
||||||
|
"name": "ESP32-S3-WROOM-1-N16R8 (16 MB Flash, 8 MB PSRAM)",
|
||||||
|
"upload": {
|
||||||
|
"flash_size": "16MB",
|
||||||
|
"maximum_ram_size": 524288,
|
||||||
|
"maximum_size": 16777216,
|
||||||
|
"require_upload_port": true,
|
||||||
|
"speed": 921600
|
||||||
|
},
|
||||||
|
"monitor": {
|
||||||
|
"speed": 115200
|
||||||
|
},
|
||||||
|
"url": "https://www.espressif.com/sites/default/files/documentation/esp32-s3-wroom-1_wroom-1u_datasheet_en.pdf",
|
||||||
|
"vendor": "Espressif"
|
||||||
|
}
|
||||||
@@ -7,13 +7,15 @@
|
|||||||
"core": "esp32",
|
"core": "esp32",
|
||||||
"extra_flags": [
|
"extra_flags": [
|
||||||
"-DARDUINO_ESP32S3_DEV",
|
"-DARDUINO_ESP32S3_DEV",
|
||||||
"-DARDUINO_USB_MODE=1",
|
|
||||||
"-DARDUINO_RUNNING_CORE=1",
|
"-DARDUINO_RUNNING_CORE=1",
|
||||||
"-DARDUINO_EVENT_RUNNING_CORE=1"
|
"-DARDUINO_EVENT_RUNNING_CORE=1",
|
||||||
|
"-DARDUINO_USB_CDC_ON_BOOT=1",
|
||||||
|
"-DBOARD_HAS_PSRAM"
|
||||||
],
|
],
|
||||||
"f_cpu": "240000000L",
|
"f_cpu": "240000000L",
|
||||||
"f_flash": "80000000L",
|
"f_flash": "80000000L",
|
||||||
"flash_mode": "qio",
|
"flash_mode": "qio",
|
||||||
|
"psram_type": "qio",
|
||||||
"hwids": [["0x303A", "0x1001"]],
|
"hwids": [["0x303A", "0x1001"]],
|
||||||
"mcu": "esp32s3",
|
"mcu": "esp32s3",
|
||||||
"variant": "esp32s3"
|
"variant": "esp32s3"
|
||||||
|
|||||||
53
boards/heltec_mesh_pocket.json
Normal file
53
boards/heltec_mesh_pocket.json
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"arduino": {
|
||||||
|
"ldscript": "nrf52840_s140_v6.ld"
|
||||||
|
},
|
||||||
|
"core": "nRF5",
|
||||||
|
"cpu": "cortex-m4",
|
||||||
|
"extra_flags": "-DNRF52840_XXAA",
|
||||||
|
"f_cpu": "64000000L",
|
||||||
|
"hwids": [
|
||||||
|
["0x239A", "0x4405"],
|
||||||
|
["0x239A", "0x0029"],
|
||||||
|
["0x239A", "0x002A"]
|
||||||
|
],
|
||||||
|
"usb_product": "HT-n5262",
|
||||||
|
"mcu": "nrf52840",
|
||||||
|
"variant": "heltec_mesh_pocket",
|
||||||
|
"variants_dir": "variants",
|
||||||
|
"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",
|
||||||
|
"onboard_tools": ["jlink"],
|
||||||
|
"svd_path": "nrf52840.svd",
|
||||||
|
"openocd_target": "nrf52840-mdk-rs"
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino"],
|
||||||
|
"name": "Heltec nrf (Adafruit BSP)",
|
||||||
|
"upload": {
|
||||||
|
"maximum_ram_size": 248832,
|
||||||
|
"maximum_size": 815104,
|
||||||
|
"speed": 115200,
|
||||||
|
"protocol": "nrfutil",
|
||||||
|
"protocols": ["jlink", "nrfjprog", "nrfutil", "stlink"],
|
||||||
|
"use_1200bps_touch": true,
|
||||||
|
"require_upload_port": true,
|
||||||
|
"wait_for_upload_port": true
|
||||||
|
},
|
||||||
|
"url": "https://heltec.org/project/meshpocket/",
|
||||||
|
"vendor": "Heltec"
|
||||||
|
}
|
||||||
@@ -2,7 +2,8 @@
|
|||||||
"build": {
|
"build": {
|
||||||
"arduino": {
|
"arduino": {
|
||||||
"ldscript": "esp32s3_out.ld",
|
"ldscript": "esp32s3_out.ld",
|
||||||
"partitions": "default_8MB.csv"
|
"partitions": "default_8MB.csv",
|
||||||
|
"memory_type": "qio_opi"
|
||||||
},
|
},
|
||||||
"core": "esp32",
|
"core": "esp32",
|
||||||
"extra_flags": [
|
"extra_flags": [
|
||||||
@@ -15,6 +16,7 @@
|
|||||||
"f_cpu": "240000000L",
|
"f_cpu": "240000000L",
|
||||||
"f_flash": "80000000L",
|
"f_flash": "80000000L",
|
||||||
"flash_mode": "qio",
|
"flash_mode": "qio",
|
||||||
|
"psram_type": "opi",
|
||||||
"hwids": [
|
"hwids": [
|
||||||
["0x303A", "0x1001"],
|
["0x303A", "0x1001"],
|
||||||
["0x303A", "0x0002"]
|
["0x303A", "0x0002"]
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
"build": {
|
"build": {
|
||||||
"arduino": {
|
"arduino": {
|
||||||
"ldscript": "esp32s3_out.ld",
|
"ldscript": "esp32s3_out.ld",
|
||||||
"partitions": "default_8MB.csv"
|
"partitions": "default_8MB.csv",
|
||||||
|
"memory_type": "qio_opi"
|
||||||
},
|
},
|
||||||
"core": "esp32",
|
"core": "esp32",
|
||||||
"extra_flags": [
|
"extra_flags": [
|
||||||
@@ -15,6 +16,7 @@
|
|||||||
"f_cpu": "240000000L",
|
"f_cpu": "240000000L",
|
||||||
"f_flash": "80000000L",
|
"f_flash": "80000000L",
|
||||||
"flash_mode": "qio",
|
"flash_mode": "qio",
|
||||||
|
"psram_type": "opi",
|
||||||
"hwids": [
|
"hwids": [
|
||||||
["0x303A", "0x1001"],
|
["0x303A", "0x1001"],
|
||||||
["0x303A", "0x0002"]
|
["0x303A", "0x0002"]
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
"build": {
|
"build": {
|
||||||
"arduino": {
|
"arduino": {
|
||||||
"ldscript": "esp32s3_out.ld",
|
"ldscript": "esp32s3_out.ld",
|
||||||
"partitions": "default_8MB.csv"
|
"partitions": "default_8MB.csv",
|
||||||
|
"memory_type": "qio_opi"
|
||||||
},
|
},
|
||||||
"core": "esp32",
|
"core": "esp32",
|
||||||
"extra_flags": [
|
"extra_flags": [
|
||||||
@@ -15,6 +16,7 @@
|
|||||||
"f_cpu": "240000000L",
|
"f_cpu": "240000000L",
|
||||||
"f_flash": "80000000L",
|
"f_flash": "80000000L",
|
||||||
"flash_mode": "qio",
|
"flash_mode": "qio",
|
||||||
|
"psram_type": "opi",
|
||||||
"hwids": [
|
"hwids": [
|
||||||
["0x303A", "0x1001"],
|
["0x303A", "0x1001"],
|
||||||
["0x303A", "0x0002"]
|
["0x303A", "0x0002"]
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
"f_boot": "120000000L",
|
"f_boot": "120000000L",
|
||||||
"boot": "qio",
|
"boot": "qio",
|
||||||
"flash_mode": "qio",
|
"flash_mode": "qio",
|
||||||
|
"psram_type": "opi",
|
||||||
"hwids": [["0x1A86", "0x7523"]],
|
"hwids": [["0x1A86", "0x7523"]],
|
||||||
"mcu": "esp32s3",
|
"mcu": "esp32s3",
|
||||||
"variant": "esp32s3"
|
"variant": "esp32s3"
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
"f_cpu": "240000000L",
|
"f_cpu": "240000000L",
|
||||||
"f_flash": "80000000L",
|
"f_flash": "80000000L",
|
||||||
"flash_mode": "qio",
|
"flash_mode": "qio",
|
||||||
|
"psram_type": "opi",
|
||||||
"hwids": [["0x2886", "0x0059"]],
|
"hwids": [["0x2886", "0x0059"]],
|
||||||
"mcu": "esp32s3",
|
"mcu": "esp32s3",
|
||||||
"variant": "seeed-xiao-s3"
|
"variant": "seeed-xiao-s3"
|
||||||
|
|||||||
56
boards/seeed_xiao_nrf52840_kit.json
Normal file
56
boards/seeed_xiao_nrf52840_kit.json
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"arduino": {
|
||||||
|
"ldscript": "nrf52840_s140_v7.ld"
|
||||||
|
},
|
||||||
|
"core": "nRF5",
|
||||||
|
"cpu": "cortex-m4",
|
||||||
|
"extra_flags": "-DARDUINO_MDBT50Q_RX -DNRF52840_XXAA",
|
||||||
|
"f_cpu": "64000000L",
|
||||||
|
"hwids": [
|
||||||
|
["0x2886", "0x0166"]
|
||||||
|
],
|
||||||
|
"usb_product": "XIAO-BOOT",
|
||||||
|
"mcu": "nrf52840",
|
||||||
|
"variant": "seeed_xiao_nrf52840_kit",
|
||||||
|
"bsp": {
|
||||||
|
"name": "adafruit"
|
||||||
|
},
|
||||||
|
"softdevice": {
|
||||||
|
"sd_flags": "-DS140",
|
||||||
|
"sd_name": "s140",
|
||||||
|
"sd_version": "7.3.0",
|
||||||
|
"sd_fwid": "0x0123"
|
||||||
|
},
|
||||||
|
"bootloader": {
|
||||||
|
"settings_addr": "0xFF000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"connectivity": ["bluetooth"],
|
||||||
|
"debug": {
|
||||||
|
"jlink_device": "nRF52840_xxAA",
|
||||||
|
"svd_path": "nrf52840.svd",
|
||||||
|
"openocd_target": "nrf52840-mdk-rs"
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino"],
|
||||||
|
"name": "seeed_xiao_nrf52840_kit",
|
||||||
|
"upload": {
|
||||||
|
"maximum_ram_size": 248832,
|
||||||
|
"maximum_size": 815104,
|
||||||
|
"speed": 115200,
|
||||||
|
"protocol": "nrfutil",
|
||||||
|
"protocols": [
|
||||||
|
"jlink",
|
||||||
|
"nrfjprog",
|
||||||
|
"nrfutil",
|
||||||
|
"stlink",
|
||||||
|
"cmsis-dap",
|
||||||
|
"blackmagic"
|
||||||
|
],
|
||||||
|
"use_1200bps_touch": true,
|
||||||
|
"require_upload_port": true,
|
||||||
|
"wait_for_upload_port": true
|
||||||
|
},
|
||||||
|
"url": "https://www.seeedstudio.com/XIAO-nRF52840-Wio-SX1262-Kit-for-Meshtastic-p-6400.html",
|
||||||
|
"vendor": "seeed"
|
||||||
|
}
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
"f_cpu": "240000000L",
|
"f_cpu": "240000000L",
|
||||||
"f_flash": "80000000L",
|
"f_flash": "80000000L",
|
||||||
"flash_mode": "qio",
|
"flash_mode": "qio",
|
||||||
|
"psram_type": "opi",
|
||||||
"hwids": [
|
"hwids": [
|
||||||
["0x303A", "0x1001"],
|
["0x303A", "0x1001"],
|
||||||
["0x303A", "0x0002"]
|
["0x303A", "0x0002"]
|
||||||
@@ -23,16 +24,16 @@
|
|||||||
"mcu": "esp32s3",
|
"mcu": "esp32s3",
|
||||||
"variant": "t-watch-s3"
|
"variant": "t-watch-s3"
|
||||||
},
|
},
|
||||||
"connectivity": ["wifi"],
|
"connectivity": ["wifi", "bluetooth", "lora"],
|
||||||
"debug": {
|
"debug": {
|
||||||
"openocd_target": "esp32s3.cfg"
|
"openocd_target": "esp32s3.cfg"
|
||||||
},
|
},
|
||||||
"frameworks": ["arduino"],
|
"frameworks": ["arduino"],
|
||||||
"name": "LilyGo T-Watch 2020 V3",
|
"name": "LilyGo T-Watch 2020 V3",
|
||||||
"upload": {
|
"upload": {
|
||||||
"flash_size": "8MB",
|
"flash_size": "16MB",
|
||||||
"maximum_ram_size": 327680,
|
"maximum_ram_size": 327680,
|
||||||
"maximum_size": 8388608,
|
"maximum_size": 16777216,
|
||||||
"require_upload_port": true,
|
"require_upload_port": true,
|
||||||
"use_1200bps_touch": true,
|
"use_1200bps_touch": true,
|
||||||
"wait_for_upload_port": true,
|
"wait_for_upload_port": true,
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
"build": {
|
|
||||||
"arduino": {
|
|
||||||
"earlephilhower": {
|
|
||||||
"boot2_source": "boot2_w25q080_2_padded_checksum.S",
|
|
||||||
"usb_vid": "0x2E8A",
|
|
||||||
"usb_pid": "0x000A"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"core": "earlephilhower",
|
|
||||||
"cpu": "cortex-m0plus",
|
|
||||||
"extra_flags": "-DARDUINO_GENERIC_RP2040 -DRASPBERRY_PI_PICO -DARDUINO_ARCH_RP2040 -DUSBD_MAX_POWER_MA=250",
|
|
||||||
"f_cpu": "133000000L",
|
|
||||||
"hwids": [
|
|
||||||
["0x2E8A", "0x00C0"],
|
|
||||||
["0x2E8A", "0x000A"]
|
|
||||||
],
|
|
||||||
"mcu": "rp2040",
|
|
||||||
"variant": "WisBlock_RAK11300_Board"
|
|
||||||
},
|
|
||||||
"debug": {
|
|
||||||
"jlink_device": "RP2040_M0_0",
|
|
||||||
"openocd_target": "rp2040.cfg",
|
|
||||||
"svd_path": "rp2040.svd"
|
|
||||||
},
|
|
||||||
"frameworks": ["arduino"],
|
|
||||||
"name": "WisBlock RAK11300",
|
|
||||||
"upload": {
|
|
||||||
"maximum_ram_size": 270336,
|
|
||||||
"maximum_size": 2097152,
|
|
||||||
"require_upload_port": true,
|
|
||||||
"native_usb": true,
|
|
||||||
"use_1200bps_touch": true,
|
|
||||||
"wait_for_upload_port": false,
|
|
||||||
"protocol": "picotool",
|
|
||||||
"protocols": ["cmsis-dap", "raspberrypi-swd", "picotool", "picoprobe"]
|
|
||||||
},
|
|
||||||
"url": "https://docs.rakwireless.com/",
|
|
||||||
"vendor": "RAKwireless"
|
|
||||||
}
|
|
||||||
9
debian/ci_pack_sdeb.sh
vendored
9
debian/ci_pack_sdeb.sh
vendored
@@ -5,13 +5,14 @@ export PLATFORMIO_PACKAGES_DIR=pio/packages
|
|||||||
export PLATFORMIO_CORE_DIR=pio/core
|
export PLATFORMIO_CORE_DIR=pio/core
|
||||||
|
|
||||||
# Download libraries to `pio`
|
# Download libraries to `pio`
|
||||||
platformio pkg install -e native
|
platformio pkg install -e native-tft
|
||||||
platformio pkg install -e native -t platformio/tool-scons@4.40502.0
|
platformio pkg install -e native-tft -t platformio/tool-scons@4.40502.0
|
||||||
# Compress `pio` directory to prevent dh_clean from sanitizing it
|
# Compress `pio` directory to prevent dh_clean from sanitizing it
|
||||||
tar -cf pio.tar pio/
|
tar -cf pio.tar pio/
|
||||||
rm -rf pio
|
rm -rf pio
|
||||||
# Download the latest meshtastic/web release build.tar to `web.tar`
|
# Download the meshtastic/web release build.tar to `web.tar`
|
||||||
curl -L https://github.com/meshtastic/web/releases/latest/download/build.tar -o web.tar
|
web_ver=$(cat bin/web.version)
|
||||||
|
curl -L "https://github.com/meshtastic/web/releases/download/v$web_ver/build.tar" -o web.tar
|
||||||
|
|
||||||
package=$(dpkg-parsechangelog --show-field Source)
|
package=$(dpkg-parsechangelog --show-field Source)
|
||||||
|
|
||||||
|
|||||||
7
debian/control
vendored
7
debian/control
vendored
@@ -3,6 +3,7 @@ Section: misc
|
|||||||
Priority: optional
|
Priority: optional
|
||||||
Maintainer: Austin Lane <vidplace7@gmail.com>
|
Maintainer: Austin Lane <vidplace7@gmail.com>
|
||||||
Build-Depends: debhelper-compat (= 13),
|
Build-Depends: debhelper-compat (= 13),
|
||||||
|
lsb-release,
|
||||||
tar,
|
tar,
|
||||||
gzip,
|
gzip,
|
||||||
platformio,
|
platformio,
|
||||||
@@ -16,10 +17,14 @@ Build-Depends: debhelper-compat (= 13),
|
|||||||
libbluetooth-dev,
|
libbluetooth-dev,
|
||||||
libusb-1.0-0-dev,
|
libusb-1.0-0-dev,
|
||||||
libi2c-dev,
|
libi2c-dev,
|
||||||
|
libuv1-dev,
|
||||||
openssl,
|
openssl,
|
||||||
libssl-dev,
|
libssl-dev,
|
||||||
libulfius-dev,
|
libulfius-dev,
|
||||||
liborcania-dev
|
liborcania-dev,
|
||||||
|
libx11-dev,
|
||||||
|
libinput-dev,
|
||||||
|
libxkbcommon-x11-dev
|
||||||
Standards-Version: 4.6.2
|
Standards-Version: 4.6.2
|
||||||
Homepage: https://github.com/meshtastic/firmware
|
Homepage: https://github.com/meshtastic/firmware
|
||||||
Rules-Requires-Root: no
|
Rules-Requires-Root: no
|
||||||
|
|||||||
2
debian/meshtasticd.install
vendored
2
debian/meshtasticd.install
vendored
@@ -1,4 +1,4 @@
|
|||||||
.pio/build/native/meshtasticd usr/sbin
|
.pio/build/native-tft/meshtasticd usr/sbin
|
||||||
|
|
||||||
bin/config.yaml etc/meshtasticd
|
bin/config.yaml etc/meshtasticd
|
||||||
bin/config.d/* etc/meshtasticd/available.d
|
bin/config.d/* etc/meshtasticd/available.d
|
||||||
|
|||||||
13
debian/rules
vendored
13
debian/rules
vendored
@@ -11,13 +11,22 @@ PIO_ENV:=\
|
|||||||
PLATFORMIO_LIBDEPS_DIR=pio/libdeps \
|
PLATFORMIO_LIBDEPS_DIR=pio/libdeps \
|
||||||
PLATFORMIO_PACKAGES_DIR=pio/packages
|
PLATFORMIO_PACKAGES_DIR=pio/packages
|
||||||
|
|
||||||
|
# Raspbian armhf builds should be compatible with armv6-hardfloat
|
||||||
|
# https://www.valvers.com/open-software/raspberry-pi/bare-metal-programming-in-c-part-1/#rpi1-compiler-flags
|
||||||
|
ifneq (,$(findstring Raspbian,$(shell lsb_release -is)))
|
||||||
|
ifeq ($(DEB_BUILD_ARCH),armhf)
|
||||||
|
PIO_ENV+=\
|
||||||
|
PLATFORMIO_BUILD_FLAGS="-mfloat-abi=hard -mfpu=vfp -march=armv6zk"
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
override_dh_auto_build:
|
override_dh_auto_build:
|
||||||
# Extract tarballs within source deb
|
# Extract tarballs within source deb
|
||||||
tar -xf pio.tar
|
tar -xf pio.tar
|
||||||
mkdir -p web && tar -xf web.tar -C web
|
mkdir -p web && tar -xf web.tar -C web
|
||||||
gunzip web/ -r
|
gunzip web/ -r
|
||||||
# Build with platformio
|
# Build with platformio
|
||||||
$(PIO_ENV) platformio run -e native
|
$(PIO_ENV) platformio run -e native-tft
|
||||||
# Move the binary and default config to the correct name
|
# Move the binary and default config to the correct name
|
||||||
mv .pio/build/native/program .pio/build/native/meshtasticd
|
mv .pio/build/native-tft/program .pio/build/native-tft/meshtasticd
|
||||||
cp bin/config-dist.yaml bin/config.yaml
|
cp bin/config-dist.yaml bin/config.yaml
|
||||||
|
|||||||
22
extra_scripts/extra_stm32.py
Executable file
22
extra_scripts/extra_stm32.py
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
# trunk-ignore-all(ruff/F821)
|
||||||
|
# trunk-ignore-all(flake8/F821): For SConstruct imports
|
||||||
|
|
||||||
|
Import("env")
|
||||||
|
# Custom HEX from ELF
|
||||||
|
env.AddPostAction(
|
||||||
|
"$BUILD_DIR/${PROGNAME}.elf",
|
||||||
|
env.VerboseAction(
|
||||||
|
" ".join(
|
||||||
|
[
|
||||||
|
"$OBJCOPY",
|
||||||
|
"-O",
|
||||||
|
"ihex",
|
||||||
|
"-R",
|
||||||
|
".eeprom",
|
||||||
|
"$BUILD_DIR/${PROGNAME}.elf",
|
||||||
|
"$BUILD_DIR/${PROGNAME}.hex",
|
||||||
|
]
|
||||||
|
),
|
||||||
|
"Building $BUILD_DIR/${PROGNAME}.hex",
|
||||||
|
),
|
||||||
|
)
|
||||||
@@ -21,7 +21,7 @@ Summary: Meshtastic daemon for communicating with Meshtastic devices
|
|||||||
License: GPL-3.0
|
License: GPL-3.0
|
||||||
URL: https://github.com/meshtastic/firmware
|
URL: https://github.com/meshtastic/firmware
|
||||||
Source0: {{{ git_dir_pack }}}
|
Source0: {{{ git_dir_pack }}}
|
||||||
Source1: https://github.com/meshtastic/web/releases/latest/download/build.tar
|
Source1: https://github.com/meshtastic/web/releases/download/v{{{ web_version }}}/build.tar
|
||||||
|
|
||||||
BuildRequires: systemd-rpm-macros
|
BuildRequires: systemd-rpm-macros
|
||||||
BuildRequires: python3-devel
|
BuildRequires: python3-devel
|
||||||
@@ -36,11 +36,16 @@ BuildRequires: pkgconfig(libgpiod)
|
|||||||
BuildRequires: pkgconfig(bluez)
|
BuildRequires: pkgconfig(bluez)
|
||||||
BuildRequires: pkgconfig(libusb-1.0)
|
BuildRequires: pkgconfig(libusb-1.0)
|
||||||
BuildRequires: libi2c-devel
|
BuildRequires: libi2c-devel
|
||||||
|
BuildRequires: pkgconfig(libuv)
|
||||||
# Web components:
|
# Web components:
|
||||||
BuildRequires: pkgconfig(openssl)
|
BuildRequires: pkgconfig(openssl)
|
||||||
BuildRequires: pkgconfig(liborcania)
|
BuildRequires: pkgconfig(liborcania)
|
||||||
BuildRequires: pkgconfig(libyder)
|
BuildRequires: pkgconfig(libyder)
|
||||||
BuildRequires: pkgconfig(libulfius)
|
BuildRequires: pkgconfig(libulfius)
|
||||||
|
# TFT components:
|
||||||
|
BuildRequires: pkgconfig(x11)
|
||||||
|
BuildRequires: pkgconfig(libinput)
|
||||||
|
BuildRequires: pkgconfig(xkbcommon-x11)
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Meshtastic daemon for controlling Meshtastic devices. Meshtastic is an off-grid
|
Meshtastic daemon for controlling Meshtastic devices. Meshtastic is an off-grid
|
||||||
@@ -54,12 +59,12 @@ tar -xf %{SOURCE1} -C web
|
|||||||
gzip -dr web
|
gzip -dr web
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# Use the “native” environment from platformio to build a Linux binary
|
# Use the “native-tft” environment from platformio to build a Linux binary
|
||||||
platformio run -e native
|
platformio run -e native-tft
|
||||||
|
|
||||||
%install
|
%install
|
||||||
mkdir -p %{buildroot}%{_sbindir}
|
mkdir -p %{buildroot}%{_sbindir}
|
||||||
install -m 0755 .pio/build/native/program %{buildroot}%{_sbindir}/meshtasticd
|
install -m 0755 .pio/build/native-tft/program %{buildroot}%{_sbindir}/meshtasticd
|
||||||
|
|
||||||
mkdir -p %{buildroot}%{_sysconfdir}/meshtasticd
|
mkdir -p %{buildroot}%{_sysconfdir}/meshtasticd
|
||||||
install -m 0644 bin/config-dist.yaml %{buildroot}%{_sysconfdir}/meshtasticd/config.yaml
|
install -m 0644 bin/config-dist.yaml %{buildroot}%{_sysconfdir}/meshtasticd/config.yaml
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
# trunk-ignore-all(bandit/B404): subprocess is used to call addr2line
|
||||||
|
# trunk-ignore-all(bandit/B603): subprocess is used to call addr2line
|
||||||
|
|
||||||
# Copyright (c) 2014-present PlatformIO <contact@platformio.org>
|
# Copyright (c) 2014-present PlatformIO <contact@platformio.org>
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
|||||||
120
platformio.ini
120
platformio.ini
@@ -7,6 +7,8 @@ default_envs = tbeam
|
|||||||
extra_configs =
|
extra_configs =
|
||||||
arch/*/*.ini
|
arch/*/*.ini
|
||||||
variants/*/platformio.ini
|
variants/*/platformio.ini
|
||||||
|
src/graphics/niche/InkHUD/PlatformioConfig.ini
|
||||||
|
|
||||||
description = Meshtastic
|
description = Meshtastic
|
||||||
|
|
||||||
[env]
|
[env]
|
||||||
@@ -48,18 +50,26 @@ build_flags = -Wno-missing-field-initializers
|
|||||||
-DMESHTASTIC_EXCLUDE_REMOTEHARDWARE=1
|
-DMESHTASTIC_EXCLUDE_REMOTEHARDWARE=1
|
||||||
-DMESHTASTIC_EXCLUDE_HEALTH_TELEMETRY=1
|
-DMESHTASTIC_EXCLUDE_HEALTH_TELEMETRY=1
|
||||||
-DMESHTASTIC_EXCLUDE_POWERSTRESS=1 ; exclude power stress test module from main firmware
|
-DMESHTASTIC_EXCLUDE_POWERSTRESS=1 ; exclude power stress test module from main firmware
|
||||||
|
-DMESHTASTIC_EXCLUDE_GENERIC_THREAD_MODULE=1
|
||||||
#-DBUILD_EPOCH=$UNIX_TIME
|
#-DBUILD_EPOCH=$UNIX_TIME
|
||||||
#-D OLED_PL=1
|
#-D OLED_PL=1
|
||||||
|
|
||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
monitor_filters = direct
|
monitor_filters = direct
|
||||||
lib_deps =
|
lib_deps =
|
||||||
https://github.com/meshtastic/esp8266-oled-ssd1306.git#e16cee124fe26490cb14880c679321ad8ac89c95
|
# renovate: datasource=git-refs depName=meshtastic-esp8266-oled-ssd1306 packageName=https://github.com/meshtastic/esp8266-oled-ssd1306 gitBranch=master
|
||||||
|
https://github.com/meshtastic/esp8266-oled-ssd1306/archive/0119501e9983bd894830b02f545c377ee08d66fe.zip
|
||||||
|
# renovate: datasource=custom.pio depName=OneButton packageName=mathertel/library/OneButton
|
||||||
mathertel/OneButton@2.6.1
|
mathertel/OneButton@2.6.1
|
||||||
https://github.com/meshtastic/arduino-fsm.git#7db3702bf0cfe97b783d6c72595e3f38e0b19159
|
# renovate: datasource=git-refs depName=meshtastic-arduino-fsm packageName=https://github.com/meshtastic/arduino-fsm gitBranch=master
|
||||||
https://github.com/meshtastic/TinyGPSPlus.git#71a82db35f3b973440044c476d4bcdc673b104f4
|
https://github.com/meshtastic/arduino-fsm/archive/7db3702bf0cfe97b783d6c72595e3f38e0b19159.zip
|
||||||
https://github.com/meshtastic/ArduinoThread.git#1ae8778c85d0a2a729f989e0b1e7d7c4dc84eef0
|
# renovate: datasource=git-refs depName=meshtastic-TinyGPSPlus packageName=https://github.com/meshtastic/TinyGPSPlus gitBranch=master
|
||||||
nanopb/Nanopb@0.4.9
|
https://github.com/meshtastic/TinyGPSPlus/archive/71a82db35f3b973440044c476d4bcdc673b104f4.zip
|
||||||
|
# renovate: datasource=git-refs depName=meshtastic-ArduinoThread packageName=https://github.com/meshtastic/ArduinoThread gitBranch=master
|
||||||
|
https://github.com/meshtastic/ArduinoThread/archive/7c3ee9e1951551b949763b1f5280f8db1fa4068d.zip
|
||||||
|
# renovate: datasource=custom.pio depName=Nanopb packageName=nanopb/library/Nanopb
|
||||||
|
nanopb/Nanopb@0.4.91
|
||||||
|
# renovate: datasource=custom.pio depName=ErriezCRC32 packageName=erriez/library/ErriezCRC32
|
||||||
erriez/ErriezCRC32@1.0.1
|
erriez/ErriezCRC32@1.0.1
|
||||||
|
|
||||||
; Used for the code analysis in PIO Home / Inspect
|
; Used for the code analysis in PIO Home / Inspect
|
||||||
@@ -75,59 +85,107 @@ check_flags =
|
|||||||
framework = arduino
|
framework = arduino
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
|
# renovate: datasource=custom.pio depName=NonBlockingRTTTL packageName=end2endzone/library/NonBlockingRTTTL
|
||||||
end2endzone/NonBlockingRTTTL@1.3.0
|
end2endzone/NonBlockingRTTTL@1.3.0
|
||||||
build_flags = ${env.build_flags} -Os
|
build_flags = ${env.build_flags} -Os
|
||||||
build_src_filter = ${env.build_src_filter} -<platform/portduino/>
|
build_src_filter = ${env.build_src_filter} -<platform/portduino/> -<graphics/niche/>
|
||||||
|
|
||||||
; Common libs for communicating over TCP/IP networks such as MQTT
|
; Common libs for communicating over TCP/IP networks such as MQTT
|
||||||
[networking_base]
|
[networking_base]
|
||||||
lib_deps =
|
lib_deps =
|
||||||
knolleary/PubSubClient@2.8
|
# renovate: datasource=custom.pio depName=TBPubSubClient packageName=thingsboard/library/TBPubSubClient
|
||||||
arduino-libraries/NTPClient@3.1.0
|
thingsboard/TBPubSubClient@2.12.1
|
||||||
|
# renovate: datasource=custom.pio depName=NTPClient packageName=arduino-libraries/library/NTPClient
|
||||||
|
arduino-libraries/NTPClient@3.2.1
|
||||||
|
# renovate: datasource=custom.pio depName=Syslog packageName=arcao/library/Syslog
|
||||||
arcao/Syslog@2.0.0
|
arcao/Syslog@2.0.0
|
||||||
|
|
||||||
[radiolib_base]
|
[radiolib_base]
|
||||||
lib_deps =
|
lib_deps =
|
||||||
|
# renovate: datasource=custom.pio depName=RadioLib packageName=jgromes/library/RadioLib
|
||||||
jgromes/RadioLib@7.1.2
|
jgromes/RadioLib@7.1.2
|
||||||
|
|
||||||
|
[device-ui_base]
|
||||||
|
lib_deps =
|
||||||
|
# renovate: datasource=git-refs depName=meshtastic/device-ui packageName=https://github.com/meshtastic/device-ui gitBranch=master
|
||||||
|
https://github.com/meshtastic/device-ui/archive/b9e2ad1222db9f5a5080248b2f018c250f0efae5.zip
|
||||||
|
|
||||||
; Common libs for environmental measurements in telemetry module
|
; Common libs for environmental measurements in telemetry module
|
||||||
; (not included in native / portduino)
|
|
||||||
[environmental_base]
|
[environmental_base]
|
||||||
lib_deps =
|
lib_deps =
|
||||||
adafruit/Adafruit BusIO@1.16.2
|
# renovate: datasource=custom.pio depName=Adafruit BusIO packageName=adafruit/library/Adafruit BusIO
|
||||||
adafruit/Adafruit Unified Sensor@1.1.14
|
adafruit/Adafruit BusIO@1.17.1
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit Unified Sensor packageName=adafruit/library/Adafruit Unified Sensor
|
||||||
|
adafruit/Adafruit Unified Sensor@1.1.15
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit BMP280 packageName=adafruit/library/Adafruit BMP280 Library
|
||||||
adafruit/Adafruit BMP280 Library@2.6.8
|
adafruit/Adafruit BMP280 Library@2.6.8
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit BMP085 packageName=adafruit/library/Adafruit BMP085 Library
|
||||||
adafruit/Adafruit BMP085 Library@1.2.4
|
adafruit/Adafruit BMP085 Library@1.2.4
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit BME280 packageName=adafruit/library/Adafruit BME280 Library
|
||||||
adafruit/Adafruit BME280 Library@2.2.4
|
adafruit/Adafruit BME280 Library@2.2.4
|
||||||
adafruit/Adafruit BMP3XX Library@2.1.5
|
# renovate: datasource=custom.pio depName=Adafruit DPS310 packageName=adafruit/library/Adafruit DPS310
|
||||||
|
adafruit/Adafruit DPS310@1.1.5
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit MCP9808 packageName=adafruit/library/Adafruit MCP9808 Library
|
||||||
adafruit/Adafruit MCP9808 Library@2.0.2
|
adafruit/Adafruit MCP9808 Library@2.0.2
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit INA260 packageName=adafruit/library/Adafruit INA260 Library
|
||||||
adafruit/Adafruit INA260 Library@1.5.2
|
adafruit/Adafruit INA260 Library@1.5.2
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit INA219 packageName=adafruit/library/Adafruit INA219
|
||||||
adafruit/Adafruit INA219@1.2.3
|
adafruit/Adafruit INA219@1.2.3
|
||||||
adafruit/Adafruit MAX1704X@1.0.3
|
# renovate: datasource=custom.pio depName=Adafruit PM25 AQI Sensor packageName=adafruit/library/Adafruit PM25 AQI Sensor
|
||||||
adafruit/Adafruit SHTC3 Library@1.0.1
|
adafruit/Adafruit PM25 AQI Sensor@1.2.0
|
||||||
adafruit/Adafruit LPS2X@2.0.6
|
# renovate: datasource=custom.pio depName=Adafruit MPU6050 packageName=adafruit/library/Adafruit MPU6050
|
||||||
adafruit/Adafruit SHT31 Library@2.2.2
|
|
||||||
adafruit/Adafruit PM25 AQI Sensor@1.1.1
|
|
||||||
adafruit/Adafruit MPU6050@2.2.6
|
adafruit/Adafruit MPU6050@2.2.6
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit LIS3DH packageName=adafruit/library/Adafruit LIS3DH
|
||||||
adafruit/Adafruit LIS3DH@1.3.0
|
adafruit/Adafruit LIS3DH@1.3.0
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit AHTX0 packageName=adafruit/library/Adafruit AHTX0
|
||||||
adafruit/Adafruit AHTX0@2.0.5
|
adafruit/Adafruit AHTX0@2.0.5
|
||||||
adafruit/Adafruit LSM6DS@4.7.3
|
# renovate: datasource=custom.pio depName=Adafruit LSM6DS packageName=adafruit/library/Adafruit LSM6DS
|
||||||
adafruit/Adafruit VEML7700 Library@2.1.6
|
adafruit/Adafruit LSM6DS@4.7.4
|
||||||
adafruit/Adafruit SHT4x Library@1.0.5
|
# renovate: datasource=custom.pio depName=Adafruit TSL2591 packageName=adafruit/library/Adafruit TSL2591 Library
|
||||||
adafruit/Adafruit TSL2591 Library@1.4.5
|
adafruit/Adafruit TSL2591 Library@1.4.5
|
||||||
sparkfun/SparkFun Qwiic Scale NAU7802 Arduino Library@1.0.6
|
# renovate: datasource=custom.pio depName=EmotiBit MLX90632 packageName=emotibit/library/EmotiBit MLX90632
|
||||||
sparkfun/SparkFun 9DoF IMU Breakout - ICM 20948 - Arduino Library@1.2.13
|
|
||||||
ClosedCube OPT3001@1.1.2
|
|
||||||
emotibit/EmotiBit MLX90632@1.0.8
|
emotibit/EmotiBit MLX90632@1.0.8
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit MLX90614 packageName=adafruit/library/Adafruit MLX90614 Library
|
||||||
adafruit/Adafruit MLX90614 Library@2.1.5
|
adafruit/Adafruit MLX90614 Library@2.1.5
|
||||||
https://github.com/boschsensortec/Bosch-BSEC2-Library#v1.7.2502
|
# renovate: datasource=custom.pio depName=Bosch BME68x packageName=boschsensortec/library/BME68x Sensor Library
|
||||||
boschsensortec/BME68x Sensor Library@1.1.40407
|
boschsensortec/BME68x Sensor Library@1.2.40408
|
||||||
https://github.com/KodinLanewave/INA3221@1.0.1
|
# renovate: datasource=github-tags depName=INA3221 packageName=KodinLanewave/INA3221
|
||||||
|
https://github.com/KodinLanewave/INA3221/archive/1.0.1.zip
|
||||||
|
# renovate: datasource=custom.pio depName=QMC5883L Compass packageName=mprograms/library/QMC5883LCompass
|
||||||
mprograms/QMC5883LCompass@1.2.3
|
mprograms/QMC5883LCompass@1.2.3
|
||||||
|
# renovate: datasource=custom.pio depName=DFRobot_RTU packageName=dfrobot/library/DFRobot_RTU
|
||||||
dfrobot/DFRobot_RTU@1.0.3
|
dfrobot/DFRobot_RTU@1.0.3
|
||||||
https://github.com/meshtastic/DFRobot_LarkWeatherStation#4de3a9cadef0f6a5220a8a906cf9775b02b0040d
|
# renovate: datasource=git-refs depName=DFRobot_RainfallSensor packageName=https://github.com/DFRobot/DFRobot_RainfallSensor gitBranch=master
|
||||||
https://github.com/DFRobot/DFRobot_RainfallSensor#38fea5e02b40a5430be6dab39a99a6f6347d667e
|
https://github.com/DFRobot/DFRobot_RainfallSensor/archive/38fea5e02b40a5430be6dab39a99a6f6347d667e.zip
|
||||||
robtillaart/INA226@0.6.0
|
# renovate: datasource=custom.pio depName=INA226 packageName=robtillaart/library/INA226
|
||||||
|
robtillaart/INA226@0.6.4
|
||||||
; Health Sensor Libraries
|
# renovate: datasource=custom.pio depName=SparkFun MAX3010x packageName=sparkfun/library/SparkFun MAX3010x Pulse and Proximity Sensor Library
|
||||||
sparkfun/SparkFun MAX3010x Pulse and Proximity Sensor Library@1.1.2
|
sparkfun/SparkFun MAX3010x Pulse and Proximity Sensor Library@1.1.2
|
||||||
|
|
||||||
|
; (not included in native / portduino)
|
||||||
|
[environmental_extra]
|
||||||
|
lib_deps =
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit BMP3XX packageName=adafruit/library/Adafruit BMP3XX Library
|
||||||
|
adafruit/Adafruit BMP3XX Library@2.1.6
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit MAX1704X packageName=adafruit/library/Adafruit MAX1704X
|
||||||
|
adafruit/Adafruit MAX1704X@1.0.3
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit SHTC3 packageName=adafruit/library/Adafruit SHTC3 Library
|
||||||
|
adafruit/Adafruit SHTC3 Library@1.0.1
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit LPS2X packageName=adafruit/library/Adafruit LPS2X
|
||||||
|
adafruit/Adafruit LPS2X@2.0.6
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit SHT31 packageName=adafruit/library/Adafruit SHT31 Library
|
||||||
|
adafruit/Adafruit SHT31 Library@2.2.2
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit VEML7700 packageName=adafruit/library/Adafruit VEML7700 Library
|
||||||
|
adafruit/Adafruit VEML7700 Library@2.1.6
|
||||||
|
# renovate: datasource=custom.pio depName=Adafruit SHT4x packageName=adafruit/library/Adafruit SHT4x Library
|
||||||
|
adafruit/Adafruit SHT4x Library@1.0.5
|
||||||
|
# renovate: datasource=custom.pio depName=SparkFun Qwiic Scale NAU7802 packageName=sparkfun/library/SparkFun Qwiic Scale NAU7802 Arduino Library
|
||||||
|
sparkfun/SparkFun Qwiic Scale NAU7802 Arduino Library@1.0.6
|
||||||
|
# renovate: datasource=custom.pio depName=SparkFun 9DoF IMU Breakout ICM 20948 packageName=sparkfun/library/SparkFun 9DoF IMU Breakout - ICM 20948 - Arduino Library
|
||||||
|
sparkfun/SparkFun 9DoF IMU Breakout - ICM 20948 - Arduino Library@1.3.0
|
||||||
|
# renovate: datasource=custom.pio depName=ClosedCube OPT3001 packageName=closedcube/library/ClosedCube OPT3001
|
||||||
|
ClosedCube OPT3001@1.1.2
|
||||||
|
# renovate: datasource=git-refs depName=Bosch BSEC2 packageName=https://github.com/meshtastic/Bosch-BSEC2-Library gitBranch=extra_script
|
||||||
|
https://github.com/meshtastic/Bosch-BSEC2-Library/archive/e16952dfe5addd4287e1eb8c4f6ecac0fa3dd3de.zip
|
||||||
|
# renovate: datasource=git-refs depName=meshtastic-DFRobot_LarkWeatherStation packageName=https://github.com/meshtastic/DFRobot_LarkWeatherStation gitBranch=master
|
||||||
|
https://github.com/meshtastic/DFRobot_LarkWeatherStation/archive/4de3a9cadef0f6a5220a8a906cf9775b02b0040d.zip
|
||||||
|
|||||||
Submodule protobufs updated: 068646653e...078ac8dfbe
79
renovate.json
Normal file
79
renovate.json
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
|
"extends": [
|
||||||
|
":dependencyDashboard",
|
||||||
|
":semanticCommitTypeAll(chore)",
|
||||||
|
":ignoreModulesAndTests",
|
||||||
|
"group:recommended",
|
||||||
|
"replacements:all",
|
||||||
|
"workarounds:all"
|
||||||
|
],
|
||||||
|
"forkProcessing": "enabled",
|
||||||
|
"ignoreDeps": ["protobufs"],
|
||||||
|
"git-submodules": {
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
"pip_requirements": {
|
||||||
|
"fileMatch": ["bin/bump_metainfo/requirements.txt"]
|
||||||
|
},
|
||||||
|
"commitMessageTopic": "{{depName}}",
|
||||||
|
"labels": ["dependencies"],
|
||||||
|
"customDatasources": {
|
||||||
|
"pio": {
|
||||||
|
"description": "PlatformIO Registry",
|
||||||
|
"defaultRegistryUrlTemplate": "https://api.registry.platformio.org/v3/packages/{{packageName}}",
|
||||||
|
"format": "json",
|
||||||
|
"transformTemplates": [
|
||||||
|
"{\"releases\": [$map($.versions, function($v) { { \"version\": $v.name, \"releaseTimestamp\": $v.released_at } })], \"homepage\": $encodeUrl($join([\"https://registry.platformio.org/\",$.type,\"/\",$.owner.username,\"/\",$.name])) }"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"customManagers": [
|
||||||
|
{
|
||||||
|
"customType": "regex",
|
||||||
|
"description": "Match meshtastic/web version",
|
||||||
|
"fileMatch": ["bin/web.version"],
|
||||||
|
"matchStrings": ["(?<currentValue>.+)$"],
|
||||||
|
"datasourceTemplate": "github-releases",
|
||||||
|
"depNameTemplate": "meshtastic/web",
|
||||||
|
"versioningTemplate": "semver-coerced"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"customType": "regex",
|
||||||
|
"description": "Match normal PIO dependencies",
|
||||||
|
"fileMatch": [".*\\.ini$"],
|
||||||
|
"matchStrings": [
|
||||||
|
"# renovate: datasource=(?<datasource>.*?)(?: depName=(?<depName>.+?))? packageName=(?<packageName>.+?)(?: versioning=(?<versioning>[a-z-]+?))?\\s+?.+?@(?<currentValue>.+?)\\s"
|
||||||
|
],
|
||||||
|
"versioningTemplate": "{{#if versioning}}{{{versioning}}}{{else}}semver-coerced{{/if}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"customType": "regex",
|
||||||
|
"description": "Match PIO zipped dependencies with github tag ref",
|
||||||
|
"fileMatch": [".*\\.ini$"],
|
||||||
|
"matchStrings": [
|
||||||
|
"# renovate: datasource=github-tags(?: depName=(?<depName>.+?))? packageName=(?<packageName>.+?)(?: versioning=(?<versioning>[a-z-]+?))?\\s+?https:\/\/.+?archive\/(?<currentValue>.+?).zip\\s"
|
||||||
|
],
|
||||||
|
"datasourceTemplate": "github-tags",
|
||||||
|
"versioningTemplate": "{{#if versioning}}{{{versioning}}}{{else}}semver-coerced{{/if}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"customType": "regex",
|
||||||
|
"description": "Match PIO zipped dependencies with git commit ref",
|
||||||
|
"fileMatch": [".*\\.ini$"],
|
||||||
|
"matchStrings": [
|
||||||
|
"# renovate: datasource=git-refs(?: depName=(?<depName>.+?))? packageName=(?<packageName>.+?)(?: versioning=(?<versioning>[a-z-]+?))?\\sgitBranch=(?<gitBranch>.+?)\\s+?https:\/\/.+?archive\/(?<currentDigest>.+?).zip\\s"
|
||||||
|
],
|
||||||
|
"datasourceTemplate": "git-refs",
|
||||||
|
"currentValueTemplate": "{{{gitBranch}}}",
|
||||||
|
"versioningTemplate": "{{#if versioning}}{{{versioning}}}{{else}}git{{/if}}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packageRules": [
|
||||||
|
{
|
||||||
|
"matchPackageNames": ["meshtastic/device-ui"],
|
||||||
|
"reviewers": ["mverch67"],
|
||||||
|
"changelogUrl": "https://github.com/meshtastic/device-ui/compare/{{currentDigest}}...{{newDigest}}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -6,6 +6,11 @@
|
|||||||
NCP5623 rgb;
|
NCP5623 rgb;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAS_LP5562
|
||||||
|
#include <graphics/NomadStarLED.h>
|
||||||
|
LP5562 rgbw;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAS_NEOPIXEL
|
#ifdef HAS_NEOPIXEL
|
||||||
#include <graphics/NeoPixel.h>
|
#include <graphics/NeoPixel.h>
|
||||||
Adafruit_NeoPixel pixels(NEOPIXEL_COUNT, NEOPIXEL_DATA, NEOPIXEL_TYPE);
|
Adafruit_NeoPixel pixels(NEOPIXEL_COUNT, NEOPIXEL_DATA, NEOPIXEL_TYPE);
|
||||||
@@ -26,7 +31,7 @@ class AmbientLightingThread : public concurrency::OSThread
|
|||||||
notifyDeepSleepObserver.observe(¬ifyDeepSleep); // Let us know when shutdown() is issued.
|
notifyDeepSleepObserver.observe(¬ifyDeepSleep); // Let us know when shutdown() is issued.
|
||||||
|
|
||||||
// Enables Ambient Lighting by default if conditions are meet.
|
// Enables Ambient Lighting by default if conditions are meet.
|
||||||
#if defined(HAS_NCP5623) || defined(RGBLED_RED) || defined(HAS_NEOPIXEL) || defined(UNPHONE)
|
#ifdef HAS_RGB_LED
|
||||||
#ifdef ENABLE_AMBIENTLIGHTING
|
#ifdef ENABLE_AMBIENTLIGHTING
|
||||||
moduleConfig.ambient_lighting.led_state = true;
|
moduleConfig.ambient_lighting.led_state = true;
|
||||||
#endif
|
#endif
|
||||||
@@ -39,7 +44,7 @@ class AmbientLightingThread : public concurrency::OSThread
|
|||||||
// moduleConfig.ambient_lighting.green = (myNodeInfo.my_node_num & 0x00FF00) >> 8;
|
// moduleConfig.ambient_lighting.green = (myNodeInfo.my_node_num & 0x00FF00) >> 8;
|
||||||
// moduleConfig.ambient_lighting.blue = myNodeInfo.my_node_num & 0x0000FF;
|
// moduleConfig.ambient_lighting.blue = myNodeInfo.my_node_num & 0x0000FF;
|
||||||
|
|
||||||
#ifdef HAS_NCP5623
|
#if defined(HAS_NCP5623) || defined(HAS_LP5562)
|
||||||
_type = type;
|
_type = type;
|
||||||
if (_type == ScanI2C::DeviceType::NONE) {
|
if (_type == ScanI2C::DeviceType::NONE) {
|
||||||
LOG_DEBUG("AmbientLighting Disable due to no RGB leds found on I2C bus");
|
LOG_DEBUG("AmbientLighting Disable due to no RGB leds found on I2C bus");
|
||||||
@@ -47,17 +52,21 @@ class AmbientLightingThread : public concurrency::OSThread
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if defined(HAS_NCP5623) || defined(RGBLED_RED) || defined(HAS_NEOPIXEL) || defined(UNPHONE)
|
#ifdef HAS_RGB_LED
|
||||||
if (!moduleConfig.ambient_lighting.led_state) {
|
if (!moduleConfig.ambient_lighting.led_state) {
|
||||||
LOG_DEBUG("AmbientLighting Disable due to moduleConfig.ambient_lighting.led_state OFF");
|
LOG_DEBUG("AmbientLighting Disable due to moduleConfig.ambient_lighting.led_state OFF");
|
||||||
disable();
|
disable();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
LOG_DEBUG("AmbientLighting init");
|
LOG_DEBUG("AmbientLighting init");
|
||||||
#ifdef HAS_NCP5623
|
#if defined(HAS_NCP5623) || defined(HAS_LP5562)
|
||||||
if (_type == ScanI2C::NCP5623) {
|
if (_type == ScanI2C::NCP5623) {
|
||||||
rgb.begin();
|
rgb.begin();
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAS_LP5562
|
||||||
|
} else if (_type == ScanI2C::LP5562) {
|
||||||
|
rgbw.begin();
|
||||||
|
#endif
|
||||||
#ifdef RGBLED_RED
|
#ifdef RGBLED_RED
|
||||||
pinMode(RGBLED_RED, OUTPUT);
|
pinMode(RGBLED_RED, OUTPUT);
|
||||||
pinMode(RGBLED_GREEN, OUTPUT);
|
pinMode(RGBLED_GREEN, OUTPUT);
|
||||||
@@ -70,7 +79,7 @@ class AmbientLightingThread : public concurrency::OSThread
|
|||||||
#endif
|
#endif
|
||||||
setLighting();
|
setLighting();
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAS_NCP5623
|
#if defined(HAS_NCP5623) || defined(HAS_LP5562)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -78,13 +87,13 @@ class AmbientLightingThread : public concurrency::OSThread
|
|||||||
protected:
|
protected:
|
||||||
int32_t runOnce() override
|
int32_t runOnce() override
|
||||||
{
|
{
|
||||||
#if defined(HAS_NCP5623) || defined(RGBLED_RED) || defined(HAS_NEOPIXEL) || defined(UNPHONE)
|
#ifdef HAS_RGB_LED
|
||||||
#ifdef HAS_NCP5623
|
#if defined(HAS_NCP5623) || defined(HAS_LP5562)
|
||||||
if (_type == ScanI2C::NCP5623 && moduleConfig.ambient_lighting.led_state) {
|
if ((_type == ScanI2C::NCP5623 || _type == ScanI2C::LP5562) && moduleConfig.ambient_lighting.led_state) {
|
||||||
#endif
|
#endif
|
||||||
setLighting();
|
setLighting();
|
||||||
return 30000; // 30 seconds to reset from any animations that may have been running from Ext. Notification
|
return 30000; // 30 seconds to reset from any animations that may have been running from Ext. Notification
|
||||||
#ifdef HAS_NCP5623
|
#if defined(HAS_NCP5623) || defined(HAS_LP5562)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -108,6 +117,14 @@ class AmbientLightingThread : public concurrency::OSThread
|
|||||||
rgb.setBlue(0);
|
rgb.setBlue(0);
|
||||||
LOG_INFO("OFF: NCP5623 Ambient lighting");
|
LOG_INFO("OFF: NCP5623 Ambient lighting");
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAS_LP5562
|
||||||
|
rgbw.setCurrent(0);
|
||||||
|
rgbw.setRed(0);
|
||||||
|
rgbw.setGreen(0);
|
||||||
|
rgbw.setBlue(0);
|
||||||
|
rgbw.setWhite(0);
|
||||||
|
LOG_INFO("OFF: LP5562 Ambient lighting");
|
||||||
|
#endif
|
||||||
#ifdef HAS_NEOPIXEL
|
#ifdef HAS_NEOPIXEL
|
||||||
pixels.clear();
|
pixels.clear();
|
||||||
pixels.show();
|
pixels.show();
|
||||||
@@ -141,6 +158,14 @@ class AmbientLightingThread : public concurrency::OSThread
|
|||||||
LOG_DEBUG("Init NCP5623 Ambient light w/ current=%d, red=%d, green=%d, blue=%d", moduleConfig.ambient_lighting.current,
|
LOG_DEBUG("Init NCP5623 Ambient light w/ current=%d, red=%d, green=%d, blue=%d", moduleConfig.ambient_lighting.current,
|
||||||
moduleConfig.ambient_lighting.red, moduleConfig.ambient_lighting.green, moduleConfig.ambient_lighting.blue);
|
moduleConfig.ambient_lighting.red, moduleConfig.ambient_lighting.green, moduleConfig.ambient_lighting.blue);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAS_LP5562
|
||||||
|
rgbw.setCurrent(moduleConfig.ambient_lighting.current);
|
||||||
|
rgbw.setRed(moduleConfig.ambient_lighting.red);
|
||||||
|
rgbw.setGreen(moduleConfig.ambient_lighting.green);
|
||||||
|
rgbw.setBlue(moduleConfig.ambient_lighting.blue);
|
||||||
|
LOG_DEBUG("Init LP5562 Ambient light w/ current=%d, red=%d, green=%d, blue=%d", moduleConfig.ambient_lighting.current,
|
||||||
|
moduleConfig.ambient_lighting.red, moduleConfig.ambient_lighting.green, moduleConfig.ambient_lighting.blue);
|
||||||
|
#endif
|
||||||
#ifdef HAS_NEOPIXEL
|
#ifdef HAS_NEOPIXEL
|
||||||
pixels.fill(pixels.Color(moduleConfig.ambient_lighting.red, moduleConfig.ambient_lighting.green,
|
pixels.fill(pixels.Color(moduleConfig.ambient_lighting.red, moduleConfig.ambient_lighting.green,
|
||||||
moduleConfig.ambient_lighting.blue),
|
moduleConfig.ambient_lighting.blue),
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user