From 51e155cb56f6e304a91a4b4ecc8b70b14bfe2ecd Mon Sep 17 00:00:00 2001 From: 4LAR Date: Tue, 9 Dec 2025 14:17:59 +0000 Subject: [PATCH] mod --- .gitignore | 167 ++++++++++++++++++ alpine.Dockerfile | 2 +- bin/build-esp32.sh | 29 ++- bin/build-native.sh | 12 +- bin/build-nrf52.sh | 49 +++-- bin/build-rp2xx0.sh | 19 +- bin/build-stm32wl.sh | 19 +- bin/device-install.bat | 154 +++++++++++----- bin/device-install.sh | 152 +++++++++++----- bin/device-update.bat | 10 +- bin/device-update.sh | 4 +- bin/native-gdbserver.sh | 2 +- bin/native-run.sh | 2 +- bin/platformio-custom.py | 147 +++++++-------- bin/test-simulator.sh | 2 +- debian/rules | 1 + extra_scripts/disable_adafruit_usb.py | 3 +- extra_scripts/extra_stm32.py | 22 +++ meshtasticd.spec.rpkg | 2 +- platformio.ini | 10 +- protobufs/meshtastic/config.proto | 5 + protobufs/meshtastic/mesh.proto | 4 +- src/graphics/draw/MenuHandler.cpp | 5 +- src/graphics/draw/UIRenderer.cpp | 2 +- src/graphics/img/icon_small.xbm | 60 +++---- src/mesh/RadioInterface.cpp | 6 +- src/mesh/generated/meshtastic/config.pb.h | 4 +- src/mesh/generated/meshtastic/mesh.pb.h | 4 +- src/nimble/NimbleBluetooth.cpp | 8 +- src/platform/nrf52/NRF52Bluetooth.cpp | 34 +--- src/platform/nrf52/architecture.h | 2 +- src/platform/nrf52/main-nrf52.cpp | 10 -- variants/esp32/esp32.ini | 6 - variants/esp32s3/heltec_v3/platformio.ini | 5 +- .../esp32s3/tlora_t3s3_epaper/platformio.ini | 5 +- variants/native/portduino/platformio.ini | 2 +- .../nrf52840/ELECROW-ThinkNode-M1/variant.h | 12 +- .../nrf52840/heltec_mesh_node_t114/variant.h | 4 +- variants/nrf52840/nrf52.ini | 4 - variants/nrf52840/t-echo/variant.h | 8 +- variants/nrf52840/tracker-t1000-e/variant.h | 4 +- .../nrf52840/wio-sdk-wm1110/platformio.ini | 15 +- variants/stm32/stm32.ini | 2 +- 43 files changed, 644 insertions(+), 375 deletions(-) create mode 100644 .gitignore create mode 100755 extra_scripts/extra_stm32.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e923ad7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,167 @@ + +questions/* + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +venv_lin/* +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ +config.ini +logs/* +..env.swp diff --git a/alpine.Dockerfile b/alpine.Dockerfile index b3b3841..bdee57d 100644 --- a/alpine.Dockerfile +++ b/alpine.Dockerfile @@ -28,7 +28,7 @@ RUN bash ./bin/build-native.sh "$PIO_ENV" && \ # ##### PRODUCTION BUILD ############# -FROM alpine:3.23 +FROM alpine:3.22 LABEL org.opencontainers.image.title="Meshtastic" \ org.opencontainers.image.description="Alpine Meshtastic daemon" \ org.opencontainers.image.url="https://meshtastic.org" \ diff --git a/bin/build-esp32.sh b/bin/build-esp32.sh index 8c684aa..92836db 100755 --- a/bin/build-esp32.sh +++ b/bin/build-esp32.sh @@ -5,8 +5,7 @@ set -e VERSION=`bin/buildinfo.py long` SHORT_VERSION=`bin/buildinfo.py short` -BUILDDIR=.pio/build/$1 -OUTDIR=release +OUTDIR=release/ rm -f $OUTDIR/firmware* rm -r $OUTDIR/* || true @@ -15,7 +14,7 @@ rm -r $OUTDIR/* || true platformio pkg install -e $1 echo "Building for $1 with $PLATFORMIO_BUILD_FLAGS" -rm -f $BUILDDIR/firmware* +rm -f .pio/build/$1/firmware.* # The shell vars the build tool expects to find export APP_VERSION=$VERSION @@ -23,14 +22,16 @@ export APP_VERSION=$VERSION basename=firmware-$1-$VERSION pio run --environment $1 # -v - -cp $BUILDDIR/$basename.elf $OUTDIR/$basename.elf +SRCELF=.pio/build/$1/firmware.elf +cp $SRCELF $OUTDIR/$basename.elf echo "Copying ESP32 bin file" -cp $BUILDDIR/$basename.factory.bin $OUTDIR/$basename.factory.bin +SRCBIN=.pio/build/$1/firmware.factory.bin +cp $SRCBIN $OUTDIR/$basename.bin echo "Copying ESP32 update bin file" -cp $BUILDDIR/$basename.bin $OUTDIR/$basename.bin +SRCBIN=.pio/build/$1/firmware.bin +cp $SRCBIN $OUTDIR/$basename-update.bin echo "Building Filesystem for ESP32 targets" # If you want to build the webui, uncomment the following lines @@ -39,13 +40,7 @@ echo "Building Filesystem for ESP32 targets" # # Remove webserver files from the filesystem and rebuild # ls -l data/static # Diagnostic list of files # rm -rf data/static -pio run --environment $1 -t buildfs --disable-auto-clean -cp $BUILDDIR/littlefs-$1-$VERSION.bin $OUTDIR/littlefs-$1-$VERSION.bin -cp bin/device-install.* $OUTDIR/ -cp bin/device-update.* $OUTDIR/ - -# Generate the manifest file -echo "Generating Meshtastic manifest" -TIMEFORMAT="Generated manifest in %E seconds" -time pio run --environment $1 -t mtjson --silent --disable-auto-clean -cp $BUILDDIR/$basename.mt.json $OUTDIR/$basename.mt.json +pio run --environment $1 -t buildfs +cp .pio/build/$1/littlefs.bin $OUTDIR/littlefs-$1-$VERSION.bin +cp bin/device-install.* $OUTDIR +cp bin/device-update.* $OUTDIR \ No newline at end of file diff --git a/bin/build-native.sh b/bin/build-native.sh index f35e46a..fff86e8 100755 --- a/bin/build-native.sh +++ b/bin/build-native.sh @@ -17,19 +17,15 @@ VERSION=$(bin/buildinfo.py long) SHORT_VERSION=$(bin/buildinfo.py short) PIO_ENV=${1:-native} -BUILDDIR=.pio/build/$PIO_ENV -OUTDIR=release +OUTDIR=release/ -rm -f $OUTDIR/meshtasticd* +rm -f $OUTDIR/firmware* mkdir -p $OUTDIR/ rm -r $OUTDIR/* || true -basename=meshtasticd-$1-$VERSION - # Important to pull latest version of libs into all device flavors, otherwise some devices might be stale pio pkg install --environment "$PIO_ENV" || platformioFailed pio run --environment "$PIO_ENV" || platformioFailed - -cp "$BUILDDIR/meshtasticd" "$OUTDIR/meshtasticd_linux_$(uname -m)" -cp bin/native-install.* $OUTDIR/ +cp ".pio/build/$PIO_ENV/program" "$OUTDIR/meshtasticd_linux_$(uname -m)" +cp bin/native-install.* $OUTDIR diff --git a/bin/build-nrf52.sh b/bin/build-nrf52.sh index c605fb1..deca209 100755 --- a/bin/build-nrf52.sh +++ b/bin/build-nrf52.sh @@ -5,8 +5,7 @@ set -e VERSION=$(bin/buildinfo.py long) SHORT_VERSION=$(bin/buildinfo.py short) -BUILDDIR=.pio/build/$1 -OUTDIR=release +OUTDIR=release/ rm -f $OUTDIR/firmware* rm -r $OUTDIR/* || true @@ -15,7 +14,7 @@ rm -r $OUTDIR/* || true platformio pkg install -e $1 echo "Building for $1 with $PLATFORMIO_BUILD_FLAGS" -rm -f $BUILDDIR/firmware* +rm -f .pio/build/$1/firmware.* # The shell vars the build tool expects to find export APP_VERSION=$VERSION @@ -23,32 +22,32 @@ export APP_VERSION=$VERSION basename=firmware-$1-$VERSION pio run --environment $1 # -v +SRCELF=.pio/build/$1/firmware.elf +cp $SRCELF $OUTDIR/$basename.elf -cp $BUILDDIR/$basename.elf $OUTDIR/$basename.elf +echo "Generating NRF52 dfu file" +DFUPKG=.pio/build/$1/firmware.zip +cp $DFUPKG $OUTDIR/$basename-ota.zip -echo "Copying NRF52 dfu (OTA) file" -cp $BUILDDIR/$basename.zip $OUTDIR/$basename.zip +echo "Generating NRF52 uf2 file" +SRCHEX=.pio/build/$1/firmware.hex -echo "Copying NRF52 UF2 file" -cp $BUILDDIR/$basename.uf2 $OUTDIR/$basename.uf2 -cp bin/*.uf2 $OUTDIR/ - -SRCHEX=$BUILDDIR/$basename.hex - -# if WM1110 target, copy the merged.hex +# if WM1110 target, merge hex with softdevice 7.3.0 if (echo $1 | grep -q "wio-sdk-wm1110"); then - echo "Copying .merged.hex file" - SRCHEX=$BUILDDIR/$basename.merged.hex - cp $SRCHEX $OUTDIR/ + echo "Merging with softdevice" + bin/mergehex -m bin/s140_nrf52_7.3.0_softdevice.hex $SRCHEX -o .pio/build/$1/$basename.hex + SRCHEX=.pio/build/$1/$basename.hex + bin/uf2conv.py $SRCHEX -c -o $OUTDIR/$basename.uf2 -f 0xADA52840 + cp $SRCHEX $OUTDIR + cp bin/*.uf2 $OUTDIR +else + bin/uf2conv.py $SRCHEX -c -o $OUTDIR/$basename.uf2 -f 0xADA52840 + cp bin/device-install.* $OUTDIR + cp bin/device-update.* $OUTDIR + cp bin/*.uf2 $OUTDIR fi if (echo $1 | grep -q "rak4631"); then - echo "Copying .hex file" - cp $SRCHEX $OUTDIR/ -fi - -# Generate the manifest file -echo "Generating Meshtastic manifest" -TIMEFORMAT="Generated manifest in %E seconds" -time pio run --environment $1 -t mtjson --silent --disable-auto-clean -cp $BUILDDIR/$basename.mt.json $OUTDIR/$basename.mt.json + echo "Copying hex file" + cp .pio/build/$1/firmware.hex $OUTDIR/$basename.hex +fi \ No newline at end of file diff --git a/bin/build-rp2xx0.sh b/bin/build-rp2xx0.sh index ae26fdf..cb48659 100755 --- a/bin/build-rp2xx0.sh +++ b/bin/build-rp2xx0.sh @@ -5,8 +5,7 @@ set -e VERSION=`bin/buildinfo.py long` SHORT_VERSION=`bin/buildinfo.py short` -BUILDDIR=.pio/build/$1 -OUTDIR=release +OUTDIR=release/ rm -f $OUTDIR/firmware* rm -r $OUTDIR/* || true @@ -15,7 +14,7 @@ rm -r $OUTDIR/* || true platformio pkg install -e $1 echo "Building for $1 with $PLATFORMIO_BUILD_FLAGS" -rm -f $BUILDDIR/firmware* +rm -f .pio/build/$1/firmware.* # The shell vars the build tool expects to find export APP_VERSION=$VERSION @@ -23,14 +22,12 @@ export APP_VERSION=$VERSION basename=firmware-$1-$VERSION pio run --environment $1 # -v - -cp $BUILDDIR/$basename.elf $OUTDIR/$basename.elf +SRCELF=.pio/build/$1/firmware.elf +cp $SRCELF $OUTDIR/$basename.elf echo "Copying uf2 file" -cp $BUILDDIR/$basename.uf2 $OUTDIR/$basename.uf2 +SRCBIN=.pio/build/$1/firmware.uf2 +cp $SRCBIN $OUTDIR/$basename.uf2 -# Generate the manifest file -echo "Generating Meshtastic manifest" -TIMEFORMAT="Generated manifest in %E seconds" -time pio run --environment $1 -t mtjson --silent --disable-auto-clean -cp $BUILDDIR/$basename.mt.json $OUTDIR/$basename.mt.json +cp bin/device-install.* $OUTDIR +cp bin/device-update.* $OUTDIR diff --git a/bin/build-stm32wl.sh b/bin/build-stm32wl.sh index b85da04..f62df48 100755 --- a/bin/build-stm32wl.sh +++ b/bin/build-stm32wl.sh @@ -5,8 +5,7 @@ set -e VERSION=$(bin/buildinfo.py long) SHORT_VERSION=$(bin/buildinfo.py short) -BUILDDIR=.pio/build/$1 -OUTDIR=release +OUTDIR=release/ rm -f $OUTDIR/firmware* rm -r $OUTDIR/* || true @@ -15,7 +14,7 @@ rm -r $OUTDIR/* || true platformio pkg install -e $1 echo "Building for $1 with $PLATFORMIO_BUILD_FLAGS" -rm -f $BUILDDIR/firmware* +rm -f .pio/build/$1/firmware.* # The shell vars the build tool expects to find export APP_VERSION=$VERSION @@ -23,14 +22,8 @@ export APP_VERSION=$VERSION basename=firmware-$1-$VERSION pio run --environment $1 # -v +SRCELF=.pio/build/$1/firmware.elf +cp $SRCELF $OUTDIR/$basename.elf -cp $BUILDDIR/$basename.elf $OUTDIR/$basename.elf - -echo "Copying STM32 bin file" -cp $BUILDDIR/$basename.bin $OUTDIR/$basename.bin - -# Generate the manifest file -echo "Generating Meshtastic manifest" -TIMEFORMAT="Generated manifest in %E seconds" -time pio run --environment $1 -t mtjson --silent --disable-auto-clean -cp $BUILDDIR/$basename.mt.json $OUTDIR/$basename.mt.json +SRCBIN=.pio/build/$1/firmware.bin +cp $SRCBIN $OUTDIR/$basename.bin diff --git a/bin/device-install.bat b/bin/device-install.bat index 68ded36..9e3634a 100755 --- a/bin/device-install.bat +++ b/bin/device-install.bat @@ -5,14 +5,22 @@ TITLE Meshtastic device-install SET "SCRIPT_NAME=%~nx0" SET "DEBUG=0" SET "PYTHON=" +SET "TFT_BUILD=0" +SET "BIGDB8=0" +SET "MUIDB8=0" +SET "BIGDB16=0" SET "ESPTOOL_BAUD=115200" SET "ESPTOOL_CMD=" SET "LOGCOUNTER=0" SET "BPS_RESET=0" -@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 FIXME: Determine mcu from PlatformIO variant, this is unmaintainable. +SET "S3=s3 v3 t-deck wireless-paper wireless-tracker station-g2 unphone t-eth-elite tlora-pager mesh-tab dreamcatcher ESP32-S3-Pico seeed-sensecap-indicator heltec_capsule_sensor_v3 vision-master icarus tracksenger elecrow-adv heltec-v4" +SET "C3=esp32c3" +@REM FIXME: Determine flash size from PlatformIO variant, this is unmaintainable. +SET "BIGDB_8MB=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 "MUIDB_8MB=picomputer-s3 unphone seeed-sensecap-indicator" +SET "BIGDB_16MB=t-deck mesh-tab t-energy-s3 dreamcatcher ESP32-S3-Pico m5stack-cores3 station-g2 t-eth-elite tlora-pager t-watch-s3 elecrow-adv heltec-v4" GOTO getopts :help @@ -21,7 +29,7 @@ ECHO. ECHO Usage: %SCRIPT_NAME% -f filename [-p PORT] [-P python] [--1200bps-reset] ECHO. ECHO Options: -ECHO -f filename The firmware .factory.bin file to flash. Custom to your device type and region. (required) +ECHO -f filename The firmware .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). @@ -32,12 +40,12 @@ ECHO --1200bps-reset Attempt to place the device in correct mode. (1200bps ECHO Some hardware requires this twice. ECHO. ECHO Example: %SCRIPT_NAME% -p COM17 --1200bps-reset -ECHO Example: %SCRIPT_NAME% -f firmware-t-deck-tft-2.6.0.0b106d4.factory.bin -p COM11 -ECHO Example: %SCRIPT_NAME% -f firmware-unphone-2.6.0.0b106d4.factory.bin -p COM11 +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 GOTO eof :version -ECHO %SCRIPT_NAME% [Version 2.7.0] +ECHO %SCRIPT_NAME% [Version 2.6.2] ECHO Meshtastic GOTO eof @@ -70,8 +78,8 @@ IF "__!FILENAME!__"=="____" ( CALL :LOG_MESSAGE ERROR "Filename containing spaces are not supported." GOTO help ) - IF NOT "__!FILENAME:.factory.bin=!__"=="__!FILENAME!__" ( - CALL :LOG_MESSAGE ERROR "Filename must be a firmware-*.factory.bin file." + IF "__!FILENAME:firmware-=!__"=="__!FILENAME!__" ( + CALL :LOG_MESSAGE ERROR "Filename must be a firmware-* file." GOTO help ) @REM Remove ".\" or "./" file prefix if present. @@ -85,26 +93,12 @@ IF NOT EXIST !FILENAME! ( GOTO eof ) -CALL :LOG_MESSAGE DEBUG "Checking for metadata..." -@REM Derive metadata filename from firmware filename. -SET "METAFILE=!FILENAME:.factory.bin=!.mt.json" -IF EXIST !METAFILE! ( - @REM Print parsed json with powershell - CALL :LOG_MESSAGE INFO "Firmware metadata: !METAFILE!" - powershell -NoProfile -Command "(Get-Content '!METAFILE!' | ConvertFrom-Json | Out-String).Trim()" - - @REM Save metadata values to variables for later use. - FOR /f "usebackq" %%A IN (`powershell -NoProfile -Command ^ - "(Get-Content '!METAFILE!' | ConvertFrom-Json).mcu"`) DO SET "MCU=%%A" - FOR /f "usebackq" %%A IN (`powershell -NoProfile -Command ^ - "(Get-Content '!METAFILE!' | ConvertFrom-Json).part | Where-Object { $_.subtype -eq 'ota_1' } | Select-Object -ExpandProperty offset"` - ) DO SET "OTA_OFFSET=%%A" - FOR /f "usebackq" %%A IN (`powershell -NoProfile -Command ^ - "(Get-Content '!METAFILE!' | ConvertFrom-Json).part | Where-Object { $_.subtype -eq 'spiffs' } | Select-Object -ExpandProperty offset"` - ) DO SET "SPIFFS_OFFSET=%%A" -) ELSE ( - CALL :LOG_MESSAGE ERROR "No metadata file found: !METAFILE!" +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!" ) :skip-filename @@ -114,7 +108,7 @@ 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..." + 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. @@ -152,26 +146,100 @@ IF %BPS_RESET% EQU 1 ( GOTO eof ) -@REM Extract PROGNAME from %FILENAME% for later use. -SET "PROGNAME=!FILENAME:.factory.bin=!" -CALL :LOG_MESSAGE DEBUG "Computed PROGNAME: !PROGNAME!" - -IF "__!MCU!__" == "__esp32s3__" ( - @REM We are working with ESP32-S3 - SET "OTA_FILENAME=bleota-s3.bin" -) ELSE IF "__!MCU!__" == "__esp32c3__" ( - @REM We are working with ESP32-C3 - SET "OTA_FILENAME=bleota-c3.bin" +@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!" + SET "TFT_BUILD=1" ) ELSE ( - @REM Everything else - SET "OTA_FILENAME=bleota.bin" + 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 (%MUIDB_8MB%) DO ( + IF NOT "!FILENAME:%%a=!"=="!FILENAME!" ( + @REM We are working with any of %MUIDB_8MB%. + SET "MUIDB8=1" + GOTO end_loop_muidb_8mb + ) +) +:end_loop_muidb_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 %MUIDB8% EQU 1 CALL :LOG_MESSAGE INFO "MUIDB 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 Set SPIFFS filename with "littlefs-" prefix. -SET "SPIFFS_FILENAME=littlefs-!PROGNAME:firmware-=!.bin" +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 MUIDB 8mb. +IF %MUIDB8% EQU 1 ( + SET "OTA_OFFSET=0x5D0000" + 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!" diff --git a/bin/device-install.sh b/bin/device-install.sh index 1778a95..69e4794 100755 --- a/bin/device-install.sh +++ b/bin/device-install.sh @@ -2,15 +2,69 @@ PYTHON=${PYTHON:-$(which python3 python | head -n 1)} BPS_RESET=false +TFT_BUILD=false MCU="" # Constants RESET_BAUD=1200 FIRMWARE_OFFSET=0x00 -# Default littlefs* offset. -OFFSET=0x300000 -# Default OTA Offset -OTA_OFFSET=0x260000 + +# Variant groups +BIGDB_8MB=( + "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" +) +MUIDB_8MB=( + "picomputer-s3" + "unphone" + "seeed-sensecap-indicator" +) +BIGDB_16MB=( + "dreamcatcher" + "elecrow-adv" + "ESP32-S3-Pico" + "heltec-v4" + "m5stack-cores3" + "mesh-tab" + "station-g2" + "t-deck" + "t-energy-s3" + "t-eth-elite" + "t-watch-s3" + "tlora-pager" +) +S3_VARIANTS=( + "s3" + "-v3" + "-v4" + "t-deck" + "wireless-paper" + "wireless-tracker" + "station-g2" + "unphone" + "t-eth-elite" + "tlora-pager" + "mesh-tab" + "dreamcatcher" + "ESP32-S3-Pico" + "seeed-sensecap-indicator" + "heltec_capsule_sensor_v3" + "vision-master" + "icarus" + "tracksenger" + "elecrow-adv" +) # Determine the correct esptool command to use if "$PYTHON" -m esptool version >/dev/null 2>&1; then @@ -24,14 +78,6 @@ else exit 1 fi -# Check for jq -if ! command -v jq >/dev/null 2>&1; then - echo "Error: jq not found" >&2 - echo "Install jq with your package manager." >&2 - echo "e.g. 'apt install jq', 'dnf install jq', 'brew install jq', etc." >&2 - exit 1 -fi - set -e # Usage info @@ -43,7 +89,7 @@ Flash image file to device, but first erasing and writing system information. -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 PYTHON Specify alternate python interpreter to use to invoke esptool. (Default: "$PYTHON") - -f FILENAME The firmware *.factory.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. --1200bps-reset Attempt to place the device in correct mode. Some hardware requires this twice. (1200bps Reset) EOF @@ -92,43 +138,69 @@ fi shift } -if [[ $(basename "$FILENAME") != firmware-*.factory.bin ]]; then - echo "Filename must be a firmware-*.factory.bin file." +if [[ "$FILENAME" != firmware-* ]]; then + echo "Filename must be a firmware-* file." exit 1 fi -# Extract PROGNAME from %FILENAME% for later use. -PROGNAME="${FILENAME/.factory.bin/}" -# Derive metadata filename from %PROGNAME%. -METAFILE="${PROGNAME}.mt.json" +# Check if FILENAME contains "-tft-" and set target partitionScheme accordingly. +if [[ "${FILENAME//-tft-/}" != "$FILENAME" ]]; then + TFT_BUILD=true +fi -if [[ -f "$FILENAME" && "$FILENAME" == *.factory.bin ]]; then - # Display metadata if it exists - if [[ -f "$METAFILE" ]]; then - echo "Firmware metadata: ${METAFILE}" - jq . "$METAFILE" - # Extract relevant fields from metadata - if [[ $(jq -r '.part' "$METAFILE") != "null" ]]; then - OTA_OFFSET=$(jq -r '.part[] | select(.subtype == "ota_1") | .offset' "$METAFILE") - SPIFFS_OFFSET=$(jq -r '.part[] | select(.subtype == "spiffs") | .offset' "$METAFILE") +# Extract BASENAME from %FILENAME% for later use. +BASENAME="${FILENAME/firmware-/}" + +if [ -f "${FILENAME}" ] && [ -n "${FILENAME##*"update"*}" ]; then + # Default littlefs* offset. + 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 - MCU=$(jq -r '.mcu' "$METAFILE") - else - echo "ERROR: No metadata file found at ${METAFILE}" - exit 1 - fi + done - # Determine OTA filename based on MCU type - if [ "$MCU" == "esp32s3" ]; then - OTAFILE=bleota-s3.bin - elif [ "$MCU" == "esp32c3" ]; then - OTAFILE=bleota-c3.bin + for variant in "${MUIDB_8MB[@]}"; do + if [ -z "${FILENAME##*"$variant"*}" ]; then + OFFSET=0x670000 + OTA_OFFSET=0x5D0000 + 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.bin + OTAFILE=bleota-s3.bin fi # Set SPIFFS filename with "littlefs-" prefix. - SPIFFSFILE="littlefs-${PROGNAME/firmware-/}.bin" + SPIFFSFILE=littlefs-${BASENAME} if [[ ! -f "$FILENAME" ]]; then echo "Error: file ${FILENAME} wasn't found. Terminating." diff --git a/bin/device-update.bat b/bin/device-update.bat index 5512ea2..fa8c083 100755 --- a/bin/device-update.bat +++ b/bin/device-update.bat @@ -30,11 +30,11 @@ ECHO --change-mode Attempt to place the device in correct mode. (1200bps ECHO Some hardware requires this twice. ECHO. ECHO Example: %SCRIPT_NAME% -p COM17 --change-mode -ECHO Example: %SCRIPT_NAME% -f firmware-t-deck-tft-2.6.0.0b106d4.bin -p COM11 +ECHO Example: %SCRIPT_NAME% -f firmware-t-deck-tft-2.6.0.0b106d4-update.bin -p COM11 GOTO eof :version -ECHO %SCRIPT_NAME% [Version 2.7.0] +ECHO %SCRIPT_NAME% [Version 2.6.2] ECHO Meshtastic GOTO eof @@ -78,12 +78,12 @@ IF NOT EXIST !FILENAME! ( GOTO eof ) -IF NOT "__!FILENAME:.factory.bin=!__"=="__!FILENAME!__" ( - CALL :LOG_MESSAGE DEBUG "We are working with a *.factory.bin* file. !FILENAME!" +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 not working with a *.factory.bin* file. !FILENAME!" + CALL :LOG_MESSAGE DEBUG "We are working with a *update* file. !FILENAME!" ) :skip-filename diff --git a/bin/device-update.sh b/bin/device-update.sh index 1c3d6be..f64280a 100755 --- a/bin/device-update.sh +++ b/bin/device-update.sh @@ -29,7 +29,7 @@ Flash image file to device, leave existing system intact." -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 PYTHON Specify alternate python interpreter to use to invoke esptool. (Default: "$PYTHON") - -f FILENAME The *.bin file to flash. Custom to your device type. + -f FILENAME The *update.bin file to flash. Custom to your device type. --change-mode Attempt to place the device in correct mode. Some hardware requires this twice. (1200bps Reset) EOF @@ -78,7 +78,7 @@ fi shift } -if [[ -f "$FILENAME" && "$FILENAME" != *.factory.bin ]]; then +if [ -f "${FILENAME}" ] && [ -z "${FILENAME##*"update"*}" ]; then echo "Trying to flash update ${FILENAME}" $ESPTOOL_CMD --baud $FLASH_BAUD write-flash $UPDATE_OFFSET "${FILENAME}" else diff --git a/bin/native-gdbserver.sh b/bin/native-gdbserver.sh index a45a2dc..f779d66 100755 --- a/bin/native-gdbserver.sh +++ b/bin/native-gdbserver.sh @@ -2,4 +2,4 @@ set -e pio run --environment native -gdbserver --once localhost:2345 .pio/build/native/meshtasticd "$@" +gdbserver --once localhost:2345 .pio/build/native/program "$@" diff --git a/bin/native-run.sh b/bin/native-run.sh index a8309c2..6566fc5 100755 --- a/bin/native-run.sh +++ b/bin/native-run.sh @@ -2,4 +2,4 @@ set -e pio run --environment native -.pio/build/native/meshtasticd "$@" +.pio/build/native/program "$@" diff --git a/bin/platformio-custom.py b/bin/platformio-custom.py index 151cf0a..4a1887d 100644 --- a/bin/platformio-custom.py +++ b/bin/platformio-custom.py @@ -2,77 +2,98 @@ # trunk-ignore-all(ruff/F821) # trunk-ignore-all(flake8/F821): For SConstruct imports import sys -from os.path import join, basename, isfile +from os.path import join import subprocess import json import re +import time from datetime import datetime from readprops import readProps Import("env") platform = env.PioPlatform() -progname = env.get("PROGNAME") -lfsbin = f"{progname.replace('firmware-', 'littlefs-')}.bin" -def manifest_gather(source, target, env): - out = [] - check_paths = [ - progname, - f"{progname}.elf", - f"{progname}.bin", - f"{progname}.factory.bin", - f"{progname}.hex", - f"{progname}.merged.hex", - f"{progname}.uf2", - f"{progname}.factory.uf2", - f"{progname}.zip", - lfsbin + +def esp32_create_combined_bin(source, target, env): + # this sub is borrowed from ESPEasy build toolchain. It's licensed under GPL V3 + # https://github.com/letscontrolit/ESPEasy/blob/mega/tools/pio/post_esp32.py + print("Generating combined binary for serial flashing") + + app_offset = 0x10000 + + new_file_name = env.subst("$BUILD_DIR/${PROGNAME}.factory.bin") + sections = env.subst(env.get("FLASH_EXTRA_IMAGES")) + firmware_name = env.subst("$BUILD_DIR/${PROGNAME}.bin") + chip = env.get("BOARD_MCU") + flash_size = env.BoardConfig().get("upload.flash_size") + flash_freq = env.BoardConfig().get("build.f_flash", "40m") + flash_freq = flash_freq.replace("000000L", "m") + flash_mode = env.BoardConfig().get("build.flash_mode", "dio") + memory_type = env.BoardConfig().get("build.arduino.memory_type", "qio_qspi") + if flash_mode == "qio" or flash_mode == "qout": + flash_mode = "dio" + if memory_type == "opi_opi" or memory_type == "opi_qspi": + flash_mode = "dout" + cmd = [ + "--chip", + chip, + "merge_bin", + "-o", + new_file_name, + "--flash_mode", + flash_mode, + "--flash_freq", + flash_freq, + "--flash_size", + flash_size, ] - for p in check_paths: - f = env.File(env.subst(f"$BUILD_DIR/{p}")) - if f.exists(): - d = { - "name": p, - "md5": f.get_content_hash(), # Returns MD5 hash - "bytes": f.get_size() # Returns file size in bytes - } - out.append(d) - print(d) - manifest_write(out, env) -def manifest_write(files, env): - manifest = { - "version": verObj["long"], - "build_epoch": build_epoch, - "board": env.get("PIOENV"), - "mcu": env.get("BOARD_MCU"), - "repo": repo_owner, - "files": files, - "part": None, - "has_mui": False, - "has_inkhud": False, - } - # Get partition table (generated in esp32_pre.py) if it exists - if env.get("custom_mtjson_part"): - # custom_mtjson_part is a JSON string, convert it back to a dict - pj = json.loads(env.get("custom_mtjson_part")) - manifest["part"] = pj - # Enable has_mui for TFT builds - if ("HAS_TFT", 1) in env.get("CPPDEFINES", []): - manifest["has_mui"] = True - if "MESHTASTIC_INCLUDE_INKHUD" in env.get("CPPDEFINES", []): - manifest["has_inkhud"] = True + print(" Offset | File") + for section in sections: + sect_adr, sect_file = section.split(" ", 1) + print(f" - {sect_adr} | {sect_file}") + cmd += [sect_adr, sect_file] - # Write the manifest to the build directory - with open(env.subst("$BUILD_DIR/${PROGNAME}.mt.json"), "w") as f: - json.dump(manifest, f, indent=2) + print(f" - {hex(app_offset)} | {firmware_name}") + cmd += [hex(app_offset), firmware_name] + + print("Using esptool.py arguments: %s" % " ".join(cmd)) + + esptool.main(cmd) + + +if platform.name == "espressif32": + sys.path.append(join(platform.get_package_dir("tool-esptoolpy"))) + import esptool + + env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", esp32_create_combined_bin) + + esp32_kind = env.GetProjectOption("custom_esp32_kind") + if esp32_kind == "esp32": + # Free up some IRAM by removing auxiliary SPI flash chip drivers. + # Wrapped stub symbols are defined in src/platform/esp32/iram-quirk.c. + env.Append( + LINKFLAGS=[ + "-Wl,--wrap=esp_flash_chip_gd", + "-Wl,--wrap=esp_flash_chip_issi", + "-Wl,--wrap=esp_flash_chip_winbond", + ] + ) + else: + # For newer ESP32 targets, using newlib nano works better. + env.Append(LINKFLAGS=["--specs=nano.specs", "-u", "_printf_float"]) + +if platform.name == "nordicnrf52": + 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\"", + "Generating UF2 file")) Import("projenv") prefsLoc = projenv["PROJECT_DIR"] + "/version.properties" verObj = readProps(prefsLoc) -print(f"Using meshtastic platformio-custom.py, firmware version {verObj['long']} on {env.get('PIOENV')}") +print("Using meshtastic platformio-custom.py, firmware version " + verObj["long"] + " on " + env.get("PIOENV")) # get repository owner if git is installed try: @@ -118,10 +139,10 @@ flags = [ "-DBUILD_EPOCH=" + str(build_epoch), ] + pref_flags -print("Using flags:") +print ("Using flags:") for flag in flags: print(flag) - + projenv.Append( CCFLAGS=flags, ) @@ -160,19 +181,3 @@ def load_boot_logo(source, target, env): # Load the boot logo on TFT builds if ("HAS_TFT", 1) in env.get("CPPDEFINES", []): env.AddPreAction('$BUILD_DIR/littlefs.bin', load_boot_logo) - -# Rename (mv) littlefs.bin to include the PROGNAME -# This ensures the littlefs.bin is named consistently with the firmware -env.AddPostAction('$BUILD_DIR/littlefs.bin', env.VerboseAction( - f'mv $BUILD_DIR/littlefs.bin $BUILD_DIR/{lfsbin}', - f'Renaming littlefs.bin to {lfsbin}' -)) - -env.AddCustomTarget( - name="mtjson", - dependencies=None, - actions=[manifest_gather], - title="Meshtastic Manifest", - description="Generating Meshtastic manifest JSON + Checksums", - always_build=True, -) diff --git a/bin/test-simulator.sh b/bin/test-simulator.sh index 92ed21a..3c5f8f8 100755 --- a/bin/test-simulator.sh +++ b/bin/test-simulator.sh @@ -3,7 +3,7 @@ set -e echo "Starting simulator" -.pio/build/native/meshtasticd -s & +.pio/build/native/program & sleep 20 # 5 seconds was not enough echo "Simulator started, launching python test..." diff --git a/debian/rules b/debian/rules index ebb5721..0b5d1ac 100755 --- a/debian/rules +++ b/debian/rules @@ -28,4 +28,5 @@ override_dh_auto_build: # Build with platformio $(PIO_ENV) platformio run -e native-tft # Move the binary and default config to the correct name + mv .pio/build/native-tft/program .pio/build/native-tft/meshtasticd cp bin/config-dist.yaml bin/config.yaml diff --git a/extra_scripts/disable_adafruit_usb.py b/extra_scripts/disable_adafruit_usb.py index 3b901e2..5962421 100644 --- a/extra_scripts/disable_adafruit_usb.py +++ b/extra_scripts/disable_adafruit_usb.py @@ -1,9 +1,10 @@ -#!/usr/bin/env python3 # trunk-ignore-all(flake8/F821) # trunk-ignore-all(ruff/F821) Import("env") +# NOTE: This is not currently used, but can serve as an example on how to write extra_scripts + # print("Current CLI targets", COMMAND_LINE_TARGETS) # print("Current Build targets", BUILD_TARGETS) # print("CPP defs", env.get("CPPDEFINES")) diff --git a/extra_scripts/extra_stm32.py b/extra_scripts/extra_stm32.py new file mode 100755 index 0000000..f3bd8c5 --- /dev/null +++ b/extra_scripts/extra_stm32.py @@ -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", + ), +) diff --git a/meshtasticd.spec.rpkg b/meshtasticd.spec.rpkg index 3456001..e2da172 100644 --- a/meshtasticd.spec.rpkg +++ b/meshtasticd.spec.rpkg @@ -76,7 +76,7 @@ platformio run -e native-tft %install # Install meshtasticd binary mkdir -p %{buildroot}%{_bindir} -install -m 0755 .pio/build/native-tft/meshtasticd %{buildroot}%{_bindir}/meshtasticd +install -m 0755 .pio/build/native-tft/program %{buildroot}%{_bindir}/meshtasticd # Install portduino VFS dir install -p -d -m 0770 %{buildroot}%{_localstatedir}/lib/meshtasticd diff --git a/platformio.ini b/platformio.ini index 218b754..9b8d0a1 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,9 +14,7 @@ description = Meshtastic [env] test_build_src = true -extra_scripts = - pre:bin/platformio-pre.py - bin/platformio-custom.py +extra_scripts = bin/platformio-custom.py ; note: we add src to our include search path so that lmic_project_config can override ; note: TINYGPS_OPTION_NO_CUSTOM_FIELDS is VERY important. We don't use custom fields and somewhere in that pile ; of code is a heap corruption bug! @@ -123,7 +121,7 @@ lib_deps = [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/4fb5f24787caa841b58dbf623a52c4c5861d6722.zip + https://github.com/meshtastic/device-ui/archive/3bf332240416c5cb8c919fac2a0ec7260eb3be75.zip ; Common libs for environmental measurements in telemetry module [environmental_base] @@ -184,8 +182,8 @@ lib_deps = dfrobot/DFRobot_BMM150@1.0.0 # renovate: datasource=custom.pio depName=Adafruit_TSL2561 packageName=adafruit/library/Adafruit TSL2561 adafruit/Adafruit TSL2561@1.1.2 - # renovate: datasource=custom.pio depName=BH1750_WE packageName=wollewald/library/BH1750_WE - wollewald/BH1750_WE@1.1.10 + # renovate: datasource=custom.pio depName=BH1750_WE packageName=wollewald/BH1750_WE@^1.1.10 + wollewald/BH1750_WE@^1.1.10 ; (not included in native / portduino) [environmental_extra] diff --git a/protobufs/meshtastic/config.proto b/protobufs/meshtastic/config.proto index 4d352c1..e9d04d0 100644 --- a/protobufs/meshtastic/config.proto +++ b/protobufs/meshtastic/config.proto @@ -924,6 +924,11 @@ message Config { * Brazil 902MHz */ BR_902 = 26; + + /* + * Custom unrestricted region + */ + NO_LIMITS = 27; } /* diff --git a/protobufs/meshtastic/mesh.proto b/protobufs/meshtastic/mesh.proto index 468231f..232d34f 100644 --- a/protobufs/meshtastic/mesh.proto +++ b/protobufs/meshtastic/mesh.proto @@ -700,9 +700,9 @@ enum HardwareModel { HELTEC_SENSOR_HUB = 92; /* - * Muzi Works Muzi-Base device + * Reserved Fried Chicken ID for future use */ - MUZI_BASE = 93; + RESERVED_FRIED_CHICKEN = 93; /* * Heltec Magnetic Power Bank with Meshtastic compatible diff --git a/src/graphics/draw/MenuHandler.cpp b/src/graphics/draw/MenuHandler.cpp index f782dab..35675ec 100644 --- a/src/graphics/draw/MenuHandler.cpp +++ b/src/graphics/draw/MenuHandler.cpp @@ -103,7 +103,8 @@ void menuHandler::LoraRegionPicker(uint32_t duration) "KZ_433", "KZ_863", "NP_865", - "BR_902"}; + "BR_902", + "NO_LIMITS"}; BannerOverlayOptions bannerOptions; #if defined(M5STACK_UNITC6L) bannerOptions.message = "LoRa Region"; @@ -112,7 +113,7 @@ void menuHandler::LoraRegionPicker(uint32_t duration) #endif bannerOptions.durationMs = duration; bannerOptions.optionsArrayPtr = optionsArray; - bannerOptions.optionsCount = 27; + bannerOptions.optionsCount = 28; bannerOptions.InitialSelected = 0; bannerOptions.bannerCallback = [](int selected) -> void { if (selected != 0 && config.lora.region != _meshtastic_Config_LoRaConfig_RegionCode(selected)) { diff --git a/src/graphics/draw/UIRenderer.cpp b/src/graphics/draw/UIRenderer.cpp index 1f01640..f5b6ca0 100644 --- a/src/graphics/draw/UIRenderer.cpp +++ b/src/graphics/draw/UIRenderer.cpp @@ -940,7 +940,7 @@ void UIRenderer::drawIconScreen(const char *upperMsg, OLEDDisplay *display, OLED display->setFont(FONT_MEDIUM); display->setTextAlignment(TEXT_ALIGN_LEFT); - const char *title = "meshtastic.org"; + const char *title = "meshtastic MOD"; display->drawString(x + getStringCenteredX(title), y + SCREEN_HEIGHT - FONT_HEIGHT_MEDIUM, title); display->setFont(FONT_SMALL); // Draw region in upper left diff --git a/src/graphics/img/icon_small.xbm b/src/graphics/img/icon_small.xbm index e320a1f..2a5c40a 100644 --- a/src/graphics/img/icon_small.xbm +++ b/src/graphics/img/icon_small.xbm @@ -1,30 +1,30 @@ -#ifndef USERPREFS_HAS_SPLASH -#define icon_width 50 -#define icon_height 20 -static uint8_t icon_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, - 0x07, 0xc0, 0x07, 0x00, 0x00, 0x00, 0xc0, 0x0f, - 0xc0, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0x07, 0xe0, - 0x0f, 0x00, 0x00, 0x00, 0xe0, 0x07, 0xf0, 0x1f, - 0x00, 0x00, 0x00, 0xf0, 0x03, 0xf0, 0x3f, 0x00, - 0x00, 0x00, 0xf8, 0x03, 0xf8, 0x7f, 0x00, 0x00, - 0x00, 0xf8, 0x01, 0xfc, 0x7e, 0x00, 0x00, 0x00, - 0xfc, 0x00, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0xfe, - 0x00, 0x7e, 0xf8, 0x00, 0x00, 0x00, 0x7e, 0x00, - 0x3f, 0xf8, 0x01, 0x00, 0x00, 0x3f, 0x00, 0x1f, - 0xf0, 0x01, 0x00, 0x00, 0x1f, 0x80, 0x1f, 0xe0, - 0x03, 0x00, 0x80, 0x1f, 0xc0, 0x0f, 0xe0, 0x03, - 0x00, 0x80, 0x0f, 0xc0, 0x07, 0xc0, 0x07, 0x00, - 0xc0, 0x0f, 0xe0, 0x07, 0x80, 0x0f, 0x00, 0xe0, - 0x07, 0xf0, 0x03, 0x80, 0x1f, 0x00, 0xe0, 0x03, - 0xf8, 0x03, 0x00, 0x1f, 0x00, 0xf0, 0x03, 0xf8, - 0x01, 0x00, 0x3f, 0x00, 0xf8, 0x01, 0xfc, 0x00, - 0x00, 0x7e, 0x00, 0xfc, 0x00, 0xfe, 0x00, 0x00, - 0x7e, 0x00, 0xfc, 0x00, 0x7e, 0x00, 0x00, 0xfc, - 0x00, 0x7e, 0x00, 0x3f, 0x00, 0x00, 0xf8, 0x00, - 0x7e, 0x00, 0x3e, 0x00, 0x00, 0xf8, 0x00, 0x38, - 0x00, 0x1c, 0x00, 0x00, 0x70, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 }; -#endif \ No newline at end of file +#ifndef USERPREFS_HAS_SPLASH +#define icon_width 50 +#define icon_height 20 +static uint8_t icon_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, + 0x07, 0xc0, 0x07, 0x00, 0x00, 0x00, 0xc0, 0x0f, + 0xc0, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0x07, 0xe0, + 0x0f, 0x00, 0x00, 0x00, 0xe0, 0x07, 0xf0, 0x1f, + 0x00, 0x00, 0x00, 0xf0, 0x03, 0xf0, 0x3f, 0x00, + 0x00, 0x00, 0xf8, 0x03, 0xf8, 0x7f, 0x00, 0x00, + 0x00, 0xf8, 0x01, 0xfc, 0x7e, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0xfe, + 0x00, 0x7e, 0xf8, 0x00, 0x00, 0x00, 0x7e, 0x00, + 0x3f, 0xf8, 0x01, 0x00, 0x00, 0x3f, 0x00, 0x1f, + 0xf0, 0x01, 0x00, 0x00, 0x1f, 0x80, 0x1f, 0xe0, + 0x03, 0x00, 0x80, 0x1f, 0xc0, 0x0f, 0xe0, 0x03, + 0x00, 0x80, 0x0f, 0xc0, 0x07, 0xc0, 0x07, 0x00, + 0xc0, 0x0f, 0xe0, 0x07, 0x80, 0x0f, 0x00, 0xe0, + 0x07, 0xf0, 0x03, 0x80, 0x1f, 0x00, 0xe0, 0x03, + 0xf8, 0x03, 0x00, 0x1f, 0x00, 0xf0, 0x03, 0xf8, + 0x01, 0x00, 0x3f, 0x00, 0xf8, 0x01, 0xfc, 0x00, + 0x00, 0x7e, 0x00, 0xfc, 0x00, 0xfe, 0x00, 0x00, + 0x7e, 0x00, 0xfc, 0x00, 0x7e, 0x00, 0x00, 0xfc, + 0x00, 0x7e, 0x00, 0x3f, 0x00, 0x00, 0xf8, 0x00, + 0x7e, 0x00, 0x3e, 0x00, 0x00, 0xf8, 0x00, 0x38, + 0x00, 0x1c, 0x00, 0x00, 0x70, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 }; +#endif diff --git a/src/mesh/RadioInterface.cpp b/src/mesh/RadioInterface.cpp index 3c0da44..aec0dc5 100644 --- a/src/mesh/RadioInterface.cpp +++ b/src/mesh/RadioInterface.cpp @@ -192,11 +192,15 @@ const RegionInfo regions[] = { */ RDEF(LORA_24, 2400.0f, 2483.5f, 100, 0, 10, true, false, true), + /* + Custom region + */ + RDEF(NO_LIMITS, 863.0f, 870.0f, 100, 0, 30, true, false, false), + /* This needs to be last. Same as US. */ RDEF(UNSET, 902.0f, 928.0f, 100, 0, 30, true, false, false) - }; const RegionInfo *myRegion; diff --git a/src/mesh/generated/meshtastic/config.pb.h b/src/mesh/generated/meshtastic/config.pb.h index 3275683..32ef8c1 100644 --- a/src/mesh/generated/meshtastic/config.pb.h +++ b/src/mesh/generated/meshtastic/config.pb.h @@ -285,7 +285,9 @@ typedef enum _meshtastic_Config_LoRaConfig_RegionCode { /* Nepal 865MHz */ meshtastic_Config_LoRaConfig_RegionCode_NP_865 = 25, /* Brazil 902MHz */ - meshtastic_Config_LoRaConfig_RegionCode_BR_902 = 26 + meshtastic_Config_LoRaConfig_RegionCode_BR_902 = 26, + /* NO_LIMITS */ + meshtastic_Config_LoRaConfig_RegionCode_NO_LIMITS = 27 } meshtastic_Config_LoRaConfig_RegionCode; /* Standard predefined channel settings diff --git a/src/mesh/generated/meshtastic/mesh.pb.h b/src/mesh/generated/meshtastic/mesh.pb.h index 0c48a78..46de1de 100644 --- a/src/mesh/generated/meshtastic/mesh.pb.h +++ b/src/mesh/generated/meshtastic/mesh.pb.h @@ -237,8 +237,8 @@ typedef enum _meshtastic_HardwareModel { meshtastic_HardwareModel_T_ETH_ELITE = 91, /* Heltec HRI-3621 industrial probe */ meshtastic_HardwareModel_HELTEC_SENSOR_HUB = 92, - /* Muzi Works Muzi-Base device */ - meshtastic_HardwareModel_MUZI_BASE = 93, + /* Reserved Fried Chicken ID for future use */ + meshtastic_HardwareModel_RESERVED_FRIED_CHICKEN = 93, /* Heltec Magnetic Power Bank with Meshtastic compatible */ meshtastic_HardwareModel_HELTEC_MESH_POCKET = 94, /* Seeed Solar Node */ diff --git a/src/nimble/NimbleBluetooth.cpp b/src/nimble/NimbleBluetooth.cpp index 3b98eca..69da258 100644 --- a/src/nimble/NimbleBluetooth.cpp +++ b/src/nimble/NimbleBluetooth.cpp @@ -651,8 +651,8 @@ class NimbleBluetoothServerCallback : public NimBLEServerCallbacks { LOG_INFO("BLE incoming connection %s", connInfo.getAddress().toString().c_str()); +#if defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C6) const uint16_t connHandle = connInfo.getConnHandle(); -#if NIMBLE_ENABLE_2M_PHY && (defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C6)) int phyResult = ble_gap_set_prefered_le_phy(connHandle, BLE_GAP_LE_PHY_2M_MASK, BLE_GAP_LE_PHY_2M_MASK, BLE_GAP_LE_PHY_CODED_ANY); if (phyResult == 0) { @@ -660,7 +660,6 @@ class NimbleBluetoothServerCallback : public NimBLEServerCallbacks } else { LOG_WARN("Failed to prefer 2M PHY for conn %u, rc=%d", connHandle, phyResult); } -#endif int dataLenResult = ble_gap_set_data_len(connHandle, kPreferredBleTxOctets, kPreferredBleTxTimeUs); if (dataLenResult == 0) { @@ -671,10 +670,9 @@ class NimbleBluetoothServerCallback : public NimBLEServerCallbacks LOG_INFO("BLE conn %u initial MTU %u (target %u)", connHandle, connInfo.getMTU(), kPreferredBleMtu); pServer->updateConnParams(connHandle, 6, 12, 0, 200); - } #endif + } -#ifdef NIMBLE_TWO virtual void onDisconnect(NimBLEServer *pServer, NimBLEConnInfo &connInfo, int reason) { LOG_INFO("BLE disconnect reason: %d", reason); @@ -820,7 +818,7 @@ void NimbleBluetooth::setup() NimBLEDevice::init(getDeviceName()); NimBLEDevice::setPower(ESP_PWR_LVL_P9); -#if NIMBLE_ENABLE_2M_PHY && (defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C6)) +#if defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C6) int mtuResult = NimBLEDevice::setMTU(kPreferredBleMtu); if (mtuResult == 0) { LOG_INFO("BLE MTU request set to %u", kPreferredBleMtu); diff --git a/src/platform/nrf52/NRF52Bluetooth.cpp b/src/platform/nrf52/NRF52Bluetooth.cpp index f1bc433..4f7fb47 100644 --- a/src/platform/nrf52/NRF52Bluetooth.cpp +++ b/src/platform/nrf52/NRF52Bluetooth.cpp @@ -64,16 +64,6 @@ void onConnect(uint16_t conn_handle) connection->getPeerName(central_name, sizeof(central_name)); LOG_INFO("BLE Connected to %s", central_name); - // negotiate connections params as soon as possible - - ble_gap_conn_params_t newParams; - newParams.min_conn_interval = 24; - newParams.max_conn_interval = 40; - newParams.slave_latency = 5; - newParams.conn_sup_timeout = 400; - - sd_ble_gap_conn_param_update(conn_handle, &newParams); - // Notify UI (or any other interested firmware components) meshtastic::BluetoothStatus newStatus(meshtastic::BluetoothStatus::ConnectionState::CONNECTED); bluetoothStatus->updateStatus(&newStatus); @@ -129,7 +119,7 @@ void startAdv(void) Bluefruit.Advertising.addService(meshBleService); /* Start Advertising * - Enable auto advertising if disconnected - * - Interval: fast mode = 20 ms, slow mode = 417,5 ms + * - Interval: fast mode = 20 ms, slow mode = 152.5 ms * - Timeout for fast mode is 30 seconds * - Start(timeout) with timeout = 0 will advertise forever (until connected) * @@ -137,7 +127,7 @@ void startAdv(void) * https://developer.apple.com/library/content/qa/qa1931/_index.html */ Bluefruit.Advertising.restartOnDisconnect(true); - Bluefruit.Advertising.setInterval(32, 668); // in unit of 0.625 ms + Bluefruit.Advertising.setInterval(32, 244); // in unit of 0.625 ms Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode Bluefruit.Advertising.start(0); // 0 = Don't stop advertising after n seconds. FIXME, we should stop advertising after X } @@ -282,24 +272,6 @@ void NRF52Bluetooth::setup() // Set the connect/disconnect callback handlers Bluefruit.Periph.setConnectCallback(onConnect); Bluefruit.Periph.setDisconnectCallback(onDisconnect); - - // Set slave latency to 5 to conserve power - // Despite name this does not impact data transfer - // https://docs.silabs.com/bluetooth/2.13/bluetooth-general-system-and-performance/optimizing-current-consumption-in-bluetooth-low-energy-devices - - Bluefruit.Periph.setConnSlaveLatency(5); - - // TODO: Adafruit defaul min, max interval seems to be (20,30) [in 1.25 ms units] -> (25.00, 31.25) milliseconds - // so using formula Interval Max * (Slave Latency + 1) ≤ 2 seconds - // max slave latency we can use is 30 (max available in BLE) - // and even double max inteval (see apple doc linked above for formulas) - // See Periph.SetConnInterval method - - // Tweak this later for even more power savings once those changes are confirmed to work well. - // Changing min, max interval may slow BLE transfer a bit - bumping slave latency will most likely not. - - - #ifndef BLE_DFU_SECURE bledfu.setPermission(SECMODE_ENC_WITH_MITM, SECMODE_ENC_WITH_MITM); bledfu.begin(); // Install the DFU helper @@ -328,7 +300,7 @@ void NRF52Bluetooth::setup() void NRF52Bluetooth::resumeAdvertising() { Bluefruit.Advertising.restartOnDisconnect(true); - Bluefruit.Advertising.setInterval(32, 668); // in unit of 0.625 ms + Bluefruit.Advertising.setInterval(32, 244); // in unit of 0.625 ms Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode Bluefruit.Advertising.start(0); } diff --git a/src/platform/nrf52/architecture.h b/src/platform/nrf52/architecture.h index d4699cd..1568e17 100644 --- a/src/platform/nrf52/architecture.h +++ b/src/platform/nrf52/architecture.h @@ -109,7 +109,7 @@ #elif defined(HELTEC_MESH_SOLAR) #define HW_VENDOR meshtastic_HardwareModel_HELTEC_MESH_SOLAR #elif defined(MUZI_BASE) -#define HW_VENDOR meshtastic_HardwareModel_MUZI_BASE +#define HW_VENDOR meshtastic_HardwareModel_RESERVED_FRIED_CHICKEN #else #define HW_VENDOR meshtastic_HardwareModel_NRF52_UNKNOWN #endif diff --git a/src/platform/nrf52/main-nrf52.cpp b/src/platform/nrf52/main-nrf52.cpp index 5d1ba20..c03cc44 100644 --- a/src/platform/nrf52/main-nrf52.cpp +++ b/src/platform/nrf52/main-nrf52.cpp @@ -335,16 +335,6 @@ void cpuDeepSleep(uint32_t msecToWake) if (Serial1) // A straightforward solution to the wake from deepsleep problem Serial1.end(); #endif - -#ifdef TTGO_T_ECHO - // To power off the T-Echo, the display must be set - // as an input pin; otherwise, there will be leakage current. - pinMode(PIN_EINK_CS, INPUT); - pinMode(PIN_EINK_DC, INPUT); - pinMode(PIN_EINK_RES, INPUT); - pinMode(PIN_EINK_BUSY, INPUT); -#endif - setBluetoothEnable(false); #ifdef RAK4630 diff --git a/variants/esp32/esp32.ini b/variants/esp32/esp32.ini index 5171bc4..08a547c 100644 --- a/variants/esp32/esp32.ini +++ b/variants/esp32/esp32.ini @@ -2,16 +2,10 @@ [esp32_base] extends = arduino_base custom_esp32_kind = esp32 -custom_mtjson_part = platform = # renovate: datasource=custom.pio depName=platformio/espressif32 packageName=platformio/platform/espressif32 platformio/espressif32@6.11.0 -extra_scripts = - ${env.extra_scripts} - pre:extra_scripts/esp32_pre.py - extra_scripts/esp32_extra.py - build_src_filter = ${arduino_base.build_src_filter} - - - - - diff --git a/variants/esp32s3/heltec_v3/platformio.ini b/variants/esp32s3/heltec_v3/platformio.ini index af0854e..81a96e5 100644 --- a/variants/esp32s3/heltec_v3/platformio.ini +++ b/variants/esp32s3/heltec_v3/platformio.ini @@ -1,10 +1,11 @@ -[env:heltec-v3] +[env:heltec-v3] extends = esp32s3_base board = heltec_wifi_lora_32_V3 board_level = pr board_check = true board_build.partitions = default_8MB.csv -build_flags = +build_flags = ${esp32s3_base.build_flags} -D HELTEC_V3 + -D OLED_RU -I variants/esp32s3/heltec_v3 diff --git a/variants/esp32s3/tlora_t3s3_epaper/platformio.ini b/variants/esp32s3/tlora_t3s3_epaper/platformio.ini index 82bab45..eca052f 100644 --- a/variants/esp32s3/tlora_t3s3_epaper/platformio.ini +++ b/variants/esp32s3/tlora_t3s3_epaper/platformio.ini @@ -13,10 +13,7 @@ build_flags = -DEINK_WIDTH=250 -DEINK_HEIGHT=122 -DUSE_EINK_DYNAMICDISPLAY ; Enable Dynamic EInk - -DEINK_LIMIT_FASTREFRESH=20 ; How many consecutive fast-refreshes are permitted //20 - -DEINK_LIMIT_RATE_BACKGROUND_SEC=30 ; Minimum interval between BACKGROUND updates //30 - -DEINK_LIMIT_RATE_RESPONSIVE_SEC=1 ; Minimum interval between RESPONSIVE updates - -DEINK_BACKGROUND_USES_FAST ; (Optional) Use FAST refresh for both BACKGROUND and RESPONSIVE, until a limit is reached. + -DEINK_LIMIT_FASTREFRESH=10 ; How many consecutive fast-refreshes are permitted lib_deps = ${esp32s3_base.lib_deps} diff --git a/variants/native/portduino/platformio.ini b/variants/native/portduino/platformio.ini index 9cedfcc..474d454 100644 --- a/variants/native/portduino/platformio.ini +++ b/variants/native/portduino/platformio.ini @@ -114,5 +114,5 @@ extends = env:native build_flags = -lgcov --coverage -fprofile-abs-path -fsanitize=address ${env:native.build_flags} ; https://docs.platformio.org/en/latest/projectconf/sections/env/options/test/test_testing_command.html test_testing_command = - ${platformio.build_dir}/${this.__env__}/meshtasticd + ${platformio.build_dir}/${this.__env__}/program -s diff --git a/variants/nrf52840/ELECROW-ThinkNode-M1/variant.h b/variants/nrf52840/ELECROW-ThinkNode-M1/variant.h index e4a6c03..b8cd8da 100644 --- a/variants/nrf52840/ELECROW-ThinkNode-M1/variant.h +++ b/variants/nrf52840/ELECROW-ThinkNode-M1/variant.h @@ -62,11 +62,17 @@ extern "C" { /* * Buttons */ -#define PIN_BUTTON1 (32 + 10) -#define PIN_BUTTON2 (32 + 7) +#define PIN_BUTTON2 (32 + 10) #define ALT_BUTTON_PIN PIN_BUTTON2 #define ALT_BUTTON_ACTIVE_LOW true #define ALT_BUTTON_ACTIVE_PULLUP true +#define PIN_BUTTON1 (32 + 7) + +// #define PIN_BUTTON1 (0 + 11) +// #define PIN_BUTTON1 (32 + 7) + +// #define BUTTON_CLICK_MS 400 +// #define BUTTON_TOUCH_MS 200 /* * Analog pins @@ -197,4 +203,4 @@ External serial flash WP25R1635FZUIL0 } #endif -#endif +#endif \ No newline at end of file diff --git a/variants/nrf52840/heltec_mesh_node_t114/variant.h b/variants/nrf52840/heltec_mesh_node_t114/variant.h index 03c5aaf..28404fc 100644 --- a/variants/nrf52840/heltec_mesh_node_t114/variant.h +++ b/variants/nrf52840/heltec_mesh_node_t114/variant.h @@ -21,8 +21,8 @@ /** Master clock frequency */ #define VARIANT_MCK (64000000ul) -//#define USE_LFXO // Board uses 32khz crystal for LF -#define USE_LFRC // Board uses RC for LF +#define USE_LFXO // Board uses 32khz crystal for LF + /*---------------------------------------------------------------------------- * Headers *----------------------------------------------------------------------------*/ diff --git a/variants/nrf52840/nrf52.ini b/variants/nrf52840/nrf52.ini index 5da1aeb..87e2398 100644 --- a/variants/nrf52840/nrf52.ini +++ b/variants/nrf52840/nrf52.ini @@ -11,10 +11,6 @@ platform_packages = ; Don't renovate toolchain-gccarmnoneeabi platformio/toolchain-gccarmnoneeabi@~1.90301.0 -extra_scripts = - ${env.extra_scripts} - extra_scripts/nrf52_extra.py - build_type = release build_flags = -include variants/nrf52840/cpp_overrides/lfs_util.h diff --git a/variants/nrf52840/t-echo/variant.h b/variants/nrf52840/t-echo/variant.h index 9a0cd05..b2692e4 100644 --- a/variants/nrf52840/t-echo/variant.h +++ b/variants/nrf52840/t-echo/variant.h @@ -181,9 +181,9 @@ External serial flash WP25R1635FZUIL0 #define PIN_GPS_STANDBY (32 + 2) // An output to wake GPS, low means allow sleep, high means force wake // Seems to be missing on this new board -#define PIN_GPS_PPS (32 + 4) // Pulse per second input from the GPS -#define GPS_TX_PIN (32 + 8) // This is for bits going TOWARDS the CPU -#define GPS_RX_PIN (32 + 9) // This is for bits going TOWARDS the GPS +// #define PIN_GPS_PPS (32 + 4) // Pulse per second input from the GPS +#define GPS_TX_PIN (32 + 8) // This is for bits going TOWARDS the CPU +#define GPS_RX_PIN (32 + 9) // This is for bits going TOWARDS the GPS #define GPS_THREAD_INTERVAL 50 @@ -203,6 +203,8 @@ External serial flash WP25R1635FZUIL0 #define PIN_SPI_MOSI (0 + 22) #define PIN_SPI_SCK (0 + 19) +#define PIN_PWR_EN (0 + 6) + // To debug via the segger JLINK console rather than the CDC-ACM serial device // #define USE_SEGGER diff --git a/variants/nrf52840/tracker-t1000-e/variant.h b/variants/nrf52840/tracker-t1000-e/variant.h index ff63a41..5b6719e 100644 --- a/variants/nrf52840/tracker-t1000-e/variant.h +++ b/variants/nrf52840/tracker-t1000-e/variant.h @@ -22,9 +22,7 @@ /** Master clock frequency */ #define VARIANT_MCK (64000000ul) -//#define USE_LFXO // Board uses 32khz crystal for LF - -#define USE_LFRC +#define USE_LFXO // Board uses 32khz crystal for LF /*---------------------------------------------------------------------------- * Headers diff --git a/variants/nrf52840/wio-sdk-wm1110/platformio.ini b/variants/nrf52840/wio-sdk-wm1110/platformio.ini index 7c11ef6..0281297 100644 --- a/variants/nrf52840/wio-sdk-wm1110/platformio.ini +++ b/variants/nrf52840/wio-sdk-wm1110/platformio.ini @@ -4,22 +4,11 @@ extends = nrf52840_base board = wio-sdk-wm1110 extra_scripts = - ${nrf52840_base.extra_scripts} + ${env.extra_scripts} extra_scripts/disable_adafruit_usb.py # Remove adafruit USB serial from the build (it is incompatible with using the ch340 serial chip on this board) -build_unflags = - -Ofast - -Og - -ggdb3 - -ggdb2 - -g3 - -g2 - -g - -g1 - -g0 - -DUSBCON - -DUSE_TINYUSB +build_unflags = ${nrf52840_base:build_unflags} -DUSBCON -DUSE_TINYUSB build_flags = ${nrf52840_base.build_flags} -Ivariants/nrf52840/wio-sdk-wm1110 -Isrc/platform/nrf52/softdevice diff --git a/variants/stm32/stm32.ini b/variants/stm32/stm32.ini index 547b050..1a9fd10 100644 --- a/variants/stm32/stm32.ini +++ b/variants/stm32/stm32.ini @@ -8,7 +8,7 @@ platform_packages = platformio/framework-arduinoststm32@https://github.com/stm32duino/Arduino_Core_STM32/archive/2.10.1.zip extra_scripts = ${env.extra_scripts} - extra_scripts/stm32_extra.py + post:extra_scripts/extra_stm32.py build_type = release