1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-19 23:22:16 +03:00
esp8266/tools/upload.py
Earle F. Philhower, III 56fe2bfe73
[BREAKING] Update FS plugin info for python3 compat (#6807)
The FS uploader plugins need to be updated to use python3 and not
python, or they will fail on Windows (or Linux boxes without an
installed python2 interpreter).

Update the documents to point to the new versions.
2019-11-26 08:43:18 -07:00

69 lines
2.2 KiB
Python
Executable File

#!/usr/bin/env python3
# Wrapper for Arduino core / others that can call esptool.py possibly multiple times
# Adds pyserial to sys.path automatically based on the path of the current file
# First parameter is pyserial path, second is esptool path, then a series of command arguments
# i.e. upload.py tools/pyserial tools/esptool write_flash file 0x0
import sys
import os
import tempfile
sys.argv.pop(0) # Remove executable name
toolspath = os.path.dirname(os.path.realpath(__file__)).replace('\\', '/') # CWD in UNIX format
try:
sys.path.insert(0, toolspath + "/pyserial") # Add pyserial dir to search path
sys.path.insert(0, toolspath + "/esptool") # Add esptool dir to search path
import esptool # If this fails, we can't continue and will bomb below
except:
sys.stderr.write("pyserial or esptool directories not found next to this upload.py tool.\n")
sys.exit(1)
cmdline = []
write_option = ''
write_addr = '0x0'
erase_addr = ''
erase_len = ''
while len(sys.argv):
thisarg = sys.argv.pop(0)
# We silently replace the 921kbaud setting with 460k to enable backward
# compatibility with the old esptool-ck.exe. Esptool.py doesn't seem
# work reliably at 921k, but is still significantly faster at 460kbaud.
if thisarg == "921600":
thisarg = "460800"
# 'erase_flash' command is translated to the write_flash --erase-all option
# https://github.com/esp8266/Arduino/issues/6755#issuecomment-553208688
if thisarg == "erase_flash":
write_option = '--erase-all'
elif thisarg == 'erase_region':
erase_addr = sys.argv.pop(0)
erase_len = sys.argv.pop(0)
elif thisarg == 'write_flash':
write_addr = sys.argv.pop(0)
binary = sys.argv.pop(0)
elif len(thisarg):
cmdline = cmdline + [thisarg]
cmdline = cmdline + ['write_flash']
if len(write_option):
cmdline = cmdline + [write_option]
cmdline = cmdline + [write_addr, binary]
erase_file = ''
if len(erase_addr):
# Generate temporary empty (0xff) file
eraser = tempfile.mkstemp()
erase_file = eraser[1]
os.write(eraser[0], bytearray([255] * int(erase_len, 0)))
os.close(eraser[0])
cmdline = cmdline + [ erase_addr, erase_file ]
esptool.main(cmdline)
if len(erase_file):
os.remove(erase_file)