diff --git a/bin/build-esp32.sh b/bin/build-esp32.sh index 153638425..40a6c3aee 100755 --- a/bin/build-esp32.sh +++ b/bin/build-esp32.sh @@ -29,14 +29,11 @@ SRCELF=.pio/build/$1/firmware.elf cp $SRCELF $OUTDIR/$basename.elf echo "Copying ESP32 bin file" -SRCBIN=.pio/build/$1/firmware.bin +SRCBIN=.pio/build/$1/firmware.factory.bin cp $SRCBIN $OUTDIR/$basename.bin echo "Building Filesystem for ESP32 targets" pio run --environment tbeam -t buildfs cp .pio/build/tbeam/littlefs.bin $OUTDIR/littlefs-$VERSION.bin -cp images/system-info.bin $OUTDIR/system-info.bin - -cp .pio/build/$1/partitions.bin $OUTDIR/partitions.bin cp bin/device-install.* $OUTDIR cp bin/device-update.* $OUTDIR diff --git a/bin/device-install.bat b/bin/device-install.bat index 763cdac85..419e8d6bd 100755 --- a/bin/device-install.bat +++ b/bin/device-install.bat @@ -29,13 +29,11 @@ IF "__%FILENAME%__" == "____" ( IF EXIST %FILENAME% ( echo Trying to flash update %FILENAME%, but first erasing and writing system information" %PYTHON% -m esptool --baud 115200 erase_flash - %PYTHON% -m esptool --baud 115200 write_flash 0x1000 system-info.bin - %PYTHON% -m esptool --baud 115200 write_flash 0x8000 partitions.bin + %PYTHON% -m esptool --baud 115200 write_flash 0x00 %FILENAME% + %PYTHON% -m esptool --baud 115200 write_flash 0x260000 bleota.bin for %%f in (littlefs-*.bin) do ( %PYTHON% -m esptool --baud 115200 write_flash 0x300000 %%f ) - %PYTHON% -m esptool --baud 115200 write_flash 0x10000 %FILENAME% - %PYTHON% -m esptool --baud 115200 write_flash 0x260000 bleota.bin ) else ( echo "Invalid file: %FILENAME%" goto HELP diff --git a/bin/device-install.sh b/bin/device-install.sh index 163499d7b..a55e553c7 100755 --- a/bin/device-install.sh +++ b/bin/device-install.sh @@ -47,11 +47,10 @@ shift "$((OPTIND-1))" if [ -f "${FILENAME}" ]; then echo "Trying to flash ${FILENAME}, but first erasing and writing system information" "$PYTHON" -m esptool erase_flash - "$PYTHON" -m esptool write_flash 0x1000 system-info.bin - "$PYTHON" -m esptool write_flash 0x8000 partitions.bin + "$PYTHON" -m esptool write_flash 0x00 ${FILENAME} + "$PYTHON" -m esptool write_flash 0x260000 bleota.bin "$PYTHON" -m esptool write_flash 0x300000 littlefs-*.bin - "$PYTHON" -m esptool write_flash 0x260000 bleota.bin - "$PYTHON" -m esptool write_flash 0x10000 ${FILENAME} + else echo "Invalid file: ${FILENAME}" show_help diff --git a/bin/device-update.bat b/bin/device-update.bat index c9ec0c4c9..40def6caf 100755 --- a/bin/device-update.bat +++ b/bin/device-update.bat @@ -28,7 +28,7 @@ IF "__%FILENAME%__" == "____" ( ) IF EXIST %FILENAME% ( echo Trying to flash update %FILENAME% - %PYTHON% -m esptool --baud 115200 write_flash 0x10000 %FILENAME% + %PYTHON% -m esptool --baud 115200 write_flash 0x00 %FILENAME% ) else ( echo "Invalid file: %FILENAME%" goto HELP diff --git a/bin/device-update.sh b/bin/device-update.sh index a233d61dd..a6d80c200 100755 --- a/bin/device-update.sh +++ b/bin/device-update.sh @@ -44,7 +44,7 @@ shift "$((OPTIND-1))" if [ -f "${FILENAME}" ]; then echo "Trying to flash update ${FILENAME}." - $PYTHON -m esptool --baud 115200 write_flash 0x10000 ${FILENAME} + $PYTHON -m esptool --baud 115200 write_flash 0x00 ${FILENAME} else echo "Invalid file: ${FILENAME}" show_help diff --git a/bin/platformio-custom.py b/bin/platformio-custom.py index 951d89b0a..e03a35e3a 100644 --- a/bin/platformio-custom.py +++ b/bin/platformio-custom.py @@ -1,17 +1,70 @@ - - import subprocess import configparser import traceback import sys +from os.path import join from readprops import readProps +Import("env") +platform = env.PioPlatform() + +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, + ] + + 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] + + 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) + Import("projenv") prefsLoc = projenv["PROJECT_DIR"] + "/version.properties" verObj = readProps(prefsLoc) print("Using meshtastic platformio-custom.py, firmware version " + verObj['long']) -# print("path is" + ','.join(sys.path)) # General options that are passed to the C and C++ compilers projenv.Append(CCFLAGS=[ diff --git a/images/system-info.bin b/images/system-info.bin deleted file mode 100644 index 85acfca15..000000000 Binary files a/images/system-info.bin and /dev/null differ