1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-19 23:22:16 +03:00

Use esptool.py to handle sketch upload, make python available on Windows, too (#5635)

* Add esptool.py, pyserial, and python to JSON

Add installation of python on Win32/Win64, and on all systems install
esptool.py and pyserial.

* Initial esptool.py upload test

* First successfull esptool.py upload

* Patch in verbose flag operation

* Replace esptool-ck.exe with Python equivalent

Remove need for binary esptool-ck.exe by implementing the same logic as
esptool-ck uses in Python.  Only image creation is supported, and only
in the Arduino standard mode (with its custom bootloader and ROM
layout).

* Remove all esptool-ck.exe, hook Windows Python

Remove all references to esptool-ck and use Python on Windows and Linux
for all recipes where possible.

* Use python to make core_version as well

Avoid ugly bash and CMD.exe tricks in platform.txt by using python to
make the core_version header.

* Rename conflicting script, clean up packager

* Windows test passes

Need to make sure Python2 and Python3 compatible and paths are munged
properly to avoid eaccidentally escaping things when calling esptool.py

Able to compile, build a BIN and upload via esptool.py on a Windows
machine without Python installed globally, only as part of the Arduino
tools package.

* Use github sources for pyserial

* Erase calibration or all flash before programming

Add back in erase support by calling esptool.py twice (since it does not
support chained operations like esptool-ck.exe).

* Make 460K default speed, remove 961K

961K doesn't seem to work with esptool, so make 460K the default upload
speed and remove 961K.

Even at this lower speed, esptool.py is much faster to upload (even
before taking into account the compression when doing things like SPIFFS
and code upload).

* Make erase and upload work again

Arduino does not support a upload.#.cmd pattern, so we need to do
everything in a single command line.  Make it cleaner by introducing a
Python wrapper script which will run the same executable with different
sets of commands (since we need to erase a block w/a separate invocation
from the real upload).

Update boards.txt to use the new options format, placing the esptool
command as "version" when there is no "erase_flash" or "erase_region" to
be done to keep things simple.

* Move esptool/pyserial to submodules

Since esptool.py and pyserial are coming directly from github repos,
there is no need to include them as a tool in package.json.

* Restore 921K upload opt, silent downgrade to 460k

To enable full backward compatibility, restore the 921k option for
upload speed but silently change it to 460k in the upload.py script.

Add error checking on upload.py
This commit is contained in:
Earle F. Philhower, III 2019-02-18 12:43:09 +00:00 committed by david gauchard
parent e7e7a4da17
commit 9790e1cb7c
12 changed files with 385 additions and 203 deletions

1
.gitignore vendored
View File

@ -1,7 +1,6 @@
.DS_Store
tools/dist/
tools/xtensa-lx106-elf/
tools/esptool/
tools/mkspiffs/
package/versions/
exclude.txt

6
.gitmodules vendored
View File

@ -7,3 +7,9 @@
[submodule "libraries/SoftwareSerial"]
path = libraries/SoftwareSerial
url = https://github.com/plerup/espsoftwareserial.git
[submodule "tools/pyserial"]
path = tools/pyserial
url = https://github.com/pyserial/pyserial.git
[submodule "tools/esptool"]
path = tools/esptool
url = https://github.com/espressif/esptool.git

View File

@ -27,7 +27,7 @@ generic.build.board=ESP8266_GENERIC
generic.upload.tool=esptool
generic.upload.maximum_data_size=81920
generic.upload.wait_for_upload_port=true
generic.upload.erase_cmd=
generic.upload.erase_cmd=version
generic.serial.disableDTR=true
generic.serial.disableRTS=true
generic.build.mcu=esp8266
@ -437,11 +437,11 @@ generic.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
generic.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
generic.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
generic.menu.wipe.none=Only Sketch
generic.menu.wipe.none.upload.erase_cmd=
generic.menu.wipe.none.upload.erase_cmd=version
generic.menu.wipe.sdk=Sketch + WiFi Settings
generic.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
generic.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
generic.menu.wipe.all=All Flash Contents
generic.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
generic.menu.wipe.all.upload.erase_cmd=erase_flash
generic.menu.baud.115200=115200
generic.menu.baud.115200.upload.speed=115200
generic.menu.baud.9600=9600
@ -468,7 +468,7 @@ esp8285.build.variant=esp8285
esp8285.upload.tool=esptool
esp8285.upload.maximum_data_size=81920
esp8285.upload.wait_for_upload_port=true
esp8285.upload.erase_cmd=
esp8285.upload.erase_cmd=version
esp8285.serial.disableDTR=true
esp8285.serial.disableRTS=true
esp8285.build.mcu=esp8266
@ -703,11 +703,11 @@ esp8285.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
esp8285.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
esp8285.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
esp8285.menu.wipe.none=Only Sketch
esp8285.menu.wipe.none.upload.erase_cmd=
esp8285.menu.wipe.none.upload.erase_cmd=version
esp8285.menu.wipe.sdk=Sketch + WiFi Settings
esp8285.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
esp8285.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
esp8285.menu.wipe.all=All Flash Contents
esp8285.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
esp8285.menu.wipe.all.upload.erase_cmd=erase_flash
esp8285.menu.baud.115200=115200
esp8285.menu.baud.115200.upload.speed=115200
esp8285.menu.baud.9600=9600
@ -743,7 +743,7 @@ espduino.menu.UploadTool.espota.upload.tool=espota
espduino.upload.tool=esptool
espduino.upload.maximum_data_size=81920
espduino.upload.wait_for_upload_port=true
espduino.upload.erase_cmd=
espduino.upload.erase_cmd=version
espduino.serial.disableDTR=true
espduino.serial.disableRTS=true
espduino.build.mcu=esp8266
@ -895,11 +895,11 @@ espduino.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAO
espduino.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
espduino.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
espduino.menu.wipe.none=Only Sketch
espduino.menu.wipe.none.upload.erase_cmd=
espduino.menu.wipe.none.upload.erase_cmd=version
espduino.menu.wipe.sdk=Sketch + WiFi Settings
espduino.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
espduino.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
espduino.menu.wipe.all=All Flash Contents
espduino.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
espduino.menu.wipe.all.upload.erase_cmd=erase_flash
espduino.menu.baud.115200=115200
espduino.menu.baud.115200.upload.speed=115200
espduino.menu.baud.9600=9600
@ -926,7 +926,7 @@ huzzah.build.variant=adafruit
huzzah.upload.tool=esptool
huzzah.upload.maximum_data_size=81920
huzzah.upload.wait_for_upload_port=true
huzzah.upload.erase_cmd=
huzzah.upload.erase_cmd=version
huzzah.serial.disableDTR=true
huzzah.serial.disableRTS=true
huzzah.build.mcu=esp8266
@ -1079,11 +1079,11 @@ huzzah.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOM
huzzah.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
huzzah.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
huzzah.menu.wipe.none=Only Sketch
huzzah.menu.wipe.none.upload.erase_cmd=
huzzah.menu.wipe.none.upload.erase_cmd=version
huzzah.menu.wipe.sdk=Sketch + WiFi Settings
huzzah.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
huzzah.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
huzzah.menu.wipe.all=All Flash Contents
huzzah.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
huzzah.menu.wipe.all.upload.erase_cmd=erase_flash
huzzah.menu.baud.115200=115200
huzzah.menu.baud.115200.upload.speed=115200
huzzah.menu.baud.9600=9600
@ -1110,7 +1110,7 @@ inventone.build.variant=inventone
inventone.upload.tool=esptool
inventone.upload.maximum_data_size=81920
inventone.upload.wait_for_upload_port=true
inventone.upload.erase_cmd=
inventone.upload.erase_cmd=version
inventone.serial.disableDTR=true
inventone.serial.disableRTS=true
inventone.build.mcu=esp8266
@ -1263,11 +1263,11 @@ inventone.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTA
inventone.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
inventone.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
inventone.menu.wipe.none=Only Sketch
inventone.menu.wipe.none.upload.erase_cmd=
inventone.menu.wipe.none.upload.erase_cmd=version
inventone.menu.wipe.sdk=Sketch + WiFi Settings
inventone.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
inventone.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
inventone.menu.wipe.all=All Flash Contents
inventone.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
inventone.menu.wipe.all.upload.erase_cmd=erase_flash
inventone.menu.baud.115200=115200
inventone.menu.baud.115200.upload.speed=115200
inventone.menu.baud.9600=9600
@ -1294,7 +1294,7 @@ cw01.build.variant=xinabox
cw01.upload.tool=esptool
cw01.upload.maximum_data_size=81920
cw01.upload.wait_for_upload_port=true
cw01.upload.erase_cmd=
cw01.upload.erase_cmd=version
cw01.serial.disableDTR=true
cw01.serial.disableRTS=true
cw01.build.mcu=esp8266
@ -1450,11 +1450,11 @@ cw01.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOM.b
cw01.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
cw01.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
cw01.menu.wipe.none=Only Sketch
cw01.menu.wipe.none.upload.erase_cmd=
cw01.menu.wipe.none.upload.erase_cmd=version
cw01.menu.wipe.sdk=Sketch + WiFi Settings
cw01.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
cw01.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
cw01.menu.wipe.all=All Flash Contents
cw01.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
cw01.menu.wipe.all.upload.erase_cmd=erase_flash
cw01.menu.baud.115200=115200
cw01.menu.baud.115200.upload.speed=115200
cw01.menu.baud.9600=9600
@ -1481,7 +1481,7 @@ espresso_lite_v1.build.variant=espresso_lite_v1
espresso_lite_v1.upload.tool=esptool
espresso_lite_v1.upload.maximum_data_size=81920
espresso_lite_v1.upload.wait_for_upload_port=true
espresso_lite_v1.upload.erase_cmd=
espresso_lite_v1.upload.erase_cmd=version
espresso_lite_v1.serial.disableDTR=true
espresso_lite_v1.serial.disableRTS=true
espresso_lite_v1.build.mcu=esp8266
@ -1637,11 +1637,11 @@ espresso_lite_v1.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPD
espresso_lite_v1.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
espresso_lite_v1.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
espresso_lite_v1.menu.wipe.none=Only Sketch
espresso_lite_v1.menu.wipe.none.upload.erase_cmd=
espresso_lite_v1.menu.wipe.none.upload.erase_cmd=version
espresso_lite_v1.menu.wipe.sdk=Sketch + WiFi Settings
espresso_lite_v1.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
espresso_lite_v1.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
espresso_lite_v1.menu.wipe.all=All Flash Contents
espresso_lite_v1.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
espresso_lite_v1.menu.wipe.all.upload.erase_cmd=erase_flash
espresso_lite_v1.menu.baud.115200=115200
espresso_lite_v1.menu.baud.115200.upload.speed=115200
espresso_lite_v1.menu.baud.9600=9600
@ -1668,7 +1668,7 @@ espresso_lite_v2.build.variant=espresso_lite_v2
espresso_lite_v2.upload.tool=esptool
espresso_lite_v2.upload.maximum_data_size=81920
espresso_lite_v2.upload.wait_for_upload_port=true
espresso_lite_v2.upload.erase_cmd=
espresso_lite_v2.upload.erase_cmd=version
espresso_lite_v2.serial.disableDTR=true
espresso_lite_v2.serial.disableRTS=true
espresso_lite_v2.build.mcu=esp8266
@ -1824,11 +1824,11 @@ espresso_lite_v2.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPD
espresso_lite_v2.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
espresso_lite_v2.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
espresso_lite_v2.menu.wipe.none=Only Sketch
espresso_lite_v2.menu.wipe.none.upload.erase_cmd=
espresso_lite_v2.menu.wipe.none.upload.erase_cmd=version
espresso_lite_v2.menu.wipe.sdk=Sketch + WiFi Settings
espresso_lite_v2.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
espresso_lite_v2.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
espresso_lite_v2.menu.wipe.all=All Flash Contents
espresso_lite_v2.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
espresso_lite_v2.menu.wipe.all.upload.erase_cmd=erase_flash
espresso_lite_v2.menu.baud.115200=115200
espresso_lite_v2.menu.baud.115200.upload.speed=115200
espresso_lite_v2.menu.baud.9600=9600
@ -1855,7 +1855,7 @@ phoenix_v1.build.variant=phoenix_v1
phoenix_v1.upload.tool=esptool
phoenix_v1.upload.maximum_data_size=81920
phoenix_v1.upload.wait_for_upload_port=true
phoenix_v1.upload.erase_cmd=
phoenix_v1.upload.erase_cmd=version
phoenix_v1.serial.disableDTR=true
phoenix_v1.serial.disableRTS=true
phoenix_v1.build.mcu=esp8266
@ -2011,11 +2011,11 @@ phoenix_v1.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROT
phoenix_v1.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
phoenix_v1.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
phoenix_v1.menu.wipe.none=Only Sketch
phoenix_v1.menu.wipe.none.upload.erase_cmd=
phoenix_v1.menu.wipe.none.upload.erase_cmd=version
phoenix_v1.menu.wipe.sdk=Sketch + WiFi Settings
phoenix_v1.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
phoenix_v1.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
phoenix_v1.menu.wipe.all=All Flash Contents
phoenix_v1.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
phoenix_v1.menu.wipe.all.upload.erase_cmd=erase_flash
phoenix_v1.menu.baud.115200=115200
phoenix_v1.menu.baud.115200.upload.speed=115200
phoenix_v1.menu.baud.9600=9600
@ -2042,7 +2042,7 @@ phoenix_v2.build.variant=phoenix_v2
phoenix_v2.upload.tool=esptool
phoenix_v2.upload.maximum_data_size=81920
phoenix_v2.upload.wait_for_upload_port=true
phoenix_v2.upload.erase_cmd=
phoenix_v2.upload.erase_cmd=version
phoenix_v2.serial.disableDTR=true
phoenix_v2.serial.disableRTS=true
phoenix_v2.build.mcu=esp8266
@ -2198,11 +2198,11 @@ phoenix_v2.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROT
phoenix_v2.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
phoenix_v2.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
phoenix_v2.menu.wipe.none=Only Sketch
phoenix_v2.menu.wipe.none.upload.erase_cmd=
phoenix_v2.menu.wipe.none.upload.erase_cmd=version
phoenix_v2.menu.wipe.sdk=Sketch + WiFi Settings
phoenix_v2.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
phoenix_v2.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
phoenix_v2.menu.wipe.all=All Flash Contents
phoenix_v2.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
phoenix_v2.menu.wipe.all.upload.erase_cmd=erase_flash
phoenix_v2.menu.baud.115200=115200
phoenix_v2.menu.baud.115200.upload.speed=115200
phoenix_v2.menu.baud.9600=9600
@ -2229,7 +2229,7 @@ nodemcu.build.variant=nodemcu
nodemcu.upload.tool=esptool
nodemcu.upload.maximum_data_size=81920
nodemcu.upload.wait_for_upload_port=true
nodemcu.upload.erase_cmd=
nodemcu.upload.erase_cmd=version
nodemcu.serial.disableDTR=true
nodemcu.serial.disableRTS=true
nodemcu.build.mcu=esp8266
@ -2382,11 +2382,11 @@ nodemcu.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
nodemcu.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
nodemcu.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
nodemcu.menu.wipe.none=Only Sketch
nodemcu.menu.wipe.none.upload.erase_cmd=
nodemcu.menu.wipe.none.upload.erase_cmd=version
nodemcu.menu.wipe.sdk=Sketch + WiFi Settings
nodemcu.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
nodemcu.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
nodemcu.menu.wipe.all=All Flash Contents
nodemcu.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
nodemcu.menu.wipe.all.upload.erase_cmd=erase_flash
nodemcu.menu.baud.115200=115200
nodemcu.menu.baud.115200.upload.speed=115200
nodemcu.menu.baud.9600=9600
@ -2413,7 +2413,7 @@ nodemcuv2.build.variant=nodemcu
nodemcuv2.upload.tool=esptool
nodemcuv2.upload.maximum_data_size=81920
nodemcuv2.upload.wait_for_upload_port=true
nodemcuv2.upload.erase_cmd=
nodemcuv2.upload.erase_cmd=version
nodemcuv2.serial.disableDTR=true
nodemcuv2.serial.disableRTS=true
nodemcuv2.build.mcu=esp8266
@ -2566,11 +2566,11 @@ nodemcuv2.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTA
nodemcuv2.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
nodemcuv2.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
nodemcuv2.menu.wipe.none=Only Sketch
nodemcuv2.menu.wipe.none.upload.erase_cmd=
nodemcuv2.menu.wipe.none.upload.erase_cmd=version
nodemcuv2.menu.wipe.sdk=Sketch + WiFi Settings
nodemcuv2.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
nodemcuv2.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
nodemcuv2.menu.wipe.all=All Flash Contents
nodemcuv2.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
nodemcuv2.menu.wipe.all.upload.erase_cmd=erase_flash
nodemcuv2.menu.baud.115200=115200
nodemcuv2.menu.baud.115200.upload.speed=115200
nodemcuv2.menu.baud.9600=9600
@ -2597,7 +2597,7 @@ modwifi.build.variant=modwifi
modwifi.upload.tool=esptool
modwifi.upload.maximum_data_size=81920
modwifi.upload.wait_for_upload_port=true
modwifi.upload.erase_cmd=
modwifi.upload.erase_cmd=version
modwifi.serial.disableDTR=true
modwifi.serial.disableRTS=true
modwifi.build.mcu=esp8266
@ -2760,11 +2760,11 @@ modwifi.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
modwifi.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
modwifi.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
modwifi.menu.wipe.none=Only Sketch
modwifi.menu.wipe.none.upload.erase_cmd=
modwifi.menu.wipe.none.upload.erase_cmd=version
modwifi.menu.wipe.sdk=Sketch + WiFi Settings
modwifi.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
modwifi.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
modwifi.menu.wipe.all=All Flash Contents
modwifi.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
modwifi.menu.wipe.all.upload.erase_cmd=erase_flash
modwifi.menu.baud.115200=115200
modwifi.menu.baud.115200.upload.speed=115200
modwifi.menu.baud.9600=9600
@ -2791,7 +2791,7 @@ thing.build.variant=thing
thing.upload.tool=esptool
thing.upload.maximum_data_size=81920
thing.upload.wait_for_upload_port=true
thing.upload.erase_cmd=
thing.upload.erase_cmd=version
thing.serial.disableDTR=true
thing.serial.disableRTS=true
thing.build.mcu=esp8266
@ -2944,11 +2944,11 @@ thing.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOM.
thing.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
thing.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
thing.menu.wipe.none=Only Sketch
thing.menu.wipe.none.upload.erase_cmd=
thing.menu.wipe.none.upload.erase_cmd=version
thing.menu.wipe.sdk=Sketch + WiFi Settings
thing.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
thing.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
thing.menu.wipe.all=All Flash Contents
thing.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
thing.menu.wipe.all.upload.erase_cmd=erase_flash
thing.menu.baud.115200=115200
thing.menu.baud.115200.upload.speed=115200
thing.menu.baud.9600=9600
@ -2975,7 +2975,7 @@ thingdev.build.variant=thing
thingdev.upload.tool=esptool
thingdev.upload.maximum_data_size=81920
thingdev.upload.wait_for_upload_port=true
thingdev.upload.erase_cmd=
thingdev.upload.erase_cmd=version
thingdev.serial.disableDTR=true
thingdev.serial.disableRTS=true
thingdev.build.mcu=esp8266
@ -3128,11 +3128,11 @@ thingdev.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAO
thingdev.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
thingdev.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
thingdev.menu.wipe.none=Only Sketch
thingdev.menu.wipe.none.upload.erase_cmd=
thingdev.menu.wipe.none.upload.erase_cmd=version
thingdev.menu.wipe.sdk=Sketch + WiFi Settings
thingdev.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
thingdev.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
thingdev.menu.wipe.all=All Flash Contents
thingdev.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
thingdev.menu.wipe.all.upload.erase_cmd=erase_flash
thingdev.menu.baud.115200=115200
thingdev.menu.baud.115200.upload.speed=115200
thingdev.menu.baud.9600=9600
@ -3158,7 +3158,7 @@ esp210.build.board=ESP8266_ESP210
esp210.upload.tool=esptool
esp210.upload.maximum_data_size=81920
esp210.upload.wait_for_upload_port=true
esp210.upload.erase_cmd=
esp210.upload.erase_cmd=version
esp210.serial.disableDTR=true
esp210.serial.disableRTS=true
esp210.build.mcu=esp8266
@ -3312,11 +3312,11 @@ esp210.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOM
esp210.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
esp210.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
esp210.menu.wipe.none=Only Sketch
esp210.menu.wipe.none.upload.erase_cmd=
esp210.menu.wipe.none.upload.erase_cmd=version
esp210.menu.wipe.sdk=Sketch + WiFi Settings
esp210.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
esp210.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
esp210.menu.wipe.all=All Flash Contents
esp210.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
esp210.menu.wipe.all.upload.erase_cmd=erase_flash
esp210.menu.baud.57600=57600
esp210.menu.baud.57600.upload.speed=57600
esp210.menu.baud.9600=9600
@ -3343,7 +3343,7 @@ d1_mini.build.variant=d1_mini
d1_mini.upload.tool=esptool
d1_mini.upload.maximum_data_size=81920
d1_mini.upload.wait_for_upload_port=true
d1_mini.upload.erase_cmd=
d1_mini.upload.erase_cmd=version
d1_mini.serial.disableDTR=true
d1_mini.serial.disableRTS=true
d1_mini.build.mcu=esp8266
@ -3496,11 +3496,11 @@ d1_mini.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
d1_mini.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
d1_mini.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
d1_mini.menu.wipe.none=Only Sketch
d1_mini.menu.wipe.none.upload.erase_cmd=
d1_mini.menu.wipe.none.upload.erase_cmd=version
d1_mini.menu.wipe.sdk=Sketch + WiFi Settings
d1_mini.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
d1_mini.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
d1_mini.menu.wipe.all=All Flash Contents
d1_mini.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
d1_mini.menu.wipe.all.upload.erase_cmd=erase_flash
d1_mini.menu.baud.921600=921600
d1_mini.menu.baud.921600.upload.speed=921600
d1_mini.menu.baud.9600=9600
@ -3527,7 +3527,7 @@ d1_mini_pro.build.variant=d1_mini
d1_mini_pro.upload.tool=esptool
d1_mini_pro.upload.maximum_data_size=81920
d1_mini_pro.upload.wait_for_upload_port=true
d1_mini_pro.upload.erase_cmd=
d1_mini_pro.upload.erase_cmd=version
d1_mini_pro.serial.disableDTR=true
d1_mini_pro.serial.disableRTS=true
d1_mini_pro.build.mcu=esp8266
@ -3663,11 +3663,11 @@ d1_mini_pro.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATERO
d1_mini_pro.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
d1_mini_pro.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
d1_mini_pro.menu.wipe.none=Only Sketch
d1_mini_pro.menu.wipe.none.upload.erase_cmd=
d1_mini_pro.menu.wipe.none.upload.erase_cmd=version
d1_mini_pro.menu.wipe.sdk=Sketch + WiFi Settings
d1_mini_pro.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
d1_mini_pro.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
d1_mini_pro.menu.wipe.all=All Flash Contents
d1_mini_pro.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
d1_mini_pro.menu.wipe.all.upload.erase_cmd=erase_flash
d1_mini_pro.menu.baud.921600=921600
d1_mini_pro.menu.baud.921600.upload.speed=921600
d1_mini_pro.menu.baud.9600=9600
@ -3694,7 +3694,7 @@ d1_mini_lite.build.variant=d1_mini
d1_mini_lite.upload.tool=esptool
d1_mini_lite.upload.maximum_data_size=81920
d1_mini_lite.upload.wait_for_upload_port=true
d1_mini_lite.upload.erase_cmd=
d1_mini_lite.upload.erase_cmd=version
d1_mini_lite.serial.disableDTR=true
d1_mini_lite.serial.disableRTS=true
d1_mini_lite.build.mcu=esp8266
@ -3887,11 +3887,11 @@ d1_mini_lite.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATER
d1_mini_lite.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
d1_mini_lite.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
d1_mini_lite.menu.wipe.none=Only Sketch
d1_mini_lite.menu.wipe.none.upload.erase_cmd=
d1_mini_lite.menu.wipe.none.upload.erase_cmd=version
d1_mini_lite.menu.wipe.sdk=Sketch + WiFi Settings
d1_mini_lite.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
d1_mini_lite.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
d1_mini_lite.menu.wipe.all=All Flash Contents
d1_mini_lite.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
d1_mini_lite.menu.wipe.all.upload.erase_cmd=erase_flash
d1_mini_lite.menu.baud.921600=921600
d1_mini_lite.menu.baud.921600.upload.speed=921600
d1_mini_lite.menu.baud.9600=9600
@ -3918,7 +3918,7 @@ d1.build.variant=d1
d1.upload.tool=esptool
d1.upload.maximum_data_size=81920
d1.upload.wait_for_upload_port=true
d1.upload.erase_cmd=
d1.upload.erase_cmd=version
d1.serial.disableDTR=true
d1.serial.disableRTS=true
d1.build.mcu=esp8266
@ -4071,11 +4071,11 @@ d1.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOM.bui
d1.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
d1.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
d1.menu.wipe.none=Only Sketch
d1.menu.wipe.none.upload.erase_cmd=
d1.menu.wipe.none.upload.erase_cmd=version
d1.menu.wipe.sdk=Sketch + WiFi Settings
d1.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
d1.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
d1.menu.wipe.all=All Flash Contents
d1.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
d1.menu.wipe.all.upload.erase_cmd=erase_flash
d1.menu.baud.921600=921600
d1.menu.baud.921600.upload.speed=921600
d1.menu.baud.9600=9600
@ -4102,7 +4102,7 @@ espino.build.variant=espino
espino.upload.tool=esptool
espino.upload.maximum_data_size=81920
espino.upload.wait_for_upload_port=true
espino.upload.erase_cmd=
espino.upload.erase_cmd=version
espino.serial.disableDTR=true
espino.serial.disableRTS=true
espino.build.mcu=esp8266
@ -4258,11 +4258,11 @@ espino.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOM
espino.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
espino.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
espino.menu.wipe.none=Only Sketch
espino.menu.wipe.none.upload.erase_cmd=
espino.menu.wipe.none.upload.erase_cmd=version
espino.menu.wipe.sdk=Sketch + WiFi Settings
espino.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
espino.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
espino.menu.wipe.all=All Flash Contents
espino.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
espino.menu.wipe.all.upload.erase_cmd=erase_flash
espino.menu.baud.115200=115200
espino.menu.baud.115200.upload.speed=115200
espino.menu.baud.9600=9600
@ -4289,7 +4289,7 @@ espinotee.build.variant=espinotee
espinotee.upload.tool=esptool
espinotee.upload.maximum_data_size=81920
espinotee.upload.wait_for_upload_port=true
espinotee.upload.erase_cmd=
espinotee.upload.erase_cmd=version
espinotee.serial.disableDTR=true
espinotee.serial.disableRTS=true
espinotee.build.mcu=esp8266
@ -4442,11 +4442,11 @@ espinotee.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTA
espinotee.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
espinotee.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
espinotee.menu.wipe.none=Only Sketch
espinotee.menu.wipe.none.upload.erase_cmd=
espinotee.menu.wipe.none.upload.erase_cmd=version
espinotee.menu.wipe.sdk=Sketch + WiFi Settings
espinotee.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
espinotee.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
espinotee.menu.wipe.all=All Flash Contents
espinotee.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
espinotee.menu.wipe.all.upload.erase_cmd=erase_flash
espinotee.menu.baud.115200=115200
espinotee.menu.baud.115200.upload.speed=115200
espinotee.menu.baud.9600=9600
@ -4490,7 +4490,7 @@ wifinfo.menu.ESPModule.ESP07192.upload.maximum_size=827376
wifinfo.upload.tool=esptool
wifinfo.upload.maximum_data_size=81920
wifinfo.upload.wait_for_upload_port=true
wifinfo.upload.erase_cmd=
wifinfo.upload.erase_cmd=version
wifinfo.serial.disableDTR=true
wifinfo.serial.disableRTS=true
wifinfo.build.mcu=esp8266
@ -4686,11 +4686,11 @@ wifinfo.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
wifinfo.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
wifinfo.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
wifinfo.menu.wipe.none=Only Sketch
wifinfo.menu.wipe.none.upload.erase_cmd=
wifinfo.menu.wipe.none.upload.erase_cmd=version
wifinfo.menu.wipe.sdk=Sketch + WiFi Settings
wifinfo.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
wifinfo.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
wifinfo.menu.wipe.all=All Flash Contents
wifinfo.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
wifinfo.menu.wipe.all.upload.erase_cmd=erase_flash
wifinfo.menu.baud.115200=115200
wifinfo.menu.baud.115200.upload.speed=115200
wifinfo.menu.baud.9600=9600
@ -4728,7 +4728,7 @@ arduino-esp8266.menu.BoardModel.unowifideved=Uno WiFi
arduino-esp8266.upload.tool=esptool
arduino-esp8266.upload.maximum_data_size=81920
arduino-esp8266.upload.wait_for_upload_port=true
arduino-esp8266.upload.erase_cmd=
arduino-esp8266.upload.erase_cmd=version
arduino-esp8266.serial.disableDTR=true
arduino-esp8266.serial.disableRTS=true
arduino-esp8266.build.mcu=esp8266
@ -4882,11 +4882,11 @@ arduino-esp8266.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDA
arduino-esp8266.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
arduino-esp8266.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
arduino-esp8266.menu.wipe.none=Only Sketch
arduino-esp8266.menu.wipe.none.upload.erase_cmd=
arduino-esp8266.menu.wipe.none.upload.erase_cmd=version
arduino-esp8266.menu.wipe.sdk=Sketch + WiFi Settings
arduino-esp8266.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
arduino-esp8266.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
arduino-esp8266.menu.wipe.all=All Flash Contents
arduino-esp8266.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
arduino-esp8266.menu.wipe.all.upload.erase_cmd=erase_flash
arduino-esp8266.menu.baud.115200=115200
arduino-esp8266.menu.baud.115200.upload.speed=115200
arduino-esp8266.menu.baud.9600=9600
@ -4914,7 +4914,7 @@ gen4iod.build.variant=generic
gen4iod.upload.tool=esptool
gen4iod.upload.maximum_data_size=81920
gen4iod.upload.wait_for_upload_port=true
gen4iod.upload.erase_cmd=
gen4iod.upload.erase_cmd=version
gen4iod.serial.disableDTR=true
gen4iod.serial.disableRTS=true
gen4iod.build.mcu=esp8266
@ -5067,11 +5067,11 @@ gen4iod.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
gen4iod.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
gen4iod.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
gen4iod.menu.wipe.none=Only Sketch
gen4iod.menu.wipe.none.upload.erase_cmd=
gen4iod.menu.wipe.none.upload.erase_cmd=version
gen4iod.menu.wipe.sdk=Sketch + WiFi Settings
gen4iod.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
gen4iod.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
gen4iod.menu.wipe.all=All Flash Contents
gen4iod.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
gen4iod.menu.wipe.all.upload.erase_cmd=erase_flash
gen4iod.menu.baud.115200=115200
gen4iod.menu.baud.115200.upload.speed=115200
gen4iod.menu.baud.9600=9600
@ -5099,7 +5099,7 @@ oak.upload.maximum_size=1040368
oak.upload.tool=esptool
oak.upload.maximum_data_size=81920
oak.upload.wait_for_upload_port=true
oak.upload.erase_cmd=
oak.upload.erase_cmd=version
oak.serial.disableDTR=true
oak.serial.disableRTS=true
oak.build.mcu=esp8266
@ -5252,11 +5252,11 @@ oak.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOM.bu
oak.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
oak.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
oak.menu.wipe.none=Only Sketch
oak.menu.wipe.none.upload.erase_cmd=
oak.menu.wipe.none.upload.erase_cmd=version
oak.menu.wipe.sdk=Sketch + WiFi Settings
oak.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
oak.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
oak.menu.wipe.all=All Flash Contents
oak.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
oak.menu.wipe.all.upload.erase_cmd=erase_flash
oak.menu.baud.921600=921600
oak.menu.baud.921600.upload.speed=921600
oak.menu.baud.9600=9600
@ -5283,7 +5283,7 @@ wifiduino.build.variant=wifiduino
wifiduino.upload.tool=esptool
wifiduino.upload.maximum_data_size=81920
wifiduino.upload.wait_for_upload_port=true
wifiduino.upload.erase_cmd=
wifiduino.upload.erase_cmd=version
wifiduino.serial.disableDTR=true
wifiduino.serial.disableRTS=true
wifiduino.build.mcu=esp8266
@ -5436,11 +5436,11 @@ wifiduino.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTA
wifiduino.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
wifiduino.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
wifiduino.menu.wipe.none=Only Sketch
wifiduino.menu.wipe.none.upload.erase_cmd=
wifiduino.menu.wipe.none.upload.erase_cmd=version
wifiduino.menu.wipe.sdk=Sketch + WiFi Settings
wifiduino.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
wifiduino.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
wifiduino.menu.wipe.all=All Flash Contents
wifiduino.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
wifiduino.menu.wipe.all.upload.erase_cmd=erase_flash
wifiduino.menu.baud.921600=921600
wifiduino.menu.baud.921600.upload.speed=921600
wifiduino.menu.baud.9600=9600
@ -5467,7 +5467,7 @@ wifi_slot.build.variant=wifi_slot
wifi_slot.upload.tool=esptool
wifi_slot.upload.maximum_data_size=81920
wifi_slot.upload.wait_for_upload_port=true
wifi_slot.upload.erase_cmd=
wifi_slot.upload.erase_cmd=version
wifi_slot.serial.disableDTR=true
wifi_slot.serial.disableRTS=true
wifi_slot.build.mcu=esp8266
@ -5720,11 +5720,11 @@ wifi_slot.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTA
wifi_slot.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
wifi_slot.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
wifi_slot.menu.wipe.none=Only Sketch
wifi_slot.menu.wipe.none.upload.erase_cmd=
wifi_slot.menu.wipe.none.upload.erase_cmd=version
wifi_slot.menu.wipe.sdk=Sketch + WiFi Settings
wifi_slot.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
wifi_slot.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
wifi_slot.menu.wipe.all=All Flash Contents
wifi_slot.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
wifi_slot.menu.wipe.all.upload.erase_cmd=erase_flash
wifi_slot.menu.baud.115200=115200
wifi_slot.menu.baud.115200.upload.speed=115200
wifi_slot.menu.baud.9600=9600
@ -5751,7 +5751,7 @@ wiolink.build.variant=wiolink
wiolink.upload.tool=esptool
wiolink.upload.maximum_data_size=81920
wiolink.upload.wait_for_upload_port=true
wiolink.upload.erase_cmd=
wiolink.upload.erase_cmd=version
wiolink.serial.disableDTR=true
wiolink.serial.disableRTS=true
wiolink.build.mcu=esp8266
@ -5904,11 +5904,11 @@ wiolink.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO
wiolink.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
wiolink.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
wiolink.menu.wipe.none=Only Sketch
wiolink.menu.wipe.none.upload.erase_cmd=
wiolink.menu.wipe.none.upload.erase_cmd=version
wiolink.menu.wipe.sdk=Sketch + WiFi Settings
wiolink.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
wiolink.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
wiolink.menu.wipe.all=All Flash Contents
wiolink.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
wiolink.menu.wipe.all.upload.erase_cmd=erase_flash
wiolink.menu.baud.115200=115200
wiolink.menu.baud.115200.upload.speed=115200
wiolink.menu.baud.9600=9600
@ -5935,7 +5935,7 @@ espectro.build.variant=espectro
espectro.upload.tool=esptool
espectro.upload.maximum_data_size=81920
espectro.upload.wait_for_upload_port=true
espectro.upload.erase_cmd=
espectro.upload.erase_cmd=version
espectro.serial.disableDTR=true
espectro.serial.disableRTS=true
espectro.build.mcu=esp8266
@ -6088,11 +6088,11 @@ espectro.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAO
espectro.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG
espectro.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG
espectro.menu.wipe.none=Only Sketch
espectro.menu.wipe.none.upload.erase_cmd=
espectro.menu.wipe.none.upload.erase_cmd=version
espectro.menu.wipe.sdk=Sketch + WiFi Settings
espectro.menu.wipe.sdk.upload.erase_cmd=-ca "{build.rfcal_addr}" -cz 0x4000
espectro.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000
espectro.menu.wipe.all=All Flash Contents
espectro.menu.wipe.all.upload.erase_cmd=-ca 0x0 -cz "{build.flash_size_bytes}"
espectro.menu.wipe.all.upload.erase_cmd=erase_flash
espectro.menu.baud.115200=115200
espectro.menu.baud.115200.upload.speed=115200
espectro.menu.baud.9600=9600

View File

@ -78,7 +78,6 @@ $SED 's/runtime.tools.esptool.path={runtime.platform.path}\/tools\/esptool//g' |
$SED 's/tools.esptool.path={runtime.platform.path}\/tools\/esptool/tools.esptool.path=\{runtime.tools.esptool.path\}/g' | \
$SED 's/tools.mkspiffs.path={runtime.platform.path}\/tools\/mkspiffs/tools.mkspiffs.path=\{runtime.tools.mkspiffs.path\}/g' |\
$SED 's/recipe.hooks.core.prebuild.2.pattern.*//g' |\
$SED 's/recipe.hooks.core.prebuild.3.pattern.*//g' |\
$SED "s/version=.*/version=$ver/g" |\
$SED -E "s/name=([a-zA-Z0-9\ -]+).*/name=\1($ver)/g"\
> $outdir/platform.txt

View File

@ -1,11 +1,13 @@
{
"packages": [
{
"name": "esp8266",
"maintainer": "ESP8266 Community",
"websiteURL": "https://github.com/esp8266/Arduino",
"email": "ivan@esp8266.com",
"help": {
"online": "http://esp8266.com/arduino"
},
"websiteURL": "https://github.com/esp8266/Arduino",
"platforms": [
{
"category": "ESP8266",
@ -107,11 +109,6 @@
}
],
"toolsDependencies": [
{
"packager": "esp8266",
"version": "2.5.0-3-20ed2b9",
"name": "esptool"
},
{
"packager": "esp8266",
"version": "2.5.0-3-20ed2b9",
@ -121,6 +118,11 @@
"packager": "esp8266",
"version": "2.5.0-3-20ed2b9",
"name": "mkspiffs"
},
{
"packager": "esp8266",
"version": "3.7.2-post1",
"name": "python"
}
],
"help": {
@ -130,57 +132,22 @@
],
"tools": [
{
"version": "2.5.0-3-20ed2b9",
"name": "esptool",
"version": "3.7.2-post1",
"name": "python",
"systems": [
{
"host": "aarch64-linux-gnu",
"url": "https://github.com/earlephilhower/esp-quick-toolchain/releases/download/2.5.0-3/aarch64-linux-gnu.esptool-f80ae31.tar.gz",
"archiveFileName": "aarch64-linux-gnu.esptool-f80ae31.tar.gz",
"checksum": "SHA-256:888425ff1e33a97ea155b6f128de6b578c34468895ba9b4acd1e4f28608d917a",
"size": "14681"
},
{
"host": "arm-linux-gnueabihf",
"url": "https://github.com/earlephilhower/esp-quick-toolchain/releases/download/2.5.0-3/arm-linux-gnueabihf.esptool-f80ae31.tar.gz",
"archiveFileName": "arm-linux-gnueabihf.esptool-f80ae31.tar.gz",
"checksum": "SHA-256:71c878ac6a21ee69dcd615cd28f2dccd29a87079e0b3069eba625089d89e5058",
"size": "13873"
"host": "x86_64-mingw32",
"url": "https://www.python.org/ftp/python/3.7.2/python-3.7.2.post1-embed-win32.zip",
"archiveFileName": "python-3.7.2.post1-embed-win32.zip",
"checksum": "SHA-256:ceb06a5244e93e7e7523e26e1354447b79a9e6fd8c45891d81df9c7da1e02d05",
"size": "6533256"
},
{
"host": "i686-mingw32",
"url": "https://github.com/earlephilhower/esp-quick-toolchain/releases/download/2.5.0-3/i686-w64-mingw32.esptool-f80ae31.zip",
"archiveFileName": "i686-w64-mingw32.esptool-f80ae31.zip",
"checksum": "SHA-256:e30f25a19a78635000401b083b479e111d591bac20cfd89b1bfdf36a60e9ee20",
"size": "16466"
},
{
"host": "i686-pc-linux-gnu",
"url": "https://github.com/earlephilhower/esp-quick-toolchain/releases/download/2.5.0-3/i686-linux-gnu.esptool-f80ae31.tar.gz",
"archiveFileName": "i686-linux-gnu.esptool-f80ae31.tar.gz",
"checksum": "SHA-256:fe632f4602d02b6a9425c5bf95074095cb6d3c57912168a0f6b796fddd8ce991",
"size": "16543"
},
{
"host": "x86_64-apple-darwin",
"url": "https://github.com/earlephilhower/esp-quick-toolchain/releases/download/2.5.0-3/x86_64-apple-darwin14.esptool-f80ae31.tar.gz",
"archiveFileName": "x86_64-apple-darwin14.esptool-f80ae31.tar.gz",
"checksum": "SHA-256:0f51e487706a476b0b87299a769282ad65623774770655168a79d1748d2506e7",
"size": "15003"
},
{
"host": "x86_64-pc-linux-gnu",
"url": "https://github.com/earlephilhower/esp-quick-toolchain/releases/download/2.5.0-3/x86_64-linux-gnu.esptool-f80ae31.tar.gz",
"archiveFileName": "x86_64-linux-gnu.esptool-f80ae31.tar.gz",
"checksum": "SHA-256:bded1dca953377838b6086a9bcd40a1dc5286ba5f69f2372c22a1d1819baad24",
"size": "16526"
},
{
"host": "x86_64-mingw32",
"url": "https://github.com/earlephilhower/esp-quick-toolchain/releases/download/2.5.0-3/x86_64-w64-mingw32.esptool-f80ae31.zip",
"archiveFileName": "x86_64-w64-mingw32.esptool-f80ae31.zip",
"checksum": "SHA-256:d6d5976fde82d07e93d5a01f38bbb4f84a7796187ff0541ee62650041791d0e8",
"size": "19724"
"url": "https://www.python.org/ftp/python/3.7.2/python-3.7.2.post1-embed-win32.zip",
"archiveFileName": "python-3.7.2.post1-embed-win32.zip",
"checksum": "SHA-256:ceb06a5244e93e7e7523e26e1354447b79a9e6fd8c45891d81df9c7da1e02d05",
"size": "6533256"
}
]
},
@ -294,9 +261,7 @@
}
]
}
],
"email": "ivan@esp8266.com",
"name": "esp8266"
]
}
]
}

