From 0c019c4ea74915aa6b227e39da6346d10ab78cb4 Mon Sep 17 00:00:00 2001 From: "Earle F. Philhower, III" Date: Fri, 15 Nov 2019 17:33:11 -0800 Subject: [PATCH 1/2] Make upload.py compatible with existing FS upload PR #6765 introduced an incompatibility with the existing Java uploaders for SPIFFS and LittleFS, breaking them because of the upload.py parameter format change to support single stage erase/upload. Add in patch to silently eat the single --end and to parse the write address and filename properly as generated by calls from the plugins, while retaining compatibility with the current IDE changes. --- tools/upload.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tools/upload.py b/tools/upload.py index 0f5cb78352..f1af27df99 100755 --- a/tools/upload.py +++ b/tools/upload.py @@ -22,6 +22,7 @@ cmdline = [] write_option = '' +write_addr = '0x0' erase_addr = '' erase_len = '' @@ -45,6 +46,16 @@ erase_len = sys.argv.pop(0) thisarg = '' + # Backwards compatibility with fs upload tools, eat --end + if thisarg == '--end': + thisarg = '' + + # Backwards compatibility with fs upload tools, parse write_flash for later use + if thisarg == 'write_flash': + write_addr = sys.argv.pop(0) + binary = sys.argv.pop(0) + thisarg = '' + if os.path.isfile(thisarg): binary = thisarg thisarg = '' @@ -55,7 +66,7 @@ cmdline = cmdline + ['write_flash'] if len(write_option): cmdline = cmdline + [write_option] -cmdline = cmdline + ['0x0', binary] +cmdline = cmdline + [write_addr, binary] erase_file = '' if len(erase_addr): From c7cb2fca9f6a07a26a95427f643eb6094279858d Mon Sep 17 00:00:00 2001 From: "Earle F. Philhower, III" Date: Sat, 16 Nov 2019 15:42:27 -0700 Subject: [PATCH 2/2] Clean upload.py, make platform use write_flash Make upload.py more concise and pythonic. Use the "write_flash" argument in platform.txt for uploads instead of assuming anything that is a file is the bin to upload. --- platform.txt | 2 +- tools/upload.py | 26 +++++++------------------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/platform.txt b/platform.txt index 2e3492bee0..e4926a7b68 100644 --- a/platform.txt +++ b/platform.txt @@ -149,7 +149,7 @@ tools.esptool.upload.params.quiet= # First, potentially perform an erase or nothing # Next, do the binary upload # Combined in one rule because Arduino doesn't suport upload.1.pattern/upload.3.pattern -tools.esptool.upload.pattern="{cmd}" "{runtime.platform.path}/tools/upload.py" --chip esp8266 --port "{serial.port}" --baud "{upload.speed}" "{upload.verbose}" {upload.erase_cmd} {upload.resetmethod} "{build.path}/{build.project_name}.bin" +tools.esptool.upload.pattern="{cmd}" "{runtime.platform.path}/tools/upload.py" --chip esp8266 --port "{serial.port}" --baud "{upload.speed}" "{upload.verbose}" {upload.erase_cmd} {upload.resetmethod} write_flash 0x0 "{build.path}/{build.project_name}.bin" tools.esptool.upload.network_pattern="{network_cmd}" "{runtime.platform.path}/tools/espota.py" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin" diff --git a/tools/upload.py b/tools/upload.py index f1af27df99..776e7f9420 100755 --- a/tools/upload.py +++ b/tools/upload.py @@ -39,28 +39,16 @@ # https://github.com/esp8266/Arduino/issues/6755#issuecomment-553208688 if thisarg == "erase_flash": write_option = '--erase-all' - thisarg = '' - - if thisarg == 'erase_region': + elif thisarg == 'erase_region': erase_addr = sys.argv.pop(0) erase_len = sys.argv.pop(0) - thisarg = '' - - # Backwards compatibility with fs upload tools, eat --end - if thisarg == '--end': - thisarg = '' - - # Backwards compatibility with fs upload tools, parse write_flash for later use - if thisarg == 'write_flash': + elif thisarg == '--end': + # Backwards compatibility with fs upload tools, eat --end + pass + elif thisarg == 'write_flash': write_addr = sys.argv.pop(0) binary = sys.argv.pop(0) - thisarg = '' - - if os.path.isfile(thisarg): - binary = thisarg - thisarg = '' - - if len(thisarg): + elif len(thisarg): cmdline = cmdline + [thisarg] cmdline = cmdline + ['write_flash'] @@ -70,7 +58,7 @@ erase_file = '' if len(erase_addr): - # generate temporary empty (0xff) file + # Generate temporary empty (0xff) file eraser = tempfile.mkstemp() erase_file = eraser[1] os.write(eraser[0], bytearray([255] * int(erase_len, 0)))