mirror of
https://github.com/meshtastic/firmware.git
synced 2025-12-20 17:52:35 +00:00
Compare commits
12 Commits
multicast-
...
v2.6.2.31c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
31c0e8fa2c | ||
|
|
0d95b1afcc | ||
|
|
46235f6f8b | ||
|
|
d1068fd1e4 | ||
|
|
f41afb14b1 | ||
|
|
f8ad02aab3 | ||
|
|
077759e15d | ||
|
|
22aa2d7582 | ||
|
|
6673cb9292 | ||
|
|
8efc9702d3 | ||
|
|
2876eec7ed | ||
|
|
9cc13e628a |
2
.github/actions/setup-base/action.yml
vendored
2
.github/actions/setup-base/action.yml
vendored
@@ -20,7 +20,7 @@ runs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get -y update --fix-missing
|
sudo apt-get -y update --fix-missing
|
||||||
sudo apt-get install -y cppcheck libbluetooth-dev libgpiod-dev libyaml-cpp-dev libuv1-dev lsb-release
|
sudo apt-get install -y cppcheck libbluetooth-dev libgpiod-dev libyaml-cpp-dev lsb-release
|
||||||
|
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
|
|||||||
@@ -10,13 +10,13 @@ lint:
|
|||||||
enabled:
|
enabled:
|
||||||
- prettier@3.5.3
|
- prettier@3.5.3
|
||||||
- trufflehog@3.88.17
|
- trufflehog@3.88.17
|
||||||
- yamllint@1.36.0
|
- yamllint@1.36.2
|
||||||
- bandit@1.8.3
|
- bandit@1.8.3
|
||||||
- checkov@3.2.386
|
- checkov@3.2.386
|
||||||
- terrascan@1.19.9
|
- terrascan@1.19.9
|
||||||
- trivy@0.60.0
|
- trivy@0.60.0
|
||||||
- taplo@0.9.3
|
- taplo@0.9.3
|
||||||
- ruff@0.10.0
|
- ruff@0.11.0
|
||||||
- isort@6.0.1
|
- isort@6.0.1
|
||||||
- markdownlint@0.44.0
|
- markdownlint@0.44.0
|
||||||
- oxipng@9.1.4
|
- oxipng@9.1.4
|
||||||
|
|||||||
@@ -17,7 +17,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>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
; 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/Jorropo/platform-native.git#17fa89daec4402af491512f75278a7fec8a5818c
|
platform = https://github.com/meshtastic/platform-native.git#df71ed0040e9aad767a002829330965b78fc452a
|
||||||
framework = arduino
|
framework = arduino
|
||||||
|
|
||||||
build_src_filter =
|
build_src_filter =
|
||||||
|
|||||||
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
|
||||||
@@ -7,12 +7,19 @@ SET "DEBUG=0"
|
|||||||
SET "PYTHON="
|
SET "PYTHON="
|
||||||
SET "WEB_APP=0"
|
SET "WEB_APP=0"
|
||||||
SET "TFT_BUILD=0"
|
SET "TFT_BUILD=0"
|
||||||
SET "TFT8=0"
|
SET "BIGDB8=0"
|
||||||
SET "TFT16=0"
|
SET "BIGDB16=0"
|
||||||
SET "ESPTOOL_BAUD=115200"
|
SET "ESPTOOL_BAUD=115200"
|
||||||
SET "ESPTOOL_CMD="
|
SET "ESPTOOL_CMD="
|
||||||
SET "LOGCOUNTER=0"
|
SET "LOGCOUNTER=0"
|
||||||
|
|
||||||
|
@REM FIXME: Determine mcu from PlatformIO variant, this is unmaintainable.
|
||||||
|
SET "S3=s3 v3 t-deck wireless-paper wireless-tracker station-g2 unphone"
|
||||||
|
SET "C3=esp32c3"
|
||||||
|
@REM FIXME: Determine flash size from PlatformIO variant, this is unmaintainable.
|
||||||
|
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 "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 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.
|
||||||
@@ -34,7 +41,7 @@ ECHO Example: %SCRIPT_NAME% -f firmware-unphone-2.6.0.0b106d4.bin -p COM11 --web
|
|||||||
GOTO eof
|
GOTO eof
|
||||||
|
|
||||||
:version
|
:version
|
||||||
ECHO %SCRIPT_NAME% [Version 2.6.0]
|
ECHO %SCRIPT_NAME% [Version 2.6.1]
|
||||||
ECHO Meshtastic
|
ECHO Meshtastic
|
||||||
GOTO eof
|
GOTO eof
|
||||||
|
|
||||||
@@ -106,7 +113,7 @@ IF NOT "__%PYTHON%__"=="____" (
|
|||||||
|
|
||||||
CALL :LOG_MESSAGE DEBUG "Checking esptool command !ESPTOOL_CMD!..."
|
CALL :LOG_MESSAGE DEBUG "Checking esptool command !ESPTOOL_CMD!..."
|
||||||
!ESPTOOL_CMD! >nul 2>&1
|
!ESPTOOL_CMD! >nul 2>&1
|
||||||
IF %ERRORLEVEL% GTR 2 (
|
IF %ERRORLEVEL% GEQ 2 (
|
||||||
@REM esptool exits with code 1 if help is displayed.
|
@REM esptool exits with code 1 if help is displayed.
|
||||||
CALL :LOG_MESSAGE ERROR "esptool not found: !ESPTOOL_CMD!"
|
CALL :LOG_MESSAGE ERROR "esptool not found: !ESPTOOL_CMD!"
|
||||||
EXIT /B 1
|
EXIT /B 1
|
||||||
@@ -121,6 +128,7 @@ CALL :LOG_MESSAGE DEBUG "Using esptool command: !ESPTOOL_CMD!"
|
|||||||
IF "__!ESPTOOL_PORT!__" == "____" (
|
IF "__!ESPTOOL_PORT!__" == "____" (
|
||||||
CALL :LOG_MESSAGE WARN "Using esptool port: UNSET."
|
CALL :LOG_MESSAGE WARN "Using esptool port: UNSET."
|
||||||
) ELSE (
|
) ELSE (
|
||||||
|
SET "ESPTOOL_CMD=!ESPTOOL_CMD! --port !ESPTOOL_PORT!"
|
||||||
CALL :LOG_MESSAGE INFO "Using esptool port: !ESPTOOL_PORT!."
|
CALL :LOG_MESSAGE INFO "Using esptool port: !ESPTOOL_PORT!."
|
||||||
)
|
)
|
||||||
CALL :LOG_MESSAGE INFO "Using esptool baud: !ESPTOOL_BAUD!."
|
CALL :LOG_MESSAGE INFO "Using esptool baud: !ESPTOOL_BAUD!."
|
||||||
@@ -133,44 +141,36 @@ IF NOT "!FILENAME:-tft-=!"=="!FILENAME!" (
|
|||||||
CALL :LOG_MESSAGE ERROR "Cannot enable WebUI (--web) and MUI." & GOTO eof
|
CALL :LOG_MESSAGE ERROR "Cannot enable WebUI (--web) and MUI." & GOTO eof
|
||||||
)
|
)
|
||||||
SET "TFT_BUILD=1"
|
SET "TFT_BUILD=1"
|
||||||
GOTO tft
|
|
||||||
) ELSE (
|
) ELSE (
|
||||||
CALL :LOG_MESSAGE DEBUG "We are NOT working with a *-tft-* file. !FILENAME!"
|
CALL :LOG_MESSAGE DEBUG "We are NOT working with a *-tft-* file. !FILENAME!"
|
||||||
GOTO no_tft
|
|
||||||
)
|
)
|
||||||
|
|
||||||
:tft
|
FOR %%a IN (%BIGDB_8MB%) DO (
|
||||||
SET "TFT8MB=picomputer-s3 unphone seeed-sensecap-indicator"
|
|
||||||
FOR %%a IN (%TFT8MB%) DO (
|
|
||||||
IF NOT "!FILENAME:%%a=!"=="!FILENAME!" (
|
IF NOT "!FILENAME:%%a=!"=="!FILENAME!" (
|
||||||
@REM We are working with any of %TFT8MB%.
|
@REM We are working with any of %BIGDB_8MB%.
|
||||||
SET "TFT8=1"
|
SET "BIGDB8=1"
|
||||||
GOTO end_loop_tft8mb
|
GOTO end_loop_bigdb_8mb
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
:end_loop_tft8mb
|
:end_loop_bigdb_8mb
|
||||||
|
|
||||||
SET "TFT16MB=t-deck"
|
FOR %%a IN (%BIGDB_16MB%) DO (
|
||||||
FOR %%a IN (%TFT16MB%) DO (
|
|
||||||
IF NOT "!FILENAME:%%a=!"=="!FILENAME!" (
|
IF NOT "!FILENAME:%%a=!"=="!FILENAME!" (
|
||||||
@REM We are working with any of %TFT16MB%.
|
@REM We are working with any of %BIGDB_16MB%.
|
||||||
SET "TFT16=1"
|
SET "BIGDB16=1"
|
||||||
GOTO end_loop_tft16mb
|
GOTO end_loop_bigdb_16mb
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
:end_loop_tft16mb
|
:end_loop_bigdb_16mb
|
||||||
|
|
||||||
IF %TFT8% EQU 1 CALL :LOG_MESSAGE INFO "tft and MUI 8mb selected."
|
IF %BIGDB8% EQU 1 CALL :LOG_MESSAGE INFO "BigDB 8mb partition selected."
|
||||||
IF %TFT16% EQU 1 CALL :LOG_MESSAGE INFO "tft and MUI 16mb selected."
|
IF %BIGDB16% EQU 1 CALL :LOG_MESSAGE INFO "BigDB 16mb partition selected."
|
||||||
|
|
||||||
:no_tft
|
|
||||||
|
|
||||||
@REM Extract BASENAME from %FILENAME% for later use.
|
@REM Extract BASENAME from %FILENAME% for later use.
|
||||||
SET "BASENAME=!FILENAME:firmware-=!"
|
SET "BASENAME=!FILENAME:firmware-=!"
|
||||||
CALL :LOG_MESSAGE DEBUG "Computed firmware basename: !BASENAME!"
|
CALL :LOG_MESSAGE DEBUG "Computed firmware basename: !BASENAME!"
|
||||||
|
|
||||||
@REM Account for S3 and C3 board's different OTA partition.
|
@REM Account for S3 and C3 board's different OTA partition.
|
||||||
SET "S3=s3 v3 t-deck wireless-paper wireless-tracker station-g2 unphone"
|
|
||||||
FOR %%a IN (%S3%) DO (
|
FOR %%a IN (%S3%) DO (
|
||||||
IF NOT "!FILENAME:%%a=!"=="!FILENAME!" (
|
IF NOT "!FILENAME:%%a=!"=="!FILENAME!" (
|
||||||
@REM We are working with any of %S3%.
|
@REM We are working with any of %S3%.
|
||||||
@@ -179,7 +179,6 @@ FOR %%a IN (%S3%) DO (
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
SET "C3=esp32c3"
|
|
||||||
FOR %%a IN (%C3%) DO (
|
FOR %%a IN (%C3%) DO (
|
||||||
IF NOT "!FILENAME:%%a=!"=="!FILENAME!" (
|
IF NOT "!FILENAME:%%a=!"=="!FILENAME!" (
|
||||||
@REM We are working with any of %C3%.
|
@REM We are working with any of %C3%.
|
||||||
@@ -208,14 +207,14 @@ CALL :LOG_MESSAGE DEBUG "Set SPIFFS_FILENAME to: !SPIFFS_FILENAME!"
|
|||||||
SET "OTA_OFFSET=0x260000"
|
SET "OTA_OFFSET=0x260000"
|
||||||
SET "SPIFFS_OFFSET=0x300000"
|
SET "SPIFFS_OFFSET=0x300000"
|
||||||
|
|
||||||
@REM Offsets for MUI 8mb.
|
@REM Offsets for BigDB 8mb.
|
||||||
IF %TFT8% EQU 1 IF %TFT_BUILD% EQU 1 (
|
IF %BIGDB8% EQU 1 (
|
||||||
SET "OTA_OFFSET=0x340000"
|
SET "OTA_OFFSET=0x340000"
|
||||||
SET "SPIFFS_OFFSET=0x670000"
|
SET "SPIFFS_OFFSET=0x670000"
|
||||||
)
|
)
|
||||||
|
|
||||||
@REM Offsets for MUI 16mb.
|
@REM Offsets for BigDB 16mb.
|
||||||
IF %TFT16% EQU 1 IF %TFT_BUILD% EQU 1 (
|
IF %BIGDB16% EQU 1 (
|
||||||
SET "OTA_OFFSET=0x650000"
|
SET "OTA_OFFSET=0x650000"
|
||||||
SET "SPIFFS_OFFSET=0xc90000"
|
SET "SPIFFS_OFFSET=0xc90000"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -2,9 +2,48 @@
|
|||||||
|
|
||||||
PYTHON=${PYTHON:-$(which python3 python | head -n 1)}
|
PYTHON=${PYTHON:-$(which python3 python | head -n 1)}
|
||||||
WEB_APP=false
|
WEB_APP=false
|
||||||
TFT8=false
|
|
||||||
TFT16=false
|
|
||||||
TFT_BUILD=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
|
||||||
@@ -42,8 +81,8 @@ while [ $# -gt 0 ]; do
|
|||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
-p)
|
-p)
|
||||||
ESPTOOL_PORT="$2"
|
ESPTOOL_CMD="$ESPTOOL_CMD --port $2"
|
||||||
shift # Shift past the option argument
|
shift
|
||||||
;;
|
;;
|
||||||
-P)
|
-P)
|
||||||
PYTHON="$2"
|
PYTHON="$2"
|
||||||
@@ -78,21 +117,13 @@ if [[ $FILENAME != firmware-* ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check if FILENAME contains "-tft-" and set target partitionScheme accordingly.
|
# Check if FILENAME contains "-tft-" and prevent web/mui comingling.
|
||||||
if [[ ${FILENAME//-tft-/} != "$FILENAME" ]]; then
|
if [[ ${FILENAME//-tft-/} != "$FILENAME" ]]; then
|
||||||
TFT_BUILD=true
|
TFT_BUILD=true
|
||||||
if [[ $WEB_APP == true ]] && [[ $TFT_BUILD == true ]]; then
|
if [[ $WEB_APP == true ]] && [[ $TFT_BUILD == true ]]; then
|
||||||
echo "Cannot enable WebUI (--web) and MUI."
|
echo "Cannot enable WebUI (--web) and MUI."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $FILENAME == *"picomputer-s3"* || $FILENAME == *"unphone"* || $FILENAME == *"seeed-sensecap-indicator"* ]]; then
|
|
||||||
TFT8=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $FILENAME == *"t-deck"* ]]; then
|
|
||||||
TFT16=true
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Extract BASENAME from %FILENAME% for later use.
|
# Extract BASENAME from %FILENAME% for later use.
|
||||||
@@ -105,20 +136,31 @@ if [ -f "${FILENAME}" ] && [ -n "${FILENAME##*"update"*}" ]; then
|
|||||||
# Default OTA Offset
|
# Default OTA Offset
|
||||||
OTA_OFFSET=0x260000
|
OTA_OFFSET=0x260000
|
||||||
|
|
||||||
# littlefs* offset for MUI 8mb and OTA OFFSET.
|
# littlefs* offset for BigDB 8mb and OTA OFFSET.
|
||||||
if [ "$TFT8" = true ] && [ "$TFT_BUILD" = true ]; then
|
for variant in "${BIGDB_8MB[@]}"; do
|
||||||
OFFSET=0x670000
|
if [ -n "${FILENAME##*"$variant"*}" ]; then
|
||||||
OTA_OFFSET=0x340000
|
OFFSET=0x670000
|
||||||
fi
|
OTA_OFFSET=0x340000
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
# littlefs* offset for MUI 16mb and OTA OFFSET.
|
# littlefs* offset for BigDB 16mb and OTA OFFSET.
|
||||||
if [ "$TFT16" = true ] && [ "$TFT_BUILD" = true ]; then
|
for variant in "${BIGDB_16MB[@]}"; do
|
||||||
OFFSET=0xc90000
|
if [ -n "${FILENAME##*"$variant"*}" ]; then
|
||||||
OTA_OFFSET=0x650000
|
OFFSET=0xc90000
|
||||||
fi
|
OTA_OFFSET=0x650000
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
# Account for S3 board's different OTA partition
|
# Account for S3 board's different OTA partition
|
||||||
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
|
# FIXME: Use PlatformIO info to determine MCU type, this is unmaintainable
|
||||||
|
for variant in "${S3_VARIANTS[@]}"; do
|
||||||
|
if [ -n "${FILENAME##*"$variant"*}" ]; then
|
||||||
|
MCU="esp32s3"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$MCU" != "esp32s3" ]; then
|
||||||
if [ -n "${FILENAME##*"esp32c3"*}" ]; then
|
if [ -n "${FILENAME##*"esp32c3"*}" ]; then
|
||||||
OTAFILE=bleota.bin
|
OTAFILE=bleota.bin
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ ECHO.
|
|||||||
ECHO Usage: %SCRIPT_NAME% -f filename [-p PORT] [-P python]
|
ECHO Usage: %SCRIPT_NAME% -f filename [-p PORT] [-P python]
|
||||||
ECHO.
|
ECHO.
|
||||||
ECHO Options:
|
ECHO Options:
|
||||||
ECHO -f filename The .bin file to flash. Custom to your device type and region. (required)
|
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 The file must be located in this current directory.
|
||||||
ECHO -p PORT Set the environment variable for ESPTOOL_PORT.
|
ECHO -p PORT Set the environment variable for ESPTOOL_PORT.
|
||||||
ECHO If not set, ESPTOOL iterates all ports (Dangerous).
|
ECHO If not set, ESPTOOL iterates all ports (Dangerous).
|
||||||
@@ -28,7 +28,7 @@ ECHO Example: %SCRIPT_NAME% -f firmware-t-deck-tft-2.6.0.0b106d4-update.bin -p C
|
|||||||
GOTO eof
|
GOTO eof
|
||||||
|
|
||||||
:version
|
:version
|
||||||
ECHO %SCRIPT_NAME% [Version 2.6.0]
|
ECHO %SCRIPT_NAME% [Version 2.6.1]
|
||||||
ECHO Meshtastic
|
ECHO Meshtastic
|
||||||
GOTO eof
|
GOTO eof
|
||||||
|
|
||||||
@@ -53,6 +53,7 @@ IF "__!FILENAME!__"=="____" (
|
|||||||
CALL :LOG_MESSAGE DEBUG "Missing -f filename input."
|
CALL :LOG_MESSAGE DEBUG "Missing -f filename input."
|
||||||
GOTO help
|
GOTO help
|
||||||
) ELSE (
|
) ELSE (
|
||||||
|
CALL :LOG_MESSAGE DEBUG "Filename: !FILENAME!"
|
||||||
IF NOT "__!FILENAME: =!__"=="__!FILENAME!__" (
|
IF NOT "__!FILENAME: =!__"=="__!FILENAME!__" (
|
||||||
CALL :LOG_MESSAGE ERROR "Filename containing spaces are not supported."
|
CALL :LOG_MESSAGE ERROR "Filename containing spaces are not supported."
|
||||||
GOTO help
|
GOTO help
|
||||||
@@ -62,7 +63,6 @@ IF "__!FILENAME!__"=="____" (
|
|||||||
SET "FILENAME=!FILENAME:./=!"
|
SET "FILENAME=!FILENAME:./=!"
|
||||||
)
|
)
|
||||||
|
|
||||||
CALL :LOG_MESSAGE DEBUG "Filename: !FILENAME!"
|
|
||||||
CALL :LOG_MESSAGE DEBUG "Checking if !FILENAME! exists..."
|
CALL :LOG_MESSAGE DEBUG "Checking if !FILENAME! exists..."
|
||||||
IF NOT EXIST !FILENAME! (
|
IF NOT EXIST !FILENAME! (
|
||||||
CALL :LOG_MESSAGE ERROR "File does not exist: !FILENAME!. Terminating."
|
CALL :LOG_MESSAGE ERROR "File does not exist: !FILENAME!. Terminating."
|
||||||
@@ -71,7 +71,7 @@ IF NOT EXIST !FILENAME! (
|
|||||||
|
|
||||||
IF "!FILENAME:update=!"=="!FILENAME!" (
|
IF "!FILENAME:update=!"=="!FILENAME!" (
|
||||||
CALL :LOG_MESSAGE DEBUG "We are NOT working with a *update* file. !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 update !FILENAME!."
|
CALL :LOG_MESSAGE INFO "Use script device-install.bat to flash !FILENAME!."
|
||||||
GOTO eof
|
GOTO eof
|
||||||
) ELSE (
|
) ELSE (
|
||||||
CALL :LOG_MESSAGE DEBUG "We are working with a *update* file. !FILENAME!"
|
CALL :LOG_MESSAGE DEBUG "We are working with a *update* file. !FILENAME!"
|
||||||
@@ -95,7 +95,7 @@ IF NOT "__%PYTHON%__"=="____" (
|
|||||||
|
|
||||||
CALL :LOG_MESSAGE DEBUG "Checking esptool command !ESPTOOL_CMD!..."
|
CALL :LOG_MESSAGE DEBUG "Checking esptool command !ESPTOOL_CMD!..."
|
||||||
!ESPTOOL_CMD! >nul 2>&1
|
!ESPTOOL_CMD! >nul 2>&1
|
||||||
IF %ERRORLEVEL% GTR 2 (
|
IF %ERRORLEVEL% GEQ 2 (
|
||||||
@REM esptool exits with code 1 if help is displayed.
|
@REM esptool exits with code 1 if help is displayed.
|
||||||
CALL :LOG_MESSAGE ERROR "esptool not found: !ESPTOOL_CMD!"
|
CALL :LOG_MESSAGE ERROR "esptool not found: !ESPTOOL_CMD!"
|
||||||
EXIT /B 1
|
EXIT /B 1
|
||||||
@@ -110,6 +110,7 @@ CALL :LOG_MESSAGE DEBUG "Using esptool command: !ESPTOOL_CMD!"
|
|||||||
IF "__!ESPTOOL_PORT!__" == "____" (
|
IF "__!ESPTOOL_PORT!__" == "____" (
|
||||||
CALL :LOG_MESSAGE WARN "Using esptool port: UNSET."
|
CALL :LOG_MESSAGE WARN "Using esptool port: UNSET."
|
||||||
) ELSE (
|
) ELSE (
|
||||||
|
SET "ESPTOOL_CMD=!ESPTOOL_CMD! --port !ESPTOOL_PORT!"
|
||||||
CALL :LOG_MESSAGE INFO "Using esptool port: !ESPTOOL_PORT!."
|
CALL :LOG_MESSAGE INFO "Using esptool port: !ESPTOOL_PORT!."
|
||||||
)
|
)
|
||||||
CALL :LOG_MESSAGE INFO "Using esptool baud: !ESPTOOL_BAUD!."
|
CALL :LOG_MESSAGE INFO "Using esptool baud: !ESPTOOL_BAUD!."
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ 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}
|
||||||
;;
|
;;
|
||||||
f) FILENAME=${OPTARG}
|
f) FILENAME=${OPTARG}
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -823,7 +823,8 @@ void setup()
|
|||||||
LOG_DEBUG("Start multicast thread");
|
LOG_DEBUG("Start multicast thread");
|
||||||
udpThread = new UdpMulticastThread();
|
udpThread = new UdpMulticastThread();
|
||||||
#ifdef ARCH_PORTDUINO
|
#ifdef ARCH_PORTDUINO
|
||||||
// FIXME: portduino does not ever call onNetworkConnected so call it here because I don't know what happen if I call onNetworkConnected there
|
// FIXME: portduino does not ever call onNetworkConnected so call it here because I don't know what happen if I call
|
||||||
|
// onNetworkConnected there
|
||||||
udpThread->start();
|
udpThread->start();
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -51,6 +51,10 @@
|
|||||||
#include <utility/bonding.h>
|
#include <utility/bonding.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(ARCH_ESP32) && !MESHTASTIC_EXCLUDE_WIFI
|
||||||
|
#include <WiFiOTA.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
NodeDB *nodeDB = nullptr;
|
NodeDB *nodeDB = nullptr;
|
||||||
|
|
||||||
// we have plenty of ram so statically alloc this tempbuf (for now)
|
// we have plenty of ram so statically alloc this tempbuf (for now)
|
||||||
@@ -635,6 +639,12 @@ void NodeDB::installDefaultConfig(bool preserveKey = false)
|
|||||||
config.display.wake_on_tap_or_motion = true;
|
config.display.wake_on_tap_or_motion = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(ARCH_ESP32) && !MESHTASTIC_EXCLUDE_WIFI
|
||||||
|
if (WiFiOTA::isUpdated()) {
|
||||||
|
WiFiOTA::recoverConfig(&config.network);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
initConfigIntervals();
|
initConfigIntervals();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1598,6 +1608,94 @@ UserLicenseStatus NodeDB::getLicenseStatus(uint32_t nodeNum)
|
|||||||
return info->user.is_licensed ? UserLicenseStatus::Licensed : UserLicenseStatus::NotLicensed;
|
return info->user.is_licensed ? UserLicenseStatus::Licensed : UserLicenseStatus::NotLicensed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool NodeDB::backupPreferences(meshtastic_AdminMessage_BackupLocation location)
|
||||||
|
{
|
||||||
|
bool success = false;
|
||||||
|
lastBackupAttempt = millis();
|
||||||
|
#ifdef FSCom
|
||||||
|
if (location == meshtastic_AdminMessage_BackupLocation_FLASH) {
|
||||||
|
meshtastic_BackupPreferences backup = meshtastic_BackupPreferences_init_zero;
|
||||||
|
backup.version = DEVICESTATE_CUR_VER;
|
||||||
|
backup.timestamp = getValidTime(RTCQuality::RTCQualityDevice, false);
|
||||||
|
backup.has_config = true;
|
||||||
|
backup.config = config;
|
||||||
|
backup.has_module_config = true;
|
||||||
|
backup.module_config = moduleConfig;
|
||||||
|
backup.has_channels = true;
|
||||||
|
backup.channels = channelFile;
|
||||||
|
backup.has_owner = true;
|
||||||
|
backup.owner = owner;
|
||||||
|
|
||||||
|
size_t backupSize;
|
||||||
|
pb_get_encoded_size(&backupSize, meshtastic_BackupPreferences_fields, &backup);
|
||||||
|
|
||||||
|
spiLock->lock();
|
||||||
|
FSCom.mkdir("/backups");
|
||||||
|
spiLock->unlock();
|
||||||
|
success = saveProto(backupFileName, backupSize, &meshtastic_BackupPreferences_msg, &backup);
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
LOG_INFO("Saved backup preferences");
|
||||||
|
} else {
|
||||||
|
LOG_ERROR("Failed to save backup preferences to file");
|
||||||
|
}
|
||||||
|
} else if (location == meshtastic_AdminMessage_BackupLocation_SD) {
|
||||||
|
// TODO: After more mainline SD card support
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool NodeDB::restorePreferences(meshtastic_AdminMessage_BackupLocation location, int restoreWhat)
|
||||||
|
{
|
||||||
|
bool success = false;
|
||||||
|
#ifdef FSCom
|
||||||
|
if (location == meshtastic_AdminMessage_BackupLocation_FLASH) {
|
||||||
|
spiLock->lock();
|
||||||
|
if (!FSCom.exists(backupFileName)) {
|
||||||
|
spiLock->unlock();
|
||||||
|
LOG_WARN("Could not restore. No backup file found");
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
spiLock->unlock();
|
||||||
|
}
|
||||||
|
meshtastic_BackupPreferences backup = meshtastic_BackupPreferences_init_zero;
|
||||||
|
success = loadProto(backupFileName, meshtastic_BackupPreferences_size, sizeof(meshtastic_BackupPreferences),
|
||||||
|
&meshtastic_BackupPreferences_msg, &backup);
|
||||||
|
if (success) {
|
||||||
|
if (restoreWhat & SEGMENT_CONFIG) {
|
||||||
|
config = backup.config;
|
||||||
|
LOG_DEBUG("Restored config");
|
||||||
|
}
|
||||||
|
if (restoreWhat & SEGMENT_MODULECONFIG) {
|
||||||
|
moduleConfig = backup.module_config;
|
||||||
|
LOG_DEBUG("Restored module config");
|
||||||
|
}
|
||||||
|
if (restoreWhat & SEGMENT_DEVICESTATE) {
|
||||||
|
devicestate.owner = backup.owner;
|
||||||
|
LOG_DEBUG("Restored device state");
|
||||||
|
}
|
||||||
|
if (restoreWhat & SEGMENT_CHANNELS) {
|
||||||
|
channelFile = backup.channels;
|
||||||
|
LOG_DEBUG("Restored channels");
|
||||||
|
}
|
||||||
|
|
||||||
|
success = saveToDisk(restoreWhat);
|
||||||
|
if (success) {
|
||||||
|
LOG_INFO("Restored preferences from backup");
|
||||||
|
} else {
|
||||||
|
LOG_ERROR("Failed to save restored preferences to flash");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
LOG_ERROR("Failed to restore preferences from backup file");
|
||||||
|
}
|
||||||
|
} else if (location == meshtastic_AdminMessage_BackupLocation_SD) {
|
||||||
|
// TODO: After more mainline SD card support
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/// Record an error that should be reported via analytics
|
/// Record an error that should be reported via analytics
|
||||||
void recordCriticalError(meshtastic_CriticalErrorCode code, uint32_t address, const char *filename)
|
void recordCriticalError(meshtastic_CriticalErrorCode code, uint32_t address, const char *filename)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ static constexpr const char *configFileName = "/prefs/config.proto";
|
|||||||
static constexpr const char *uiconfigFileName = "/prefs/uiconfig.proto";
|
static constexpr const char *uiconfigFileName = "/prefs/uiconfig.proto";
|
||||||
static constexpr const char *moduleConfigFileName = "/prefs/module.proto";
|
static constexpr const char *moduleConfigFileName = "/prefs/module.proto";
|
||||||
static constexpr const char *channelFileName = "/prefs/channels.proto";
|
static constexpr const char *channelFileName = "/prefs/channels.proto";
|
||||||
|
static constexpr const char *backupFileName = "/backups/backup.proto";
|
||||||
|
|
||||||
/// Given a node, return how many seconds in the past (vs now) that we last heard from it
|
/// Given a node, return how many seconds in the past (vs now) that we last heard from it
|
||||||
uint32_t sinceLastSeen(const meshtastic_NodeInfoLite *n);
|
uint32_t sinceLastSeen(const meshtastic_NodeInfoLite *n);
|
||||||
@@ -202,8 +203,13 @@ class NodeDB
|
|||||||
|
|
||||||
bool hasValidPosition(const meshtastic_NodeInfoLite *n);
|
bool hasValidPosition(const meshtastic_NodeInfoLite *n);
|
||||||
|
|
||||||
|
bool backupPreferences(meshtastic_AdminMessage_BackupLocation location);
|
||||||
|
bool restorePreferences(meshtastic_AdminMessage_BackupLocation location,
|
||||||
|
int restoreWhat = SEGMENT_CONFIG | SEGMENT_MODULECONFIG | SEGMENT_DEVICESTATE | SEGMENT_CHANNELS);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint32_t lastNodeDbSave = 0; // when we last saved our db to flash
|
uint32_t lastNodeDbSave = 0; // when we last saved our db to flash
|
||||||
|
uint32_t lastBackupAttempt = 0; // when we last tried a backup automatically or manually
|
||||||
/// Find a node in our DB, create an empty NodeInfoLite if missing
|
/// Find a node in our DB, create an empty NodeInfoLite if missing
|
||||||
meshtastic_NodeInfoLite *getOrCreateMeshNode(NodeNum n);
|
meshtastic_NodeInfoLite *getOrCreateMeshNode(NodeNum n);
|
||||||
|
|
||||||
|
|||||||
@@ -372,7 +372,7 @@ DecodeState perhapsDecode(meshtastic_MeshPacket *p)
|
|||||||
p->pki_encrypted = true;
|
p->pki_encrypted = true;
|
||||||
memcpy(&p->public_key.bytes, nodeDB->getMeshNode(p->from)->user.public_key.bytes, 32);
|
memcpy(&p->public_key.bytes, nodeDB->getMeshNode(p->from)->user.public_key.bytes, 32);
|
||||||
p->public_key.size = 32;
|
p->public_key.size = 32;
|
||||||
memcpy(&p->decoded, &decodedtmp, sizeof(meshtastic_Data_msg));
|
p->decoded = decodedtmp;
|
||||||
p->which_payload_variant = meshtastic_MeshPacket_decoded_tag; // change type to decoded
|
p->which_payload_variant = meshtastic_MeshPacket_decoded_tag; // change type to decoded
|
||||||
} else {
|
} else {
|
||||||
LOG_ERROR("PKC Decrypted, but pb_decode failed!");
|
LOG_ERROR("PKC Decrypted, but pb_decode failed!");
|
||||||
|
|||||||
@@ -18,10 +18,30 @@
|
|||||||
#define MAX_RX_TOPHONE 32
|
#define MAX_RX_TOPHONE 32
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// max number of nodes allowed in the mesh
|
/// max number of nodes allowed in the nodeDB
|
||||||
#ifndef MAX_NUM_NODES
|
#ifndef MAX_NUM_NODES
|
||||||
|
#if defined(ARCH_STM32WL)
|
||||||
|
#define MAX_NUM_NODES 10
|
||||||
|
#elif defined(ARCH_NRF52)
|
||||||
|
#define MAX_NUM_NODES 80
|
||||||
|
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
|
||||||
|
#include "Esp.h"
|
||||||
|
static inline int get_max_num_nodes()
|
||||||
|
{
|
||||||
|
uint32_t flash_size = ESP.getFlashChipSize() / (1024 * 1024); // Convert Bytes to MB
|
||||||
|
if (flash_size >= 15) {
|
||||||
|
return 250;
|
||||||
|
} else if (flash_size >= 7) {
|
||||||
|
return 200;
|
||||||
|
} else {
|
||||||
|
return 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#define MAX_NUM_NODES get_max_num_nodes()
|
||||||
|
#else
|
||||||
#define MAX_NUM_NODES 100
|
#define MAX_NUM_NODES 100
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/// Max number of channels allowed
|
/// Max number of channels allowed
|
||||||
#define MAX_NUM_CHANNELS (member_size(meshtastic_ChannelFile, channels) / member_size(meshtastic_ChannelFile, channels[0]))
|
#define MAX_NUM_CHANNELS (member_size(meshtastic_ChannelFile, channels) / member_size(meshtastic_ChannelFile, channels[0]))
|
||||||
|
|||||||
@@ -22,13 +22,13 @@ class UdpMulticastThread : public concurrency::OSThread
|
|||||||
|
|
||||||
void start()
|
void start()
|
||||||
{
|
{
|
||||||
if (udp.listenMulticast(udpIpAddress, UDP_MULTICAST_DEFAUL_PORT)) {
|
if (udp.listenMulticast(udpIpAddress, UDP_MULTICAST_DEFAUL_PORT, 64)) {
|
||||||
#if !defined(ARCH_PORTDUINO)
|
#if !defined(ARCH_PORTDUINO)
|
||||||
// FIXME(PORTDUINO): arduino lacks IPAddress::toString()
|
// FIXME(PORTDUINO): arduino lacks IPAddress::toString()
|
||||||
LOG_DEBUG("UDP Listening on IP: %s", WiFi.localIP().toString().c_str());
|
LOG_DEBUG("UDP Listening on IP: %s", WiFi.localIP().toString().c_str());
|
||||||
#else
|
#else
|
||||||
LOG_DEBUG("UDP Listening");
|
LOG_DEBUG("UDP Listening");
|
||||||
#endif
|
#endif
|
||||||
udp.onPacket([this](AsyncUDPPacket packet) { onReceive(packet); });
|
udp.onPacket([this](AsyncUDPPacket packet) { onReceive(packet); });
|
||||||
} else {
|
} else {
|
||||||
LOG_DEBUG("Failed to listen on UDP");
|
LOG_DEBUG("Failed to listen on UDP");
|
||||||
@@ -38,10 +38,10 @@ class UdpMulticastThread : public concurrency::OSThread
|
|||||||
void onReceive(AsyncUDPPacket packet)
|
void onReceive(AsyncUDPPacket packet)
|
||||||
{
|
{
|
||||||
size_t packetLength = packet.length();
|
size_t packetLength = packet.length();
|
||||||
#ifndef ARCH_PORTDUINO
|
#ifndef ARCH_PORTDUINO
|
||||||
// FIXME(PORTDUINO): arduino lacks IPAddress::toString()
|
// FIXME(PORTDUINO): arduino lacks IPAddress::toString()
|
||||||
LOG_DEBUG("UDP broadcast from: %s, len=%u", packet.remoteIP().toString().c_str(), packetLength);
|
LOG_DEBUG("UDP broadcast from: %s, len=%u", packet.remoteIP().toString().c_str(), packetLength);
|
||||||
#endif
|
#endif
|
||||||
meshtastic_MeshPacket mp;
|
meshtastic_MeshPacket mp;
|
||||||
LOG_DEBUG("Decoding MeshPacket from UDP len=%u", packetLength);
|
LOG_DEBUG("Decoding MeshPacket from UDP len=%u", packetLength);
|
||||||
bool isPacketDecoded = pb_decode_from_bytes(packet.data(), packetLength, &meshtastic_MeshPacket_msg, &mp);
|
bool isPacketDecoded = pb_decode_from_bytes(packet.data(), packetLength, &meshtastic_MeshPacket_msg, &mp);
|
||||||
@@ -59,11 +59,11 @@ class UdpMulticastThread : public concurrency::OSThread
|
|||||||
if (!mp || !udp) {
|
if (!mp || !udp) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#if !defined(ARCH_PORTDUINO)
|
#if !defined(ARCH_PORTDUINO)
|
||||||
if (WiFi.status() != WL_CONNECTED) {
|
if (WiFi.status() != WL_CONNECTED) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
LOG_DEBUG("Broadcasting packet over UDP (id=%u)", mp->id);
|
LOG_DEBUG("Broadcasting packet over UDP (id=%u)", mp->id);
|
||||||
uint8_t buffer[meshtastic_MeshPacket_size];
|
uint8_t buffer[meshtastic_MeshPacket_size];
|
||||||
size_t encodedLength = pb_encode_to_bytes(buffer, sizeof(buffer), &meshtastic_MeshPacket_msg, mp);
|
size_t encodedLength = pb_encode_to_bytes(buffer, sizeof(buffer), &meshtastic_MeshPacket_msg, mp);
|
||||||
@@ -83,4 +83,4 @@ class UdpMulticastThread : public concurrency::OSThread
|
|||||||
IPAddress udpIpAddress;
|
IPAddress udpIpAddress;
|
||||||
AsyncUDP udp;
|
AsyncUDP udp;
|
||||||
};
|
};
|
||||||
#endif // ARCH_ESP32
|
#endif // HAS_UDP_MULTICAST
|
||||||
@@ -10,6 +10,9 @@
|
|||||||
#if defined(ARCH_ESP32) && !MESHTASTIC_EXCLUDE_BLUETOOTH
|
#if defined(ARCH_ESP32) && !MESHTASTIC_EXCLUDE_BLUETOOTH
|
||||||
#include "BleOta.h"
|
#include "BleOta.h"
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(ARCH_ESP32) && !MESHTASTIC_EXCLUDE_WIFI
|
||||||
|
#include "WiFiOTA.h"
|
||||||
|
#endif
|
||||||
#include "Router.h"
|
#include "Router.h"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
@@ -194,19 +197,23 @@ bool AdminModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshta
|
|||||||
}
|
}
|
||||||
case meshtastic_AdminMessage_reboot_ota_seconds_tag: {
|
case meshtastic_AdminMessage_reboot_ota_seconds_tag: {
|
||||||
int32_t s = r->reboot_ota_seconds;
|
int32_t s = r->reboot_ota_seconds;
|
||||||
#if defined(ARCH_ESP32) && !MESHTASTIC_EXCLUDE_BLUETOOTH
|
#if defined(ARCH_ESP32)
|
||||||
if (BleOta::getOtaAppVersion().isEmpty()) {
|
#if !MESHTASTIC_EXCLUDE_BLUETOOTH
|
||||||
LOG_INFO("No OTA firmware available, scheduling regular reboot in %d seconds", s);
|
if (!BleOta::getOtaAppVersion().isEmpty()) {
|
||||||
screen->startAlert("Rebooting...");
|
|
||||||
} else {
|
|
||||||
screen->startFirmwareUpdateScreen();
|
screen->startFirmwareUpdateScreen();
|
||||||
BleOta::switchToOtaApp();
|
BleOta::switchToOtaApp();
|
||||||
LOG_INFO("Reboot to OTA in %d seconds", s);
|
LOG_INFO("Rebooting to BLE OTA");
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
LOG_INFO("Not on ESP32, scheduling regular reboot in %d seconds", s);
|
|
||||||
screen->startAlert("Rebooting...");
|
|
||||||
#endif
|
#endif
|
||||||
|
#if !MESHTASTIC_EXCLUDE_WIFI
|
||||||
|
if (WiFiOTA::trySwitchToOTA()) {
|
||||||
|
screen->startFirmwareUpdateScreen();
|
||||||
|
WiFiOTA::saveConfig(&config.network);
|
||||||
|
LOG_INFO("Rebooting to WiFi OTA");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
LOG_INFO("Reboot in %d seconds", s);
|
||||||
rebootAtMsec = (s < 0) ? 0 : (millis() + s * 1000);
|
rebootAtMsec = (s < 0) ? 0 : (millis() + s * 1000);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -370,6 +377,42 @@ bool AdminModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshta
|
|||||||
LOG_DEBUG("Failed to delete file");
|
LOG_DEBUG("Failed to delete file");
|
||||||
}
|
}
|
||||||
spiLock->unlock();
|
spiLock->unlock();
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case meshtastic_AdminMessage_backup_preferences_tag: {
|
||||||
|
LOG_INFO("Client requesting to backup preferences");
|
||||||
|
if (nodeDB->backupPreferences(r->backup_preferences)) {
|
||||||
|
myReply = allocErrorResponse(meshtastic_Routing_Error_NONE, &mp);
|
||||||
|
} else {
|
||||||
|
myReply = allocErrorResponse(meshtastic_Routing_Error_BAD_REQUEST, &mp);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case meshtastic_AdminMessage_restore_preferences_tag: {
|
||||||
|
LOG_INFO("Client requesting to restore preferences");
|
||||||
|
if (nodeDB->restorePreferences(r->backup_preferences,
|
||||||
|
SEGMENT_DEVICESTATE | SEGMENT_CONFIG | SEGMENT_MODULECONFIG | SEGMENT_CHANNELS)) {
|
||||||
|
myReply = allocErrorResponse(meshtastic_Routing_Error_NONE, &mp);
|
||||||
|
LOG_DEBUG("Rebooting after successful restore of preferences");
|
||||||
|
reboot(1000);
|
||||||
|
disableBluetooth();
|
||||||
|
} else {
|
||||||
|
myReply = allocErrorResponse(meshtastic_Routing_Error_BAD_REQUEST, &mp);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case meshtastic_AdminMessage_remove_backup_preferences_tag: {
|
||||||
|
LOG_INFO("Client requesting to remove backup preferences");
|
||||||
|
#ifdef FSCom
|
||||||
|
if (r->remove_backup_preferences == meshtastic_AdminMessage_BackupLocation_FLASH) {
|
||||||
|
spiLock->lock();
|
||||||
|
FSCom.remove(backupFileName);
|
||||||
|
spiLock->unlock();
|
||||||
|
} else if (r->remove_backup_preferences == meshtastic_AdminMessage_BackupLocation_SD) {
|
||||||
|
// TODO: After more mainline SD card support
|
||||||
|
LOG_ERROR("SD backup removal not implemented yet");
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -468,81 +468,83 @@ void SerialModule::processWXSerial()
|
|||||||
// Extract the current line
|
// Extract the current line
|
||||||
char line[meshtastic_Constants_DATA_PAYLOAD_LEN];
|
char line[meshtastic_Constants_DATA_PAYLOAD_LEN];
|
||||||
memset(line, '\0', sizeof(line));
|
memset(line, '\0', sizeof(line));
|
||||||
memcpy(line, &serialBytes[lineStart], lineEnd - lineStart);
|
if (lineEnd - lineStart < sizeof(line) - 1) {
|
||||||
if (strstr(line, "Wind") != NULL) // we have a wind line
|
memcpy(line, &serialBytes[lineStart], lineEnd - lineStart);
|
||||||
{
|
if (strstr(line, "Wind") != NULL) // we have a wind line
|
||||||
gotwind = true;
|
{
|
||||||
// Find the positions of "=" signs in the line
|
gotwind = true;
|
||||||
char *windDirPos = strstr(line, "WindDir = ");
|
// Find the positions of "=" signs in the line
|
||||||
char *windSpeedPos = strstr(line, "WindSpeed = ");
|
char *windDirPos = strstr(line, "WindDir = ");
|
||||||
char *windGustPos = strstr(line, "WindGust = ");
|
char *windSpeedPos = strstr(line, "WindSpeed = ");
|
||||||
|
char *windGustPos = strstr(line, "WindGust = ");
|
||||||
|
|
||||||
if (windDirPos != NULL) {
|
if (windDirPos != NULL) {
|
||||||
// Extract data after "=" for WindDir
|
// Extract data after "=" for WindDir
|
||||||
strcpy(windDir, windDirPos + 15); // Add 15 to skip "WindDir = "
|
strlcpy(windDir, windDirPos + 15, sizeof(windDir)); // Add 15 to skip "WindDir = "
|
||||||
double radians = GeoCoord::toRadians(strtof(windDir, nullptr));
|
double radians = GeoCoord::toRadians(strtof(windDir, nullptr));
|
||||||
dir_sum_sin += sin(radians);
|
dir_sum_sin += sin(radians);
|
||||||
dir_sum_cos += cos(radians);
|
dir_sum_cos += cos(radians);
|
||||||
dirCount++;
|
dirCount++;
|
||||||
} else if (windSpeedPos != NULL) {
|
} else if (windSpeedPos != NULL) {
|
||||||
// Extract data after "=" for WindSpeed
|
// Extract data after "=" for WindSpeed
|
||||||
strcpy(windVel, windSpeedPos + 15); // Add 15 to skip "WindSpeed = "
|
strlcpy(windVel, windSpeedPos + 15, sizeof(windVel)); // Add 15 to skip "WindSpeed = "
|
||||||
float newv = strtof(windVel, nullptr);
|
float newv = strtof(windVel, nullptr);
|
||||||
velSum += newv;
|
velSum += newv;
|
||||||
velCount++;
|
velCount++;
|
||||||
if (newv < lull || lull == -1)
|
if (newv < lull || lull == -1)
|
||||||
lull = newv;
|
lull = newv;
|
||||||
|
|
||||||
} else if (windGustPos != NULL) {
|
} else if (windGustPos != NULL) {
|
||||||
strcpy(windGust, windGustPos + 15); // Add 15 to skip "WindSpeed = "
|
strlcpy(windGust, windGustPos + 15, sizeof(windGust)); // Add 15 to skip "WindSpeed = "
|
||||||
float newg = strtof(windGust, nullptr);
|
float newg = strtof(windGust, nullptr);
|
||||||
if (newg > gust)
|
if (newg > gust)
|
||||||
gust = newg;
|
gust = newg;
|
||||||
}
|
}
|
||||||
|
|
||||||
// these are also voltage data we care about possibly
|
// these are also voltage data we care about possibly
|
||||||
} else if (strstr(line, "BatVoltage") != NULL) { // we have a battVoltage line
|
} else if (strstr(line, "BatVoltage") != NULL) { // we have a battVoltage line
|
||||||
char *batVoltagePos = strstr(line, "BatVoltage = ");
|
char *batVoltagePos = strstr(line, "BatVoltage = ");
|
||||||
if (batVoltagePos != NULL) {
|
if (batVoltagePos != NULL) {
|
||||||
strcpy(batVoltage, batVoltagePos + 17); // 18 for ws 80, 17 for ws85
|
strlcpy(batVoltage, batVoltagePos + 17, sizeof(batVoltage)); // 18 for ws 80, 17 for ws85
|
||||||
batVoltageF = strtof(batVoltage, nullptr);
|
batVoltageF = strtof(batVoltage, nullptr);
|
||||||
break; // last possible data we want so break
|
break; // last possible data we want so break
|
||||||
}
|
}
|
||||||
} else if (strstr(line, "CapVoltage") != NULL) { // we have a cappVoltage line
|
} else if (strstr(line, "CapVoltage") != NULL) { // we have a cappVoltage line
|
||||||
char *capVoltagePos = strstr(line, "CapVoltage = ");
|
char *capVoltagePos = strstr(line, "CapVoltage = ");
|
||||||
if (capVoltagePos != NULL) {
|
if (capVoltagePos != NULL) {
|
||||||
strcpy(capVoltage, capVoltagePos + 17); // 18 for ws 80, 17 for ws85
|
strlcpy(capVoltage, capVoltagePos + 17, sizeof(capVoltage)); // 18 for ws 80, 17 for ws85
|
||||||
capVoltageF = strtof(capVoltage, nullptr);
|
capVoltageF = strtof(capVoltage, nullptr);
|
||||||
}
|
}
|
||||||
// GXTS04Temp = 24.4
|
// GXTS04Temp = 24.4
|
||||||
} else if (strstr(line, "GXTS04Temp") != NULL) { // we have a temperature line
|
} else if (strstr(line, "GXTS04Temp") != NULL) { // we have a temperature line
|
||||||
char *tempPos = strstr(line, "GXTS04Temp = ");
|
char *tempPos = strstr(line, "GXTS04Temp = ");
|
||||||
if (tempPos != NULL) {
|
if (tempPos != NULL) {
|
||||||
strcpy(temperature, tempPos + 15); // 15 spaces for ws85
|
strlcpy(temperature, tempPos + 15, sizeof(temperature)); // 15 spaces for ws85
|
||||||
temperatureF = strtof(temperature, nullptr);
|
temperatureF = strtof(temperature, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (strstr(line, "RainIntSum") != NULL) { // we have a rainsum line
|
} else if (strstr(line, "RainIntSum") != NULL) { // we have a rainsum line
|
||||||
// LOG_INFO(line);
|
|
||||||
char *pos = strstr(line, "RainIntSum = ");
|
|
||||||
if (pos != NULL) {
|
|
||||||
strcpy(rainStr, pos + 17); // 17 spaces for ws85
|
|
||||||
rainSum = int(strtof(rainStr, nullptr));
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (strstr(line, "Rain") != NULL) { // we have a rain line
|
|
||||||
if (strstr(line, "WaveRain") == NULL) { // skip WaveRain lines though.
|
|
||||||
// LOG_INFO(line);
|
// LOG_INFO(line);
|
||||||
char *pos = strstr(line, "Rain = ");
|
char *pos = strstr(line, "RainIntSum = ");
|
||||||
if (pos != NULL) {
|
if (pos != NULL) {
|
||||||
strcpy(rainStr, pos + 17); // 17 spaces for ws85
|
strlcpy(rainStr, pos + 17, sizeof(rainStr)); // 17 spaces for ws85
|
||||||
rain = strtof(rainStr, nullptr);
|
rainSum = int(strtof(rainStr, nullptr));
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (strstr(line, "Rain") != NULL) { // we have a rain line
|
||||||
|
if (strstr(line, "WaveRain") == NULL) { // skip WaveRain lines though.
|
||||||
|
// LOG_INFO(line);
|
||||||
|
char *pos = strstr(line, "Rain = ");
|
||||||
|
if (pos != NULL) {
|
||||||
|
strlcpy(rainStr, pos + 17, sizeof(rainStr)); // 17 spaces for ws85
|
||||||
|
rain = strtof(rainStr, nullptr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Update lineStart for the next line
|
// Update lineStart for the next line
|
||||||
lineStart = lineEnd + 1;
|
lineStart = lineEnd + 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
92
src/platform/esp32/WiFiOTA.cpp
Normal file
92
src/platform/esp32/WiFiOTA.cpp
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
#include "WiFiOTA.h"
|
||||||
|
#include "configuration.h"
|
||||||
|
#include <Preferences.h>
|
||||||
|
#include <esp_ota_ops.h>
|
||||||
|
|
||||||
|
namespace WiFiOTA
|
||||||
|
{
|
||||||
|
|
||||||
|
static const char *nvsNamespace = "ota-wifi";
|
||||||
|
static const char *appProjectName = "OTA-WiFi";
|
||||||
|
|
||||||
|
static bool updated = false;
|
||||||
|
|
||||||
|
bool isUpdated()
|
||||||
|
{
|
||||||
|
return updated;
|
||||||
|
}
|
||||||
|
|
||||||
|
void initialize()
|
||||||
|
{
|
||||||
|
Preferences prefs;
|
||||||
|
prefs.begin(nvsNamespace);
|
||||||
|
if (prefs.getBool("updated")) {
|
||||||
|
LOG_INFO("First boot after OTA update");
|
||||||
|
updated = true;
|
||||||
|
prefs.putBool("updated", false);
|
||||||
|
}
|
||||||
|
prefs.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
void recoverConfig(meshtastic_Config_NetworkConfig *network)
|
||||||
|
{
|
||||||
|
LOG_INFO("Recovering WiFi settings after OTA update");
|
||||||
|
|
||||||
|
Preferences prefs;
|
||||||
|
prefs.begin(nvsNamespace, true);
|
||||||
|
String ssid = prefs.getString("ssid");
|
||||||
|
String psk = prefs.getString("psk");
|
||||||
|
prefs.end();
|
||||||
|
|
||||||
|
network->wifi_enabled = true;
|
||||||
|
strncpy(network->wifi_ssid, ssid.c_str(), sizeof(network->wifi_ssid));
|
||||||
|
strncpy(network->wifi_psk, psk.c_str(), sizeof(network->wifi_psk));
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveConfig(meshtastic_Config_NetworkConfig *network)
|
||||||
|
{
|
||||||
|
LOG_INFO("Saving WiFi settings for upcoming OTA update");
|
||||||
|
|
||||||
|
Preferences prefs;
|
||||||
|
prefs.begin(nvsNamespace);
|
||||||
|
prefs.putString("ssid", network->wifi_ssid);
|
||||||
|
prefs.putString("psk", network->wifi_psk);
|
||||||
|
prefs.putBool("updated", false);
|
||||||
|
prefs.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
const esp_partition_t *getAppPartition()
|
||||||
|
{
|
||||||
|
return esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_OTA_1, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool getAppDesc(const esp_partition_t *part, esp_app_desc_t *app_desc)
|
||||||
|
{
|
||||||
|
if (esp_ota_get_partition_description(part, app_desc) != ESP_OK)
|
||||||
|
return false;
|
||||||
|
if (strcmp(app_desc->project_name, appProjectName) != 0)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool trySwitchToOTA()
|
||||||
|
{
|
||||||
|
const esp_partition_t *part = getAppPartition();
|
||||||
|
esp_app_desc_t app_desc;
|
||||||
|
if (!getAppDesc(part, &app_desc))
|
||||||
|
return false;
|
||||||
|
if (esp_ota_set_boot_partition(part) != ESP_OK)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
String getVersion()
|
||||||
|
{
|
||||||
|
const esp_partition_t *part = getAppPartition();
|
||||||
|
esp_app_desc_t app_desc;
|
||||||
|
if (!getAppDesc(part, &app_desc))
|
||||||
|
return String();
|
||||||
|
return String(app_desc.version);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace WiFiOTA
|
||||||
18
src/platform/esp32/WiFiOTA.h
Normal file
18
src/platform/esp32/WiFiOTA.h
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
#ifndef WIFIOTA_H
|
||||||
|
#define WIFIOTA_H
|
||||||
|
|
||||||
|
#include "mesh-pb-constants.h"
|
||||||
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
namespace WiFiOTA
|
||||||
|
{
|
||||||
|
void initialize();
|
||||||
|
bool isUpdated();
|
||||||
|
|
||||||
|
void recoverConfig(meshtastic_Config_NetworkConfig *network);
|
||||||
|
void saveConfig(meshtastic_Config_NetworkConfig *network);
|
||||||
|
bool trySwitchToOTA();
|
||||||
|
String getVersion();
|
||||||
|
} // namespace WiFiOTA
|
||||||
|
|
||||||
|
#endif // WIFIOTA_H
|
||||||
@@ -9,6 +9,8 @@
|
|||||||
#include "nimble/NimbleBluetooth.h"
|
#include "nimble/NimbleBluetooth.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <WiFiOTA.h>
|
||||||
|
|
||||||
#if HAS_WIFI
|
#if HAS_WIFI
|
||||||
#include "mesh/wifi/WiFiAPClient.h"
|
#include "mesh/wifi/WiFiAPClient.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -139,12 +141,19 @@ void esp32Setup()
|
|||||||
#if !MESHTASTIC_EXCLUDE_BLUETOOTH
|
#if !MESHTASTIC_EXCLUDE_BLUETOOTH
|
||||||
String BLEOTA = BleOta::getOtaAppVersion();
|
String BLEOTA = BleOta::getOtaAppVersion();
|
||||||
if (BLEOTA.isEmpty()) {
|
if (BLEOTA.isEmpty()) {
|
||||||
LOG_INFO("No OTA firmware available");
|
LOG_INFO("No BLE OTA firmware available");
|
||||||
} else {
|
} else {
|
||||||
LOG_INFO("OTA firmware version %s", BLEOTA.c_str());
|
LOG_INFO("BLE OTA firmware version %s", BLEOTA.c_str());
|
||||||
}
|
}
|
||||||
#else
|
#endif
|
||||||
LOG_INFO("No OTA firmware available");
|
#if !MESHTASTIC_EXCLUDE_WIFI
|
||||||
|
String version = WiFiOTA::getVersion();
|
||||||
|
if (version.isEmpty()) {
|
||||||
|
LOG_INFO("No WiFi OTA firmware available");
|
||||||
|
} else {
|
||||||
|
LOG_INFO("WiFi OTA firmware version %s", version.c_str());
|
||||||
|
}
|
||||||
|
WiFiOTA::initialize();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// enableModemSleep();
|
// enableModemSleep();
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ Do not expect a working Meshtastic device with this target.
|
|||||||
#define _VARIANT_EBYTE_E77_
|
#define _VARIANT_EBYTE_E77_
|
||||||
|
|
||||||
#define USE_STM32WLx
|
#define USE_STM32WLx
|
||||||
#define MAX_NUM_NODES 10
|
|
||||||
|
|
||||||
#define LED_PIN PB4 // LED1
|
#define LED_PIN PB4 // LED1
|
||||||
// #define LED_PIN PB3 // LED2
|
// #define LED_PIN PB3 // LED2
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ board_build.flash_mode = qio
|
|||||||
board_build.psram_type = opi
|
board_build.psram_type = opi
|
||||||
board_upload.flash_size = 8MB
|
board_upload.flash_size = 8MB
|
||||||
board_upload.maximum_size = 8388608
|
board_upload.maximum_size = 8388608
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
board = esp32-s3-devkitc-1
|
board = esp32-s3-devkitc-1
|
||||||
;upload_port = /dev/ttyUSB0
|
;upload_port = /dev/ttyUSB0
|
||||||
board_level = extra
|
board_level = extra
|
||||||
@@ -32,6 +33,7 @@ board_build.flash_mode = qio
|
|||||||
board_build.psram_type = opi
|
board_build.psram_type = opi
|
||||||
board_upload.flash_size = 8MB
|
board_upload.flash_size = 8MB
|
||||||
board_upload.maximum_size = 8388608
|
board_upload.maximum_size = 8388608
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
board = esp32-s3-devkitc-1
|
board = esp32-s3-devkitc-1
|
||||||
;upload_port = /dev/ttyUSB0
|
;upload_port = /dev/ttyUSB0
|
||||||
board_level = extra
|
board_level = extra
|
||||||
@@ -59,6 +61,7 @@ board_build.flash_mode = qio
|
|||||||
board_build.psram_type = opi
|
board_build.psram_type = opi
|
||||||
board_upload.flash_size = 8MB
|
board_upload.flash_size = 8MB
|
||||||
board_upload.maximum_size = 8388608
|
board_upload.maximum_size = 8388608
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
board = esp32-s3-devkitc-1
|
board = esp32-s3-devkitc-1
|
||||||
;upload_port = /dev/ttyUSB0
|
;upload_port = /dev/ttyUSB0
|
||||||
board_level = extra
|
board_level = extra
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ debug_tool = jlink
|
|||||||
[env:t-energy-s3_e22]
|
[env:t-energy-s3_e22]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = esp32-s3-devkitc-1
|
board = esp32-s3-devkitc-1
|
||||||
|
board_build.partitions = default_16MB.csv
|
||||||
board_level = extra
|
board_level = extra
|
||||||
board_upload.flash_size = 16MB ;Specify the FLASH capacity as 16MB
|
board_upload.flash_size = 16MB ;Specify the FLASH capacity as 16MB
|
||||||
board_build.arduino.memory_type = qio_opi ;Enable internal PSRAM
|
board_build.arduino.memory_type = qio_opi ;Enable internal PSRAM
|
||||||
@@ -100,4 +101,4 @@ build_flags =
|
|||||||
-D BOARD_HAS_PSRAM
|
-D BOARD_HAS_PSRAM
|
||||||
-D ARDUINO_USB_MODE=0
|
-D ARDUINO_USB_MODE=0
|
||||||
-D ARDUINO_USB_CDC_ON_BOOT=1
|
-D ARDUINO_USB_CDC_ON_BOOT=1
|
||||||
-I variants/diy/t-energy-s3_e22
|
-I variants/diy/t-energy-s3_e22
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
[env:dreamcatcher] ; 2301, latest revision
|
[env:dreamcatcher] ; 2301, latest revision
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = esp32s3box
|
board = esp32s3box
|
||||||
|
board_build.partitions = default_16MB.csv
|
||||||
board_level = extra
|
board_level = extra
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
@@ -8,7 +9,7 @@ build_flags =
|
|||||||
-D PRIVATE_HW
|
-D PRIVATE_HW
|
||||||
-D OTHERNET_DC_REV=2301
|
-D OTHERNET_DC_REV=2301
|
||||||
-I variants/dreamcatcher
|
-I variants/dreamcatcher
|
||||||
-DARDUINO_USB_CDC_ON_BOOT=1
|
-D ARDUINO_USB_CDC_ON_BOOT=1
|
||||||
|
|
||||||
lib_deps = ${esp32s3_base.lib_deps}
|
lib_deps = ${esp32s3_base.lib_deps}
|
||||||
earlephilhower/ESP8266Audio@^1.9.9
|
earlephilhower/ESP8266Audio@^1.9.9
|
||||||
@@ -17,6 +18,7 @@ lib_deps = ${esp32s3_base.lib_deps}
|
|||||||
[env:dreamcatcher-2206]
|
[env:dreamcatcher-2206]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = esp32s3box
|
board = esp32s3box
|
||||||
|
board_build.partitions = default_16MB.csv
|
||||||
board_level = extra
|
board_level = extra
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
@@ -24,4 +26,4 @@ build_flags =
|
|||||||
-D PRIVATE_HW
|
-D PRIVATE_HW
|
||||||
-D OTHERNET_DC_REV=2206
|
-D OTHERNET_DC_REV=2206
|
||||||
-I variants/dreamcatcher
|
-I variants/dreamcatcher
|
||||||
-DARDUINO_USB_CDC_ON_BOOT=1
|
-D ARDUINO_USB_CDC_ON_BOOT=1
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ board_level = extra
|
|||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
board = esp32-s3-pico
|
board = esp32-s3-pico
|
||||||
|
board_build.partitions = default_16MB.csv
|
||||||
|
|
||||||
board_upload.use_1200bps_touch = yes
|
board_upload.use_1200bps_touch = yes
|
||||||
board_upload.wait_for_upload_port = yes
|
board_upload.wait_for_upload_port = yes
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wifi_lora_32_V3
|
board = heltec_wifi_lora_32_V3
|
||||||
board_check = true
|
board_check = true
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32s3_base.build_flags} -I variants/heltec_capsule_sensor_v3
|
${esp32s3_base.build_flags} -I variants/heltec_capsule_sensor_v3
|
||||||
-D HELTEC_CAPSULE_SENSOR_V3
|
-D HELTEC_CAPSULE_SENSOR_V3
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wifi_lora_32_V3
|
board = heltec_wifi_lora_32_V3
|
||||||
board_check = true
|
board_check = true
|
||||||
# Temporary until espressif creates a release with this new target
|
board_build.partitions = default_8MB.csv
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32s3_base.build_flags} -D HELTEC_V3 -I variants/heltec_v3
|
${esp32s3_base.build_flags} -D HELTEC_V3 -I variants/heltec_v3
|
||||||
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
[env:heltec-vision-master-e213]
|
[env:heltec-vision-master-e213]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_vision_master_e213
|
board = heltec_vision_master_e213
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32s3_base.build_flags}
|
${esp32s3_base.build_flags}
|
||||||
-Ivariants/heltec_vision_master_e213
|
-Ivariants/heltec_vision_master_e213
|
||||||
-DHELTEC_VISION_MASTER_E213
|
-DHELTEC_VISION_MASTER_E213
|
||||||
-DUSE_EINK
|
-DUSE_EINK
|
||||||
@@ -22,6 +23,7 @@ upload_speed = 115200
|
|||||||
[env:heltec-vision-master-e213-inkhud]
|
[env:heltec-vision-master-e213-inkhud]
|
||||||
extends = esp32s3_base, inkhud
|
extends = esp32s3_base, inkhud
|
||||||
board = heltec_vision_master_e213
|
board = heltec_vision_master_e213
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
build_src_filter =
|
build_src_filter =
|
||||||
${esp32_base.build_src_filter}
|
${esp32_base.build_src_filter}
|
||||||
${inkhud.build_src_filter}
|
${inkhud.build_src_filter}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
[env:heltec-vision-master-e290]
|
[env:heltec-vision-master-e290]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_vision_master_e290
|
board = heltec_vision_master_e290
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32s3_base.build_flags}
|
${esp32s3_base.build_flags}
|
||||||
-I variants/heltec_vision_master_e290
|
-I variants/heltec_vision_master_e290
|
||||||
@@ -26,6 +27,7 @@ upload_speed = 115200
|
|||||||
[env:heltec-vision-master-e290-inkhud]
|
[env:heltec-vision-master-e290-inkhud]
|
||||||
extends = esp32s3_base, inkhud
|
extends = esp32s3_base, inkhud
|
||||||
board = heltec_vision_master_e290
|
board = heltec_vision_master_e290
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
build_src_filter =
|
build_src_filter =
|
||||||
${esp32_base.build_src_filter}
|
${esp32_base.build_src_filter}
|
||||||
${inkhud.build_src_filter}
|
${inkhud.build_src_filter}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
[env:heltec-vision-master-t190]
|
[env:heltec-vision-master-t190]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_vision_master_t190
|
board = heltec_vision_master_t190
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32s3_base.build_flags}
|
${esp32s3_base.build_flags}
|
||||||
-Ivariants/heltec_vision_master_t190
|
-Ivariants/heltec_vision_master_t190
|
||||||
-DHELTEC_VISION_MASTER_T190
|
-DHELTEC_VISION_MASTER_T190
|
||||||
; -D PRIVATE_HW
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32s3_base.lib_deps}
|
${esp32s3_base.lib_deps}
|
||||||
lewisxhe/PCF8563_Library@^1.0.1
|
lewisxhe/PCF8563_Library@^1.0.1
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
[env:heltec-wireless-paper]
|
[env:heltec-wireless-paper]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wifi_lora_32_V3
|
board = heltec_wifi_lora_32_V3
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32s3_base.build_flags}
|
${esp32s3_base.build_flags}
|
||||||
-I variants/heltec_wireless_paper
|
-I variants/heltec_wireless_paper
|
||||||
@@ -23,6 +24,7 @@ upload_speed = 115200
|
|||||||
[env:heltec-wireless-paper-inkhud]
|
[env:heltec-wireless-paper-inkhud]
|
||||||
extends = esp32s3_base, inkhud
|
extends = esp32s3_base, inkhud
|
||||||
board = heltec_wifi_lora_32_V3
|
board = heltec_wifi_lora_32_V3
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
build_src_filter =
|
build_src_filter =
|
||||||
${esp32_base.build_src_filter}
|
${esp32_base.build_src_filter}
|
||||||
${inkhud.build_src_filter}
|
${inkhud.build_src_filter}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board_level = extra
|
board_level = extra
|
||||||
board = heltec_wifi_lora_32_V3
|
board = heltec_wifi_lora_32_V3
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32s3_base.build_flags}
|
${esp32s3_base.build_flags}
|
||||||
-I variants/heltec_wireless_paper_v1
|
-I variants/heltec_wireless_paper_v1
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
[env:heltec-wireless-tracker]
|
[env:heltec-wireless-tracker]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wireless_tracker
|
board = heltec_wireless_tracker
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board_level = extra
|
board_level = extra
|
||||||
board = heltec_wireless_tracker
|
board = heltec_wireless_tracker
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32s3_base.build_flags} -I variants/heltec_wireless_tracker_V1_0
|
${esp32s3_base.build_flags} -I variants/heltec_wireless_tracker_V1_0
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
[env:heltec-wsl-v3]
|
[env:heltec-wsl-v3]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wifi_lora_32_V3
|
board = heltec_wifi_lora_32_V3
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
# Temporary until espressif creates a release with this new target
|
# Temporary until espressif creates a release with this new target
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32s3_base.build_flags} -D HELTEC_WSL_V3 -I variants/heltec_wsl_v3
|
${esp32s3_base.build_flags} -D HELTEC_WSL_V3 -I variants/heltec_wsl_v3
|
||||||
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ board = icarus
|
|||||||
board_level = extra
|
board_level = extra
|
||||||
board_check = true
|
board_check = true
|
||||||
board_build.mcu = esp32s3
|
board_build.mcu = esp32s3
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
platform_packages = platformio/framework-arduinoespressif32@https://github.com/PowerFeather/powerfeather-meshtastic-arduino-lib/releases/download/2.0.16a/esp32-2.0.16.zip
|
platform_packages = platformio/framework-arduinoespressif32@https://github.com/PowerFeather/powerfeather-meshtastic-arduino-lib/releases/download/2.0.16a/esp32-2.0.16.zip
|
||||||
@@ -15,5 +16,4 @@ build_unflags =
|
|||||||
build_flags =
|
build_flags =
|
||||||
${esp32s3_base.build_flags} -D PRIVATE_HW -I variants/icarus
|
${esp32s3_base.build_flags} -D PRIVATE_HW -I variants/icarus
|
||||||
-DBOARD_HAS_PSRAM
|
-DBOARD_HAS_PSRAM
|
||||||
|
-DARDUINO_USB_MODE=0
|
||||||
-DARDUINO_USB_MODE=0
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = m5stack-cores3
|
board = m5stack-cores3
|
||||||
board_check = true
|
board_check = true
|
||||||
|
board_build.partitions = default_16MB.csv
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
|
|
||||||
build_flags = ${esp32_base.build_flags}
|
build_flags = ${esp32_base.build_flags}
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ build_flags = ${esp32s3_base.build_flags}
|
|||||||
-D USE_LOG_DEBUG
|
-D USE_LOG_DEBUG
|
||||||
-D LOG_DEBUG_INC=\"DebugConfiguration.h\"
|
-D LOG_DEBUG_INC=\"DebugConfiguration.h\"
|
||||||
-D RADIOLIB_SPI_PARANOID=0
|
-D RADIOLIB_SPI_PARANOID=0
|
||||||
-D MAX_NUM_NODES=250
|
|
||||||
-D MAX_THREADS=40
|
-D MAX_THREADS=40
|
||||||
-D HAS_SCREEN=0
|
-D HAS_SCREEN=0
|
||||||
-D HAS_TFT=1
|
-D HAS_TFT=1
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = bpi_picow_esp32_s3
|
board = bpi_picow_esp32_s3
|
||||||
board_check = true
|
board_check = true
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
;OpenOCD flash method
|
;OpenOCD flash method
|
||||||
;upload_protocol = esp-builtin
|
;upload_protocol = esp-builtin
|
||||||
;Normal method
|
;Normal method
|
||||||
@@ -22,7 +23,6 @@ build_src_filter =
|
|||||||
|
|
||||||
[env:picomputer-s3-tft]
|
[env:picomputer-s3-tft]
|
||||||
extends = env:picomputer-s3
|
extends = env:picomputer-s3
|
||||||
board_build.partitions = default_8MB.csv ; just for test
|
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${env:picomputer-s3.build_flags}
|
${env:picomputer-s3.build_flags}
|
||||||
@@ -35,7 +35,6 @@ build_flags =
|
|||||||
-D INPUTDRIVER_MATRIX_TYPE=1
|
-D INPUTDRIVER_MATRIX_TYPE=1
|
||||||
-D USE_PIN_BUZZER=PIN_BUZZER
|
-D USE_PIN_BUZZER=PIN_BUZZER
|
||||||
-D USE_SX127x
|
-D USE_SX127x
|
||||||
-D MAX_NUM_NODES=200
|
|
||||||
-D HAS_SCREEN=0
|
-D HAS_SCREEN=0
|
||||||
-D HAS_TFT=1
|
-D HAS_TFT=1
|
||||||
-D RAM_SIZE=1024
|
-D RAM_SIZE=1024
|
||||||
|
|||||||
@@ -7,6 +7,5 @@ Do not expect a working Meshtastic device with this target.
|
|||||||
#define _VARIANT_RAK3172_
|
#define _VARIANT_RAK3172_
|
||||||
|
|
||||||
#define USE_STM32WLx
|
#define USE_STM32WLx
|
||||||
#define MAX_NUM_NODES 10
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -23,8 +23,9 @@ build_flags = ${rp2350_base.build_flags}
|
|||||||
-DHAS_WIFI=1
|
-DHAS_WIFI=1
|
||||||
-L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m33"
|
-L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m33"
|
||||||
-fexceptions # for exception handling in MQTT
|
-fexceptions # for exception handling in MQTT
|
||||||
|
-DHAS_UDP_MULTICAST=1
|
||||||
build_src_filter = ${rp2350_base.build_src_filter} +<mesh/wifi/>
|
build_src_filter = ${rp2350_base.build_src_filter} +<mesh/wifi/>
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${rp2350_base.lib_deps}
|
${rp2350_base.lib_deps}
|
||||||
${networking_base.lib_deps}
|
${networking_base.lib_deps}
|
||||||
debug_build_flags = ${rp2350_base.build_flags}, -g
|
debug_build_flags = ${rp2350_base.build_flags}, -g
|
||||||
|
|||||||
@@ -10,9 +10,10 @@ build_flags = ${rp2040_base.build_flags}
|
|||||||
-DHW_SPI1_DEVICE
|
-DHW_SPI1_DEVICE
|
||||||
-L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m0plus"
|
-L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m0plus"
|
||||||
-fexceptions # for exception handling in MQTT
|
-fexceptions # for exception handling in MQTT
|
||||||
|
-DHAS_UDP_MULTICAST=1
|
||||||
build_src_filter = ${rp2040_base.build_src_filter} +<mesh/wifi/>
|
build_src_filter = ${rp2040_base.build_src_filter} +<mesh/wifi/>
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${rp2040_base.lib_deps}
|
${rp2040_base.lib_deps}
|
||||||
${networking_base.lib_deps}
|
${networking_base.lib_deps}
|
||||||
debug_build_flags = ${rp2040_base.build_flags}, -g
|
debug_build_flags = ${rp2040_base.build_flags}, -g
|
||||||
debug_tool = cmsis-dap ; for e.g. Picotool
|
debug_tool = cmsis-dap ; for e.g. Picotool
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ platform_packages =
|
|||||||
|
|
||||||
board = seeed-sensecap-indicator
|
board = seeed-sensecap-indicator
|
||||||
board_check = true
|
board_check = true
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
|
|
||||||
build_flags = ${esp32_base.build_flags}
|
build_flags = ${esp32_base.build_flags}
|
||||||
@@ -32,7 +33,6 @@ lib_deps = ${esp32s3_base.lib_deps}
|
|||||||
extends = env:seeed-sensecap-indicator
|
extends = env:seeed-sensecap-indicator
|
||||||
board_level = main
|
board_level = main
|
||||||
upload_speed = 460800
|
upload_speed = 460800
|
||||||
board_build.partitions = default_8MB.csv ; must be here for some reason, board.json is not enough !?
|
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${env:seeed-sensecap-indicator.build_flags}
|
${env:seeed-sensecap-indicator.build_flags}
|
||||||
@@ -46,7 +46,6 @@ build_flags =
|
|||||||
-D INPUTDRIVER_BUTTON_TYPE=38
|
-D INPUTDRIVER_BUTTON_TYPE=38
|
||||||
-D HAS_TELEMETRY=0
|
-D HAS_TELEMETRY=0
|
||||||
-D CONFIG_DISABLE_HAL_LOCKS=1
|
-D CONFIG_DISABLE_HAL_LOCKS=1
|
||||||
-D MAX_NUM_NODES=250
|
|
||||||
-D HAS_SCREEN=0
|
-D HAS_SCREEN=0
|
||||||
-D HAS_TFT=1
|
-D HAS_TFT=1
|
||||||
-D DISPLAY_SET_RESOLUTION
|
-D DISPLAY_SET_RESOLUTION
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = seeed-xiao-s3
|
board = seeed-xiao-s3
|
||||||
board_check = true
|
board_check = true
|
||||||
board_build.mcu = esp32s3
|
board_build.partitions = default_8MB.csv
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
lib_deps =
|
lib_deps =
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = station-g2
|
board = station-g2
|
||||||
board_check = true
|
board_check = true
|
||||||
|
board_build.partitions = default_16MB.csv
|
||||||
board_build.mcu = esp32s3
|
board_build.mcu = esp32s3
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
;upload_port = /dev/ttyACM0
|
;upload_port = /dev/ttyACM0
|
||||||
@@ -13,6 +14,6 @@ build_unflags =
|
|||||||
-DARDUINO_USB_MODE=1
|
-DARDUINO_USB_MODE=1
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32s3_base.build_flags} -D STATION_G2 -I variants/station-g2
|
${esp32s3_base.build_flags} -D STATION_G2 -I variants/station-g2
|
||||||
-DBOARD_HAS_PSRAM
|
-DBOARD_HAS_PSRAM
|
||||||
-DSTATION_G2
|
-DSTATION_G2
|
||||||
-DARDUINO_USB_MODE=0
|
-DARDUINO_USB_MODE=0
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = t-deck
|
board = t-deck
|
||||||
board_check = true
|
board_check = true
|
||||||
|
board_build.partitions = default_16MB.csv
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
|
|
||||||
build_flags = ${esp32s3_base.build_flags}
|
build_flags = ${esp32s3_base.build_flags}
|
||||||
@@ -20,7 +21,6 @@ lib_deps = ${esp32s3_base.lib_deps}
|
|||||||
|
|
||||||
[env:t-deck-tft]
|
[env:t-deck-tft]
|
||||||
extends = env:t-deck
|
extends = env:t-deck
|
||||||
board_build.partitions = default_16MB.csv
|
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${env:t-deck.build_flags}
|
${env:t-deck.build_flags}
|
||||||
@@ -38,7 +38,6 @@ build_flags =
|
|||||||
-D INPUTDRIVER_ENCODER_DOWN=15
|
-D INPUTDRIVER_ENCODER_DOWN=15
|
||||||
-D INPUTDRIVER_ENCODER_BTN=0
|
-D INPUTDRIVER_ENCODER_BTN=0
|
||||||
-D INPUTDRIVER_BUTTON_TYPE=0
|
-D INPUTDRIVER_BUTTON_TYPE=0
|
||||||
-D MAX_NUM_NODES=250
|
|
||||||
-D HAS_SDCARD
|
-D HAS_SDCARD
|
||||||
-D HAS_SCREEN=0
|
-D HAS_SCREEN=0
|
||||||
-D HAS_TFT=1
|
-D HAS_TFT=1
|
||||||
|
|||||||
@@ -2,11 +2,12 @@
|
|||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = esp32s3box
|
board = esp32s3box
|
||||||
board_check = true
|
board_check = true
|
||||||
|
board_build.partitions = default_16MB.csv
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32s3_base.build_flags}
|
${esp32s3_base.build_flags}
|
||||||
-D T_ETH_ELITE
|
-D T_ETH_ELITE
|
||||||
-I variants/t-eth-elite
|
-I variants/t-eth-elite
|
||||||
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
||||||
|
|
||||||
lib_ignore =
|
lib_ignore =
|
||||||
Ethernet
|
Ethernet
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = t-watch-s3
|
board = t-watch-s3
|
||||||
board_check = true
|
board_check = true
|
||||||
|
board_build.partitions = default_16MB.csv
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
|
|
||||||
build_flags = ${esp32_base.build_flags}
|
build_flags = ${esp32_base.build_flags}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
[env:tbeam-s3-core]
|
[env:tbeam-s3-core]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = tbeam-s3-core
|
board = tbeam-s3-core
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
board_check = true
|
board_check = true
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
[env:tracksenger]
|
[env:tracksenger]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wireless_tracker
|
board = heltec_wireless_tracker
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
upload_protocol = esp-builtin
|
upload_protocol = esp-builtin
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
@@ -16,6 +17,7 @@ lib_deps =
|
|||||||
[env:tracksenger-lcd]
|
[env:tracksenger-lcd]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wireless_tracker
|
board = heltec_wireless_tracker
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
upload_protocol = esp-builtin
|
upload_protocol = esp-builtin
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
@@ -31,6 +33,7 @@ lib_deps =
|
|||||||
[env:tracksenger-oled]
|
[env:tracksenger-oled]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wireless_tracker
|
board = heltec_wireless_tracker
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
upload_protocol = esp-builtin
|
upload_protocol = esp-builtin
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
[env:unphone]
|
[env:unphone]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = unphone
|
board = unphone
|
||||||
|
board_build.partitions = default_8MB.csv
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
monitor_filters = esp32_exception_decoder
|
monitor_filters = esp32_exception_decoder
|
||||||
@@ -32,7 +33,6 @@ lib_deps = ${esp32s3_base.lib_deps}
|
|||||||
|
|
||||||
[env:unphone-tft]
|
[env:unphone-tft]
|
||||||
extends = env:unphone
|
extends = env:unphone
|
||||||
board_build.partitions = default_8MB.csv
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${env:unphone.build_flags}
|
${env:unphone.build_flags}
|
||||||
-D MESHTASTIC_EXCLUDE_CANNEDMESSAGES=1
|
-D MESHTASTIC_EXCLUDE_CANNEDMESSAGES=1
|
||||||
@@ -42,7 +42,6 @@ build_flags =
|
|||||||
-D MESHTASTIC_EXCLUDE_SERIAL=1
|
-D MESHTASTIC_EXCLUDE_SERIAL=1
|
||||||
-D MESHTASTIC_EXCLUDE_SOCKETAPI=1
|
-D MESHTASTIC_EXCLUDE_SOCKETAPI=1
|
||||||
-D INPUTDRIVER_BUTTON_TYPE=21
|
-D INPUTDRIVER_BUTTON_TYPE=21
|
||||||
-D MAX_NUM_NODES=200
|
|
||||||
-D MAX_THREADS=40
|
-D MAX_THREADS=40
|
||||||
-D HAS_SCREEN=0
|
-D HAS_SCREEN=0
|
||||||
-D HAS_TFT=1
|
-D HAS_TFT=1
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ Do not expect a working Meshtastic device with this target.
|
|||||||
#define _VARIANT_WIOE5_
|
#define _VARIANT_WIOE5_
|
||||||
|
|
||||||
#define USE_STM32WLx
|
#define USE_STM32WLx
|
||||||
#define MAX_NUM_NODES 10
|
|
||||||
|
|
||||||
#define LED_PIN PB5
|
#define LED_PIN PB5
|
||||||
#define LED_STATE_ON 1
|
#define LED_STATE_ON 1
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[VERSION]
|
[VERSION]
|
||||||
major = 2
|
major = 2
|
||||||
minor = 6
|
minor = 6
|
||||||
build = 1
|
build = 2
|
||||||
|
|||||||
Reference in New Issue
Block a user