mod
This commit is contained in:
parent
45e3f530b2
commit
51e155cb56
167
.gitignore
vendored
Normal file
167
.gitignore
vendored
Normal file
@ -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
|
||||||
@ -28,7 +28,7 @@ RUN bash ./bin/build-native.sh "$PIO_ENV" && \
|
|||||||
|
|
||||||
# ##### PRODUCTION BUILD #############
|
# ##### PRODUCTION BUILD #############
|
||||||
|
|
||||||
FROM alpine:3.23
|
FROM alpine:3.22
|
||||||
LABEL org.opencontainers.image.title="Meshtastic" \
|
LABEL org.opencontainers.image.title="Meshtastic" \
|
||||||
org.opencontainers.image.description="Alpine Meshtastic daemon" \
|
org.opencontainers.image.description="Alpine Meshtastic daemon" \
|
||||||
org.opencontainers.image.url="https://meshtastic.org" \
|
org.opencontainers.image.url="https://meshtastic.org" \
|
||||||
|
|||||||
@ -5,8 +5,7 @@ set -e
|
|||||||
VERSION=`bin/buildinfo.py long`
|
VERSION=`bin/buildinfo.py long`
|
||||||
SHORT_VERSION=`bin/buildinfo.py short`
|
SHORT_VERSION=`bin/buildinfo.py short`
|
||||||
|
|
||||||
BUILDDIR=.pio/build/$1
|
OUTDIR=release/
|
||||||
OUTDIR=release
|
|
||||||
|
|
||||||
rm -f $OUTDIR/firmware*
|
rm -f $OUTDIR/firmware*
|
||||||
rm -r $OUTDIR/* || true
|
rm -r $OUTDIR/* || true
|
||||||
@ -15,7 +14,7 @@ rm -r $OUTDIR/* || true
|
|||||||
platformio pkg install -e $1
|
platformio pkg install -e $1
|
||||||
|
|
||||||
echo "Building for $1 with $PLATFORMIO_BUILD_FLAGS"
|
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
|
# The shell vars the build tool expects to find
|
||||||
export APP_VERSION=$VERSION
|
export APP_VERSION=$VERSION
|
||||||
@ -23,14 +22,16 @@ export APP_VERSION=$VERSION
|
|||||||
basename=firmware-$1-$VERSION
|
basename=firmware-$1-$VERSION
|
||||||
|
|
||||||
pio run --environment $1 # -v
|
pio run --environment $1 # -v
|
||||||
|
SRCELF=.pio/build/$1/firmware.elf
|
||||||
cp $BUILDDIR/$basename.elf $OUTDIR/$basename.elf
|
cp $SRCELF $OUTDIR/$basename.elf
|
||||||
|
|
||||||
echo "Copying ESP32 bin file"
|
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"
|
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"
|
echo "Building Filesystem for ESP32 targets"
|
||||||
# If you want to build the webui, uncomment the following lines
|
# 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
|
# # Remove webserver files from the filesystem and rebuild
|
||||||
# ls -l data/static # Diagnostic list of files
|
# ls -l data/static # Diagnostic list of files
|
||||||
# rm -rf data/static
|
# rm -rf data/static
|
||||||
pio run --environment $1 -t buildfs --disable-auto-clean
|
pio run --environment $1 -t buildfs
|
||||||
cp $BUILDDIR/littlefs-$1-$VERSION.bin $OUTDIR/littlefs-$1-$VERSION.bin
|
cp .pio/build/$1/littlefs.bin $OUTDIR/littlefs-$1-$VERSION.bin
|
||||||
cp bin/device-install.* $OUTDIR/
|
cp bin/device-install.* $OUTDIR
|
||||||
cp bin/device-update.* $OUTDIR/
|
cp bin/device-update.* $OUTDIR
|
||||||
|
|
||||||
# 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
|
|
||||||
@ -17,19 +17,15 @@ VERSION=$(bin/buildinfo.py long)
|
|||||||
SHORT_VERSION=$(bin/buildinfo.py short)
|
SHORT_VERSION=$(bin/buildinfo.py short)
|
||||||
PIO_ENV=${1:-native}
|
PIO_ENV=${1:-native}
|
||||||
|
|
||||||
BUILDDIR=.pio/build/$PIO_ENV
|
OUTDIR=release/
|
||||||
OUTDIR=release
|
|
||||||
|
|
||||||
rm -f $OUTDIR/meshtasticd*
|
rm -f $OUTDIR/firmware*
|
||||||
|
|
||||||
mkdir -p $OUTDIR/
|
mkdir -p $OUTDIR/
|
||||||
rm -r $OUTDIR/* || true
|
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
|
# 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 pkg install --environment "$PIO_ENV" || platformioFailed
|
||||||
pio run --environment "$PIO_ENV" || platformioFailed
|
pio run --environment "$PIO_ENV" || platformioFailed
|
||||||
|
cp ".pio/build/$PIO_ENV/program" "$OUTDIR/meshtasticd_linux_$(uname -m)"
|
||||||
cp "$BUILDDIR/meshtasticd" "$OUTDIR/meshtasticd_linux_$(uname -m)"
|
cp bin/native-install.* $OUTDIR
|
||||||
cp bin/native-install.* $OUTDIR/
|
|
||||||
|
|||||||
@ -5,8 +5,7 @@ set -e
|
|||||||
VERSION=$(bin/buildinfo.py long)
|
VERSION=$(bin/buildinfo.py long)
|
||||||
SHORT_VERSION=$(bin/buildinfo.py short)
|
SHORT_VERSION=$(bin/buildinfo.py short)
|
||||||
|
|
||||||
BUILDDIR=.pio/build/$1
|
OUTDIR=release/
|
||||||
OUTDIR=release
|
|
||||||
|
|
||||||
rm -f $OUTDIR/firmware*
|
rm -f $OUTDIR/firmware*
|
||||||
rm -r $OUTDIR/* || true
|
rm -r $OUTDIR/* || true
|
||||||
@ -15,7 +14,7 @@ rm -r $OUTDIR/* || true
|
|||||||
platformio pkg install -e $1
|
platformio pkg install -e $1
|
||||||
|
|
||||||
echo "Building for $1 with $PLATFORMIO_BUILD_FLAGS"
|
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
|
# The shell vars the build tool expects to find
|
||||||
export APP_VERSION=$VERSION
|
export APP_VERSION=$VERSION
|
||||||
@ -23,32 +22,32 @@ export APP_VERSION=$VERSION
|
|||||||
basename=firmware-$1-$VERSION
|
basename=firmware-$1-$VERSION
|
||||||
|
|
||||||
pio run --environment $1 # -v
|
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"
|
echo "Generating NRF52 uf2 file"
|
||||||
cp $BUILDDIR/$basename.zip $OUTDIR/$basename.zip
|
SRCHEX=.pio/build/$1/firmware.hex
|
||||||
|
|
||||||
echo "Copying NRF52 UF2 file"
|
# if WM1110 target, merge hex with softdevice 7.3.0
|
||||||
cp $BUILDDIR/$basename.uf2 $OUTDIR/$basename.uf2
|
|
||||||
cp bin/*.uf2 $OUTDIR/
|
|
||||||
|
|
||||||
SRCHEX=$BUILDDIR/$basename.hex
|
|
||||||
|
|
||||||
# if WM1110 target, copy the merged.hex
|
|
||||||
if (echo $1 | grep -q "wio-sdk-wm1110"); then
|
if (echo $1 | grep -q "wio-sdk-wm1110"); then
|
||||||
echo "Copying .merged.hex file"
|
echo "Merging with softdevice"
|
||||||
SRCHEX=$BUILDDIR/$basename.merged.hex
|
bin/mergehex -m bin/s140_nrf52_7.3.0_softdevice.hex $SRCHEX -o .pio/build/$1/$basename.hex
|
||||||
cp $SRCHEX $OUTDIR/
|
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
|
fi
|
||||||
|
|
||||||
if (echo $1 | grep -q "rak4631"); then
|
if (echo $1 | grep -q "rak4631"); then
|
||||||
echo "Copying .hex file"
|
echo "Copying hex file"
|
||||||
cp $SRCHEX $OUTDIR/
|
cp .pio/build/$1/firmware.hex $OUTDIR/$basename.hex
|
||||||
fi
|
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
|
|
||||||
|
|||||||
@ -5,8 +5,7 @@ set -e
|
|||||||
VERSION=`bin/buildinfo.py long`
|
VERSION=`bin/buildinfo.py long`
|
||||||
SHORT_VERSION=`bin/buildinfo.py short`
|
SHORT_VERSION=`bin/buildinfo.py short`
|
||||||
|
|
||||||
BUILDDIR=.pio/build/$1
|
OUTDIR=release/
|
||||||
OUTDIR=release
|
|
||||||
|
|
||||||
rm -f $OUTDIR/firmware*
|
rm -f $OUTDIR/firmware*
|
||||||
rm -r $OUTDIR/* || true
|
rm -r $OUTDIR/* || true
|
||||||
@ -15,7 +14,7 @@ rm -r $OUTDIR/* || true
|
|||||||
platformio pkg install -e $1
|
platformio pkg install -e $1
|
||||||
|
|
||||||
echo "Building for $1 with $PLATFORMIO_BUILD_FLAGS"
|
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
|
# The shell vars the build tool expects to find
|
||||||
export APP_VERSION=$VERSION
|
export APP_VERSION=$VERSION
|
||||||
@ -23,14 +22,12 @@ export APP_VERSION=$VERSION
|
|||||||
basename=firmware-$1-$VERSION
|
basename=firmware-$1-$VERSION
|
||||||
|
|
||||||
pio run --environment $1 # -v
|
pio run --environment $1 # -v
|
||||||
|
SRCELF=.pio/build/$1/firmware.elf
|
||||||
cp $BUILDDIR/$basename.elf $OUTDIR/$basename.elf
|
cp $SRCELF $OUTDIR/$basename.elf
|
||||||
|
|
||||||
echo "Copying uf2 file"
|
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
|
cp bin/device-install.* $OUTDIR
|
||||||
echo "Generating Meshtastic manifest"
|
cp bin/device-update.* $OUTDIR
|
||||||
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
|
|
||||||
|
|||||||
@ -5,8 +5,7 @@ set -e
|
|||||||
VERSION=$(bin/buildinfo.py long)
|
VERSION=$(bin/buildinfo.py long)
|
||||||
SHORT_VERSION=$(bin/buildinfo.py short)
|
SHORT_VERSION=$(bin/buildinfo.py short)
|
||||||
|
|
||||||
BUILDDIR=.pio/build/$1
|
OUTDIR=release/
|
||||||
OUTDIR=release
|
|
||||||
|
|
||||||
rm -f $OUTDIR/firmware*
|
rm -f $OUTDIR/firmware*
|
||||||
rm -r $OUTDIR/* || true
|
rm -r $OUTDIR/* || true
|
||||||
@ -15,7 +14,7 @@ rm -r $OUTDIR/* || true
|
|||||||
platformio pkg install -e $1
|
platformio pkg install -e $1
|
||||||
|
|
||||||
echo "Building for $1 with $PLATFORMIO_BUILD_FLAGS"
|
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
|
# The shell vars the build tool expects to find
|
||||||
export APP_VERSION=$VERSION
|
export APP_VERSION=$VERSION
|
||||||
@ -23,14 +22,8 @@ export APP_VERSION=$VERSION
|
|||||||
basename=firmware-$1-$VERSION
|
basename=firmware-$1-$VERSION
|
||||||
|
|
||||||
pio run --environment $1 # -v
|
pio run --environment $1 # -v
|
||||||
|
SRCELF=.pio/build/$1/firmware.elf
|
||||||
|
cp $SRCELF $OUTDIR/$basename.elf
|
||||||
|
|
||||||
cp $BUILDDIR/$basename.elf $OUTDIR/$basename.elf
|
SRCBIN=.pio/build/$1/firmware.bin
|
||||||
|
cp $SRCBIN $OUTDIR/$basename.bin
|
||||||
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
|
|
||||||
|
|||||||
@ -5,14 +5,22 @@ TITLE Meshtastic device-install
|
|||||||
SET "SCRIPT_NAME=%~nx0"
|
SET "SCRIPT_NAME=%~nx0"
|
||||||
SET "DEBUG=0"
|
SET "DEBUG=0"
|
||||||
SET "PYTHON="
|
SET "PYTHON="
|
||||||
|
SET "TFT_BUILD=0"
|
||||||
|
SET "BIGDB8=0"
|
||||||
|
SET "MUIDB8=0"
|
||||||
|
SET "BIGDB16=0"
|
||||||
SET "ESPTOOL_BAUD=115200"
|
SET "ESPTOOL_BAUD=115200"
|
||||||
SET "ESPTOOL_CMD="
|
SET "ESPTOOL_CMD="
|
||||||
SET "LOGCOUNTER=0"
|
SET "LOGCOUNTER=0"
|
||||||
SET "BPS_RESET=0"
|
SET "BPS_RESET=0"
|
||||||
@REM Default offsets.
|
|
||||||
@REM https://github.com/meshtastic/web-flasher/blob/main/stores/firmwareStore.ts#L202
|
@REM FIXME: Determine mcu from PlatformIO variant, this is unmaintainable.
|
||||||
SET "OTA_OFFSET=0x260000"
|
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 "SPIFFS_OFFSET=0x300000"
|
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
|
GOTO getopts
|
||||||
:help
|
:help
|
||||||
@ -21,7 +29,7 @@ ECHO.
|
|||||||
ECHO Usage: %SCRIPT_NAME% -f filename [-p PORT] [-P python] [--1200bps-reset]
|
ECHO Usage: %SCRIPT_NAME% -f filename [-p PORT] [-P python] [--1200bps-reset]
|
||||||
ECHO.
|
ECHO.
|
||||||
ECHO Options:
|
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 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).
|
||||||
@ -32,12 +40,12 @@ ECHO --1200bps-reset Attempt to place the device in correct mode. (1200bps
|
|||||||
ECHO Some hardware requires this twice.
|
ECHO Some hardware requires this twice.
|
||||||
ECHO.
|
ECHO.
|
||||||
ECHO Example: %SCRIPT_NAME% -p COM17 --1200bps-reset
|
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-t-deck-tft-2.6.0.0b106d4.bin -p COM11
|
||||||
ECHO Example: %SCRIPT_NAME% -f firmware-unphone-2.6.0.0b106d4.factory.bin -p COM11
|
ECHO Example: %SCRIPT_NAME% -f firmware-unphone-2.6.0.0b106d4.bin -p COM11
|
||||||
GOTO eof
|
GOTO eof
|
||||||
|
|
||||||
:version
|
:version
|
||||||
ECHO %SCRIPT_NAME% [Version 2.7.0]
|
ECHO %SCRIPT_NAME% [Version 2.6.2]
|
||||||
ECHO Meshtastic
|
ECHO Meshtastic
|
||||||
GOTO eof
|
GOTO eof
|
||||||
|
|
||||||
@ -70,8 +78,8 @@ IF "__!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
|
||||||
)
|
)
|
||||||
IF NOT "__!FILENAME:.factory.bin=!__"=="__!FILENAME!__" (
|
IF "__!FILENAME:firmware-=!__"=="__!FILENAME!__" (
|
||||||
CALL :LOG_MESSAGE ERROR "Filename must be a firmware-*.factory.bin file."
|
CALL :LOG_MESSAGE ERROR "Filename must be a firmware-* file."
|
||||||
GOTO help
|
GOTO help
|
||||||
)
|
)
|
||||||
@REM Remove ".\" or "./" file prefix if present.
|
@REM Remove ".\" or "./" file prefix if present.
|
||||||
@ -85,26 +93,12 @@ IF NOT EXIST !FILENAME! (
|
|||||||
GOTO eof
|
GOTO eof
|
||||||
)
|
)
|
||||||
|
|
||||||
CALL :LOG_MESSAGE DEBUG "Checking for metadata..."
|
IF NOT "!FILENAME:update=!"=="!FILENAME!" (
|
||||||
@REM Derive metadata filename from firmware filename.
|
CALL :LOG_MESSAGE DEBUG "We are working with a *update* file. !FILENAME!"
|
||||||
SET "METAFILE=!FILENAME:.factory.bin=!.mt.json"
|
CALL :LOG_MESSAGE INFO "Use script device-update.bat to flash update !FILENAME!."
|
||||||
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!"
|
|
||||||
GOTO eof
|
GOTO eof
|
||||||
|
) ELSE (
|
||||||
|
CALL :LOG_MESSAGE DEBUG "We are NOT working with a *update* file. !FILENAME!"
|
||||||
)
|
)
|
||||||
|
|
||||||
:skip-filename
|
:skip-filename
|
||||||
@ -114,7 +108,7 @@ IF NOT "__%PYTHON%__"=="____" (
|
|||||||
SET "ESPTOOL_CMD=!PYTHON! -m esptool"
|
SET "ESPTOOL_CMD=!PYTHON! -m esptool"
|
||||||
CALL :LOG_MESSAGE DEBUG "Python interpreter supplied."
|
CALL :LOG_MESSAGE DEBUG "Python interpreter supplied."
|
||||||
) ELSE (
|
) 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
|
WHERE esptool >nul 2>&1
|
||||||
IF %ERRORLEVEL% EQU 0 (
|
IF %ERRORLEVEL% EQU 0 (
|
||||||
@REM WHERE exits with code 0 if esptool is found.
|
@REM WHERE exits with code 0 if esptool is found.
|
||||||
@ -152,26 +146,100 @@ IF %BPS_RESET% EQU 1 (
|
|||||||
GOTO eof
|
GOTO eof
|
||||||
)
|
)
|
||||||
|
|
||||||
@REM Extract PROGNAME from %FILENAME% for later use.
|
@REM Check if FILENAME contains "-tft-" and set target partitionScheme accordingly.
|
||||||
SET "PROGNAME=!FILENAME:.factory.bin=!"
|
@REM https://github.com/meshtastic/web-flasher/blob/main/types/resources.ts#L3
|
||||||
CALL :LOG_MESSAGE DEBUG "Computed PROGNAME: !PROGNAME!"
|
IF NOT "!FILENAME:-tft-=!"=="!FILENAME!" (
|
||||||
|
CALL :LOG_MESSAGE DEBUG "We are working with a *-tft-* file. !FILENAME!"
|
||||||
IF "__!MCU!__" == "__esp32s3__" (
|
SET "TFT_BUILD=1"
|
||||||
@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"
|
|
||||||
) ELSE (
|
) ELSE (
|
||||||
@REM Everything else
|
CALL :LOG_MESSAGE DEBUG "We are NOT working with a *-tft-* file. !FILENAME!"
|
||||||
SET "OTA_FILENAME=bleota.bin"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
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!"
|
CALL :LOG_MESSAGE DEBUG "Set OTA_FILENAME to: !OTA_FILENAME!"
|
||||||
|
|
||||||
@REM Set SPIFFS filename with "littlefs-" prefix.
|
@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!"
|
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 OTA_OFFSET to: !OTA_OFFSET!"
|
||||||
CALL :LOG_MESSAGE DEBUG "Set SPIFFS_OFFSET to: !SPIFFS_OFFSET!"
|
CALL :LOG_MESSAGE DEBUG "Set SPIFFS_OFFSET to: !SPIFFS_OFFSET!"
|
||||||
|
|
||||||
|
|||||||
@ -2,15 +2,69 @@
|
|||||||
|
|
||||||
PYTHON=${PYTHON:-$(which python3 python | head -n 1)}
|
PYTHON=${PYTHON:-$(which python3 python | head -n 1)}
|
||||||
BPS_RESET=false
|
BPS_RESET=false
|
||||||
|
TFT_BUILD=false
|
||||||
MCU=""
|
MCU=""
|
||||||
|
|
||||||
# Constants
|
# Constants
|
||||||
RESET_BAUD=1200
|
RESET_BAUD=1200
|
||||||
FIRMWARE_OFFSET=0x00
|
FIRMWARE_OFFSET=0x00
|
||||||
# Default littlefs* offset.
|
|
||||||
OFFSET=0x300000
|
# Variant groups
|
||||||
# Default OTA Offset
|
BIGDB_8MB=(
|
||||||
OTA_OFFSET=0x260000
|
"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
|
# 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
|
||||||
@ -24,14 +78,6 @@ else
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
set -e
|
||||||
|
|
||||||
# Usage info
|
# Usage info
|
||||||
@ -43,7 +89,7 @@ Flash image file to device, but first erasing and writing system information.
|
|||||||
-h Display this help and exit.
|
-h Display this help and exit.
|
||||||
-p ESPTOOL_PORT Set the environment variable for ESPTOOL_PORT. If not set, ESPTOOL iterates all ports (Dangerous).
|
-p ESPTOOL_PORT Set the environment variable for ESPTOOL_PORT. If not set, ESPTOOL iterates all ports (Dangerous).
|
||||||
-P PYTHON Specify alternate python interpreter to use to invoke esptool. (Default: "$PYTHON")
|
-P PYTHON Specify alternate python interpreter to use to invoke esptool. (Default: "$PYTHON")
|
||||||
-f FILENAME The 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)
|
--1200bps-reset Attempt to place the device in correct mode. Some hardware requires this twice. (1200bps Reset)
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
@ -92,43 +138,69 @@ fi
|
|||||||
shift
|
shift
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ $(basename "$FILENAME") != firmware-*.factory.bin ]]; then
|
if [[ "$FILENAME" != firmware-* ]]; then
|
||||||
echo "Filename must be a firmware-*.factory.bin file."
|
echo "Filename must be a firmware-* file."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Extract PROGNAME from %FILENAME% for later use.
|
# Check if FILENAME contains "-tft-" and set target partitionScheme accordingly.
|
||||||
PROGNAME="${FILENAME/.factory.bin/}"
|
if [[ "${FILENAME//-tft-/}" != "$FILENAME" ]]; then
|
||||||
# Derive metadata filename from %PROGNAME%.
|
TFT_BUILD=true
|
||||||
METAFILE="${PROGNAME}.mt.json"
|
fi
|
||||||
|
|
||||||
if [[ -f "$FILENAME" && "$FILENAME" == *.factory.bin ]]; then
|
# Extract BASENAME from %FILENAME% for later use.
|
||||||
# Display metadata if it exists
|
BASENAME="${FILENAME/firmware-/}"
|
||||||
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")
|
|
||||||
fi
|
|
||||||
MCU=$(jq -r '.mcu' "$METAFILE")
|
|
||||||
else
|
|
||||||
echo "ERROR: No metadata file found at ${METAFILE}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Determine OTA filename based on MCU type
|
if [ -f "${FILENAME}" ] && [ -n "${FILENAME##*"update"*}" ]; then
|
||||||
if [ "$MCU" == "esp32s3" ]; then
|
# Default littlefs* offset.
|
||||||
OTAFILE=bleota-s3.bin
|
OFFSET=0x300000
|
||||||
elif [ "$MCU" == "esp32c3" ]; then
|
|
||||||
OTAFILE=bleota-c3.bin
|
# Default OTA Offset
|
||||||
else
|
OTA_OFFSET=0x260000
|
||||||
|
|
||||||
|
# littlefs* offset for BigDB 8mb and OTA OFFSET.
|
||||||
|
for variant in "${BIGDB_8MB[@]}"; do
|
||||||
|
if [ -z "${FILENAME##*"$variant"*}" ]; then
|
||||||
|
OFFSET=0x670000
|
||||||
|
OTA_OFFSET=0x340000
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
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
|
OTAFILE=bleota.bin
|
||||||
|
else
|
||||||
|
OTAFILE=bleota-c3.bin
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
OTAFILE=bleota-s3.bin
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set SPIFFS filename with "littlefs-" prefix.
|
# Set SPIFFS filename with "littlefs-" prefix.
|
||||||
SPIFFSFILE="littlefs-${PROGNAME/firmware-/}.bin"
|
SPIFFSFILE=littlefs-${BASENAME}
|
||||||
|
|
||||||
if [[ ! -f "$FILENAME" ]]; then
|
if [[ ! -f "$FILENAME" ]]; then
|
||||||
echo "Error: file ${FILENAME} wasn't found. Terminating."
|
echo "Error: file ${FILENAME} wasn't found. Terminating."
|
||||||
|
|||||||
@ -30,11 +30,11 @@ ECHO --change-mode Attempt to place the device in correct mode. (1200bps
|
|||||||
ECHO Some hardware requires this twice.
|
ECHO Some hardware requires this twice.
|
||||||
ECHO.
|
ECHO.
|
||||||
ECHO Example: %SCRIPT_NAME% -p COM17 --change-mode
|
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
|
GOTO eof
|
||||||
|
|
||||||
:version
|
:version
|
||||||
ECHO %SCRIPT_NAME% [Version 2.7.0]
|
ECHO %SCRIPT_NAME% [Version 2.6.2]
|
||||||
ECHO Meshtastic
|
ECHO Meshtastic
|
||||||
GOTO eof
|
GOTO eof
|
||||||
|
|
||||||
@ -78,12 +78,12 @@ IF NOT EXIST !FILENAME! (
|
|||||||
GOTO eof
|
GOTO eof
|
||||||
)
|
)
|
||||||
|
|
||||||
IF NOT "__!FILENAME:.factory.bin=!__"=="__!FILENAME!__" (
|
IF "!FILENAME:update=!"=="!FILENAME!" (
|
||||||
CALL :LOG_MESSAGE DEBUG "We are working with a *.factory.bin* 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 !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 not working with a *.factory.bin* file. !FILENAME!"
|
CALL :LOG_MESSAGE DEBUG "We are working with a *update* file. !FILENAME!"
|
||||||
)
|
)
|
||||||
|
|
||||||
:skip-filename
|
:skip-filename
|
||||||
|
|||||||
@ -29,7 +29,7 @@ Flash image file to device, leave existing system intact."
|
|||||||
-h Display this help and exit
|
-h Display this help and exit
|
||||||
-p ESPTOOL_PORT Set the environment variable for ESPTOOL_PORT. If not set, ESPTOOL iterates all ports (Dangerous).
|
-p ESPTOOL_PORT Set the environment variable for ESPTOOL_PORT. If not set, ESPTOOL iterates all ports (Dangerous).
|
||||||
-P PYTHON Specify alternate python interpreter to use to invoke esptool. (Default: "$PYTHON")
|
-P PYTHON Specify alternate python interpreter to use to invoke esptool. (Default: "$PYTHON")
|
||||||
-f FILENAME The *.bin file to flash. Custom to your device type.
|
-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)
|
--change-mode Attempt to place the device in correct mode. Some hardware requires this twice. (1200bps Reset)
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
@ -78,7 +78,7 @@ fi
|
|||||||
shift
|
shift
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ -f "$FILENAME" && "$FILENAME" != *.factory.bin ]]; then
|
if [ -f "${FILENAME}" ] && [ -z "${FILENAME##*"update"*}" ]; then
|
||||||
echo "Trying to flash update ${FILENAME}"
|
echo "Trying to flash update ${FILENAME}"
|
||||||
$ESPTOOL_CMD --baud $FLASH_BAUD write-flash $UPDATE_OFFSET "${FILENAME}"
|
$ESPTOOL_CMD --baud $FLASH_BAUD write-flash $UPDATE_OFFSET "${FILENAME}"
|
||||||
else
|
else
|
||||||
|
|||||||
@ -2,4 +2,4 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
pio run --environment native
|
pio run --environment native
|
||||||
gdbserver --once localhost:2345 .pio/build/native/meshtasticd "$@"
|
gdbserver --once localhost:2345 .pio/build/native/program "$@"
|
||||||
|
|||||||
@ -2,4 +2,4 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
pio run --environment native
|
pio run --environment native
|
||||||
.pio/build/native/meshtasticd "$@"
|
.pio/build/native/program "$@"
|
||||||
|
|||||||
@ -2,77 +2,98 @@
|
|||||||
# trunk-ignore-all(ruff/F821)
|
# trunk-ignore-all(ruff/F821)
|
||||||
# trunk-ignore-all(flake8/F821): For SConstruct imports
|
# trunk-ignore-all(flake8/F821): For SConstruct imports
|
||||||
import sys
|
import sys
|
||||||
from os.path import join, basename, isfile
|
from os.path import join
|
||||||
import subprocess
|
import subprocess
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
|
import time
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from readprops import readProps
|
from readprops import readProps
|
||||||
|
|
||||||
Import("env")
|
Import("env")
|
||||||
platform = env.PioPlatform()
|
platform = env.PioPlatform()
|
||||||
progname = env.get("PROGNAME")
|
|
||||||
lfsbin = f"{progname.replace('firmware-', 'littlefs-')}.bin"
|
|
||||||
|
|
||||||
def manifest_gather(source, target, env):
|
|
||||||
out = []
|
def esp32_create_combined_bin(source, target, env):
|
||||||
check_paths = [
|
# this sub is borrowed from ESPEasy build toolchain. It's licensed under GPL V3
|
||||||
progname,
|
# https://github.com/letscontrolit/ESPEasy/blob/mega/tools/pio/post_esp32.py
|
||||||
f"{progname}.elf",
|
print("Generating combined binary for serial flashing")
|
||||||
f"{progname}.bin",
|
|
||||||
f"{progname}.factory.bin",
|
app_offset = 0x10000
|
||||||
f"{progname}.hex",
|
|
||||||
f"{progname}.merged.hex",
|
new_file_name = env.subst("$BUILD_DIR/${PROGNAME}.factory.bin")
|
||||||
f"{progname}.uf2",
|
sections = env.subst(env.get("FLASH_EXTRA_IMAGES"))
|
||||||
f"{progname}.factory.uf2",
|
firmware_name = env.subst("$BUILD_DIR/${PROGNAME}.bin")
|
||||||
f"{progname}.zip",
|
chip = env.get("BOARD_MCU")
|
||||||
lfsbin
|
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):
|
print(" Offset | File")
|
||||||
manifest = {
|
for section in sections:
|
||||||
"version": verObj["long"],
|
sect_adr, sect_file = section.split(" ", 1)
|
||||||
"build_epoch": build_epoch,
|
print(f" - {sect_adr} | {sect_file}")
|
||||||
"board": env.get("PIOENV"),
|
cmd += [sect_adr, sect_file]
|
||||||
"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
|
|
||||||
|
|
||||||
# Write the manifest to the build directory
|
print(f" - {hex(app_offset)} | {firmware_name}")
|
||||||
with open(env.subst("$BUILD_DIR/${PROGNAME}.mt.json"), "w") as f:
|
cmd += [hex(app_offset), firmware_name]
|
||||||
json.dump(manifest, f, indent=2)
|
|
||||||
|
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")
|
Import("projenv")
|
||||||
|
|
||||||
prefsLoc = projenv["PROJECT_DIR"] + "/version.properties"
|
prefsLoc = projenv["PROJECT_DIR"] + "/version.properties"
|
||||||
verObj = readProps(prefsLoc)
|
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
|
# get repository owner if git is installed
|
||||||
try:
|
try:
|
||||||
@ -118,7 +139,7 @@ flags = [
|
|||||||
"-DBUILD_EPOCH=" + str(build_epoch),
|
"-DBUILD_EPOCH=" + str(build_epoch),
|
||||||
] + pref_flags
|
] + pref_flags
|
||||||
|
|
||||||
print("Using flags:")
|
print ("Using flags:")
|
||||||
for flag in flags:
|
for flag in flags:
|
||||||
print(flag)
|
print(flag)
|
||||||
|
|
||||||
@ -160,19 +181,3 @@ def load_boot_logo(source, target, env):
|
|||||||
# Load the boot logo on TFT builds
|
# Load the boot logo on TFT builds
|
||||||
if ("HAS_TFT", 1) in env.get("CPPDEFINES", []):
|
if ("HAS_TFT", 1) in env.get("CPPDEFINES", []):
|
||||||
env.AddPreAction('$BUILD_DIR/littlefs.bin', load_boot_logo)
|
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,
|
|
||||||
)
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
echo "Starting simulator"
|
echo "Starting simulator"
|
||||||
.pio/build/native/meshtasticd -s &
|
.pio/build/native/program &
|
||||||
sleep 20 # 5 seconds was not enough
|
sleep 20 # 5 seconds was not enough
|
||||||
|
|
||||||
echo "Simulator started, launching python test..."
|
echo "Simulator started, launching python test..."
|
||||||
|
|||||||
1
debian/rules
vendored
1
debian/rules
vendored
@ -28,4 +28,5 @@ override_dh_auto_build:
|
|||||||
# Build with platformio
|
# Build with platformio
|
||||||
$(PIO_ENV) platformio run -e native-tft
|
$(PIO_ENV) platformio run -e native-tft
|
||||||
# Move the binary and default config to the correct name
|
# Move the binary and default config to the correct name
|
||||||
|
mv .pio/build/native-tft/program .pio/build/native-tft/meshtasticd
|
||||||
cp bin/config-dist.yaml bin/config.yaml
|
cp bin/config-dist.yaml bin/config.yaml
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# trunk-ignore-all(flake8/F821)
|
# trunk-ignore-all(flake8/F821)
|
||||||
# trunk-ignore-all(ruff/F821)
|
# trunk-ignore-all(ruff/F821)
|
||||||
|
|
||||||
Import("env")
|
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 CLI targets", COMMAND_LINE_TARGETS)
|
||||||
# print("Current Build targets", BUILD_TARGETS)
|
# print("Current Build targets", BUILD_TARGETS)
|
||||||
# print("CPP defs", env.get("CPPDEFINES"))
|
# print("CPP defs", env.get("CPPDEFINES"))
|
||||||
|
|||||||
22
extra_scripts/extra_stm32.py
Executable file
22
extra_scripts/extra_stm32.py
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
# trunk-ignore-all(ruff/F821)
|
||||||
|
# trunk-ignore-all(flake8/F821): For SConstruct imports
|
||||||
|
|
||||||
|
Import("env")
|
||||||
|
# Custom HEX from ELF
|
||||||
|
env.AddPostAction(
|
||||||
|
"$BUILD_DIR/${PROGNAME}.elf",
|
||||||
|
env.VerboseAction(
|
||||||
|
" ".join(
|
||||||
|
[
|
||||||
|
"$OBJCOPY",
|
||||||
|
"-O",
|
||||||
|
"ihex",
|
||||||
|
"-R",
|
||||||
|
".eeprom",
|
||||||
|
"$BUILD_DIR/${PROGNAME}.elf",
|
||||||
|
"$BUILD_DIR/${PROGNAME}.hex",
|
||||||
|
]
|
||||||
|
),
|
||||||
|
"Building $BUILD_DIR/${PROGNAME}.hex",
|
||||||
|
),
|
||||||
|
)
|
||||||
@ -76,7 +76,7 @@ platformio run -e native-tft
|
|||||||
%install
|
%install
|
||||||
# Install meshtasticd binary
|
# Install meshtasticd binary
|
||||||
mkdir -p %{buildroot}%{_bindir}
|
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 portduino VFS dir
|
||||||
install -p -d -m 0770 %{buildroot}%{_localstatedir}/lib/meshtasticd
|
install -p -d -m 0770 %{buildroot}%{_localstatedir}/lib/meshtasticd
|
||||||
|
|||||||
@ -14,9 +14,7 @@ description = Meshtastic
|
|||||||
|
|
||||||
[env]
|
[env]
|
||||||
test_build_src = true
|
test_build_src = true
|
||||||
extra_scripts =
|
extra_scripts = bin/platformio-custom.py
|
||||||
pre:bin/platformio-pre.py
|
|
||||||
bin/platformio-custom.py
|
|
||||||
; note: we add src to our include search path so that lmic_project_config can override
|
; 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
|
; 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!
|
; of code is a heap corruption bug!
|
||||||
@ -123,7 +121,7 @@ lib_deps =
|
|||||||
[device-ui_base]
|
[device-ui_base]
|
||||||
lib_deps =
|
lib_deps =
|
||||||
# renovate: datasource=git-refs depName=meshtastic/device-ui packageName=https://github.com/meshtastic/device-ui gitBranch=master
|
# 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
|
; Common libs for environmental measurements in telemetry module
|
||||||
[environmental_base]
|
[environmental_base]
|
||||||
@ -184,8 +182,8 @@ lib_deps =
|
|||||||
dfrobot/DFRobot_BMM150@1.0.0
|
dfrobot/DFRobot_BMM150@1.0.0
|
||||||
# renovate: datasource=custom.pio depName=Adafruit_TSL2561 packageName=adafruit/library/Adafruit TSL2561
|
# renovate: datasource=custom.pio depName=Adafruit_TSL2561 packageName=adafruit/library/Adafruit TSL2561
|
||||||
adafruit/Adafruit TSL2561@1.1.2
|
adafruit/Adafruit TSL2561@1.1.2
|
||||||
# renovate: datasource=custom.pio depName=BH1750_WE packageName=wollewald/library/BH1750_WE
|
# renovate: datasource=custom.pio depName=BH1750_WE packageName=wollewald/BH1750_WE@^1.1.10
|
||||||
wollewald/BH1750_WE@1.1.10
|
wollewald/BH1750_WE@^1.1.10
|
||||||
|
|
||||||
; (not included in native / portduino)
|
; (not included in native / portduino)
|
||||||
[environmental_extra]
|
[environmental_extra]
|
||||||
|
|||||||
@ -924,6 +924,11 @@ message Config {
|
|||||||
* Brazil 902MHz
|
* Brazil 902MHz
|
||||||
*/
|
*/
|
||||||
BR_902 = 26;
|
BR_902 = 26;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Custom unrestricted region
|
||||||
|
*/
|
||||||
|
NO_LIMITS = 27;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -700,9 +700,9 @@ enum HardwareModel {
|
|||||||
HELTEC_SENSOR_HUB = 92;
|
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
|
* Heltec Magnetic Power Bank with Meshtastic compatible
|
||||||
|
|||||||
@ -103,7 +103,8 @@ void menuHandler::LoraRegionPicker(uint32_t duration)
|
|||||||
"KZ_433",
|
"KZ_433",
|
||||||
"KZ_863",
|
"KZ_863",
|
||||||
"NP_865",
|
"NP_865",
|
||||||
"BR_902"};
|
"BR_902",
|
||||||
|
"NO_LIMITS"};
|
||||||
BannerOverlayOptions bannerOptions;
|
BannerOverlayOptions bannerOptions;
|
||||||
#if defined(M5STACK_UNITC6L)
|
#if defined(M5STACK_UNITC6L)
|
||||||
bannerOptions.message = "LoRa Region";
|
bannerOptions.message = "LoRa Region";
|
||||||
@ -112,7 +113,7 @@ void menuHandler::LoraRegionPicker(uint32_t duration)
|
|||||||
#endif
|
#endif
|
||||||
bannerOptions.durationMs = duration;
|
bannerOptions.durationMs = duration;
|
||||||
bannerOptions.optionsArrayPtr = optionsArray;
|
bannerOptions.optionsArrayPtr = optionsArray;
|
||||||
bannerOptions.optionsCount = 27;
|
bannerOptions.optionsCount = 28;
|
||||||
bannerOptions.InitialSelected = 0;
|
bannerOptions.InitialSelected = 0;
|
||||||
bannerOptions.bannerCallback = [](int selected) -> void {
|
bannerOptions.bannerCallback = [](int selected) -> void {
|
||||||
if (selected != 0 && config.lora.region != _meshtastic_Config_LoRaConfig_RegionCode(selected)) {
|
if (selected != 0 && config.lora.region != _meshtastic_Config_LoRaConfig_RegionCode(selected)) {
|
||||||
|
|||||||
@ -940,7 +940,7 @@ void UIRenderer::drawIconScreen(const char *upperMsg, OLEDDisplay *display, OLED
|
|||||||
|
|
||||||
display->setFont(FONT_MEDIUM);
|
display->setFont(FONT_MEDIUM);
|
||||||
display->setTextAlignment(TEXT_ALIGN_LEFT);
|
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->drawString(x + getStringCenteredX(title), y + SCREEN_HEIGHT - FONT_HEIGHT_MEDIUM, title);
|
||||||
display->setFont(FONT_SMALL);
|
display->setFont(FONT_SMALL);
|
||||||
// Draw region in upper left
|
// Draw region in upper left
|
||||||
|
|||||||
@ -192,11 +192,15 @@ const RegionInfo regions[] = {
|
|||||||
*/
|
*/
|
||||||
RDEF(LORA_24, 2400.0f, 2483.5f, 100, 0, 10, true, false, true),
|
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.
|
This needs to be last. Same as US.
|
||||||
*/
|
*/
|
||||||
RDEF(UNSET, 902.0f, 928.0f, 100, 0, 30, true, false, false)
|
RDEF(UNSET, 902.0f, 928.0f, 100, 0, 30, true, false, false)
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const RegionInfo *myRegion;
|
const RegionInfo *myRegion;
|
||||||
|
|||||||
@ -285,7 +285,9 @@ typedef enum _meshtastic_Config_LoRaConfig_RegionCode {
|
|||||||
/* Nepal 865MHz */
|
/* Nepal 865MHz */
|
||||||
meshtastic_Config_LoRaConfig_RegionCode_NP_865 = 25,
|
meshtastic_Config_LoRaConfig_RegionCode_NP_865 = 25,
|
||||||
/* Brazil 902MHz */
|
/* 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;
|
} meshtastic_Config_LoRaConfig_RegionCode;
|
||||||
|
|
||||||
/* Standard predefined channel settings
|
/* Standard predefined channel settings
|
||||||
|
|||||||
@ -237,8 +237,8 @@ typedef enum _meshtastic_HardwareModel {
|
|||||||
meshtastic_HardwareModel_T_ETH_ELITE = 91,
|
meshtastic_HardwareModel_T_ETH_ELITE = 91,
|
||||||
/* Heltec HRI-3621 industrial probe */
|
/* Heltec HRI-3621 industrial probe */
|
||||||
meshtastic_HardwareModel_HELTEC_SENSOR_HUB = 92,
|
meshtastic_HardwareModel_HELTEC_SENSOR_HUB = 92,
|
||||||
/* Muzi Works Muzi-Base device */
|
/* Reserved Fried Chicken ID for future use */
|
||||||
meshtastic_HardwareModel_MUZI_BASE = 93,
|
meshtastic_HardwareModel_RESERVED_FRIED_CHICKEN = 93,
|
||||||
/* Heltec Magnetic Power Bank with Meshtastic compatible */
|
/* Heltec Magnetic Power Bank with Meshtastic compatible */
|
||||||
meshtastic_HardwareModel_HELTEC_MESH_POCKET = 94,
|
meshtastic_HardwareModel_HELTEC_MESH_POCKET = 94,
|
||||||
/* Seeed Solar Node */
|
/* Seeed Solar Node */
|
||||||
|
|||||||
@ -651,8 +651,8 @@ class NimbleBluetoothServerCallback : public NimBLEServerCallbacks
|
|||||||
{
|
{
|
||||||
LOG_INFO("BLE incoming connection %s", connInfo.getAddress().toString().c_str());
|
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();
|
const uint16_t connHandle = connInfo.getConnHandle();
|
||||||
#if NIMBLE_ENABLE_2M_PHY && (defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C6))
|
|
||||||
int phyResult =
|
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);
|
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) {
|
if (phyResult == 0) {
|
||||||
@ -660,7 +660,6 @@ class NimbleBluetoothServerCallback : public NimBLEServerCallbacks
|
|||||||
} else {
|
} else {
|
||||||
LOG_WARN("Failed to prefer 2M PHY for conn %u, rc=%d", connHandle, phyResult);
|
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);
|
int dataLenResult = ble_gap_set_data_len(connHandle, kPreferredBleTxOctets, kPreferredBleTxTimeUs);
|
||||||
if (dataLenResult == 0) {
|
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);
|
LOG_INFO("BLE conn %u initial MTU %u (target %u)", connHandle, connInfo.getMTU(), kPreferredBleMtu);
|
||||||
pServer->updateConnParams(connHandle, 6, 12, 0, 200);
|
pServer->updateConnParams(connHandle, 6, 12, 0, 200);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef NIMBLE_TWO
|
|
||||||
virtual void onDisconnect(NimBLEServer *pServer, NimBLEConnInfo &connInfo, int reason)
|
virtual void onDisconnect(NimBLEServer *pServer, NimBLEConnInfo &connInfo, int reason)
|
||||||
{
|
{
|
||||||
LOG_INFO("BLE disconnect reason: %d", reason);
|
LOG_INFO("BLE disconnect reason: %d", reason);
|
||||||
@ -820,7 +818,7 @@ void NimbleBluetooth::setup()
|
|||||||
NimBLEDevice::init(getDeviceName());
|
NimBLEDevice::init(getDeviceName());
|
||||||
NimBLEDevice::setPower(ESP_PWR_LVL_P9);
|
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);
|
int mtuResult = NimBLEDevice::setMTU(kPreferredBleMtu);
|
||||||
if (mtuResult == 0) {
|
if (mtuResult == 0) {
|
||||||
LOG_INFO("BLE MTU request set to %u", kPreferredBleMtu);
|
LOG_INFO("BLE MTU request set to %u", kPreferredBleMtu);
|
||||||
|
|||||||
@ -64,16 +64,6 @@ void onConnect(uint16_t conn_handle)
|
|||||||
connection->getPeerName(central_name, sizeof(central_name));
|
connection->getPeerName(central_name, sizeof(central_name));
|
||||||
LOG_INFO("BLE Connected to %s", 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)
|
// Notify UI (or any other interested firmware components)
|
||||||
meshtastic::BluetoothStatus newStatus(meshtastic::BluetoothStatus::ConnectionState::CONNECTED);
|
meshtastic::BluetoothStatus newStatus(meshtastic::BluetoothStatus::ConnectionState::CONNECTED);
|
||||||
bluetoothStatus->updateStatus(&newStatus);
|
bluetoothStatus->updateStatus(&newStatus);
|
||||||
@ -129,7 +119,7 @@ void startAdv(void)
|
|||||||
Bluefruit.Advertising.addService(meshBleService);
|
Bluefruit.Advertising.addService(meshBleService);
|
||||||
/* Start Advertising
|
/* Start Advertising
|
||||||
* - Enable auto advertising if disconnected
|
* - 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
|
* - Timeout for fast mode is 30 seconds
|
||||||
* - Start(timeout) with timeout = 0 will advertise forever (until connected)
|
* - 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
|
* https://developer.apple.com/library/content/qa/qa1931/_index.html
|
||||||
*/
|
*/
|
||||||
Bluefruit.Advertising.restartOnDisconnect(true);
|
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.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
|
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
|
// Set the connect/disconnect callback handlers
|
||||||
Bluefruit.Periph.setConnectCallback(onConnect);
|
Bluefruit.Periph.setConnectCallback(onConnect);
|
||||||
Bluefruit.Periph.setDisconnectCallback(onDisconnect);
|
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
|
#ifndef BLE_DFU_SECURE
|
||||||
bledfu.setPermission(SECMODE_ENC_WITH_MITM, SECMODE_ENC_WITH_MITM);
|
bledfu.setPermission(SECMODE_ENC_WITH_MITM, SECMODE_ENC_WITH_MITM);
|
||||||
bledfu.begin(); // Install the DFU helper
|
bledfu.begin(); // Install the DFU helper
|
||||||
@ -328,7 +300,7 @@ void NRF52Bluetooth::setup()
|
|||||||
void NRF52Bluetooth::resumeAdvertising()
|
void NRF52Bluetooth::resumeAdvertising()
|
||||||
{
|
{
|
||||||
Bluefruit.Advertising.restartOnDisconnect(true);
|
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.setFastTimeout(30); // number of seconds in fast mode
|
||||||
Bluefruit.Advertising.start(0);
|
Bluefruit.Advertising.start(0);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -109,7 +109,7 @@
|
|||||||
#elif defined(HELTEC_MESH_SOLAR)
|
#elif defined(HELTEC_MESH_SOLAR)
|
||||||
#define HW_VENDOR meshtastic_HardwareModel_HELTEC_MESH_SOLAR
|
#define HW_VENDOR meshtastic_HardwareModel_HELTEC_MESH_SOLAR
|
||||||
#elif defined(MUZI_BASE)
|
#elif defined(MUZI_BASE)
|
||||||
#define HW_VENDOR meshtastic_HardwareModel_MUZI_BASE
|
#define HW_VENDOR meshtastic_HardwareModel_RESERVED_FRIED_CHICKEN
|
||||||
#else
|
#else
|
||||||
#define HW_VENDOR meshtastic_HardwareModel_NRF52_UNKNOWN
|
#define HW_VENDOR meshtastic_HardwareModel_NRF52_UNKNOWN
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -335,16 +335,6 @@ void cpuDeepSleep(uint32_t msecToWake)
|
|||||||
if (Serial1) // A straightforward solution to the wake from deepsleep problem
|
if (Serial1) // A straightforward solution to the wake from deepsleep problem
|
||||||
Serial1.end();
|
Serial1.end();
|
||||||
#endif
|
#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);
|
setBluetoothEnable(false);
|
||||||
|
|
||||||
#ifdef RAK4630
|
#ifdef RAK4630
|
||||||
|
|||||||
@ -2,16 +2,10 @@
|
|||||||
[esp32_base]
|
[esp32_base]
|
||||||
extends = arduino_base
|
extends = arduino_base
|
||||||
custom_esp32_kind = esp32
|
custom_esp32_kind = esp32
|
||||||
custom_mtjson_part =
|
|
||||||
platform =
|
platform =
|
||||||
# renovate: datasource=custom.pio depName=platformio/espressif32 packageName=platformio/platform/espressif32
|
# renovate: datasource=custom.pio depName=platformio/espressif32 packageName=platformio/platform/espressif32
|
||||||
platformio/espressif32@6.11.0
|
platformio/espressif32@6.11.0
|
||||||
|
|
||||||
extra_scripts =
|
|
||||||
${env.extra_scripts}
|
|
||||||
pre:extra_scripts/esp32_pre.py
|
|
||||||
extra_scripts/esp32_extra.py
|
|
||||||
|
|
||||||
build_src_filter =
|
build_src_filter =
|
||||||
${arduino_base.build_src_filter} -<platform/nrf52/> -<platform/stm32wl> -<platform/rp2xx0> -<mesh/eth/> -<mesh/raspihttp>
|
${arduino_base.build_src_filter} -<platform/nrf52/> -<platform/stm32wl> -<platform/rp2xx0> -<mesh/eth/> -<mesh/raspihttp>
|
||||||
|
|
||||||
|
|||||||
@ -7,4 +7,5 @@ board_build.partitions = default_8MB.csv
|
|||||||
build_flags =
|
build_flags =
|
||||||
${esp32s3_base.build_flags}
|
${esp32s3_base.build_flags}
|
||||||
-D HELTEC_V3
|
-D HELTEC_V3
|
||||||
|
-D OLED_RU
|
||||||
-I variants/esp32s3/heltec_v3
|
-I variants/esp32s3/heltec_v3
|
||||||
|
|||||||
@ -13,10 +13,7 @@ build_flags =
|
|||||||
-DEINK_WIDTH=250
|
-DEINK_WIDTH=250
|
||||||
-DEINK_HEIGHT=122
|
-DEINK_HEIGHT=122
|
||||||
-DUSE_EINK_DYNAMICDISPLAY ; Enable Dynamic EInk
|
-DUSE_EINK_DYNAMICDISPLAY ; Enable Dynamic EInk
|
||||||
-DEINK_LIMIT_FASTREFRESH=20 ; How many consecutive fast-refreshes are permitted //20
|
-DEINK_LIMIT_FASTREFRESH=10 ; How many consecutive fast-refreshes are permitted
|
||||||
-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.
|
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32s3_base.lib_deps}
|
${esp32s3_base.lib_deps}
|
||||||
|
|||||||
@ -114,5 +114,5 @@ extends = env:native
|
|||||||
build_flags = -lgcov --coverage -fprofile-abs-path -fsanitize=address ${env:native.build_flags}
|
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
|
; https://docs.platformio.org/en/latest/projectconf/sections/env/options/test/test_testing_command.html
|
||||||
test_testing_command =
|
test_testing_command =
|
||||||
${platformio.build_dir}/${this.__env__}/meshtasticd
|
${platformio.build_dir}/${this.__env__}/program
|
||||||
-s
|
-s
|
||||||
|
|||||||
@ -62,11 +62,17 @@ extern "C" {
|
|||||||
/*
|
/*
|
||||||
* Buttons
|
* Buttons
|
||||||
*/
|
*/
|
||||||
#define PIN_BUTTON1 (32 + 10)
|
#define PIN_BUTTON2 (32 + 10)
|
||||||
#define PIN_BUTTON2 (32 + 7)
|
|
||||||
#define ALT_BUTTON_PIN PIN_BUTTON2
|
#define ALT_BUTTON_PIN PIN_BUTTON2
|
||||||
#define ALT_BUTTON_ACTIVE_LOW true
|
#define ALT_BUTTON_ACTIVE_LOW true
|
||||||
#define ALT_BUTTON_ACTIVE_PULLUP 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
|
* Analog pins
|
||||||
|
|||||||
@ -21,8 +21,8 @@
|
|||||||
/** Master clock frequency */
|
/** Master clock frequency */
|
||||||
#define VARIANT_MCK (64000000ul)
|
#define VARIANT_MCK (64000000ul)
|
||||||
|
|
||||||
//#define USE_LFXO // Board uses 32khz crystal for LF
|
#define USE_LFXO // Board uses 32khz crystal for LF
|
||||||
#define USE_LFRC // Board uses RC for LF
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
* Headers
|
* Headers
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
|
|||||||
@ -11,10 +11,6 @@ platform_packages =
|
|||||||
; Don't renovate toolchain-gccarmnoneeabi
|
; Don't renovate toolchain-gccarmnoneeabi
|
||||||
platformio/toolchain-gccarmnoneeabi@~1.90301.0
|
platformio/toolchain-gccarmnoneeabi@~1.90301.0
|
||||||
|
|
||||||
extra_scripts =
|
|
||||||
${env.extra_scripts}
|
|
||||||
extra_scripts/nrf52_extra.py
|
|
||||||
|
|
||||||
build_type = release
|
build_type = release
|
||||||
build_flags =
|
build_flags =
|
||||||
-include variants/nrf52840/cpp_overrides/lfs_util.h
|
-include variants/nrf52840/cpp_overrides/lfs_util.h
|
||||||
|
|||||||
@ -181,7 +181,7 @@ External serial flash WP25R1635FZUIL0
|
|||||||
|
|
||||||
#define PIN_GPS_STANDBY (32 + 2) // An output to wake GPS, low means allow sleep, high means force wake
|
#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
|
// Seems to be missing on this new board
|
||||||
#define PIN_GPS_PPS (32 + 4) // Pulse per second input from 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_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_RX_PIN (32 + 9) // This is for bits going TOWARDS the GPS
|
||||||
|
|
||||||
@ -203,6 +203,8 @@ External serial flash WP25R1635FZUIL0
|
|||||||
#define PIN_SPI_MOSI (0 + 22)
|
#define PIN_SPI_MOSI (0 + 22)
|
||||||
#define PIN_SPI_SCK (0 + 19)
|
#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
|
// To debug via the segger JLINK console rather than the CDC-ACM serial device
|
||||||
// #define USE_SEGGER
|
// #define USE_SEGGER
|
||||||
|
|
||||||
|
|||||||
@ -22,9 +22,7 @@
|
|||||||
/** Master clock frequency */
|
/** Master clock frequency */
|
||||||
#define VARIANT_MCK (64000000ul)
|
#define VARIANT_MCK (64000000ul)
|
||||||
|
|
||||||
//#define USE_LFXO // Board uses 32khz crystal for LF
|
#define USE_LFXO // Board uses 32khz crystal for LF
|
||||||
|
|
||||||
#define USE_LFRC
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
* Headers
|
* Headers
|
||||||
|
|||||||
@ -4,22 +4,11 @@ extends = nrf52840_base
|
|||||||
board = wio-sdk-wm1110
|
board = wio-sdk-wm1110
|
||||||
|
|
||||||
extra_scripts =
|
extra_scripts =
|
||||||
${nrf52840_base.extra_scripts}
|
${env.extra_scripts}
|
||||||
extra_scripts/disable_adafruit_usb.py
|
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)
|
# Remove adafruit USB serial from the build (it is incompatible with using the ch340 serial chip on this board)
|
||||||
build_unflags =
|
build_unflags = ${nrf52840_base:build_unflags} -DUSBCON -DUSE_TINYUSB
|
||||||
-Ofast
|
|
||||||
-Og
|
|
||||||
-ggdb3
|
|
||||||
-ggdb2
|
|
||||||
-g3
|
|
||||||
-g2
|
|
||||||
-g
|
|
||||||
-g1
|
|
||||||
-g0
|
|
||||||
-DUSBCON
|
|
||||||
-DUSE_TINYUSB
|
|
||||||
build_flags = ${nrf52840_base.build_flags}
|
build_flags = ${nrf52840_base.build_flags}
|
||||||
-Ivariants/nrf52840/wio-sdk-wm1110
|
-Ivariants/nrf52840/wio-sdk-wm1110
|
||||||
-Isrc/platform/nrf52/softdevice
|
-Isrc/platform/nrf52/softdevice
|
||||||
|
|||||||
@ -8,7 +8,7 @@ platform_packages =
|
|||||||
platformio/framework-arduinoststm32@https://github.com/stm32duino/Arduino_Core_STM32/archive/2.10.1.zip
|
platformio/framework-arduinoststm32@https://github.com/stm32duino/Arduino_Core_STM32/archive/2.10.1.zip
|
||||||
extra_scripts =
|
extra_scripts =
|
||||||
${env.extra_scripts}
|
${env.extra_scripts}
|
||||||
extra_scripts/stm32_extra.py
|
post:extra_scripts/extra_stm32.py
|
||||||
|
|
||||||
build_type = release
|
build_type = release
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user