View File

@ -11,6 +11,11 @@ version=2.6.0-dev
runtime.tools.xtensa-lx106-elf-gcc.path={runtime.platform.path}/tools/xtensa-lx106-elf
runtime.tools.esptool.path={runtime.platform.path}/tools/esptool
runtime.tools.signing={runtime.platform.path}/tools/signing.py
runtime.tools.elf2bin={runtime.platform.path}/tools/elf2bin.py
runtime.tools.makecorever={runtime.platform.path}/tools/makecorever.py
runtime.tools.eboot={runtime.platform.path}/bootloaders/eboot/eboot.elf
runtime.tools.python=python
runtime.tools.python.windows={runtime.platform.path}/tools/python/python.exe
compiler.warning_flags=-w
compiler.warning_flags.none=-w
@ -76,14 +81,8 @@ compiler.elf2hex.extra_flags=
## generate file with git version number
## needs bash, git, and echo
recipe.hooks.core.prebuild.1.pattern=python "{runtime.tools.signing}" --mode header --publickey "{build.source.path}/public.key" --out "{build.path}/core/Updater_Signing.h"
recipe.hooks.core.prebuild.2.pattern=bash -c "mkdir -p {build.path}/core && echo \#define ARDUINO_ESP8266_GIT_VER 0x`git --git-dir {runtime.platform.path}/.git rev-parse --short=8 HEAD 2>/dev/null || echo ffffffff` >{build.path}/core/core_version.h"
recipe.hooks.core.prebuild.3.pattern=bash -c "mkdir -p {build.path}/core && echo \#define ARDUINO_ESP8266_GIT_DESC `cd "{runtime.platform.path}"; git describe --tags 2>/dev/null || echo unix-{version}` >>{build.path}/core/core_version.h"
## windows-compatible version without git
recipe.hooks.core.prebuild.1.pattern.windows=cmd.exe /c rem cannot sign on windows
recipe.hooks.core.prebuild.2.pattern.windows=cmd.exe /c mkdir {build.path}\core & (echo #define ARDUINO_ESP8266_GIT_VER 0x00000000 & echo #define ARDUINO_ESP8266_GIT_DESC win-{version} ) > {build.path}\core\core_version.h
recipe.hooks.core.prebuild.3.pattern.windows=cmd.exe /c if exist {build.source.path}\public.key echo #error Cannot automatically build signed binaries on Windows > {build.path}\core\Updater_Signing.h
recipe.hooks.core.prebuild.1.pattern="{runtime.tools.python}" "{runtime.tools.signing}" --mode header --publickey "{build.source.path}/public.key" --out "{build.path}/core/Updater_Signing.h"
recipe.hooks.core.prebuild.2.pattern="{runtime.tools.python}" "{runtime.tools.makecorever}" --build_path "{build.path}' --platform_path "{runtime.platform.path}" --version "unix-{version}"
## Build the app.ld linker file
recipe.hooks.linking.prelink.1.pattern="{compiler.path}{compiler.c.cmd}" -CC -E -P {build.vtable_flags} "{runtime.platform.path}/tools/sdk/ld/eagle.app.v6.common.ld.h" -o "{build.path}/local.eagle.app.v6.common.ld"
@ -107,14 +106,8 @@ recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {build.exception_
recipe.objcopy.eep.pattern=
## Create hex
#recipe.objcopy.hex.pattern="{compiler.path}{compiler.elf2hex.cmd}" {compiler.elf2hex.flags} {compiler.elf2hex.extra_flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.hex"
recipe.objcopy.hex.1.pattern="{runtime.tools.esptool.path}/{compiler.esptool.cmd}" -eo "{runtime.platform.path}/bootloaders/eboot/eboot.elf" -bo "{build.path}/{build.project_name}.bin" -bm {build.flash_mode} -bf {build.flash_freq} -bz {build.flash_size} -bs .text -bp 4096 -ec -eo "{build.path}/{build.project_name}.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec
recipe.objcopy.hex.2.pattern=python "{runtime.tools.signing}" --mode sign --privatekey "{build.source.path}/private.key" --bin "{build.path}/{build.project_name}.bin" --out "{build.path}/{build.project_name}.bin.signed"
# No signing on Windows
recipe.objcopy.hex.1.pattern.windows="{runtime.tools.esptool.path}/{compiler.esptool.cmd}" -eo "{runtime.platform.path}/bootloaders/eboot/eboot.elf" -bo "{build.path}/{build.project_name}.bin" -bm {build.flash_mode} -bf {build.flash_freq} -bz {build.flash_size} -bs .text -bp 4096 -ec -eo "{build.path}/{build.project_name}.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec
recipe.objcopy.hex.2.pattern.windows=
recipe.objcopy.hex.1.pattern="{runtime.tools.python}" "{runtime.tools.elf2bin}" --eboot "{runtime.tools.eboot}" --app "{build.path}/{build.project_name}.elf" --flash_mode {build.flash_mode} --flash_freq {build.flash_freq} --flash_size {build.flash_size} --path "{runtime.tools.xtensa-lx106-elf-gcc.path}/bin" --out "{build.path}/{build.project_name}.bin"
recipe.objcopy.hex.2.pattern="{runtime.tools.python}" "{runtime.tools.signing}" --mode sign --privatekey "{build.source.path}/private.key" --bin "{build.path}/{build.project_name}.bin" --out "{build.path}/{build.project_name}.bin.signed"
## Save hex
recipe.output.tmp_file={build.project_name}.bin
@ -128,16 +121,23 @@ recipe.size.regex.data=^(?:\.data|\.rodata|\.bss)\s+([0-9]+).*
# ------------------------------
tools.esptool.cmd=esptool
tools.esptool.cmd.windows=esptool.exe
tools.esptool.path={runtime.platform.path}/tools/esptool
# Need to duplicate the python path because Arduino does not replace properly in this stage
tools.esptool.cmd=python
tools.esptool.cmd.windows={runtime.platform.path}/tools/python/python.exe
tools.esptool.path=
tools.esptool.network_cmd=python
tools.esptool.network_cmd.windows=python.exe
tools.esptool.network_cmd.windows={runtime.platform.path}/tools/python/python.exe
tools.esptool.upload.protocol=esp
tools.esptool.upload.params.verbose=-vv
tools.esptool.upload.params.verbose=--trace
tools.esptool.upload.params.quiet=
tools.esptool.upload.pattern="{path}/{cmd}" {upload.verbose} -cd {upload.resetmethod} -cb {upload.speed} -cp "{serial.port}" {upload.erase_cmd} -ca 0x00000 -cf "{build.path}/{build.project_name}.bin"
# 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" "{runtime.platform.path}/tools/pyserial" "{runtime.platform.path}/tools/esptool/esptool.py" --chip esp8266 --port "{serial.port}" --baud "{upload.speed}" "{upload.verbose}" {upload.erase_cmd} --end --chip esp8266 --port "{serial.port}" --baud "{upload.speed}" "{upload.verbose}" write_flash 0x0 "{build.path}/{build.project_name}.bin" --end
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"
tools.mkspiffs.cmd=mkspiffs

View File

@ -851,7 +851,7 @@ macros = {
( '.upload.tool', 'esptool' ),
( '.upload.maximum_data_size', '81920' ),
( '.upload.wait_for_upload_port', 'true' ),
( '.upload.erase_cmd', ''),
( '.upload.erase_cmd', 'version'),
( '.serial.disableDTR', 'true' ),
( '.serial.disableRTS', 'true' ),
( '.build.mcu', 'esp8266' ),
@ -1066,11 +1066,11 @@ macros = {
'flash_erase_menu': collections.OrderedDict([
( '.menu.wipe.none', 'Only Sketch' ),
( '.menu.wipe.none.upload.erase_cmd', '' ),
( '.menu.wipe.none.upload.erase_cmd', 'version' ),
( '.menu.wipe.sdk', 'Sketch + WiFi Settings' ),
( '.menu.wipe.sdk.upload.erase_cmd', '-ca "{build.rfcal_addr}" -cz 0x4000' ),
( '.menu.wipe.sdk.upload.erase_cmd', 'erase_region "{build.rfcal_addr}" 0x4000' ),
( '.menu.wipe.all', 'All Flash Contents' ),
( '.menu.wipe.all.upload.erase_cmd', '-ca 0x0 -cz "{build.flash_size_bytes}"' ),
( '.menu.wipe.all.upload.erase_cmd', 'erase_flash' ),
]),
}

119
tools/elf2bin.py Executable file
View File

@ -0,0 +1,119 @@
#!/usr/bin/env python
# Generate an Arduino compatible BIN file from bootloader and sketch ELF
# Replaces esptool-ck.exe and emulates its behavior.
#
# Copyright (C) 2019 - Earle F. Philhower, III
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import argparse
import re
import os
import subprocess
import sys
import tempfile
fmodeb = { 'dout': 3, 'dio': 2, 'quot': 1, 'qio': 0 }
ffreqb = { '40': 0, '26': 1, '20': 2, '80': 15 }
fsizeb = { '512K': 0, '256K': 1, '1M': 2, '2M': 3, '4M': 4, '8M': 8, '16M': 9 }
def get_elf_entry(elf, path):
p = subprocess.Popen([path + "/xtensa-lx106-elf-readelf", '-h', elf], stdout=subprocess.PIPE, universal_newlines=True )
lines = p.stdout.readlines()
for line in lines:
if 'Entry point address' in line:
words = re.split('\s+', line)
entry_point = words[-2]
return int(entry_point, 16)
raise Exception('Unable to find entry point in file "' + elf + '"')
def get_segment_size_addr(elf, segment, path):
p = subprocess.Popen([path + '/xtensa-lx106-elf-objdump', '-h', '-j', segment, elf], stdout=subprocess.PIPE, universal_newlines=True )
lines = p.stdout.readlines()
for line in lines:
if segment in line:
words = re.split('\s+', line)
size = int(words[3], 16)
addr = int(words[4], 16)
return [ size, addr ]
raise Exception('Unable to find size and start point in file "' + elf + '" for "' + segment + '"')
def read_segment(elf, segment, path):
tmpfile, dumpfile = tempfile.mkstemp()
os.close(tmpfile)
p = subprocess.check_call([path + "/xtensa-lx106-elf-objcopy", '-O', 'binary', '--only-section=' + segment, elf, dumpfile], stdout=subprocess.PIPE)
binfile = open(dumpfile, "rb")
raw = binfile.read()
binfile.close()
return raw
def write_bin(out, elf, segments, to_addr, flash_mode, flash_size, flash_freq, path):
entry = int(get_elf_entry( elf, path ))
header = [ 0xe9, len(segments), fmodeb[flash_mode], ffreqb[flash_freq] + 16 * fsizeb[flash_size],
entry & 255, (entry>>8) & 255, (entry>>16) & 255, (entry>>24) & 255 ]
out.write(bytearray(header))
total_size = 8
checksum = 0xef
for segment in segments:
[size, addr] = get_segment_size_addr(elf, segment, path)
seghdr = [ addr & 255, (addr>>8) & 255, (addr>>16) & 255, (addr>>24) & 255,
size & 255, (size>>8) & 255, (size>>16) & 255, (size>>24) & 255]
out.write(bytearray(seghdr));
total_size += 8;
raw = read_segment(elf, segment, path)
if len(raw) != size:
raise Exception('Segment size doesn\'t match read data for "' + segment + '" in "' + elf + '"')
out.write(raw)
total_size += len(raw)
try:
for data in raw:
checksum = checksum ^ ord(data)
except:
for data in raw:
checksum = checksum ^ data
total_size += 1
while total_size & 15:
total_size += 1
out.write(bytearray([0]))
out.write(bytearray([checksum]))
if to_addr != 0:
while total_size < to_addr:
out.write(bytearray([0xaa]))
total_size += 1
def main():
parser = argparse.ArgumentParser(description='Create a BIN file from eboot.elf and Arduino sketch.elf for upload by esptool.py')
parser.add_argument('-e', '--eboot', action='store', required=True, help='Path to the Arduino eboot.elf bootloader')
parser.add_argument('-a', '--app', action='store', required=True, help='Path to the Arduino sketch ELF')
parser.add_argument('-m', '--flash_mode', action='store', required=True, choices=['dout', 'dio', 'qout', 'qio'], help='SPI flash mode')
parser.add_argument('-f', '--flash_freq', action='store', required=True, choices=['20', '26', '40', '80'], help='SPI flash speed')
parser.add_argument('-s', '--flash_size', action='store', required=True, choices=['256K', '512K', '1M', '2M', '4M', '8M', '16M'], help='SPI flash size')
parser.add_argument('-o', '--out', action='store', required=True, help='Output BIN filename')
parser.add_argument('-p', '--path', action='store', required=True, help='Path to Xtensa toolchain binaries')
args = parser.parse_args()
print('Creating BIN file "' + args.out + '" using "' + args.app + '"')
out = open(args.out, "wb")
write_bin(out, args.eboot, ['.text'], 4096, args.flash_mode, args.flash_size, args.flash_freq, args.path)
write_bin(out, args.app, ['.irom0.text', '.text', '.data', '.rodata'], 0, args.flash_mode, args.flash_size, args.flash_freq, args.path)
out.close()
return 0
if __name__ == '__main__':
sys.exit(main())

1
tools/esptool Submodule

@ -0,0 +1 @@
Subproject commit 9ad444a6e06e58833d5e6044c1d5f3eb3dd56023

51
tools/makecorever.py Executable file
View File

@ -0,0 +1,51 @@
#!/usr/bin/env python
# Generate the core_version.h header per-build
#
# Copyright (C) 2019 - Earle F. Philhower, III
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import argparse
import os
import subprocess
parser = argparse.ArgumentParser(description='Generate core_version.h')
parser.add_argument('-b', '--build_path', action='store', required=True, help='build.path variable')
parser.add_argument('-p', '--platform_path', action='store', required=True, help='platform.path variable')
parser.add_argument('-v', '--version', action='store', required=True, help='version variable')
args = parser.parse_args()
core = args.build_path + '/core'
try:
os.makedirs(core)
except:
pass
out = open(core + '/core_version.h', "w")
try:
p = subprocess.Popen(['git', '--git-dir', args.platform_path + '/.git', 'rev-parse', '--short=8', 'HEAD'], stdout = subprocess.PIPE )
git_ver = '0x' + p.stdout.readlines()[0].strip()
p = subprocess.Popen(['git', '--git-dir', args.platform_path + '/.git', 'describe', '--tags'], stdout = subprocess.PIPE )
git_desc = p.stdout.readlines()[0].strip()
except:
git_ver = '0xffffffff'
git_desc = args.version
out.write('#define ARDUINO_ESP8266_GIT_VER ' + git_ver + '\n')
out.write('#define ARDUINO_ESP8266_GIT_DESC ' + git_desc + '\n')
out.close()

1
tools/pyserial Submodule

@ -0,0 +1 @@
Subproject commit c54c81d933b847458d465cd77e96cd702ff2e7be

41
tools/upload.py Executable file
View File

@ -0,0 +1,41 @@
#!/usr/bin/env python
# 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 patameter is pyserial path, then a series of command arguments separated with --end
# i.e. upload.py tools/pyserial tools/esptool/esptool.py erase_flash --end write_flash file 0x0 --end
import inspect
import os
import sys
sys.argv.pop(0) # Remove executable name
try:
sys.path.append(sys.argv.pop(0).replace('\\', '/')) # Add pyserial dir to search path, in UNIX format
esptool = sys.argv.pop(0).replace('\\', '/') # Full path to esptool.py, in UNIX format
except:
sys.stderr.write("Error in command line, need pyserial path as 1st arg and esptool path as 2nd.\n")
sys.exit(1)
fakeargs = [];
while len(sys.argv):
if sys.argv[0] == '--end':
pid = os.fork()
if pid == 0:
sys.argv = ['esptool.py'] + fakeargs
sys.stderr.write("Running: " + " ".join(sys.argv) + "\n")
exec(open(esptool).read())
sys.exit(0)
else:
os.waitpid(pid, 0)
sys.argv.pop(0) # Remove --end
fakeargs = []
else:
# 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.
thisarg = sys.argv.pop(0)
if thisarg == "921600":
thisarg = "460800"
fakeargs = fakeargs + [thisarg]