From 28c79fad5669e708b4c3c6f50c47f5440220b4fd Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Mon, 2 Aug 2021 16:53:16 +0200 Subject: [PATCH 01/19] Add functionality to copy generated binaries into sketch folder The current platform.txt doesn't define the entries to copy signed binaries when performing a "Export compiled Binary". This pull request adds the nessesary enties. --- platform.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/platform.txt b/platform.txt index 9f823d2c99..78ea1e28e4 100644 --- a/platform.txt +++ b/platform.txt @@ -130,8 +130,10 @@ recipe.objcopy.hex.2.pattern="{runtime.tools.python3.path}/python3" -I "{runtime recipe.objcopy.hex.3.pattern="{runtime.tools.python3.path}/python3" -I "{runtime.tools.sizes}" --elf "{build.path}/{build.project_name}.elf" --path "{runtime.tools.xtensa-lx106-elf-gcc.path}/bin" --mmu "{build.mmuflags}" ## Save hex -recipe.output.tmp_file={build.project_name}.bin -recipe.output.save_file={build.project_name}.{build.variant}.bin +recipe.output.tmp_file.1={build.project_name}.bin +recipe.output.save_file.1={build.project_name}.{build.variant}.bin +recipe.output.tmp_file.2={build.project_name}.bin.signed +recipe.output.save_file.2={build.project_name}.{build.variant}.bin.signed ## Compute size recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf" From 4f6340e594e8eb9cb68537772fd5c4d00b8afa82 Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Fri, 13 Aug 2021 10:48:10 +0200 Subject: [PATCH 02/19] Integrated handling for filesystem and gzipped Binaries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ATENTION: This is tested on Linux only! See below for open questions/prerequisites. Currently there are some manual steps necessary to prepare the files necessary for OTA updates (especially for ESP8266HTTPUpdateServer) The steps are: 1. Compile the sketch 2. Export the generated sketch-binary 3. Generate the filesystem 4. Export the fs-binary 5. Generate gzipped versions of binaries 6. Generate signed versions of gzipped binaries Which of the above steps are necessary depends on the sketch (does it use a fs?) and the kind of OTA chosen (signed binaries necessary?) or preferred usage (use of gzipped binaries for faster upload?). There are some problems/inconveniences: 2. The signed sketch-binary is not exported when using "Export compiled Binary". (This point will be solved with my Pull-Request #8255) 3. & 4. AFAIK, the only “integrated” way to generate the fs is using one of the tools: “arduino-esp8266littlefs-plugin” or “arduino-esp8266fs-plugin”. Both tools are designed to create & upload the fs, but not export them. So if preparing the files for an OTA when no board is connected, you have to: - ignore errors shown because upload is not possible - find & navigate to the “build.path” and copy the fs-binary manually 5. & 6. AFAIK, there is no “integrated” way to perform these steps. This Pull-Request will integrate all of the above steps into the “compile and/or upload” action of Arduino. This is done by adding two new entries (“Filesystem” and “Binaries”) to the tools-menu. These entries are presented just like any other options for esp8266 (“Upload speed” ... “Non-32-Bit Access”) and placed right after the last. Menu-Entry “Filesystem” let You choose between: - Off - LitteFs: Create & Upload - LitteFs: Create only - SPIFFS: Create & Upload - SPIFFS: Create only Menu-Entry “Binaries” let You choose between: - Off - Export (.bin & .bin.signed) - Create & Export gzipped Binaries too Now You can choose with of the steps mentioned above will be automatically performed. After a (successful) compile, the files will be exported to a subdir “bin/{variant}” of Your sketch directory (“{variant}” replaced with the name of the board as shown behind “Tools -> Board:”). Signed variants of all Binaries are gererated similar to the “automatic signing” done for normal sketch binary. Open questions/prerequisites: As stated above I had tested this on Linux only. Even under this os there are some prerequisites: - gzip must be available (inside path) if it is not, a message is given and creating of gzipped binaries is skipped. - tkinter should be available if it is not, and creating of fs is requested AND the data dir is empty, I didn't know how to ask the user: “Are you sure you want to create an empty ... image?”. So in this case a message is given and the fs will not be created. This “should” work under Windows/MacOs the same, but can't be tested by me (I had no PC with this OSes) An additional question for developers: As mentioned inside function main of “postbuild.py”, there is a strange behavior of the arg "{build.path}" supplied via “platform.txt”. If someone can explain me why this “string” behave as described in the comments, I would be happy ;-) --- boards.txt | 594 +++++++++++++++++++++++++++++++++++++++ libraries/SoftwareSerial | 2 +- platform.txt | 18 +- tools/boards.txt.py | 20 ++ 4 files changed, 626 insertions(+), 8 deletions(-) diff --git a/boards.txt b/boards.txt index fd05749760..bd30432834 100644 --- a/boards.txt +++ b/boards.txt @@ -26,6 +26,8 @@ menu.sdk=Espressif FW menu.ssl=SSL Support menu.mmu=MMU menu.non32xfer=Non-32-Bit Access +menu.Filesystem=Filesystem +menu.Binaries=Binaries ############################################################## generic.name=Generic ESP8266 Module @@ -42,6 +44,22 @@ generic.build.variant=generic generic.build.spiffs_pagesize=256 generic.build.debug_port= generic.build.debug_level= +generic.menu.Filesystem.Off=Off +generic.menu.Filesystem.Off.build.Filesystem=0 +generic.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +generic.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +generic.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +generic.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +generic.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +generic.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +generic.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +generic.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +generic.menu.Binaries.Off=Off +generic.menu.Binaries.Off.build.Binaries=0 +generic.menu.Binaries.Binaries=Export (.bin & .bin.signed) +generic.menu.Binaries.Binaries.build.Binaries=1 +generic.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +generic.menu.Binaries.PackedBinaries.build.Binaries=2 generic.menu.xtal.80=80 MHz generic.menu.xtal.80.build.f_cpu=80000000L generic.menu.xtal.160=160 MHz @@ -539,6 +557,22 @@ esp8285.build.core=esp8266 esp8285.build.spiffs_pagesize=256 esp8285.build.debug_port= esp8285.build.debug_level= +esp8285.menu.Filesystem.Off=Off +esp8285.menu.Filesystem.Off.build.Filesystem=0 +esp8285.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +esp8285.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +esp8285.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +esp8285.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +esp8285.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +esp8285.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +esp8285.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +esp8285.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +esp8285.menu.Binaries.Off=Off +esp8285.menu.Binaries.Off.build.Binaries=0 +esp8285.menu.Binaries.Binaries=Export (.bin & .bin.signed) +esp8285.menu.Binaries.Binaries.build.Binaries=1 +esp8285.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +esp8285.menu.Binaries.PackedBinaries.build.Binaries=2 esp8285.menu.xtal.80=80 MHz esp8285.menu.xtal.80.build.f_cpu=80000000L esp8285.menu.xtal.160=160 MHz @@ -906,6 +940,22 @@ gen4iod.build.core=esp8266 gen4iod.build.spiffs_pagesize=256 gen4iod.build.debug_port= gen4iod.build.debug_level= +gen4iod.menu.Filesystem.Off=Off +gen4iod.menu.Filesystem.Off.build.Filesystem=0 +gen4iod.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +gen4iod.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +gen4iod.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +gen4iod.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +gen4iod.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +gen4iod.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +gen4iod.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +gen4iod.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +gen4iod.menu.Binaries.Off=Off +gen4iod.menu.Binaries.Off.build.Binaries=0 +gen4iod.menu.Binaries.Binaries=Export (.bin & .bin.signed) +gen4iod.menu.Binaries.Binaries.build.Binaries=1 +gen4iod.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +gen4iod.menu.Binaries.PackedBinaries.build.Binaries=2 gen4iod.menu.xtal.80=80 MHz gen4iod.menu.xtal.80.build.f_cpu=80000000L gen4iod.menu.xtal.160=160 MHz @@ -1188,6 +1238,22 @@ huzzah.build.core=esp8266 huzzah.build.spiffs_pagesize=256 huzzah.build.debug_port= huzzah.build.debug_level= +huzzah.menu.Filesystem.Off=Off +huzzah.menu.Filesystem.Off.build.Filesystem=0 +huzzah.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +huzzah.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +huzzah.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +huzzah.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +huzzah.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +huzzah.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +huzzah.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +huzzah.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +huzzah.menu.Binaries.Off=Off +huzzah.menu.Binaries.Off.build.Binaries=0 +huzzah.menu.Binaries.Binaries=Export (.bin & .bin.signed) +huzzah.menu.Binaries.Binaries.build.Binaries=1 +huzzah.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +huzzah.menu.Binaries.PackedBinaries.build.Binaries=2 huzzah.menu.xtal.80=80 MHz huzzah.menu.xtal.80.build.f_cpu=80000000L huzzah.menu.xtal.160=160 MHz @@ -1403,6 +1469,22 @@ wifi_slot.build.core=esp8266 wifi_slot.build.spiffs_pagesize=256 wifi_slot.build.debug_port= wifi_slot.build.debug_level= +wifi_slot.menu.Filesystem.Off=Off +wifi_slot.menu.Filesystem.Off.build.Filesystem=0 +wifi_slot.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +wifi_slot.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +wifi_slot.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +wifi_slot.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +wifi_slot.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +wifi_slot.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +wifi_slot.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +wifi_slot.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +wifi_slot.menu.Binaries.Off=Off +wifi_slot.menu.Binaries.Off.build.Binaries=0 +wifi_slot.menu.Binaries.Binaries=Export (.bin & .bin.signed) +wifi_slot.menu.Binaries.Binaries.build.Binaries=1 +wifi_slot.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +wifi_slot.menu.Binaries.PackedBinaries.build.Binaries=2 wifi_slot.menu.xtal.80=80 MHz wifi_slot.menu.xtal.80.build.f_cpu=80000000L wifi_slot.menu.xtal.160=160 MHz @@ -1744,6 +1826,22 @@ arduino-esp8266.build.variant=generic arduino-esp8266.build.spiffs_pagesize=256 arduino-esp8266.build.debug_port= arduino-esp8266.build.debug_level= +arduino-esp8266.menu.Filesystem.Off=Off +arduino-esp8266.menu.Filesystem.Off.build.Filesystem=0 +arduino-esp8266.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +arduino-esp8266.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +arduino-esp8266.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +arduino-esp8266.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +arduino-esp8266.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +arduino-esp8266.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +arduino-esp8266.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +arduino-esp8266.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +arduino-esp8266.menu.Binaries.Off=Off +arduino-esp8266.menu.Binaries.Off.build.Binaries=0 +arduino-esp8266.menu.Binaries.Binaries=Export (.bin & .bin.signed) +arduino-esp8266.menu.Binaries.Binaries.build.Binaries=1 +arduino-esp8266.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +arduino-esp8266.menu.Binaries.PackedBinaries.build.Binaries=2 arduino-esp8266.menu.xtal.80=80 MHz arduino-esp8266.menu.xtal.80.build.f_cpu=80000000L arduino-esp8266.menu.xtal.160=160 MHz @@ -1960,6 +2058,22 @@ espmxdevkit.build.core=esp8266 espmxdevkit.build.spiffs_pagesize=256 espmxdevkit.build.debug_port= espmxdevkit.build.debug_level= +espmxdevkit.menu.Filesystem.Off=Off +espmxdevkit.menu.Filesystem.Off.build.Filesystem=0 +espmxdevkit.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +espmxdevkit.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +espmxdevkit.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +espmxdevkit.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +espmxdevkit.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +espmxdevkit.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +espmxdevkit.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +espmxdevkit.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +espmxdevkit.menu.Binaries.Off=Off +espmxdevkit.menu.Binaries.Off.build.Binaries=0 +espmxdevkit.menu.Binaries.Binaries=Export (.bin & .bin.signed) +espmxdevkit.menu.Binaries.Binaries.build.Binaries=1 +espmxdevkit.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +espmxdevkit.menu.Binaries.PackedBinaries.build.Binaries=2 espmxdevkit.menu.xtal.80=80 MHz espmxdevkit.menu.xtal.80.build.f_cpu=80000000L espmxdevkit.menu.xtal.160=160 MHz @@ -2216,6 +2330,22 @@ oak.build.core=esp8266 oak.build.spiffs_pagesize=256 oak.build.debug_port= oak.build.debug_level= +oak.menu.Filesystem.Off=Off +oak.menu.Filesystem.Off.build.Filesystem=0 +oak.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +oak.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +oak.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +oak.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +oak.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +oak.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +oak.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +oak.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +oak.menu.Binaries.Off=Off +oak.menu.Binaries.Off.build.Binaries=0 +oak.menu.Binaries.Binaries=Export (.bin & .bin.signed) +oak.menu.Binaries.Binaries.build.Binaries=1 +oak.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +oak.menu.Binaries.PackedBinaries.build.Binaries=2 oak.menu.xtal.80=80 MHz oak.menu.xtal.80.build.f_cpu=80000000L oak.menu.xtal.160=160 MHz @@ -2440,6 +2570,22 @@ espduino.build.core=esp8266 espduino.build.spiffs_pagesize=256 espduino.build.debug_port= espduino.build.debug_level= +espduino.menu.Filesystem.Off=Off +espduino.menu.Filesystem.Off.build.Filesystem=0 +espduino.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +espduino.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +espduino.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +espduino.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +espduino.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +espduino.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +espduino.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +espduino.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +espduino.menu.Binaries.Off=Off +espduino.menu.Binaries.Off.build.Binaries=0 +espduino.menu.Binaries.Binaries=Export (.bin & .bin.signed) +espduino.menu.Binaries.Binaries.build.Binaries=1 +espduino.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +espduino.menu.Binaries.PackedBinaries.build.Binaries=2 espduino.menu.xtal.80=80 MHz espduino.menu.xtal.80.build.f_cpu=80000000L espduino.menu.xtal.160=160 MHz @@ -2654,6 +2800,22 @@ espectro.build.core=esp8266 espectro.build.spiffs_pagesize=256 espectro.build.debug_port= espectro.build.debug_level= +espectro.menu.Filesystem.Off=Off +espectro.menu.Filesystem.Off.build.Filesystem=0 +espectro.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +espectro.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +espectro.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +espectro.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +espectro.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +espectro.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +espectro.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +espectro.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +espectro.menu.Binaries.Off=Off +espectro.menu.Binaries.Off.build.Binaries=0 +espectro.menu.Binaries.Binaries=Export (.bin & .bin.signed) +espectro.menu.Binaries.Binaries.build.Binaries=1 +espectro.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +espectro.menu.Binaries.PackedBinaries.build.Binaries=2 espectro.menu.xtal.80=80 MHz espectro.menu.xtal.80.build.f_cpu=80000000L espectro.menu.xtal.160=160 MHz @@ -2869,6 +3031,22 @@ espino.build.core=esp8266 espino.build.spiffs_pagesize=256 espino.build.debug_port= espino.build.debug_level= +espino.menu.Filesystem.Off=Off +espino.menu.Filesystem.Off.build.Filesystem=0 +espino.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +espino.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +espino.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +espino.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +espino.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +espino.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +espino.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +espino.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +espino.menu.Binaries.Off=Off +espino.menu.Binaries.Off.build.Binaries=0 +espino.menu.Binaries.Binaries=Export (.bin & .bin.signed) +espino.menu.Binaries.Binaries.build.Binaries=1 +espino.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +espino.menu.Binaries.PackedBinaries.build.Binaries=2 espino.menu.xtal.80=80 MHz espino.menu.xtal.80.build.f_cpu=80000000L espino.menu.xtal.160=160 MHz @@ -3087,6 +3265,22 @@ espresso_lite_v1.build.core=esp8266 espresso_lite_v1.build.spiffs_pagesize=256 espresso_lite_v1.build.debug_port= espresso_lite_v1.build.debug_level= +espresso_lite_v1.menu.Filesystem.Off=Off +espresso_lite_v1.menu.Filesystem.Off.build.Filesystem=0 +espresso_lite_v1.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +espresso_lite_v1.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +espresso_lite_v1.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +espresso_lite_v1.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +espresso_lite_v1.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +espresso_lite_v1.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +espresso_lite_v1.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +espresso_lite_v1.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +espresso_lite_v1.menu.Binaries.Off=Off +espresso_lite_v1.menu.Binaries.Off.build.Binaries=0 +espresso_lite_v1.menu.Binaries.Binaries=Export (.bin & .bin.signed) +espresso_lite_v1.menu.Binaries.Binaries.build.Binaries=1 +espresso_lite_v1.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +espresso_lite_v1.menu.Binaries.PackedBinaries.build.Binaries=2 espresso_lite_v1.menu.xtal.80=80 MHz espresso_lite_v1.menu.xtal.80.build.f_cpu=80000000L espresso_lite_v1.menu.xtal.160=160 MHz @@ -3305,6 +3499,22 @@ espresso_lite_v2.build.core=esp8266 espresso_lite_v2.build.spiffs_pagesize=256 espresso_lite_v2.build.debug_port= espresso_lite_v2.build.debug_level= +espresso_lite_v2.menu.Filesystem.Off=Off +espresso_lite_v2.menu.Filesystem.Off.build.Filesystem=0 +espresso_lite_v2.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +espresso_lite_v2.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +espresso_lite_v2.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +espresso_lite_v2.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +espresso_lite_v2.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +espresso_lite_v2.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +espresso_lite_v2.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +espresso_lite_v2.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +espresso_lite_v2.menu.Binaries.Off=Off +espresso_lite_v2.menu.Binaries.Off.build.Binaries=0 +espresso_lite_v2.menu.Binaries.Binaries=Export (.bin & .bin.signed) +espresso_lite_v2.menu.Binaries.Binaries.build.Binaries=1 +espresso_lite_v2.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +espresso_lite_v2.menu.Binaries.PackedBinaries.build.Binaries=2 espresso_lite_v2.menu.xtal.80=80 MHz espresso_lite_v2.menu.xtal.80.build.f_cpu=80000000L espresso_lite_v2.menu.xtal.160=160 MHz @@ -3533,6 +3743,22 @@ sonoff.build.core=esp8266 sonoff.build.spiffs_pagesize=256 sonoff.build.debug_port= sonoff.build.debug_level= +sonoff.menu.Filesystem.Off=Off +sonoff.menu.Filesystem.Off.build.Filesystem=0 +sonoff.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +sonoff.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +sonoff.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +sonoff.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +sonoff.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +sonoff.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +sonoff.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +sonoff.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +sonoff.menu.Binaries.Off=Off +sonoff.menu.Binaries.Off.build.Binaries=0 +sonoff.menu.Binaries.Binaries=Export (.bin & .bin.signed) +sonoff.menu.Binaries.Binaries.build.Binaries=1 +sonoff.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +sonoff.menu.Binaries.PackedBinaries.build.Binaries=2 sonoff.menu.xtal.80=80 MHz sonoff.menu.xtal.80.build.f_cpu=80000000L sonoff.menu.xtal.160=160 MHz @@ -3788,6 +4014,22 @@ inventone.build.core=esp8266 inventone.build.spiffs_pagesize=256 inventone.build.debug_port= inventone.build.debug_level= +inventone.menu.Filesystem.Off=Off +inventone.menu.Filesystem.Off.build.Filesystem=0 +inventone.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +inventone.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +inventone.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +inventone.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +inventone.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +inventone.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +inventone.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +inventone.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +inventone.menu.Binaries.Off=Off +inventone.menu.Binaries.Off.build.Binaries=0 +inventone.menu.Binaries.Binaries=Export (.bin & .bin.signed) +inventone.menu.Binaries.Binaries.build.Binaries=1 +inventone.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +inventone.menu.Binaries.PackedBinaries.build.Binaries=2 inventone.menu.xtal.80=80 MHz inventone.menu.xtal.80.build.f_cpu=80000000L inventone.menu.xtal.160=160 MHz @@ -4003,6 +4245,22 @@ d1_mini.build.core=esp8266 d1_mini.build.spiffs_pagesize=256 d1_mini.build.debug_port= d1_mini.build.debug_level= +d1_mini.menu.Filesystem.Off=Off +d1_mini.menu.Filesystem.Off.build.Filesystem=0 +d1_mini.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +d1_mini.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +d1_mini.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +d1_mini.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +d1_mini.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +d1_mini.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +d1_mini.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +d1_mini.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +d1_mini.menu.Binaries.Off=Off +d1_mini.menu.Binaries.Off.build.Binaries=0 +d1_mini.menu.Binaries.Binaries=Export (.bin & .bin.signed) +d1_mini.menu.Binaries.Binaries.build.Binaries=1 +d1_mini.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +d1_mini.menu.Binaries.PackedBinaries.build.Binaries=2 d1_mini.menu.xtal.80=80 MHz d1_mini.menu.xtal.80.build.f_cpu=80000000L d1_mini.menu.xtal.160=160 MHz @@ -4218,6 +4476,22 @@ d1_mini_clone.build.core=esp8266 d1_mini_clone.build.spiffs_pagesize=256 d1_mini_clone.build.debug_port= d1_mini_clone.build.debug_level= +d1_mini_clone.menu.Filesystem.Off=Off +d1_mini_clone.menu.Filesystem.Off.build.Filesystem=0 +d1_mini_clone.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +d1_mini_clone.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +d1_mini_clone.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +d1_mini_clone.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +d1_mini_clone.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +d1_mini_clone.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +d1_mini_clone.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +d1_mini_clone.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +d1_mini_clone.menu.Binaries.Off=Off +d1_mini_clone.menu.Binaries.Off.build.Binaries=0 +d1_mini_clone.menu.Binaries.Binaries=Export (.bin & .bin.signed) +d1_mini_clone.menu.Binaries.Binaries.build.Binaries=1 +d1_mini_clone.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +d1_mini_clone.menu.Binaries.PackedBinaries.build.Binaries=2 d1_mini_clone.menu.xtal.80=80 MHz d1_mini_clone.menu.xtal.80.build.f_cpu=80000000L d1_mini_clone.menu.xtal.160=160 MHz @@ -4450,6 +4724,22 @@ d1_mini_lite.build.core=esp8266 d1_mini_lite.build.spiffs_pagesize=256 d1_mini_lite.build.debug_port= d1_mini_lite.build.debug_level= +d1_mini_lite.menu.Filesystem.Off=Off +d1_mini_lite.menu.Filesystem.Off.build.Filesystem=0 +d1_mini_lite.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +d1_mini_lite.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +d1_mini_lite.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +d1_mini_lite.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +d1_mini_lite.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +d1_mini_lite.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +d1_mini_lite.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +d1_mini_lite.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +d1_mini_lite.menu.Binaries.Off=Off +d1_mini_lite.menu.Binaries.Off.build.Binaries=0 +d1_mini_lite.menu.Binaries.Binaries=Export (.bin & .bin.signed) +d1_mini_lite.menu.Binaries.Binaries.build.Binaries=1 +d1_mini_lite.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +d1_mini_lite.menu.Binaries.PackedBinaries.build.Binaries=2 d1_mini_lite.menu.xtal.80=80 MHz d1_mini_lite.menu.xtal.80.build.f_cpu=80000000L d1_mini_lite.menu.xtal.160=160 MHz @@ -4705,6 +4995,22 @@ d1_mini_pro.build.core=esp8266 d1_mini_pro.build.spiffs_pagesize=256 d1_mini_pro.build.debug_port= d1_mini_pro.build.debug_level= +d1_mini_pro.menu.Filesystem.Off=Off +d1_mini_pro.menu.Filesystem.Off.build.Filesystem=0 +d1_mini_pro.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +d1_mini_pro.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +d1_mini_pro.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +d1_mini_pro.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +d1_mini_pro.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +d1_mini_pro.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +d1_mini_pro.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +d1_mini_pro.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +d1_mini_pro.menu.Binaries.Off=Off +d1_mini_pro.menu.Binaries.Off.build.Binaries=0 +d1_mini_pro.menu.Binaries.Binaries=Export (.bin & .bin.signed) +d1_mini_pro.menu.Binaries.Binaries.build.Binaries=1 +d1_mini_pro.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +d1_mini_pro.menu.Binaries.PackedBinaries.build.Binaries=2 d1_mini_pro.menu.xtal.80=80 MHz d1_mini_pro.menu.xtal.80.build.f_cpu=80000000L d1_mini_pro.menu.xtal.160=160 MHz @@ -4903,6 +5209,22 @@ d1.build.core=esp8266 d1.build.spiffs_pagesize=256 d1.build.debug_port= d1.build.debug_level= +d1.menu.Filesystem.Off=Off +d1.menu.Filesystem.Off.build.Filesystem=0 +d1.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +d1.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +d1.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +d1.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +d1.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +d1.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +d1.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +d1.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +d1.menu.Binaries.Off=Off +d1.menu.Binaries.Off.build.Binaries=0 +d1.menu.Binaries.Binaries=Export (.bin & .bin.signed) +d1.menu.Binaries.Binaries.build.Binaries=1 +d1.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +d1.menu.Binaries.PackedBinaries.build.Binaries=2 d1.menu.xtal.80=80 MHz d1.menu.xtal.80.build.f_cpu=80000000L d1.menu.xtal.160=160 MHz @@ -5118,6 +5440,22 @@ agruminolemon.build.core=esp8266 agruminolemon.build.spiffs_pagesize=256 agruminolemon.build.debug_port= agruminolemon.build.debug_level= +agruminolemon.menu.Filesystem.Off=Off +agruminolemon.menu.Filesystem.Off.build.Filesystem=0 +agruminolemon.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +agruminolemon.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +agruminolemon.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +agruminolemon.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +agruminolemon.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +agruminolemon.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +agruminolemon.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +agruminolemon.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +agruminolemon.menu.Binaries.Off=Off +agruminolemon.menu.Binaries.Off.build.Binaries=0 +agruminolemon.menu.Binaries.Binaries=Export (.bin & .bin.signed) +agruminolemon.menu.Binaries.Binaries.build.Binaries=1 +agruminolemon.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +agruminolemon.menu.Binaries.PackedBinaries.build.Binaries=2 agruminolemon.menu.xtal.80=80 MHz agruminolemon.menu.xtal.80.build.f_cpu=80000000L agruminolemon.menu.xtal.160=160 MHz @@ -5353,6 +5691,22 @@ nodemcu.build.core=esp8266 nodemcu.build.spiffs_pagesize=256 nodemcu.build.debug_port= nodemcu.build.debug_level= +nodemcu.menu.Filesystem.Off=Off +nodemcu.menu.Filesystem.Off.build.Filesystem=0 +nodemcu.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +nodemcu.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +nodemcu.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +nodemcu.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +nodemcu.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +nodemcu.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +nodemcu.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +nodemcu.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +nodemcu.menu.Binaries.Off=Off +nodemcu.menu.Binaries.Off.build.Binaries=0 +nodemcu.menu.Binaries.Binaries=Export (.bin & .bin.signed) +nodemcu.menu.Binaries.Binaries.build.Binaries=1 +nodemcu.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +nodemcu.menu.Binaries.PackedBinaries.build.Binaries=2 nodemcu.menu.xtal.80=80 MHz nodemcu.menu.xtal.80.build.f_cpu=80000000L nodemcu.menu.xtal.160=160 MHz @@ -5568,6 +5922,22 @@ nodemcuv2.build.core=esp8266 nodemcuv2.build.spiffs_pagesize=256 nodemcuv2.build.debug_port= nodemcuv2.build.debug_level= +nodemcuv2.menu.Filesystem.Off=Off +nodemcuv2.menu.Filesystem.Off.build.Filesystem=0 +nodemcuv2.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +nodemcuv2.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +nodemcuv2.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +nodemcuv2.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +nodemcuv2.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +nodemcuv2.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +nodemcuv2.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +nodemcuv2.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +nodemcuv2.menu.Binaries.Off=Off +nodemcuv2.menu.Binaries.Off.build.Binaries=0 +nodemcuv2.menu.Binaries.Binaries=Export (.bin & .bin.signed) +nodemcuv2.menu.Binaries.Binaries.build.Binaries=1 +nodemcuv2.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +nodemcuv2.menu.Binaries.PackedBinaries.build.Binaries=2 nodemcuv2.menu.xtal.80=80 MHz nodemcuv2.menu.xtal.80.build.f_cpu=80000000L nodemcuv2.menu.xtal.160=160 MHz @@ -5787,6 +6157,22 @@ modwifi.build.core=esp8266 modwifi.build.spiffs_pagesize=256 modwifi.build.debug_port= modwifi.build.debug_level= +modwifi.menu.Filesystem.Off=Off +modwifi.menu.Filesystem.Off.build.Filesystem=0 +modwifi.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +modwifi.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +modwifi.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +modwifi.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +modwifi.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +modwifi.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +modwifi.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +modwifi.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +modwifi.menu.Binaries.Off=Off +modwifi.menu.Binaries.Off.build.Binaries=0 +modwifi.menu.Binaries.Binaries=Export (.bin & .bin.signed) +modwifi.menu.Binaries.Binaries.build.Binaries=1 +modwifi.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +modwifi.menu.Binaries.PackedBinaries.build.Binaries=2 modwifi.menu.xtal.80=80 MHz modwifi.menu.xtal.80.build.f_cpu=80000000L modwifi.menu.xtal.160=160 MHz @@ -6022,6 +6408,22 @@ phoenix_v1.build.core=esp8266 phoenix_v1.build.spiffs_pagesize=256 phoenix_v1.build.debug_port= phoenix_v1.build.debug_level= +phoenix_v1.menu.Filesystem.Off=Off +phoenix_v1.menu.Filesystem.Off.build.Filesystem=0 +phoenix_v1.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +phoenix_v1.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +phoenix_v1.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +phoenix_v1.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +phoenix_v1.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +phoenix_v1.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +phoenix_v1.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +phoenix_v1.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +phoenix_v1.menu.Binaries.Off=Off +phoenix_v1.menu.Binaries.Off.build.Binaries=0 +phoenix_v1.menu.Binaries.Binaries=Export (.bin & .bin.signed) +phoenix_v1.menu.Binaries.Binaries.build.Binaries=1 +phoenix_v1.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +phoenix_v1.menu.Binaries.PackedBinaries.build.Binaries=2 phoenix_v1.menu.xtal.80=80 MHz phoenix_v1.menu.xtal.80.build.f_cpu=80000000L phoenix_v1.menu.xtal.160=160 MHz @@ -6240,6 +6642,22 @@ phoenix_v2.build.core=esp8266 phoenix_v2.build.spiffs_pagesize=256 phoenix_v2.build.debug_port= phoenix_v2.build.debug_level= +phoenix_v2.menu.Filesystem.Off=Off +phoenix_v2.menu.Filesystem.Off.build.Filesystem=0 +phoenix_v2.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +phoenix_v2.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +phoenix_v2.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +phoenix_v2.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +phoenix_v2.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +phoenix_v2.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +phoenix_v2.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +phoenix_v2.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +phoenix_v2.menu.Binaries.Off=Off +phoenix_v2.menu.Binaries.Off.build.Binaries=0 +phoenix_v2.menu.Binaries.Binaries=Export (.bin & .bin.signed) +phoenix_v2.menu.Binaries.Binaries.build.Binaries=1 +phoenix_v2.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +phoenix_v2.menu.Binaries.PackedBinaries.build.Binaries=2 phoenix_v2.menu.xtal.80=80 MHz phoenix_v2.menu.xtal.80.build.f_cpu=80000000L phoenix_v2.menu.xtal.160=160 MHz @@ -6458,6 +6876,22 @@ eduinowifi.build.core=esp8266 eduinowifi.build.spiffs_pagesize=256 eduinowifi.build.debug_port= eduinowifi.build.debug_level= +eduinowifi.menu.Filesystem.Off=Off +eduinowifi.menu.Filesystem.Off.build.Filesystem=0 +eduinowifi.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +eduinowifi.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +eduinowifi.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +eduinowifi.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +eduinowifi.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +eduinowifi.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +eduinowifi.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +eduinowifi.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +eduinowifi.menu.Binaries.Off=Off +eduinowifi.menu.Binaries.Off.build.Binaries=0 +eduinowifi.menu.Binaries.Binaries=Export (.bin & .bin.signed) +eduinowifi.menu.Binaries.Binaries.build.Binaries=1 +eduinowifi.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +eduinowifi.menu.Binaries.PackedBinaries.build.Binaries=2 eduinowifi.menu.xtal.80=80 MHz eduinowifi.menu.xtal.80.build.f_cpu=80000000L eduinowifi.menu.xtal.160=160 MHz @@ -6673,6 +7107,22 @@ wiolink.build.core=esp8266 wiolink.build.spiffs_pagesize=256 wiolink.build.debug_port= wiolink.build.debug_level= +wiolink.menu.Filesystem.Off=Off +wiolink.menu.Filesystem.Off.build.Filesystem=0 +wiolink.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +wiolink.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +wiolink.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +wiolink.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +wiolink.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +wiolink.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +wiolink.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +wiolink.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +wiolink.menu.Binaries.Off=Off +wiolink.menu.Binaries.Off.build.Binaries=0 +wiolink.menu.Binaries.Binaries=Export (.bin & .bin.signed) +wiolink.menu.Binaries.Binaries.build.Binaries=1 +wiolink.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +wiolink.menu.Binaries.PackedBinaries.build.Binaries=2 wiolink.menu.xtal.80=80 MHz wiolink.menu.xtal.80.build.f_cpu=80000000L wiolink.menu.xtal.160=160 MHz @@ -6888,6 +7338,22 @@ blynk.build.core=esp8266 blynk.build.spiffs_pagesize=256 blynk.build.debug_port= blynk.build.debug_level= +blynk.menu.Filesystem.Off=Off +blynk.menu.Filesystem.Off.build.Filesystem=0 +blynk.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +blynk.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +blynk.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +blynk.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +blynk.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +blynk.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +blynk.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +blynk.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +blynk.menu.Binaries.Off=Off +blynk.menu.Binaries.Off.build.Binaries=0 +blynk.menu.Binaries.Binaries=Export (.bin & .bin.signed) +blynk.menu.Binaries.Binaries.build.Binaries=1 +blynk.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +blynk.menu.Binaries.PackedBinaries.build.Binaries=2 blynk.menu.xtal.80=80 MHz blynk.menu.xtal.80.build.f_cpu=80000000L blynk.menu.xtal.160=160 MHz @@ -7103,6 +7569,22 @@ thing.build.core=esp8266 thing.build.spiffs_pagesize=256 thing.build.debug_port= thing.build.debug_level= +thing.menu.Filesystem.Off=Off +thing.menu.Filesystem.Off.build.Filesystem=0 +thing.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +thing.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +thing.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +thing.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +thing.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +thing.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +thing.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +thing.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +thing.menu.Binaries.Off=Off +thing.menu.Binaries.Off.build.Binaries=0 +thing.menu.Binaries.Binaries=Export (.bin & .bin.signed) +thing.menu.Binaries.Binaries.build.Binaries=1 +thing.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +thing.menu.Binaries.PackedBinaries.build.Binaries=2 thing.menu.xtal.80=80 MHz thing.menu.xtal.80.build.f_cpu=80000000L thing.menu.xtal.160=160 MHz @@ -7318,6 +7800,22 @@ thingdev.build.core=esp8266 thingdev.build.spiffs_pagesize=256 thingdev.build.debug_port= thingdev.build.debug_level= +thingdev.menu.Filesystem.Off=Off +thingdev.menu.Filesystem.Off.build.Filesystem=0 +thingdev.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +thingdev.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +thingdev.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +thingdev.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +thingdev.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +thingdev.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +thingdev.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +thingdev.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +thingdev.menu.Binaries.Off=Off +thingdev.menu.Binaries.Off.build.Binaries=0 +thingdev.menu.Binaries.Binaries=Export (.bin & .bin.signed) +thingdev.menu.Binaries.Binaries.build.Binaries=1 +thingdev.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +thingdev.menu.Binaries.PackedBinaries.build.Binaries=2 thingdev.menu.xtal.80=80 MHz thingdev.menu.xtal.80.build.f_cpu=80000000L thingdev.menu.xtal.160=160 MHz @@ -7533,6 +8031,22 @@ esp210.build.variant=generic esp210.build.spiffs_pagesize=256 esp210.build.debug_port= esp210.build.debug_level= +esp210.menu.Filesystem.Off=Off +esp210.menu.Filesystem.Off.build.Filesystem=0 +esp210.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +esp210.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +esp210.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +esp210.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +esp210.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +esp210.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +esp210.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +esp210.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +esp210.menu.Binaries.Off=Off +esp210.menu.Binaries.Off.build.Binaries=0 +esp210.menu.Binaries.Binaries=Export (.bin & .bin.signed) +esp210.menu.Binaries.Binaries.build.Binaries=1 +esp210.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +esp210.menu.Binaries.PackedBinaries.build.Binaries=2 esp210.menu.xtal.80=80 MHz esp210.menu.xtal.80.build.f_cpu=80000000L esp210.menu.xtal.160=160 MHz @@ -7748,6 +8262,22 @@ espinotee.build.core=esp8266 espinotee.build.spiffs_pagesize=256 espinotee.build.debug_port= espinotee.build.debug_level= +espinotee.menu.Filesystem.Off=Off +espinotee.menu.Filesystem.Off.build.Filesystem=0 +espinotee.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +espinotee.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +espinotee.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +espinotee.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +espinotee.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +espinotee.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +espinotee.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +espinotee.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +espinotee.menu.Binaries.Off=Off +espinotee.menu.Binaries.Off.build.Binaries=0 +espinotee.menu.Binaries.Binaries=Export (.bin & .bin.signed) +espinotee.menu.Binaries.Binaries.build.Binaries=1 +espinotee.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +espinotee.menu.Binaries.PackedBinaries.build.Binaries=2 espinotee.menu.xtal.80=80 MHz espinotee.menu.xtal.80.build.f_cpu=80000000L espinotee.menu.xtal.160=160 MHz @@ -7963,6 +8493,22 @@ wifi_kit_8.build.core=esp8266 wifi_kit_8.build.spiffs_pagesize=256 wifi_kit_8.build.debug_port= wifi_kit_8.build.debug_level= +wifi_kit_8.menu.Filesystem.Off=Off +wifi_kit_8.menu.Filesystem.Off.build.Filesystem=0 +wifi_kit_8.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +wifi_kit_8.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +wifi_kit_8.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +wifi_kit_8.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +wifi_kit_8.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +wifi_kit_8.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +wifi_kit_8.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +wifi_kit_8.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +wifi_kit_8.menu.Binaries.Off=Off +wifi_kit_8.menu.Binaries.Off.build.Binaries=0 +wifi_kit_8.menu.Binaries.Binaries=Export (.bin & .bin.signed) +wifi_kit_8.menu.Binaries.Binaries.build.Binaries=1 +wifi_kit_8.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +wifi_kit_8.menu.Binaries.PackedBinaries.build.Binaries=2 wifi_kit_8.menu.xtal.80=80 MHz wifi_kit_8.menu.xtal.80.build.f_cpu=80000000L wifi_kit_8.menu.xtal.160=160 MHz @@ -8178,6 +8724,22 @@ wifiduino.build.core=esp8266 wifiduino.build.spiffs_pagesize=256 wifiduino.build.debug_port= wifiduino.build.debug_level= +wifiduino.menu.Filesystem.Off=Off +wifiduino.menu.Filesystem.Off.build.Filesystem=0 +wifiduino.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +wifiduino.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +wifiduino.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +wifiduino.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +wifiduino.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +wifiduino.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +wifiduino.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +wifiduino.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +wifiduino.menu.Binaries.Off=Off +wifiduino.menu.Binaries.Off.build.Binaries=0 +wifiduino.menu.Binaries.Binaries=Export (.bin & .bin.signed) +wifiduino.menu.Binaries.Binaries.build.Binaries=1 +wifiduino.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +wifiduino.menu.Binaries.PackedBinaries.build.Binaries=2 wifiduino.menu.xtal.80=80 MHz wifiduino.menu.xtal.80.build.f_cpu=80000000L wifiduino.menu.xtal.160=160 MHz @@ -8410,6 +8972,22 @@ wifinfo.build.core=esp8266 wifinfo.build.spiffs_pagesize=256 wifinfo.build.debug_port= wifinfo.build.debug_level= +wifinfo.menu.Filesystem.Off=Off +wifinfo.menu.Filesystem.Off.build.Filesystem=0 +wifinfo.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +wifinfo.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +wifinfo.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +wifinfo.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +wifinfo.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +wifinfo.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +wifinfo.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +wifinfo.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +wifinfo.menu.Binaries.Off=Off +wifinfo.menu.Binaries.Off.build.Binaries=0 +wifinfo.menu.Binaries.Binaries=Export (.bin & .bin.signed) +wifinfo.menu.Binaries.Binaries.build.Binaries=1 +wifinfo.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +wifinfo.menu.Binaries.PackedBinaries.build.Binaries=2 wifinfo.menu.xtal.80=80 MHz wifinfo.menu.xtal.80.build.f_cpu=80000000L wifinfo.menu.xtal.160=160 MHz @@ -8672,6 +9250,22 @@ cw01.build.core=esp8266 cw01.build.spiffs_pagesize=256 cw01.build.debug_port= cw01.build.debug_level= +cw01.menu.Filesystem.Off=Off +cw01.menu.Filesystem.Off.build.Filesystem=0 +cw01.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +cw01.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +cw01.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +cw01.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +cw01.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +cw01.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +cw01.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +cw01.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +cw01.menu.Binaries.Off=Off +cw01.menu.Binaries.Off.build.Binaries=0 +cw01.menu.Binaries.Binaries=Export (.bin & .bin.signed) +cw01.menu.Binaries.Binaries.build.Binaries=1 +cw01.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +cw01.menu.Binaries.PackedBinaries.build.Binaries=2 cw01.menu.xtal.80=80 MHz cw01.menu.xtal.80.build.f_cpu=80000000L cw01.menu.xtal.160=160 MHz diff --git a/libraries/SoftwareSerial b/libraries/SoftwareSerial index 6df7b6983a..566809f3de 160000 --- a/libraries/SoftwareSerial +++ b/libraries/SoftwareSerial @@ -1 +1 @@ -Subproject commit 6df7b6983a462acc743e5ff06426b580ff1c732d +Subproject commit 566809f3de9de551ce1f2dedd3f7417c8b2b7e79 diff --git a/platform.txt b/platform.txt index 78ea1e28e4..bff7be2490 100644 --- a/platform.txt +++ b/platform.txt @@ -20,6 +20,7 @@ runtime.tools.makecorever={runtime.platform.path}/tools/makecorever.py runtime.tools.mkdir={runtime.platform.path}/tools/mkdir.py runtime.tools.cp={runtime.platform.path}/tools/cp.py runtime.tools.eboot={runtime.platform.path}/bootloaders/eboot/eboot.elf +runtime.tools.postbuild={runtime.platform.path}/tools/postbuild.py compiler.warning_flags=-w -Werror=return-type compiler.warning_flags.none=-w -Werror=return-type @@ -129,11 +130,14 @@ recipe.objcopy.hex.1.pattern="{runtime.tools.python3.path}/python3" -I "{runtime recipe.objcopy.hex.2.pattern="{runtime.tools.python3.path}/python3" -I "{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" --legacy "{build.path}/{build.project_name}.bin.legacy_sig" recipe.objcopy.hex.3.pattern="{runtime.tools.python3.path}/python3" -I "{runtime.tools.sizes}" --elf "{build.path}/{build.project_name}.elf" --path "{runtime.tools.xtensa-lx106-elf-gcc.path}/bin" --mmu "{build.mmuflags}" +# Post-Build: Handle new Menu-Enties: Filesystem & Binaries +recipe.hooks.objcopy.postobjcopy.1.pattern="{runtime.tools.python3.path}/python3" -I "{runtime.tools.postbuild}" -fi "{build.Filesystem}" -bi "{build.Binaries}" -na "{build.project_name}" -bp "{build.path}" -so "{build.source.path}" -va "{build.variant}" -ss "{build.spiffs_start}" -se "{build.spiffs_end}" -sp "{build.spiffs_pagesize}" -sl "{build.spiffs_blocksize}" + ## Save hex recipe.output.tmp_file.1={build.project_name}.bin -recipe.output.save_file.1={build.project_name}.{build.variant}.bin +recipe.output.save_file.1=bin/{build.variant}/{build.project_name}.bin recipe.output.tmp_file.2={build.project_name}.bin.signed -recipe.output.save_file.2={build.project_name}.{build.variant}.bin.signed +recipe.output.save_file.2=bin/{build.variant}/{build.project_name}.bin.signed ## Compute size recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf" @@ -157,11 +161,11 @@ tools.esptool.upload.protocol=esp tools.esptool.upload.params.verbose= 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 support upload.1.pattern/upload.3.pattern -tools.esptool.upload.pattern="{cmd}" -I "{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}" -I "{runtime.platform.path}/tools/espota.py" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin" +# Old behaviour (without integrated handling of filesystem & gzipd Binaries) can be (re)enabled by commenting in/out the following 2x2 entries +#tools.esptool.upload.pattern="{cmd}" -I "{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.pattern="{cmd}" -I "{runtime.platform.path}/tools/uploadGn.py" -fi "{build.Filesystem}" --port "{serial.port}" --baud "{upload.speed}" {upload.resetmethod} --sk 0x0 "{build.path}/{build.project_name}.bin" --fs {build.spiffs_start} "{build.path}/{build.project_name}" {upload.erase_cmd} "{upload.verbose}" +#tools.esptool.upload.network_pattern="{network_cmd}" -I "{runtime.platform.path}/tools/espota.py" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin" +tools.esptool.upload.network_pattern="{network_cmd}" -I "{runtime.platform.path}/tools/netUploadGn.py" -fi "{build.Filesystem}" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" --sk "{build.path}/{build.project_name}.bin" --fs "{build.path}/{build.project_name}" tools.mkspiffs.cmd=mkspiffs tools.mkspiffs.cmd.windows=mkspiffs.exe diff --git a/tools/boards.txt.py b/tools/boards.txt.py index 673f8d8068..d62356f10b 100755 --- a/tools/boards.txt.py +++ b/tools/boards.txt.py @@ -1032,6 +1032,24 @@ ( '.build.spiffs_pagesize', '256' ), ( '.build.debug_port', '' ), ( '.build.debug_level', '' ), + + ( '.menu.Filesystem.Off', 'Off' ), + ( '.menu.Filesystem.Off.build.Filesystem', '0' ), + ( '.menu.Filesystem.LitteFsCreateUpload', 'LitteFs: Create & Upload' ), + ( '.menu.Filesystem.LitteFsCreateUpload.build.Filesystem', '1' ), + ( '.menu.Filesystem.LitteFsCreateExport', 'LitteFs: Create only' ), + ( '.menu.Filesystem.LitteFsCreateExport.build.Filesystem', '2' ), + ( '.menu.Filesystem.SPIFFSCreateUpload', 'SPIFFS: Create & Upload' ), + ( '.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem', '3' ), + ( '.menu.Filesystem.SPIFFSCreateExport', 'SPIFFS: Create only' ), + ( '.menu.Filesystem.SPIFFSCreateExport.build.Filesystem', '4' ), + + ( '.menu.Binaries.Off', 'Off' ), + ( '.menu.Binaries.Off.build.Binaries', '0' ), + ( '.menu.Binaries.Binaries', 'Export (.bin & .bin.signed)' ), + ( '.menu.Binaries.Binaries.build.Binaries', '1' ), + ( '.menu.Binaries.PackedBinaries', 'Create & Export gzipped Binaries too' ), + ( '.menu.Binaries.PackedBinaries.build.Binaries', '2' ), ]), ####################### @@ -1658,6 +1676,8 @@ def all_boards (): print('menu.ssl=SSL Support') print('menu.mmu=MMU') print('menu.non32xfer=Non-32-Bit Access') + print('menu.Filesystem=Filesystem') + print('menu.Binaries=Binaries') print('') missingboards = [] From 5509ba4b42e0f763502219cb1c8d1f043dfeb8b2 Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Fri, 13 Aug 2021 11:01:17 +0200 Subject: [PATCH 03/19] Forgot to add new tools to git --- tools/Utillities.py | 99 ++++++++++++++++++++ tools/netUploadGn.py | 98 ++++++++++++++++++++ tools/postbuild.py | 209 +++++++++++++++++++++++++++++++++++++++++++ tools/uploadGn.py | 127 ++++++++++++++++++++++++++ 4 files changed, 533 insertions(+) create mode 100644 tools/Utillities.py create mode 100644 tools/netUploadGn.py create mode 100755 tools/postbuild.py create mode 100644 tools/uploadGn.py diff --git a/tools/Utillities.py b/tools/Utillities.py new file mode 100644 index 0000000000..d20cf55760 --- /dev/null +++ b/tools/Utillities.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import os +import sys +import platform +import argparse +import shutil +import subprocess + +PyautoguiAvailable = True +try: + import pyautogui +except: + PyautoguiAvailable = False + + +class FatalError( Exception ): + def __init__( self, msg ): + super().__init__( msg ) + +class ProcessError( Exception ): + def __init__( self, msg ): + super().__init__( msg ) + +def Msg( txt ): + sys.stderr.write( txt + "\n" ) + +def Debug( txt ): + sys.stderr.write( txt + "\n" ) + +def Which_Chdir_( prg, dir ): + cwd = os.getcwd() + try: + os.chdir( dir ) + except: + return None + res = None + try: + res = shutil.which( "./%s" % prg ) + if res is not None: + res = os.path.abspath( os.path.join( os.getcwd(), prg ) ) + finally: + os.chdir( cwd ) + return res + +def Which( prg, dir = None ): + """ returns full path to executable 'prg'. + Takes care of OS, on Windows searches for .exe instead of . + if is given prefers prg inside this dir over others""" + if platform.system() == "Windows": + prg = "%s.exe" % prg + res = None + if dir is not None: + res = Which_Chdir_( prg, dir ) + if res is None: + res = shutil.which( prg ) + return res + +def CopyToDir( name, ext, dstDir ): + """ if file './name.ext' exist, copy it to 'dstDir/name.ext'. Return name of copied file as list. """ + fileName = "%s.%s" % ( name, ext ) + srcPath = os.path.abspath( fileName ) + if not os.path.exists( srcPath ): + return [] + shutil.copyfile( srcPath, os.path.join( dstDir, fileName ) ) + return [ fileName ] + +def IntValFromStr( strVal ): + """ Convert string into integer, can be used with decimal value '123' or hex '0xabc'. """ + return int( strVal.strip(), 0 ) + +def CountFilesInDir( dataDir ): + fileCount = 0 + for root, dir, files in os.walk( dataDir ): + for file in files: + #!? Why Ony count files without '.' ?? + if file[ 0 ] != ".": + fileCount += 1 + return fileCount + +def RemoveIno( path ): + """ Returns the given path with extension ".ino" removed (if exist) """ + if path[ -4: ] == ".ino": + path = name[ 0:-4 ] + return path + +def ConfirmDialog( title, text ): + try: + import tkinter + from tkinter import messagebox + except: + raise ProcessError( "tkinter not available.\nPlease install it with:\npip3 install tkinter\n" )) + rootWin = tkinter.Tk() # Create the object + rootWin.overrideredirect( 1 ) # Avoid it appearing and then disappearing quickly + #rootWin.iconbitmap("PythonIcon.ico") # Set an icon (this is optional - must be in a .ico format) + rootWin.withdraw() # Hide the window as we do not want to see this one + return messagebox.askyesno( title, text, parent = rootWin ) + diff --git a/tools/netUploadGn.py b/tools/netUploadGn.py new file mode 100644 index 0000000000..a74b57a18a --- /dev/null +++ b/tools/netUploadGn.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 + +# Network-Upload-Wrapper +# 2021-08-08: G.N.: Written to support (optional) uploading of sketch & filesystem in one step + +import os +import sys +ToolsDir = os.path.dirname( os.path.realpath( __file__ ) ).replace( '\\', '/' ) + "/" # convert to UNIX format +try: + sys.path.insert( 0, ToolsDir ) # ToolsDir + from Utillities import * # If this fails, we can't continue and will bomb below +except Exception: + sys.stderr.write( '\nUtillities.py not found next to this %s tool.\n' % __file__ ) + sys.exit( 2 ) + +try: + sys.path.insert( 0, ToolsDir ) # Add this dir to search path + import espota # If this fails, we can't continue and will bomb below +except Exception: + Msg( '\nespota not found next to this netUploadGn.py tool.' ) + sys.exit( 2 ) + +#Args: (original) +# As defined in 'platform.txt' for 'tools.esptool.upload.network_pattern' +# -i "{serial.port}" +# -p "{network.port}" +# "--auth={network.password}" +# -f "{build.path}/{build.project_name}.bin" + +#Args: (new) +# As defined in 'platform.txt' for 'tools.esptool.upload.network_pattern' +# | possible values/meaning +# | | +# -fi "{build.Filesystem}" 0-4 +# -i "{serial.port}" +# -p "{network.port}" +# "--auth={network.password}" +# --sk "{build.path}/{build.project_name}.bin" +# --fs "{build.path}/{build.project_name}" + +def parse_args( argsIn ): + parser = argparse.ArgumentParser( description = 'Network-Upload-Wrapper for Arduino esp8266' ) + parser.add_argument( '-fi', '--Filesystem', type = int, default = 0, help = '0: Off, 1: LitteFs: Create & Upload, 2: LitteFs: Create only, 3: SPIFFS: Create & Upload, 4: SPIFFS: Create only' ) + parser.add_argument( '-i', '--port', type = str, required = True, help = 'path to serial device' ) + parser.add_argument( '-p', '--netPort', type = str, required = True, help = 'network port' ) + parser.add_argument( '--auth', type = str, help = 'network password' ) + parser.add_argument( '--sk', type = str, required = True, help = 'path_path_to_sketch_binary' ) + parser.add_argument( '--fs', type = str, help = 'path_to_fs_binary_without_ext' ) + global Args + Args = parser.parse_args( argsIn ) + +def main( argsIn = None ): + """ + Main function for netUploadGn + + argsIn - Optional override for default arguments parsing (that uses sys.argv), can be a list of custom arguments. + Arguments and their values need to be added as individual items to the list e.g. "-b 115200" thus becomes ['-b', '115200']. + """ + + parse_args( argsIn ) + + if not os.path.exists( Args.port ): + Msg( "Port: '%s', does not exist!\n...Upload aborted" % Args.port ) + sys.exit( 1 ) + + baseArgs = [ '-i', Args.port, '-p', Args.netPort, '--auth', Args.auth ] + + sketchArgs = baseArgs + [ '-f', Args.sk ] + + Msg( "Uploading Binaries..." ) + + #Debug( str( sketchArgs ) ) + esptool.main( sketchArgs ) + filesUploaded = [ Args.sk ] + + if Args.Filesystem == 1 or Args.Filesystem == 3: + fsArgs = baseArgs + [ '-s', '-f' ] + if Args.Filesystem == 1: + fsArgs = baseArgs + [ "%s.littlefs" % Args.fs ] + elif Args.Filesystem == 3: + fsArgs = baseArgs + [ "%s.spiffs" % Args.fs ] + + #Debug( str( fsArgs ) ) + esptool.main( fsArgs ) + filesUploaded += [ Args.fs ] + + Msg( '...files uploaded: %s' % ", ".join( filesUploaded ) ) + +def main_(): + try: + main() + except RuntimeError as e: + Msg( '\nA RuntimeError error occurred: %s' % e ) + sys.exit( 2 ) + +if __name__ == '__main__': + main_() + diff --git a/tools/postbuild.py b/tools/postbuild.py new file mode 100755 index 0000000000..06d5d2d223 --- /dev/null +++ b/tools/postbuild.py @@ -0,0 +1,209 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import os +import sys +ToolsDir = os.path.dirname( os.path.realpath( __file__ ) ).replace( '\\', '/' ) + "/" # convert to UNIX format +try: + sys.path.insert( 0, ToolsDir ) # ToolsDir + from Utillities import * # If this fails, we can't continue and will bomb below +except Exception: + sys.stderr.write( '\nUtillities.py not found next to this %s tool.\n' % __file__ ) + sys.exit( 2 ) + +def parse_args( argsIn ): + parser = argparse.ArgumentParser( description = 'PostBuild for ESP8288' ) + parser.add_argument( '-fi', '--Filesystem', type = int, default = 0, help = '0: Off, 1: LitteFs: Create & Upload, 2: LitteFs: Create only, 3: SPIFFS: Create & Upload, 4: SPIFFS: Create only' ) + parser.add_argument( '-bi', '--Binaries', type = int, default = 0, help = '0: Off, 1: Export (.bin & .bin.signed), 2: Create & Export gzipped Binaries too' ) + parser.add_argument( '-na', '--name', type = str, required = True, help = 'Name of sketch (without extension)' ) + parser.add_argument( '-bp', '--buildPath', type = str, required = True, help = 'Path to temporary dir where sketch was build' ) + parser.add_argument( '-so', '--source', type = str, required = True, help = 'Path to sketch' ) + parser.add_argument( '-va', '--variant', type = str, required = True, help = 'Name of board' ) + parser.add_argument( '-ss', '--spiffs_start', type = str, help = 'build.spiffs_start' ) + parser.add_argument( '-se', '--spiffs_end', type = str, help = 'build.spiffs_end' ) + parser.add_argument( '-sp', '--spiffs_pagesize', type = str, default = '256', help = 'build.spiffs_pagesize' ) + parser.add_argument( '-sl', '--spiffs_blocksize', type = str, default = '4096', help = 'build.spiffs_blocksize' ) + global Args + Args = parser.parse_args( argsIn ) + +def CountFilesInDir( dataDir ): + fileCount = 0 + for root, dir, files in os.walk( dataDir ): + for file in files: + #!? Why Ony count files without '.' ?? + if file[ 0 ] != ".": + fileCount += 1 + return fileCount + +GzipStatus = 0 # 0: Not checked, 1: found, 2: not found & Msg given +GzipPath = None +def CreateGzFile( dir, name ): + """ gzip the file 'dir/name' and save the compressed file to 'dir/name.gz'. Return name of generated file as list. """ + global GzipStatus, GzipPath + if GzipStatus == 2: + return [] + if GzipStatus == 0: + GzipPath = Which( "gzip", ToolsDir ) + if GzipPath is None: + GzipStatus = 2 + raise FatalError( "'Create & Export gzipped Binaries too' selected, but 'gzip' not in path. Creating canceled" ) + GzipStatus = 1 + outName = "%s.gz" % name + outPath = os.path.join( dir, outName ) + cmd = '%s -9 -k -f "%s" >%s' % ( GzipPath, os.path.join( dir, name ), outPath ) + if os.system( cmd ) != 0: + raise FatalError( "Error excuting gzip cmd: %s" % cmd ) + if not os.path.exists( outPath ): + raise FatalError( "gzip: file '%s' not created" % outName ) + return [ outName ] + +def CreateSignedFile( dir, name ): + """ Signs the file 'dir/name' with the private key (defined by global var 'SigningPrivKeyPath'). + Save the signed binary to 'dir/name.signed'. Return name of generated file as list. """ + inFilePath = os.path.join( dir, name ) + try: + with open( inFilePath, "rb" ) as b: + inFileData = b.read() + signcmd = [ 'openssl', 'dgst', '-sha256', '-sign', SigningPrivKeyPath ] + proc = subprocess.Popen( signcmd, stdout = subprocess.PIPE, stdin = subprocess.PIPE, stderr = subprocess.PIPE ) + signout, signerr = proc.communicate( input = inFileData ) + if proc.returncode: + raise FatalError( "OpenSSL returned an error signing the binary: %d\nSTDERR: %d" % ( proc.returncode, signerr ) ) + outName = "%s.signed" % name + with open( os.path.join( dir, outName ), "wb" ) as out: + out.write( inFileData ) + out.write( signout ) + out.write( b'\x00\x01\x00\x00' ) + return [ outName ] + except Exception as e: + raise FatalError( "Exception while signing '%s': %s" % ( name, e ) ) + return [] + +def CreateFs( fsName, mkFsName ): + """ Creates the given fs from all files inside subdir 'data' of the sketch. + fsName = "littlefs" "spiffs" used for naming the generated binary. + mkFsName = "mklittlefs" | "mkspiffs" the name of the programm that generates the fs """ + mkFsPath = Which( mkFsName, os.path.join( ToolsDir, mkFsName ) ) + res = [] + dataDir = "%s/data" % ( Args.source ) + if len( Args.spiffs_start ) == 0 or len( Args.spiffs_end ) == 0: + raise ProcessError( "CreateFs: %s Not Defined for this board" % fsName ) + if mkFsPath is None or not os.path.exists( mkFsPath ): + raise ProcessError( "CreateFs: %s dir does not exist: %s" % ( mkFsName, mkFsPath ) ) + if not os.path.exists( dataDir ): + raise ProcessError( "CreateFs: data dir does not exist: %s" % dataDir ) + if not os.path.isdir( dataDir ): + raise ProcessError( "CreateFs: data dir is not a directory: %s" % dataDir ) + FilesInDir = CountFilesInDir( dataDir ) + if FilesInDir == 0: + if not ConfirmDialog( "%s Create" % fsName, "No files have been found in your data folder!\nAre you sure you want to create an empty %s image?" % fsName ) + raise ProcessError( "Canceled by user" ) + os.makedirs( DstDir, exist_ok = True ) + imageName = "%s.%s" % ( Args.name, fsName ) + imagePath = os.path.join( Args.source, "bin", Args.variant, imageName ) + cmd = "\"%s\" -c \"%s\" -p %s -b %s -s %d \"%s\"" % ( mkFsPath, dataDir, Args.spiffs_pagesize, Args.spiffs_blocksize, IntValFromStr( Args.spiffs_end ) - IntValFromStr( Args.spiffs_start ), imagePath ) + if os.system( cmd ) != 0 or not os.path.exists( imagePath ): + raise FatalError( "%s: Creating failed" % fsName ) + res += [ imageName ] + + # fs is created inside subdir "bin/{build.variant}/" of sketch folder. + # That means there is no need for doing an (extra) "export". + # But unforunally during "upload" the variable {build.source.path} was not set. + # So, for supporting upload of fs, we copy the generated file back into {build.path} + shutil.copyfile( imagePath, "./%s" % imageName ) + + signing = Signing and os.path.exists( os.path.abspath( Args.name + ".bin.signed" ) ) + if signing: + res += CreateSignedFile( DstDir, imageName ) + if Args.Binaries == 2: + res += CreateGzFile( DstDir, imageName ) + if signing: + res += CreateSignedFile( DstDir, "%s.%s.gz" % ( Args.name, fsName ) ) + return res + +def ProcessFilesystem_(): + if Args.spiffs_start is None or Args.spiffs_end is None: + raise ProcessError( "'spiffs_start' and/or 'spiffs_end' missing" ) + if Args.Filesystem == 1 or Args.Filesystem == 2: + return CreateFs( "littlefs", "mklittlefs" ) + elif Args.Filesystem == 3 or Args.Filesystem == 4: + return CreateFs( "spiffs", "mkspiffs" ) + +def ProcessBinaries_(): + res = [] + os.makedirs( DstDir, exist_ok = True ) + # Copy Binaries + res += CopyToDir( Args.name, "bin", DstDir ) + res += CopyToDir( Args.name, "bin.signed", DstDir ) + if Args.Binaries == 2: + # Create & Export gzipped Binaries too + res += CreateGzFile( DstDir, "%s.bin" % Args.name ) + if os.path.exists( os.path.abspath( os.path.join( DstDir, "%s.bin.signed" % Args.name ) ) ): + res += CreateSignedFile( DstDir, "%s.bin.gz" % Args.name ) + return res + +def ProcessFilesystem(): + Msg( "Creating Filesystem..." ) + try: + filesCreated = ProcessFilesystem_() + Msg( '...files generated: %s' % ", ".join( filesCreated ) ) + except ProcessError as e: + Msg( '...aborted: %s' % e ) + +def ProcessBinaries(): + Msg( "Exporting Binaries..." ) + filesExported = ProcessBinaries_() + Msg( '...files exported: %s' % ", ".join( filesExported ) ) + +def main( argsIn = None ): + """ + Main function for postbuild + + argsIn - Optional override for default arguments parsing (that uses sys.argv), can be a list of custom arguments. + Arguments and their values need to be added as individual items to the list e.g. "-b 115200" thus becomes ['-b', '115200']. + """ + + #Debug( "Python-Path: %s" % sys.executable ) + parse_args( argsIn ) + #Debug( "Args: %s" % ", "join( sys.argv[ 1: ] ) ) + + #!! For unknown reason using/concatinig Args.buildPath with "/" (or enything else) will result in an empthy string ??? + #if You uncomment the following two lines You will see something like: + # Args.buildPath: /buildPath/arduino_build_572904. + # Args.buildPath/: . + #Debug( "Args.buildPath: %s." % Args.buildPath ) + #Debug( "Args.buildPath/: %s/." % Args.buildPath + '/' ) + + # Workaround: cd to the build/temp path + cwd = os.getcwd() + os.chdir( Args.buildPath ) + + #! Even this will not give the correct path ! + #Debug( "abspath: %s" % os.path.abspath( "./" ) ) + #Debug( "abspath2: %s" % os.path.abspath( "./" ) + "/" ) + + global SigningPrivKeyPath, Signing, DstDir + try: + SigningPrivKeyPath = os.path.abspath( "%s/private.key" % Args.source ) + Signing = os.path.isfile( SigningPrivKeyPath ) + DstDir = os.path.join( Args.source, "bin", Args.variant ) + if Args.Filesystem != 0: + ProcessFilesystem() + if Args.Binaries != 0: + ProcessBinaries() + finally: + # restore working dir + os.chdir( cwd ) + +def main_(): + try: + main() + except FatalError as e: + Msg( '\nA fatal error occurred: %s\n' % e ) + sys.exit( 1 ) + except RuntimeError as e: + Msg( '\nA RuntimeError error occurred: %s' % e ) + sys.exit( 2 ) + +if __name__ == '__main__': + main_() diff --git a/tools/uploadGn.py b/tools/uploadGn.py new file mode 100644 index 0000000000..4c40f63580 --- /dev/null +++ b/tools/uploadGn.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python3 + +# New Upload-Wrapper for Arduino esp8266 +# 2021-08-08: G.N.: Totally rewritten to support (optional) uploading of sketch & filesystem in one step + +import os +import sys +ToolsDir = os.path.dirname( os.path.realpath( __file__ ) ).replace( '\\', '/' ) + "/" # convert to UNIX format +try: + sys.path.insert( 0, ToolsDir ) # ToolsDir + from Utillities import * # If this fails, we can't continue and will bomb below +except Exception: + sys.stderr.write( '\nUtillities.py not found next to this %s tool.\n' % __file__ ) + sys.exit( 2 ) +import tempfile +from pathlib import Path + +try: + sys.path.insert( 0, ToolsDir + "pyserial" ) # Add pyserial dir to search path + sys.path.insert( 0, ToolsDir + "esptool" ) # Add esptool dir to search path + import esptool # If this fails, we can't continue and will bomb below +except Exception: + Msg( '\npyserial or esptool directories not found next to this uploadGn.py tool.' ) + sys.exit( 2 ) + +#Args: (original) +# As defined in 'platform.txt' for 'tools.esptool.upload.pattern' possible values (from boards.txt[.py]) +# | | +# --chip esp8266 +# --port "{serial.port}" e.g.: /dev/ttyUSB0 +# --baud "{upload.speed}" e.g.: 115200 +# "{upload.verbose}" { '' | '--trace' } +# {upload.erase_cmd} { '' | 'erase_region "{build.rfcal_addr}" 0x4000' | 'erase_flash' } +# {upload.resetmethod} --before { default_reset | no_reset | no_reset_no_sync } --after { hard_reset | soft_reset } +# write_flash 0x0 "{build.path}/{build.project_name}.bin" write_flash + +#Args: (new) +# As defined in 'platform.txt' for 'tools.esptool.upload.pattern' possible values +# | | +# -fi "{build.Filesystem}" 0-4 +# --port "{serial.port}" e.g.: /dev/ttyUSB0 +# --baud "{upload.speed}" e.g.: 115200 +# {upload.resetmethod} --before { default_reset | no_reset | no_reset_no_sync } --after { hard_reset | soft_reset } +# --sk 0x0 "{build.path}/{build.project_name}.bin" +# --fs {build.spiffs_start} "{build.path}/{build.project_name}" +# {upload.erase_cmd} { '' | 'erase_region "{build.rfcal_addr}" 0x4000' | 'erase_flash' } +# "{upload.verbose}" { '' | '--trace' } +# Remark: +# {upload.erase_cmd} "{upload.verbose}" should be the last two parameters given in 'platform.txt' + +def parse_args( argsIn ): + parser = argparse.ArgumentParser( description = 'Upload-Wrapper for Arduino esp8266' ) + parser.add_argument( '-fi', '--Filesystem', type = int, default = 0, help = '0: Off, 1: LitteFs: Create & Upload, 2: LitteFs: Create only, 3: SPIFFS: Create & Upload, 4: SPIFFS: Create only' ) + parser.add_argument( '--port', type = str, required = True, help = 'path to serial device' ) + parser.add_argument( '--baud', type = str, required = True, help = 'baudrate' ) + parser.add_argument( '--before', type = str, required = True, help = 'before (default_reset/no_reset/no_reset_no_sync)' ) + parser.add_argument( '--after', type = str, required = True, help = 'after (hard_reset/soft_reset)' ) + parser.add_argument( '--sk', type = str, nargs=2, help = 'adr path_path_to_sketch_binary' ) + parser.add_argument( '--fs', type = str, nargs=2, help = 'adr path_path_to_fs_binary_without_ext' ) + parser.add_argument( 'erase_cmd', type = str, nargs='*', help = 'erase_cmd' ) + parser.add_argument( '--trace', action='store_true', help = 'verbose' ) + global Args + Args = parser.parse_args( argsIn ) + + +def main( argsIn = None ): + """ + Main function for uploadGn + + argsIn - Optional override for default arguments parsing (that uses sys.argv), can be a list of custom arguments. + Arguments and their values need to be added as individual items to the list e.g. "-b 115200" thus becomes ['-b', '115200']. + """ + + parse_args( argsIn ) + + if not os.path.exists( Args.port ): + Msg( "Port: '%s', does not exist!\n...Upload aborted" % Args.port ) + sys.exit( 1 ) + + # 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 Args.baud == "921600": + Args.baud = "460800" + esptoolArgs = [ '--chip', 'esp8266', '--port', Args.port, '--baud', Args.baud, '--before', Args.before, '--after', Args.after ] + if Args.trace: + esptoolArgs += [ '--trace' ] + esptoolArgs += [ 'write_flash' ] + + if len( Args.erase_cmd ) and Args.erase_cmd[ 0 ] == "erase_flash": + esptoolArgs += [ '--erase-all' ] + esptoolArgs += [ '--flash_size', 'detect', Args.sk[ 0 ], Args.sk[ 1 ] ] + + EraseFilePath = '' + try: + if len( Args.erase_cmd ) and Args.erase_cmd[ 0 ] == "erase_region": + # Generate temporary empty (0xff) file + f, EraseFilePath = tempfile.mkstemp() + os.write( f, bytearray( [ 255 ] * int( Args.erase_cmd[ 2 ], 0 ) ) ) + os.close( f ) + esptoolArgs += [ Args.erase_cmd[ 1 ], EraseFilePath ] + + filesUploaded = [ Path( Args.sk[ 1 ] ).name ] + if Args.Filesystem == 1: + esptoolArgs += [ Args.fs[ 0 ], "%s.littlefs" % Args.fs[ 1 ] ] + filesUploaded += [ Path( Args.fs[ 1 ] ).name ] + elif Args.Filesystem == 3: + esptoolArgs += [ Args.fs[ 0 ], "%s.spiffs" % Args.fs[ 1 ] ] + filesUploaded += [ Path( Args.fs[ 1 ] ).name ] + + Msg( "Uploading Binaries..." ) + #Debug( str( esptoolArgs ) ) + esptool.main( esptoolArgs ) + Msg( '...files uploaded: %s' % ", ".join( filesUploaded ) ) + finally: + if len( EraseFilePath ): + os.remove( EraseFilePath ) + +def main_(): + try: + main() + except RuntimeError as e: + Msg( '\nA RuntimeError error occurred: %s' % e ) + sys.exit( 2 ) + +if __name__ == '__main__': + main_() From 71d421353f5ff0e792f3c8c79d4326b513acd04b Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Fri, 13 Aug 2021 11:05:48 +0200 Subject: [PATCH 04/19] Minor bugfix --- tools/postbuild.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/postbuild.py b/tools/postbuild.py index 06d5d2d223..1e1c501dd3 100755 --- a/tools/postbuild.py +++ b/tools/postbuild.py @@ -96,7 +96,7 @@ def CreateFs( fsName, mkFsName ): raise ProcessError( "CreateFs: data dir is not a directory: %s" % dataDir ) FilesInDir = CountFilesInDir( dataDir ) if FilesInDir == 0: - if not ConfirmDialog( "%s Create" % fsName, "No files have been found in your data folder!\nAre you sure you want to create an empty %s image?" % fsName ) + if not ConfirmDialog( "%s Create" % fsName, "No files have been found in your data folder!\nAre you sure you want to create an empty %s image?" % fsName ): raise ProcessError( "Canceled by user" ) os.makedirs( DstDir, exist_ok = True ) imageName = "%s.%s" % ( Args.name, fsName ) From 62ca3b609df7ac38b28eed3192d8b0549afe0d92 Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Fri, 13 Aug 2021 11:23:15 +0200 Subject: [PATCH 05/19] Debug for failed check in Pull-Request --- tools/netUploadGn.py | 4 ++-- tools/postbuild.py | 9 +++++++-- tools/uploadGn.py | 4 ++-- tools/{Utillities.py => utillities.py} | 0 4 files changed, 11 insertions(+), 6 deletions(-) rename tools/{Utillities.py => utillities.py} (100%) diff --git a/tools/netUploadGn.py b/tools/netUploadGn.py index a74b57a18a..79120bf35d 100644 --- a/tools/netUploadGn.py +++ b/tools/netUploadGn.py @@ -8,9 +8,9 @@ ToolsDir = os.path.dirname( os.path.realpath( __file__ ) ).replace( '\\', '/' ) + "/" # convert to UNIX format try: sys.path.insert( 0, ToolsDir ) # ToolsDir - from Utillities import * # If this fails, we can't continue and will bomb below + from utillities import * # If this fails, we can't continue and will bomb below except Exception: - sys.stderr.write( '\nUtillities.py not found next to this %s tool.\n' % __file__ ) + sys.stderr.write( '\nutillities.py not found next to this %s tool.\n' % __file__ ) sys.exit( 2 ) try: diff --git a/tools/postbuild.py b/tools/postbuild.py index 1e1c501dd3..0c6a146656 100755 --- a/tools/postbuild.py +++ b/tools/postbuild.py @@ -4,11 +4,16 @@ import os import sys ToolsDir = os.path.dirname( os.path.realpath( __file__ ) ).replace( '\\', '/' ) + "/" # convert to UNIX format +sys.stderr.write( '\nDebug for failed check in Pull-Request:\n' ) +sys.stderr.write( '...ToolsDir: %s\n' % ToolsDir ) +sys.stderr.write( '...sys.path (before insert): %s\n' % ", ".join( sys.path ) ) + try: sys.path.insert( 0, ToolsDir ) # ToolsDir - from Utillities import * # If this fails, we can't continue and will bomb below + sys.stderr.write( '...sys.path (after insert): %s\n' % ", ".join( sys.path ) ) + from utillities import * # If this fails, we can't continue and will bomb below except Exception: - sys.stderr.write( '\nUtillities.py not found next to this %s tool.\n' % __file__ ) + sys.stderr.write( '\nutillities.py not found next to this %s tool.\n' % __file__ ) sys.exit( 2 ) def parse_args( argsIn ): diff --git a/tools/uploadGn.py b/tools/uploadGn.py index 4c40f63580..8e0e6cedde 100644 --- a/tools/uploadGn.py +++ b/tools/uploadGn.py @@ -8,9 +8,9 @@ ToolsDir = os.path.dirname( os.path.realpath( __file__ ) ).replace( '\\', '/' ) + "/" # convert to UNIX format try: sys.path.insert( 0, ToolsDir ) # ToolsDir - from Utillities import * # If this fails, we can't continue and will bomb below + from utillities import * # If this fails, we can't continue and will bomb below except Exception: - sys.stderr.write( '\nUtillities.py not found next to this %s tool.\n' % __file__ ) + sys.stderr.write( '\nutillities.py not found next to this %s tool.\n' % __file__ ) sys.exit( 2 ) import tempfile from pathlib import Path diff --git a/tools/Utillities.py b/tools/utillities.py similarity index 100% rename from tools/Utillities.py rename to tools/utillities.py From 609182309f093c46c6faaf1aa8d54517701f0886 Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Fri, 13 Aug 2021 11:42:50 +0200 Subject: [PATCH 06/19] Ignore files generated by boards.txt.py & my extra files --- .gitignore | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.gitignore b/.gitignore index 6413393ea9..4952ee07b2 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,15 @@ boards.local.txt .vs/ __vm/ *.vcxproj* + +#Ignore files generated by boards.txt.py +*.orig +tools/sdk/ld/backup/* + +#Ignore my extra files +*.odt* +tools/Gui.py +tools/Replace2SpceWith4.txt +*(Kopie)* + + From 158484f3b6cb4b7fc427c5d597442e8dded8eccc Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Fri, 13 Aug 2021 11:58:42 +0200 Subject: [PATCH 07/19] More Debug for failed check in Pull-Request --- tools/postbuild.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/postbuild.py b/tools/postbuild.py index 0c6a146656..2039013741 100755 --- a/tools/postbuild.py +++ b/tools/postbuild.py @@ -7,12 +7,15 @@ sys.stderr.write( '\nDebug for failed check in Pull-Request:\n' ) sys.stderr.write( '...ToolsDir: %s\n' % ToolsDir ) sys.stderr.write( '...sys.path (before insert): %s\n' % ", ".join( sys.path ) ) - +sys.stderr.write( '...os.path.exists( ToolsDir/utillities.py ): %s\n"' % ( "Yes" if os.path.exists( ToolsDir + "utillities.py" ) ) ) try: sys.path.insert( 0, ToolsDir ) # ToolsDir sys.stderr.write( '...sys.path (after insert): %s\n' % ", ".join( sys.path ) ) from utillities import * # If this fails, we can't continue and will bomb below except Exception: + try: + from .utillities import * # If this fails, we can't continue and will bomb below + except Exception: sys.stderr.write( '\nutillities.py not found next to this %s tool.\n' % __file__ ) sys.exit( 2 ) From cf02d41c3d0408ba6835917a912ad16210786660 Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Fri, 13 Aug 2021 12:04:21 +0200 Subject: [PATCH 08/19] Bugfix for check --- tools/postbuild.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/postbuild.py b/tools/postbuild.py index 2039013741..b6f9a983f5 100755 --- a/tools/postbuild.py +++ b/tools/postbuild.py @@ -7,7 +7,7 @@ sys.stderr.write( '\nDebug for failed check in Pull-Request:\n' ) sys.stderr.write( '...ToolsDir: %s\n' % ToolsDir ) sys.stderr.write( '...sys.path (before insert): %s\n' % ", ".join( sys.path ) ) -sys.stderr.write( '...os.path.exists( ToolsDir/utillities.py ): %s\n"' % ( "Yes" if os.path.exists( ToolsDir + "utillities.py" ) ) ) +sys.stderr.write( '...os.path.exists( ToolsDir/utillities.py ): %s\n"' % ( "Yes" if os.path.exists( ToolsDir + "utillities.py" ) else "No" ) ) try: sys.path.insert( 0, ToolsDir ) # ToolsDir sys.stderr.write( '...sys.path (after insert): %s\n' % ", ".join( sys.path ) ) From dd9359828cf2ab4ac138e55b271c3616daf15a16 Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Fri, 13 Aug 2021 12:17:26 +0200 Subject: [PATCH 09/19] And another bigfix :-( --- tools/postbuild.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/postbuild.py b/tools/postbuild.py index b6f9a983f5..69df6e01b3 100755 --- a/tools/postbuild.py +++ b/tools/postbuild.py @@ -16,8 +16,8 @@ try: from .utillities import * # If this fails, we can't continue and will bomb below except Exception: - sys.stderr.write( '\nutillities.py not found next to this %s tool.\n' % __file__ ) - sys.exit( 2 ) + sys.stderr.write( '\nutillities.py not found next to this %s tool.\n' % __file__ ) + sys.exit( 2 ) def parse_args( argsIn ): parser = argparse.ArgumentParser( description = 'PostBuild for ESP8288' ) From f39b549d90b447f68adbe1986d12e12b01ed1789 Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Fri, 13 Aug 2021 12:38:44 +0200 Subject: [PATCH 10/19] Changed mod a+x (as all other .py) --- tools/netUploadGn.py | 0 tools/uploadGn.py | 0 tools/utillities.py | 0 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 tools/netUploadGn.py mode change 100644 => 100755 tools/uploadGn.py mode change 100644 => 100755 tools/utillities.py diff --git a/tools/netUploadGn.py b/tools/netUploadGn.py old mode 100644 new mode 100755 diff --git a/tools/uploadGn.py b/tools/uploadGn.py old mode 100644 new mode 100755 diff --git a/tools/utillities.py b/tools/utillities.py old mode 100644 new mode 100755 From 43f9e21461215fb95b5e72472c4b016c84e076d4 Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Fri, 13 Aug 2021 13:56:56 +0200 Subject: [PATCH 11/19] Syntax error in utilities.py may be the reason for failed import. Correted --- tools/netUploadGn.py | 4 ++-- tools/postbuild.py | 14 +++----------- tools/uploadGn.py | 4 ++-- tools/utillities.py | 19 +++++-------------- 4 files changed, 12 insertions(+), 29 deletions(-) diff --git a/tools/netUploadGn.py b/tools/netUploadGn.py index 79120bf35d..1138a337bf 100755 --- a/tools/netUploadGn.py +++ b/tools/netUploadGn.py @@ -9,8 +9,8 @@ try: sys.path.insert( 0, ToolsDir ) # ToolsDir from utillities import * # If this fails, we can't continue and will bomb below -except Exception: - sys.stderr.write( '\nutillities.py not found next to this %s tool.\n' % __file__ ) +except Exception as e: + sys.stderr.write( '\nImport of utillities.py failed.\n...Is it not next to this %s tool?\n...Exception was: %s\n' % ( __file__, e ) ) sys.exit( 2 ) try: diff --git a/tools/postbuild.py b/tools/postbuild.py index 69df6e01b3..e91c835050 100755 --- a/tools/postbuild.py +++ b/tools/postbuild.py @@ -4,20 +4,12 @@ import os import sys ToolsDir = os.path.dirname( os.path.realpath( __file__ ) ).replace( '\\', '/' ) + "/" # convert to UNIX format -sys.stderr.write( '\nDebug for failed check in Pull-Request:\n' ) -sys.stderr.write( '...ToolsDir: %s\n' % ToolsDir ) -sys.stderr.write( '...sys.path (before insert): %s\n' % ", ".join( sys.path ) ) -sys.stderr.write( '...os.path.exists( ToolsDir/utillities.py ): %s\n"' % ( "Yes" if os.path.exists( ToolsDir + "utillities.py" ) else "No" ) ) try: sys.path.insert( 0, ToolsDir ) # ToolsDir - sys.stderr.write( '...sys.path (after insert): %s\n' % ", ".join( sys.path ) ) from utillities import * # If this fails, we can't continue and will bomb below -except Exception: - try: - from .utillities import * # If this fails, we can't continue and will bomb below - except Exception: - sys.stderr.write( '\nutillities.py not found next to this %s tool.\n' % __file__ ) - sys.exit( 2 ) +except Exception as e: + sys.stderr.write( '\nImport of utillities.py failed.\n...Is it not next to this %s tool?\n...Exception was: %s\n' % ( __file__, e ) ) + sys.exit( 2 ) def parse_args( argsIn ): parser = argparse.ArgumentParser( description = 'PostBuild for ESP8288' ) diff --git a/tools/uploadGn.py b/tools/uploadGn.py index 8e0e6cedde..11920f2a2e 100755 --- a/tools/uploadGn.py +++ b/tools/uploadGn.py @@ -9,8 +9,8 @@ try: sys.path.insert( 0, ToolsDir ) # ToolsDir from utillities import * # If this fails, we can't continue and will bomb below -except Exception: - sys.stderr.write( '\nutillities.py not found next to this %s tool.\n' % __file__ ) +except Exception as e: + sys.stderr.write( '\nImport of utillities.py failed.\n...Is it not next to this %s tool?\n...Exception was: %s\n' % ( __file__, e ) ) sys.exit( 2 ) import tempfile from pathlib import Path diff --git a/tools/utillities.py b/tools/utillities.py index d20cf55760..75af7a1207 100755 --- a/tools/utillities.py +++ b/tools/utillities.py @@ -49,7 +49,7 @@ def Which( prg, dir = None ): Takes care of OS, on Windows searches for .exe instead of . if is given prefers prg inside this dir over others""" if platform.system() == "Windows": - prg = "%s.exe" % prg + prg = "%s.exe" % prg res = None if dir is not None: res = Which_Chdir_( prg, dir ) @@ -62,7 +62,7 @@ def CopyToDir( name, ext, dstDir ): fileName = "%s.%s" % ( name, ext ) srcPath = os.path.abspath( fileName ) if not os.path.exists( srcPath ): - return [] + return [] shutil.copyfile( srcPath, os.path.join( dstDir, fileName ) ) return [ fileName ] @@ -70,15 +70,6 @@ def IntValFromStr( strVal ): """ Convert string into integer, can be used with decimal value '123' or hex '0xabc'. """ return int( strVal.strip(), 0 ) -def CountFilesInDir( dataDir ): - fileCount = 0 - for root, dir, files in os.walk( dataDir ): - for file in files: - #!? Why Ony count files without '.' ?? - if file[ 0 ] != ".": - fileCount += 1 - return fileCount - def RemoveIno( path ): """ Returns the given path with extension ".ino" removed (if exist) """ if path[ -4: ] == ".ino": @@ -87,10 +78,10 @@ def RemoveIno( path ): def ConfirmDialog( title, text ): try: - import tkinter - from tkinter import messagebox + import tkinter + from tkinter import messagebox except: - raise ProcessError( "tkinter not available.\nPlease install it with:\npip3 install tkinter\n" )) + raise ProcessError( "tkinter not available.\nPlease install it with:\npip3 install tkinter\n" ) rootWin = tkinter.Tk() # Create the object rootWin.overrideredirect( 1 ) # Avoid it appearing and then disappearing quickly #rootWin.iconbitmap("PythonIcon.ico") # Set an icon (this is optional - must be in a .ico format) From 684930205082d749d81c1651e2956ab9b3b8a6a9 Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Wed, 18 Aug 2021 14:09:36 +0200 Subject: [PATCH 12/19] instead of external commd, use python module gzip --- tools/postbuild.py | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/tools/postbuild.py b/tools/postbuild.py index e91c835050..0ce2a0ef82 100755 --- a/tools/postbuild.py +++ b/tools/postbuild.py @@ -3,6 +3,8 @@ import os import sys +import gzip +import shutil ToolsDir = os.path.dirname( os.path.realpath( __file__ ) ).replace( '\\', '/' ) + "/" # convert to UNIX format try: sys.path.insert( 0, ToolsDir ) # ToolsDir @@ -35,24 +37,14 @@ def CountFilesInDir( dataDir ): fileCount += 1 return fileCount -GzipStatus = 0 # 0: Not checked, 1: found, 2: not found & Msg given -GzipPath = None def CreateGzFile( dir, name ): """ gzip the file 'dir/name' and save the compressed file to 'dir/name.gz'. Return name of generated file as list. """ - global GzipStatus, GzipPath - if GzipStatus == 2: - return [] - if GzipStatus == 0: - GzipPath = Which( "gzip", ToolsDir ) - if GzipPath is None: - GzipStatus = 2 - raise FatalError( "'Create & Export gzipped Binaries too' selected, but 'gzip' not in path. Creating canceled" ) - GzipStatus = 1 outName = "%s.gz" % name outPath = os.path.join( dir, outName ) - cmd = '%s -9 -k -f "%s" >%s' % ( GzipPath, os.path.join( dir, name ), outPath ) - if os.system( cmd ) != 0: - raise FatalError( "Error excuting gzip cmd: %s" % cmd ) + inPath = os.path.join( dir, name ) + with open( inPath, 'rb' ) as inFile: + with gzip.open( outPath, 'wb' ) as outFile: + shutil.copyfileobj( inFile, outFile ) if not os.path.exists( outPath ): raise FatalError( "gzip: file '%s' not created" % outName ) return [ outName ] From d86910c844c72158871d9f7fcdc7123f91b1ad05 Mon Sep 17 00:00:00 2001 From: gneiss15 <36615981+gneiss15@users.noreply.github.com> Date: Wed, 18 Aug 2021 14:27:26 +0200 Subject: [PATCH 13/19] Integrated handling for filesystem and gzipped binaries (#1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Integrated handling for filesystem and gzipped Binaries ATENTION: This is tested on Linux only! See below for open questions/prerequisites. Currently there are some manual steps necessary to prepare the files necessary for OTA updates (especially for ESP8266HTTPUpdateServer) The steps are: 1. Compile the sketch 2. Export the generated sketch-binary 3. Generate the filesystem 4. Export the fs-binary 5. Generate gzipped versions of binaries 6. Generate signed versions of gzipped binaries Which of the above steps are necessary depends on the sketch (does it use a fs?) and the kind of OTA chosen (signed binaries necessary?) or preferred usage (use of gzipped binaries for faster upload?). There are some problems/inconveniences: 2. The signed sketch-binary is not exported when using "Export compiled Binary". (This point will be solved with my Pull-Request #8255) 3. & 4. AFAIK, the only “integrated” way to generate the fs is using one of the tools: “arduino-esp8266littlefs-plugin” or “arduino-esp8266fs-plugin”. Both tools are designed to create & upload the fs, but not export them. So if preparing the files for an OTA when no board is connected, you have to: - ignore errors shown because upload is not possible - find & navigate to the “build.path” and copy the fs-binary manually 5. & 6. AFAIK, there is no “integrated” way to perform these steps. This Pull-Request will integrate all of the above steps into the “compile and/or upload” action of Arduino. This is done by adding two new entries (“Filesystem” and “Binaries”) to the tools-menu. These entries are presented just like any other options for esp8266 (“Upload speed” ... “Non-32-Bit Access”) and placed right after the last. Menu-Entry “Filesystem” let You choose between: - Off - LitteFs: Create & Upload - LitteFs: Create only - SPIFFS: Create & Upload - SPIFFS: Create only Menu-Entry “Binaries” let You choose between: - Off - Export (.bin & .bin.signed) - Create & Export gzipped Binaries too Now You can choose with of the steps mentioned above will be automatically performed. After a (successful) compile, the files will be exported to a subdir “bin/{variant}” of Your sketch directory (“{variant}” replaced with the name of the board as shown behind “Tools -> Board:”). Signed variants of all Binaries are gererated similar to the “automatic signing” done for normal sketch binary. Open questions/prerequisites: As stated above I had tested this on Linux only. Even under this os there are some prerequisites: - gzip must be available (inside path) if it is not, a message is given and creating of gzipped binaries is skipped. - tkinter should be available if it is not, and creating of fs is requested AND the data dir is empty, I didn't know how to ask the user: “Are you sure you want to create an empty ... image?”. So in this case a message is given and the fs will not be created. This “should” work under Windows/MacOs the same, but can't be tested by me (I had no PC with this OSes) An additional question for developers: As mentioned inside function main of “postbuild.py”, there is a strange behavior of the arg "{build.path}" supplied via “platform.txt”. If someone can explain me why this “string” behave as described in the comments, I would be happy ;-) * Forgot to add new tools to git * Minor bugfix * Debug for failed check in Pull-Request * Ignore files generated by boards.txt.py & my extra files * More Debug for failed check in Pull-Request * Bugfix for check * And another bigfix :-( * Changed mod a+x (as all other .py) * Syntax error in utilities.py may be the reason for failed import. Correted * instead of external commd, use python module gzip --- .gitignore | 12 + boards.txt | 594 +++++++++++++++++++++++++++++++++++++++ libraries/SoftwareSerial | 2 +- platform.txt | 18 +- tools/boards.txt.py | 20 ++ tools/netUploadGn.py | 98 +++++++ tools/postbuild.py | 201 +++++++++++++ tools/uploadGn.py | 127 +++++++++ tools/utillities.py | 90 ++++++ 9 files changed, 1154 insertions(+), 8 deletions(-) create mode 100755 tools/netUploadGn.py create mode 100755 tools/postbuild.py create mode 100755 tools/uploadGn.py create mode 100755 tools/utillities.py diff --git a/.gitignore b/.gitignore index 6413393ea9..4952ee07b2 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,15 @@ boards.local.txt .vs/ __vm/ *.vcxproj* + +#Ignore files generated by boards.txt.py +*.orig +tools/sdk/ld/backup/* + +#Ignore my extra files +*.odt* +tools/Gui.py +tools/Replace2SpceWith4.txt +*(Kopie)* + + diff --git a/boards.txt b/boards.txt index fd05749760..bd30432834 100644 --- a/boards.txt +++ b/boards.txt @@ -26,6 +26,8 @@ menu.sdk=Espressif FW menu.ssl=SSL Support menu.mmu=MMU menu.non32xfer=Non-32-Bit Access +menu.Filesystem=Filesystem +menu.Binaries=Binaries ############################################################## generic.name=Generic ESP8266 Module @@ -42,6 +44,22 @@ generic.build.variant=generic generic.build.spiffs_pagesize=256 generic.build.debug_port= generic.build.debug_level= +generic.menu.Filesystem.Off=Off +generic.menu.Filesystem.Off.build.Filesystem=0 +generic.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +generic.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +generic.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +generic.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +generic.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +generic.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +generic.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +generic.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +generic.menu.Binaries.Off=Off +generic.menu.Binaries.Off.build.Binaries=0 +generic.menu.Binaries.Binaries=Export (.bin & .bin.signed) +generic.menu.Binaries.Binaries.build.Binaries=1 +generic.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +generic.menu.Binaries.PackedBinaries.build.Binaries=2 generic.menu.xtal.80=80 MHz generic.menu.xtal.80.build.f_cpu=80000000L generic.menu.xtal.160=160 MHz @@ -539,6 +557,22 @@ esp8285.build.core=esp8266 esp8285.build.spiffs_pagesize=256 esp8285.build.debug_port= esp8285.build.debug_level= +esp8285.menu.Filesystem.Off=Off +esp8285.menu.Filesystem.Off.build.Filesystem=0 +esp8285.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +esp8285.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +esp8285.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +esp8285.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +esp8285.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +esp8285.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +esp8285.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +esp8285.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +esp8285.menu.Binaries.Off=Off +esp8285.menu.Binaries.Off.build.Binaries=0 +esp8285.menu.Binaries.Binaries=Export (.bin & .bin.signed) +esp8285.menu.Binaries.Binaries.build.Binaries=1 +esp8285.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +esp8285.menu.Binaries.PackedBinaries.build.Binaries=2 esp8285.menu.xtal.80=80 MHz esp8285.menu.xtal.80.build.f_cpu=80000000L esp8285.menu.xtal.160=160 MHz @@ -906,6 +940,22 @@ gen4iod.build.core=esp8266 gen4iod.build.spiffs_pagesize=256 gen4iod.build.debug_port= gen4iod.build.debug_level= +gen4iod.menu.Filesystem.Off=Off +gen4iod.menu.Filesystem.Off.build.Filesystem=0 +gen4iod.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +gen4iod.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +gen4iod.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +gen4iod.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +gen4iod.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +gen4iod.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +gen4iod.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +gen4iod.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +gen4iod.menu.Binaries.Off=Off +gen4iod.menu.Binaries.Off.build.Binaries=0 +gen4iod.menu.Binaries.Binaries=Export (.bin & .bin.signed) +gen4iod.menu.Binaries.Binaries.build.Binaries=1 +gen4iod.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +gen4iod.menu.Binaries.PackedBinaries.build.Binaries=2 gen4iod.menu.xtal.80=80 MHz gen4iod.menu.xtal.80.build.f_cpu=80000000L gen4iod.menu.xtal.160=160 MHz @@ -1188,6 +1238,22 @@ huzzah.build.core=esp8266 huzzah.build.spiffs_pagesize=256 huzzah.build.debug_port= huzzah.build.debug_level= +huzzah.menu.Filesystem.Off=Off +huzzah.menu.Filesystem.Off.build.Filesystem=0 +huzzah.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +huzzah.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +huzzah.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +huzzah.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +huzzah.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +huzzah.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +huzzah.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +huzzah.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +huzzah.menu.Binaries.Off=Off +huzzah.menu.Binaries.Off.build.Binaries=0 +huzzah.menu.Binaries.Binaries=Export (.bin & .bin.signed) +huzzah.menu.Binaries.Binaries.build.Binaries=1 +huzzah.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +huzzah.menu.Binaries.PackedBinaries.build.Binaries=2 huzzah.menu.xtal.80=80 MHz huzzah.menu.xtal.80.build.f_cpu=80000000L huzzah.menu.xtal.160=160 MHz @@ -1403,6 +1469,22 @@ wifi_slot.build.core=esp8266 wifi_slot.build.spiffs_pagesize=256 wifi_slot.build.debug_port= wifi_slot.build.debug_level= +wifi_slot.menu.Filesystem.Off=Off +wifi_slot.menu.Filesystem.Off.build.Filesystem=0 +wifi_slot.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +wifi_slot.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +wifi_slot.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +wifi_slot.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +wifi_slot.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +wifi_slot.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +wifi_slot.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +wifi_slot.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +wifi_slot.menu.Binaries.Off=Off +wifi_slot.menu.Binaries.Off.build.Binaries=0 +wifi_slot.menu.Binaries.Binaries=Export (.bin & .bin.signed) +wifi_slot.menu.Binaries.Binaries.build.Binaries=1 +wifi_slot.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +wifi_slot.menu.Binaries.PackedBinaries.build.Binaries=2 wifi_slot.menu.xtal.80=80 MHz wifi_slot.menu.xtal.80.build.f_cpu=80000000L wifi_slot.menu.xtal.160=160 MHz @@ -1744,6 +1826,22 @@ arduino-esp8266.build.variant=generic arduino-esp8266.build.spiffs_pagesize=256 arduino-esp8266.build.debug_port= arduino-esp8266.build.debug_level= +arduino-esp8266.menu.Filesystem.Off=Off +arduino-esp8266.menu.Filesystem.Off.build.Filesystem=0 +arduino-esp8266.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +arduino-esp8266.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +arduino-esp8266.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +arduino-esp8266.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +arduino-esp8266.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +arduino-esp8266.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +arduino-esp8266.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +arduino-esp8266.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +arduino-esp8266.menu.Binaries.Off=Off +arduino-esp8266.menu.Binaries.Off.build.Binaries=0 +arduino-esp8266.menu.Binaries.Binaries=Export (.bin & .bin.signed) +arduino-esp8266.menu.Binaries.Binaries.build.Binaries=1 +arduino-esp8266.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +arduino-esp8266.menu.Binaries.PackedBinaries.build.Binaries=2 arduino-esp8266.menu.xtal.80=80 MHz arduino-esp8266.menu.xtal.80.build.f_cpu=80000000L arduino-esp8266.menu.xtal.160=160 MHz @@ -1960,6 +2058,22 @@ espmxdevkit.build.core=esp8266 espmxdevkit.build.spiffs_pagesize=256 espmxdevkit.build.debug_port= espmxdevkit.build.debug_level= +espmxdevkit.menu.Filesystem.Off=Off +espmxdevkit.menu.Filesystem.Off.build.Filesystem=0 +espmxdevkit.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +espmxdevkit.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +espmxdevkit.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +espmxdevkit.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +espmxdevkit.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +espmxdevkit.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +espmxdevkit.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +espmxdevkit.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +espmxdevkit.menu.Binaries.Off=Off +espmxdevkit.menu.Binaries.Off.build.Binaries=0 +espmxdevkit.menu.Binaries.Binaries=Export (.bin & .bin.signed) +espmxdevkit.menu.Binaries.Binaries.build.Binaries=1 +espmxdevkit.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +espmxdevkit.menu.Binaries.PackedBinaries.build.Binaries=2 espmxdevkit.menu.xtal.80=80 MHz espmxdevkit.menu.xtal.80.build.f_cpu=80000000L espmxdevkit.menu.xtal.160=160 MHz @@ -2216,6 +2330,22 @@ oak.build.core=esp8266 oak.build.spiffs_pagesize=256 oak.build.debug_port= oak.build.debug_level= +oak.menu.Filesystem.Off=Off +oak.menu.Filesystem.Off.build.Filesystem=0 +oak.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +oak.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +oak.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +oak.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +oak.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +oak.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +oak.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +oak.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +oak.menu.Binaries.Off=Off +oak.menu.Binaries.Off.build.Binaries=0 +oak.menu.Binaries.Binaries=Export (.bin & .bin.signed) +oak.menu.Binaries.Binaries.build.Binaries=1 +oak.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +oak.menu.Binaries.PackedBinaries.build.Binaries=2 oak.menu.xtal.80=80 MHz oak.menu.xtal.80.build.f_cpu=80000000L oak.menu.xtal.160=160 MHz @@ -2440,6 +2570,22 @@ espduino.build.core=esp8266 espduino.build.spiffs_pagesize=256 espduino.build.debug_port= espduino.build.debug_level= +espduino.menu.Filesystem.Off=Off +espduino.menu.Filesystem.Off.build.Filesystem=0 +espduino.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +espduino.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +espduino.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +espduino.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +espduino.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +espduino.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +espduino.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +espduino.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +espduino.menu.Binaries.Off=Off +espduino.menu.Binaries.Off.build.Binaries=0 +espduino.menu.Binaries.Binaries=Export (.bin & .bin.signed) +espduino.menu.Binaries.Binaries.build.Binaries=1 +espduino.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +espduino.menu.Binaries.PackedBinaries.build.Binaries=2 espduino.menu.xtal.80=80 MHz espduino.menu.xtal.80.build.f_cpu=80000000L espduino.menu.xtal.160=160 MHz @@ -2654,6 +2800,22 @@ espectro.build.core=esp8266 espectro.build.spiffs_pagesize=256 espectro.build.debug_port= espectro.build.debug_level= +espectro.menu.Filesystem.Off=Off +espectro.menu.Filesystem.Off.build.Filesystem=0 +espectro.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +espectro.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +espectro.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +espectro.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +espectro.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +espectro.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +espectro.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +espectro.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +espectro.menu.Binaries.Off=Off +espectro.menu.Binaries.Off.build.Binaries=0 +espectro.menu.Binaries.Binaries=Export (.bin & .bin.signed) +espectro.menu.Binaries.Binaries.build.Binaries=1 +espectro.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +espectro.menu.Binaries.PackedBinaries.build.Binaries=2 espectro.menu.xtal.80=80 MHz espectro.menu.xtal.80.build.f_cpu=80000000L espectro.menu.xtal.160=160 MHz @@ -2869,6 +3031,22 @@ espino.build.core=esp8266 espino.build.spiffs_pagesize=256 espino.build.debug_port= espino.build.debug_level= +espino.menu.Filesystem.Off=Off +espino.menu.Filesystem.Off.build.Filesystem=0 +espino.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +espino.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +espino.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +espino.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +espino.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +espino.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +espino.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +espino.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +espino.menu.Binaries.Off=Off +espino.menu.Binaries.Off.build.Binaries=0 +espino.menu.Binaries.Binaries=Export (.bin & .bin.signed) +espino.menu.Binaries.Binaries.build.Binaries=1 +espino.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +espino.menu.Binaries.PackedBinaries.build.Binaries=2 espino.menu.xtal.80=80 MHz espino.menu.xtal.80.build.f_cpu=80000000L espino.menu.xtal.160=160 MHz @@ -3087,6 +3265,22 @@ espresso_lite_v1.build.core=esp8266 espresso_lite_v1.build.spiffs_pagesize=256 espresso_lite_v1.build.debug_port= espresso_lite_v1.build.debug_level= +espresso_lite_v1.menu.Filesystem.Off=Off +espresso_lite_v1.menu.Filesystem.Off.build.Filesystem=0 +espresso_lite_v1.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +espresso_lite_v1.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +espresso_lite_v1.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +espresso_lite_v1.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +espresso_lite_v1.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +espresso_lite_v1.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +espresso_lite_v1.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +espresso_lite_v1.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +espresso_lite_v1.menu.Binaries.Off=Off +espresso_lite_v1.menu.Binaries.Off.build.Binaries=0 +espresso_lite_v1.menu.Binaries.Binaries=Export (.bin & .bin.signed) +espresso_lite_v1.menu.Binaries.Binaries.build.Binaries=1 +espresso_lite_v1.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +espresso_lite_v1.menu.Binaries.PackedBinaries.build.Binaries=2 espresso_lite_v1.menu.xtal.80=80 MHz espresso_lite_v1.menu.xtal.80.build.f_cpu=80000000L espresso_lite_v1.menu.xtal.160=160 MHz @@ -3305,6 +3499,22 @@ espresso_lite_v2.build.core=esp8266 espresso_lite_v2.build.spiffs_pagesize=256 espresso_lite_v2.build.debug_port= espresso_lite_v2.build.debug_level= +espresso_lite_v2.menu.Filesystem.Off=Off +espresso_lite_v2.menu.Filesystem.Off.build.Filesystem=0 +espresso_lite_v2.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +espresso_lite_v2.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +espresso_lite_v2.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +espresso_lite_v2.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +espresso_lite_v2.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +espresso_lite_v2.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +espresso_lite_v2.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +espresso_lite_v2.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +espresso_lite_v2.menu.Binaries.Off=Off +espresso_lite_v2.menu.Binaries.Off.build.Binaries=0 +espresso_lite_v2.menu.Binaries.Binaries=Export (.bin & .bin.signed) +espresso_lite_v2.menu.Binaries.Binaries.build.Binaries=1 +espresso_lite_v2.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +espresso_lite_v2.menu.Binaries.PackedBinaries.build.Binaries=2 espresso_lite_v2.menu.xtal.80=80 MHz espresso_lite_v2.menu.xtal.80.build.f_cpu=80000000L espresso_lite_v2.menu.xtal.160=160 MHz @@ -3533,6 +3743,22 @@ sonoff.build.core=esp8266 sonoff.build.spiffs_pagesize=256 sonoff.build.debug_port= sonoff.build.debug_level= +sonoff.menu.Filesystem.Off=Off +sonoff.menu.Filesystem.Off.build.Filesystem=0 +sonoff.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +sonoff.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +sonoff.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +sonoff.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +sonoff.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +sonoff.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +sonoff.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +sonoff.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +sonoff.menu.Binaries.Off=Off +sonoff.menu.Binaries.Off.build.Binaries=0 +sonoff.menu.Binaries.Binaries=Export (.bin & .bin.signed) +sonoff.menu.Binaries.Binaries.build.Binaries=1 +sonoff.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +sonoff.menu.Binaries.PackedBinaries.build.Binaries=2 sonoff.menu.xtal.80=80 MHz sonoff.menu.xtal.80.build.f_cpu=80000000L sonoff.menu.xtal.160=160 MHz @@ -3788,6 +4014,22 @@ inventone.build.core=esp8266 inventone.build.spiffs_pagesize=256 inventone.build.debug_port= inventone.build.debug_level= +inventone.menu.Filesystem.Off=Off +inventone.menu.Filesystem.Off.build.Filesystem=0 +inventone.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +inventone.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +inventone.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +inventone.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +inventone.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +inventone.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +inventone.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +inventone.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +inventone.menu.Binaries.Off=Off +inventone.menu.Binaries.Off.build.Binaries=0 +inventone.menu.Binaries.Binaries=Export (.bin & .bin.signed) +inventone.menu.Binaries.Binaries.build.Binaries=1 +inventone.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +inventone.menu.Binaries.PackedBinaries.build.Binaries=2 inventone.menu.xtal.80=80 MHz inventone.menu.xtal.80.build.f_cpu=80000000L inventone.menu.xtal.160=160 MHz @@ -4003,6 +4245,22 @@ d1_mini.build.core=esp8266 d1_mini.build.spiffs_pagesize=256 d1_mini.build.debug_port= d1_mini.build.debug_level= +d1_mini.menu.Filesystem.Off=Off +d1_mini.menu.Filesystem.Off.build.Filesystem=0 +d1_mini.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +d1_mini.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +d1_mini.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +d1_mini.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +d1_mini.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +d1_mini.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +d1_mini.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +d1_mini.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +d1_mini.menu.Binaries.Off=Off +d1_mini.menu.Binaries.Off.build.Binaries=0 +d1_mini.menu.Binaries.Binaries=Export (.bin & .bin.signed) +d1_mini.menu.Binaries.Binaries.build.Binaries=1 +d1_mini.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +d1_mini.menu.Binaries.PackedBinaries.build.Binaries=2 d1_mini.menu.xtal.80=80 MHz d1_mini.menu.xtal.80.build.f_cpu=80000000L d1_mini.menu.xtal.160=160 MHz @@ -4218,6 +4476,22 @@ d1_mini_clone.build.core=esp8266 d1_mini_clone.build.spiffs_pagesize=256 d1_mini_clone.build.debug_port= d1_mini_clone.build.debug_level= +d1_mini_clone.menu.Filesystem.Off=Off +d1_mini_clone.menu.Filesystem.Off.build.Filesystem=0 +d1_mini_clone.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +d1_mini_clone.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +d1_mini_clone.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +d1_mini_clone.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +d1_mini_clone.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +d1_mini_clone.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +d1_mini_clone.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +d1_mini_clone.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +d1_mini_clone.menu.Binaries.Off=Off +d1_mini_clone.menu.Binaries.Off.build.Binaries=0 +d1_mini_clone.menu.Binaries.Binaries=Export (.bin & .bin.signed) +d1_mini_clone.menu.Binaries.Binaries.build.Binaries=1 +d1_mini_clone.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +d1_mini_clone.menu.Binaries.PackedBinaries.build.Binaries=2 d1_mini_clone.menu.xtal.80=80 MHz d1_mini_clone.menu.xtal.80.build.f_cpu=80000000L d1_mini_clone.menu.xtal.160=160 MHz @@ -4450,6 +4724,22 @@ d1_mini_lite.build.core=esp8266 d1_mini_lite.build.spiffs_pagesize=256 d1_mini_lite.build.debug_port= d1_mini_lite.build.debug_level= +d1_mini_lite.menu.Filesystem.Off=Off +d1_mini_lite.menu.Filesystem.Off.build.Filesystem=0 +d1_mini_lite.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +d1_mini_lite.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +d1_mini_lite.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +d1_mini_lite.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +d1_mini_lite.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +d1_mini_lite.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +d1_mini_lite.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +d1_mini_lite.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +d1_mini_lite.menu.Binaries.Off=Off +d1_mini_lite.menu.Binaries.Off.build.Binaries=0 +d1_mini_lite.menu.Binaries.Binaries=Export (.bin & .bin.signed) +d1_mini_lite.menu.Binaries.Binaries.build.Binaries=1 +d1_mini_lite.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +d1_mini_lite.menu.Binaries.PackedBinaries.build.Binaries=2 d1_mini_lite.menu.xtal.80=80 MHz d1_mini_lite.menu.xtal.80.build.f_cpu=80000000L d1_mini_lite.menu.xtal.160=160 MHz @@ -4705,6 +4995,22 @@ d1_mini_pro.build.core=esp8266 d1_mini_pro.build.spiffs_pagesize=256 d1_mini_pro.build.debug_port= d1_mini_pro.build.debug_level= +d1_mini_pro.menu.Filesystem.Off=Off +d1_mini_pro.menu.Filesystem.Off.build.Filesystem=0 +d1_mini_pro.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +d1_mini_pro.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +d1_mini_pro.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +d1_mini_pro.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +d1_mini_pro.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +d1_mini_pro.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +d1_mini_pro.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +d1_mini_pro.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +d1_mini_pro.menu.Binaries.Off=Off +d1_mini_pro.menu.Binaries.Off.build.Binaries=0 +d1_mini_pro.menu.Binaries.Binaries=Export (.bin & .bin.signed) +d1_mini_pro.menu.Binaries.Binaries.build.Binaries=1 +d1_mini_pro.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +d1_mini_pro.menu.Binaries.PackedBinaries.build.Binaries=2 d1_mini_pro.menu.xtal.80=80 MHz d1_mini_pro.menu.xtal.80.build.f_cpu=80000000L d1_mini_pro.menu.xtal.160=160 MHz @@ -4903,6 +5209,22 @@ d1.build.core=esp8266 d1.build.spiffs_pagesize=256 d1.build.debug_port= d1.build.debug_level= +d1.menu.Filesystem.Off=Off +d1.menu.Filesystem.Off.build.Filesystem=0 +d1.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +d1.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +d1.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +d1.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +d1.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +d1.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +d1.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +d1.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +d1.menu.Binaries.Off=Off +d1.menu.Binaries.Off.build.Binaries=0 +d1.menu.Binaries.Binaries=Export (.bin & .bin.signed) +d1.menu.Binaries.Binaries.build.Binaries=1 +d1.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +d1.menu.Binaries.PackedBinaries.build.Binaries=2 d1.menu.xtal.80=80 MHz d1.menu.xtal.80.build.f_cpu=80000000L d1.menu.xtal.160=160 MHz @@ -5118,6 +5440,22 @@ agruminolemon.build.core=esp8266 agruminolemon.build.spiffs_pagesize=256 agruminolemon.build.debug_port= agruminolemon.build.debug_level= +agruminolemon.menu.Filesystem.Off=Off +agruminolemon.menu.Filesystem.Off.build.Filesystem=0 +agruminolemon.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +agruminolemon.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +agruminolemon.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +agruminolemon.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +agruminolemon.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +agruminolemon.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +agruminolemon.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +agruminolemon.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +agruminolemon.menu.Binaries.Off=Off +agruminolemon.menu.Binaries.Off.build.Binaries=0 +agruminolemon.menu.Binaries.Binaries=Export (.bin & .bin.signed) +agruminolemon.menu.Binaries.Binaries.build.Binaries=1 +agruminolemon.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +agruminolemon.menu.Binaries.PackedBinaries.build.Binaries=2 agruminolemon.menu.xtal.80=80 MHz agruminolemon.menu.xtal.80.build.f_cpu=80000000L agruminolemon.menu.xtal.160=160 MHz @@ -5353,6 +5691,22 @@ nodemcu.build.core=esp8266 nodemcu.build.spiffs_pagesize=256 nodemcu.build.debug_port= nodemcu.build.debug_level= +nodemcu.menu.Filesystem.Off=Off +nodemcu.menu.Filesystem.Off.build.Filesystem=0 +nodemcu.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +nodemcu.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +nodemcu.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +nodemcu.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +nodemcu.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +nodemcu.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +nodemcu.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +nodemcu.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +nodemcu.menu.Binaries.Off=Off +nodemcu.menu.Binaries.Off.build.Binaries=0 +nodemcu.menu.Binaries.Binaries=Export (.bin & .bin.signed) +nodemcu.menu.Binaries.Binaries.build.Binaries=1 +nodemcu.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +nodemcu.menu.Binaries.PackedBinaries.build.Binaries=2 nodemcu.menu.xtal.80=80 MHz nodemcu.menu.xtal.80.build.f_cpu=80000000L nodemcu.menu.xtal.160=160 MHz @@ -5568,6 +5922,22 @@ nodemcuv2.build.core=esp8266 nodemcuv2.build.spiffs_pagesize=256 nodemcuv2.build.debug_port= nodemcuv2.build.debug_level= +nodemcuv2.menu.Filesystem.Off=Off +nodemcuv2.menu.Filesystem.Off.build.Filesystem=0 +nodemcuv2.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +nodemcuv2.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +nodemcuv2.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +nodemcuv2.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +nodemcuv2.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +nodemcuv2.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +nodemcuv2.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +nodemcuv2.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +nodemcuv2.menu.Binaries.Off=Off +nodemcuv2.menu.Binaries.Off.build.Binaries=0 +nodemcuv2.menu.Binaries.Binaries=Export (.bin & .bin.signed) +nodemcuv2.menu.Binaries.Binaries.build.Binaries=1 +nodemcuv2.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +nodemcuv2.menu.Binaries.PackedBinaries.build.Binaries=2 nodemcuv2.menu.xtal.80=80 MHz nodemcuv2.menu.xtal.80.build.f_cpu=80000000L nodemcuv2.menu.xtal.160=160 MHz @@ -5787,6 +6157,22 @@ modwifi.build.core=esp8266 modwifi.build.spiffs_pagesize=256 modwifi.build.debug_port= modwifi.build.debug_level= +modwifi.menu.Filesystem.Off=Off +modwifi.menu.Filesystem.Off.build.Filesystem=0 +modwifi.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +modwifi.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +modwifi.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +modwifi.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +modwifi.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +modwifi.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +modwifi.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +modwifi.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +modwifi.menu.Binaries.Off=Off +modwifi.menu.Binaries.Off.build.Binaries=0 +modwifi.menu.Binaries.Binaries=Export (.bin & .bin.signed) +modwifi.menu.Binaries.Binaries.build.Binaries=1 +modwifi.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +modwifi.menu.Binaries.PackedBinaries.build.Binaries=2 modwifi.menu.xtal.80=80 MHz modwifi.menu.xtal.80.build.f_cpu=80000000L modwifi.menu.xtal.160=160 MHz @@ -6022,6 +6408,22 @@ phoenix_v1.build.core=esp8266 phoenix_v1.build.spiffs_pagesize=256 phoenix_v1.build.debug_port= phoenix_v1.build.debug_level= +phoenix_v1.menu.Filesystem.Off=Off +phoenix_v1.menu.Filesystem.Off.build.Filesystem=0 +phoenix_v1.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +phoenix_v1.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +phoenix_v1.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +phoenix_v1.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +phoenix_v1.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +phoenix_v1.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +phoenix_v1.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +phoenix_v1.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +phoenix_v1.menu.Binaries.Off=Off +phoenix_v1.menu.Binaries.Off.build.Binaries=0 +phoenix_v1.menu.Binaries.Binaries=Export (.bin & .bin.signed) +phoenix_v1.menu.Binaries.Binaries.build.Binaries=1 +phoenix_v1.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +phoenix_v1.menu.Binaries.PackedBinaries.build.Binaries=2 phoenix_v1.menu.xtal.80=80 MHz phoenix_v1.menu.xtal.80.build.f_cpu=80000000L phoenix_v1.menu.xtal.160=160 MHz @@ -6240,6 +6642,22 @@ phoenix_v2.build.core=esp8266 phoenix_v2.build.spiffs_pagesize=256 phoenix_v2.build.debug_port= phoenix_v2.build.debug_level= +phoenix_v2.menu.Filesystem.Off=Off +phoenix_v2.menu.Filesystem.Off.build.Filesystem=0 +phoenix_v2.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +phoenix_v2.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +phoenix_v2.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +phoenix_v2.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +phoenix_v2.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +phoenix_v2.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +phoenix_v2.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +phoenix_v2.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +phoenix_v2.menu.Binaries.Off=Off +phoenix_v2.menu.Binaries.Off.build.Binaries=0 +phoenix_v2.menu.Binaries.Binaries=Export (.bin & .bin.signed) +phoenix_v2.menu.Binaries.Binaries.build.Binaries=1 +phoenix_v2.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +phoenix_v2.menu.Binaries.PackedBinaries.build.Binaries=2 phoenix_v2.menu.xtal.80=80 MHz phoenix_v2.menu.xtal.80.build.f_cpu=80000000L phoenix_v2.menu.xtal.160=160 MHz @@ -6458,6 +6876,22 @@ eduinowifi.build.core=esp8266 eduinowifi.build.spiffs_pagesize=256 eduinowifi.build.debug_port= eduinowifi.build.debug_level= +eduinowifi.menu.Filesystem.Off=Off +eduinowifi.menu.Filesystem.Off.build.Filesystem=0 +eduinowifi.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +eduinowifi.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +eduinowifi.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +eduinowifi.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +eduinowifi.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +eduinowifi.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +eduinowifi.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +eduinowifi.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +eduinowifi.menu.Binaries.Off=Off +eduinowifi.menu.Binaries.Off.build.Binaries=0 +eduinowifi.menu.Binaries.Binaries=Export (.bin & .bin.signed) +eduinowifi.menu.Binaries.Binaries.build.Binaries=1 +eduinowifi.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +eduinowifi.menu.Binaries.PackedBinaries.build.Binaries=2 eduinowifi.menu.xtal.80=80 MHz eduinowifi.menu.xtal.80.build.f_cpu=80000000L eduinowifi.menu.xtal.160=160 MHz @@ -6673,6 +7107,22 @@ wiolink.build.core=esp8266 wiolink.build.spiffs_pagesize=256 wiolink.build.debug_port= wiolink.build.debug_level= +wiolink.menu.Filesystem.Off=Off +wiolink.menu.Filesystem.Off.build.Filesystem=0 +wiolink.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +wiolink.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +wiolink.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +wiolink.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +wiolink.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +wiolink.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +wiolink.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +wiolink.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +wiolink.menu.Binaries.Off=Off +wiolink.menu.Binaries.Off.build.Binaries=0 +wiolink.menu.Binaries.Binaries=Export (.bin & .bin.signed) +wiolink.menu.Binaries.Binaries.build.Binaries=1 +wiolink.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +wiolink.menu.Binaries.PackedBinaries.build.Binaries=2 wiolink.menu.xtal.80=80 MHz wiolink.menu.xtal.80.build.f_cpu=80000000L wiolink.menu.xtal.160=160 MHz @@ -6888,6 +7338,22 @@ blynk.build.core=esp8266 blynk.build.spiffs_pagesize=256 blynk.build.debug_port= blynk.build.debug_level= +blynk.menu.Filesystem.Off=Off +blynk.menu.Filesystem.Off.build.Filesystem=0 +blynk.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +blynk.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +blynk.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +blynk.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +blynk.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +blynk.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +blynk.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +blynk.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +blynk.menu.Binaries.Off=Off +blynk.menu.Binaries.Off.build.Binaries=0 +blynk.menu.Binaries.Binaries=Export (.bin & .bin.signed) +blynk.menu.Binaries.Binaries.build.Binaries=1 +blynk.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +blynk.menu.Binaries.PackedBinaries.build.Binaries=2 blynk.menu.xtal.80=80 MHz blynk.menu.xtal.80.build.f_cpu=80000000L blynk.menu.xtal.160=160 MHz @@ -7103,6 +7569,22 @@ thing.build.core=esp8266 thing.build.spiffs_pagesize=256 thing.build.debug_port= thing.build.debug_level= +thing.menu.Filesystem.Off=Off +thing.menu.Filesystem.Off.build.Filesystem=0 +thing.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +thing.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +thing.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +thing.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +thing.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +thing.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +thing.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +thing.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +thing.menu.Binaries.Off=Off +thing.menu.Binaries.Off.build.Binaries=0 +thing.menu.Binaries.Binaries=Export (.bin & .bin.signed) +thing.menu.Binaries.Binaries.build.Binaries=1 +thing.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +thing.menu.Binaries.PackedBinaries.build.Binaries=2 thing.menu.xtal.80=80 MHz thing.menu.xtal.80.build.f_cpu=80000000L thing.menu.xtal.160=160 MHz @@ -7318,6 +7800,22 @@ thingdev.build.core=esp8266 thingdev.build.spiffs_pagesize=256 thingdev.build.debug_port= thingdev.build.debug_level= +thingdev.menu.Filesystem.Off=Off +thingdev.menu.Filesystem.Off.build.Filesystem=0 +thingdev.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +thingdev.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +thingdev.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +thingdev.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +thingdev.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +thingdev.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +thingdev.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +thingdev.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +thingdev.menu.Binaries.Off=Off +thingdev.menu.Binaries.Off.build.Binaries=0 +thingdev.menu.Binaries.Binaries=Export (.bin & .bin.signed) +thingdev.menu.Binaries.Binaries.build.Binaries=1 +thingdev.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +thingdev.menu.Binaries.PackedBinaries.build.Binaries=2 thingdev.menu.xtal.80=80 MHz thingdev.menu.xtal.80.build.f_cpu=80000000L thingdev.menu.xtal.160=160 MHz @@ -7533,6 +8031,22 @@ esp210.build.variant=generic esp210.build.spiffs_pagesize=256 esp210.build.debug_port= esp210.build.debug_level= +esp210.menu.Filesystem.Off=Off +esp210.menu.Filesystem.Off.build.Filesystem=0 +esp210.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +esp210.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +esp210.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +esp210.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +esp210.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +esp210.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +esp210.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +esp210.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +esp210.menu.Binaries.Off=Off +esp210.menu.Binaries.Off.build.Binaries=0 +esp210.menu.Binaries.Binaries=Export (.bin & .bin.signed) +esp210.menu.Binaries.Binaries.build.Binaries=1 +esp210.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +esp210.menu.Binaries.PackedBinaries.build.Binaries=2 esp210.menu.xtal.80=80 MHz esp210.menu.xtal.80.build.f_cpu=80000000L esp210.menu.xtal.160=160 MHz @@ -7748,6 +8262,22 @@ espinotee.build.core=esp8266 espinotee.build.spiffs_pagesize=256 espinotee.build.debug_port= espinotee.build.debug_level= +espinotee.menu.Filesystem.Off=Off +espinotee.menu.Filesystem.Off.build.Filesystem=0 +espinotee.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +espinotee.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +espinotee.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +espinotee.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +espinotee.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +espinotee.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +espinotee.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +espinotee.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +espinotee.menu.Binaries.Off=Off +espinotee.menu.Binaries.Off.build.Binaries=0 +espinotee.menu.Binaries.Binaries=Export (.bin & .bin.signed) +espinotee.menu.Binaries.Binaries.build.Binaries=1 +espinotee.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +espinotee.menu.Binaries.PackedBinaries.build.Binaries=2 espinotee.menu.xtal.80=80 MHz espinotee.menu.xtal.80.build.f_cpu=80000000L espinotee.menu.xtal.160=160 MHz @@ -7963,6 +8493,22 @@ wifi_kit_8.build.core=esp8266 wifi_kit_8.build.spiffs_pagesize=256 wifi_kit_8.build.debug_port= wifi_kit_8.build.debug_level= +wifi_kit_8.menu.Filesystem.Off=Off +wifi_kit_8.menu.Filesystem.Off.build.Filesystem=0 +wifi_kit_8.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +wifi_kit_8.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +wifi_kit_8.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +wifi_kit_8.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +wifi_kit_8.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +wifi_kit_8.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +wifi_kit_8.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +wifi_kit_8.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +wifi_kit_8.menu.Binaries.Off=Off +wifi_kit_8.menu.Binaries.Off.build.Binaries=0 +wifi_kit_8.menu.Binaries.Binaries=Export (.bin & .bin.signed) +wifi_kit_8.menu.Binaries.Binaries.build.Binaries=1 +wifi_kit_8.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +wifi_kit_8.menu.Binaries.PackedBinaries.build.Binaries=2 wifi_kit_8.menu.xtal.80=80 MHz wifi_kit_8.menu.xtal.80.build.f_cpu=80000000L wifi_kit_8.menu.xtal.160=160 MHz @@ -8178,6 +8724,22 @@ wifiduino.build.core=esp8266 wifiduino.build.spiffs_pagesize=256 wifiduino.build.debug_port= wifiduino.build.debug_level= +wifiduino.menu.Filesystem.Off=Off +wifiduino.menu.Filesystem.Off.build.Filesystem=0 +wifiduino.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +wifiduino.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +wifiduino.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +wifiduino.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +wifiduino.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +wifiduino.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +wifiduino.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +wifiduino.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +wifiduino.menu.Binaries.Off=Off +wifiduino.menu.Binaries.Off.build.Binaries=0 +wifiduino.menu.Binaries.Binaries=Export (.bin & .bin.signed) +wifiduino.menu.Binaries.Binaries.build.Binaries=1 +wifiduino.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +wifiduino.menu.Binaries.PackedBinaries.build.Binaries=2 wifiduino.menu.xtal.80=80 MHz wifiduino.menu.xtal.80.build.f_cpu=80000000L wifiduino.menu.xtal.160=160 MHz @@ -8410,6 +8972,22 @@ wifinfo.build.core=esp8266 wifinfo.build.spiffs_pagesize=256 wifinfo.build.debug_port= wifinfo.build.debug_level= +wifinfo.menu.Filesystem.Off=Off +wifinfo.menu.Filesystem.Off.build.Filesystem=0 +wifinfo.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +wifinfo.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +wifinfo.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +wifinfo.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +wifinfo.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +wifinfo.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +wifinfo.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +wifinfo.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +wifinfo.menu.Binaries.Off=Off +wifinfo.menu.Binaries.Off.build.Binaries=0 +wifinfo.menu.Binaries.Binaries=Export (.bin & .bin.signed) +wifinfo.menu.Binaries.Binaries.build.Binaries=1 +wifinfo.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +wifinfo.menu.Binaries.PackedBinaries.build.Binaries=2 wifinfo.menu.xtal.80=80 MHz wifinfo.menu.xtal.80.build.f_cpu=80000000L wifinfo.menu.xtal.160=160 MHz @@ -8672,6 +9250,22 @@ cw01.build.core=esp8266 cw01.build.spiffs_pagesize=256 cw01.build.debug_port= cw01.build.debug_level= +cw01.menu.Filesystem.Off=Off +cw01.menu.Filesystem.Off.build.Filesystem=0 +cw01.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload +cw01.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 +cw01.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only +cw01.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 +cw01.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload +cw01.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 +cw01.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only +cw01.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 +cw01.menu.Binaries.Off=Off +cw01.menu.Binaries.Off.build.Binaries=0 +cw01.menu.Binaries.Binaries=Export (.bin & .bin.signed) +cw01.menu.Binaries.Binaries.build.Binaries=1 +cw01.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too +cw01.menu.Binaries.PackedBinaries.build.Binaries=2 cw01.menu.xtal.80=80 MHz cw01.menu.xtal.80.build.f_cpu=80000000L cw01.menu.xtal.160=160 MHz diff --git a/libraries/SoftwareSerial b/libraries/SoftwareSerial index 6df7b6983a..566809f3de 160000 --- a/libraries/SoftwareSerial +++ b/libraries/SoftwareSerial @@ -1 +1 @@ -Subproject commit 6df7b6983a462acc743e5ff06426b580ff1c732d +Subproject commit 566809f3de9de551ce1f2dedd3f7417c8b2b7e79 diff --git a/platform.txt b/platform.txt index 78ea1e28e4..bff7be2490 100644 --- a/platform.txt +++ b/platform.txt @@ -20,6 +20,7 @@ runtime.tools.makecorever={runtime.platform.path}/tools/makecorever.py runtime.tools.mkdir={runtime.platform.path}/tools/mkdir.py runtime.tools.cp={runtime.platform.path}/tools/cp.py runtime.tools.eboot={runtime.platform.path}/bootloaders/eboot/eboot.elf +runtime.tools.postbuild={runtime.platform.path}/tools/postbuild.py compiler.warning_flags=-w -Werror=return-type compiler.warning_flags.none=-w -Werror=return-type @@ -129,11 +130,14 @@ recipe.objcopy.hex.1.pattern="{runtime.tools.python3.path}/python3" -I "{runtime recipe.objcopy.hex.2.pattern="{runtime.tools.python3.path}/python3" -I "{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" --legacy "{build.path}/{build.project_name}.bin.legacy_sig" recipe.objcopy.hex.3.pattern="{runtime.tools.python3.path}/python3" -I "{runtime.tools.sizes}" --elf "{build.path}/{build.project_name}.elf" --path "{runtime.tools.xtensa-lx106-elf-gcc.path}/bin" --mmu "{build.mmuflags}" +# Post-Build: Handle new Menu-Enties: Filesystem & Binaries +recipe.hooks.objcopy.postobjcopy.1.pattern="{runtime.tools.python3.path}/python3" -I "{runtime.tools.postbuild}" -fi "{build.Filesystem}" -bi "{build.Binaries}" -na "{build.project_name}" -bp "{build.path}" -so "{build.source.path}" -va "{build.variant}" -ss "{build.spiffs_start}" -se "{build.spiffs_end}" -sp "{build.spiffs_pagesize}" -sl "{build.spiffs_blocksize}" + ## Save hex recipe.output.tmp_file.1={build.project_name}.bin -recipe.output.save_file.1={build.project_name}.{build.variant}.bin +recipe.output.save_file.1=bin/{build.variant}/{build.project_name}.bin recipe.output.tmp_file.2={build.project_name}.bin.signed -recipe.output.save_file.2={build.project_name}.{build.variant}.bin.signed +recipe.output.save_file.2=bin/{build.variant}/{build.project_name}.bin.signed ## Compute size recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf" @@ -157,11 +161,11 @@ tools.esptool.upload.protocol=esp tools.esptool.upload.params.verbose= 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 support upload.1.pattern/upload.3.pattern -tools.esptool.upload.pattern="{cmd}" -I "{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}" -I "{runtime.platform.path}/tools/espota.py" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin" +# Old behaviour (without integrated handling of filesystem & gzipd Binaries) can be (re)enabled by commenting in/out the following 2x2 entries +#tools.esptool.upload.pattern="{cmd}" -I "{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.pattern="{cmd}" -I "{runtime.platform.path}/tools/uploadGn.py" -fi "{build.Filesystem}" --port "{serial.port}" --baud "{upload.speed}" {upload.resetmethod} --sk 0x0 "{build.path}/{build.project_name}.bin" --fs {build.spiffs_start} "{build.path}/{build.project_name}" {upload.erase_cmd} "{upload.verbose}" +#tools.esptool.upload.network_pattern="{network_cmd}" -I "{runtime.platform.path}/tools/espota.py" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin" +tools.esptool.upload.network_pattern="{network_cmd}" -I "{runtime.platform.path}/tools/netUploadGn.py" -fi "{build.Filesystem}" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" --sk "{build.path}/{build.project_name}.bin" --fs "{build.path}/{build.project_name}" tools.mkspiffs.cmd=mkspiffs tools.mkspiffs.cmd.windows=mkspiffs.exe diff --git a/tools/boards.txt.py b/tools/boards.txt.py index 673f8d8068..d62356f10b 100755 --- a/tools/boards.txt.py +++ b/tools/boards.txt.py @@ -1032,6 +1032,24 @@ ( '.build.spiffs_pagesize', '256' ), ( '.build.debug_port', '' ), ( '.build.debug_level', '' ), + + ( '.menu.Filesystem.Off', 'Off' ), + ( '.menu.Filesystem.Off.build.Filesystem', '0' ), + ( '.menu.Filesystem.LitteFsCreateUpload', 'LitteFs: Create & Upload' ), + ( '.menu.Filesystem.LitteFsCreateUpload.build.Filesystem', '1' ), + ( '.menu.Filesystem.LitteFsCreateExport', 'LitteFs: Create only' ), + ( '.menu.Filesystem.LitteFsCreateExport.build.Filesystem', '2' ), + ( '.menu.Filesystem.SPIFFSCreateUpload', 'SPIFFS: Create & Upload' ), + ( '.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem', '3' ), + ( '.menu.Filesystem.SPIFFSCreateExport', 'SPIFFS: Create only' ), + ( '.menu.Filesystem.SPIFFSCreateExport.build.Filesystem', '4' ), + + ( '.menu.Binaries.Off', 'Off' ), + ( '.menu.Binaries.Off.build.Binaries', '0' ), + ( '.menu.Binaries.Binaries', 'Export (.bin & .bin.signed)' ), + ( '.menu.Binaries.Binaries.build.Binaries', '1' ), + ( '.menu.Binaries.PackedBinaries', 'Create & Export gzipped Binaries too' ), + ( '.menu.Binaries.PackedBinaries.build.Binaries', '2' ), ]), ####################### @@ -1658,6 +1676,8 @@ def all_boards (): print('menu.ssl=SSL Support') print('menu.mmu=MMU') print('menu.non32xfer=Non-32-Bit Access') + print('menu.Filesystem=Filesystem') + print('menu.Binaries=Binaries') print('') missingboards = [] diff --git a/tools/netUploadGn.py b/tools/netUploadGn.py new file mode 100755 index 0000000000..1138a337bf --- /dev/null +++ b/tools/netUploadGn.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 + +# Network-Upload-Wrapper +# 2021-08-08: G.N.: Written to support (optional) uploading of sketch & filesystem in one step + +import os +import sys +ToolsDir = os.path.dirname( os.path.realpath( __file__ ) ).replace( '\\', '/' ) + "/" # convert to UNIX format +try: + sys.path.insert( 0, ToolsDir ) # ToolsDir + from utillities import * # If this fails, we can't continue and will bomb below +except Exception as e: + sys.stderr.write( '\nImport of utillities.py failed.\n...Is it not next to this %s tool?\n...Exception was: %s\n' % ( __file__, e ) ) + sys.exit( 2 ) + +try: + sys.path.insert( 0, ToolsDir ) # Add this dir to search path + import espota # If this fails, we can't continue and will bomb below +except Exception: + Msg( '\nespota not found next to this netUploadGn.py tool.' ) + sys.exit( 2 ) + +#Args: (original) +# As defined in 'platform.txt' for 'tools.esptool.upload.network_pattern' +# -i "{serial.port}" +# -p "{network.port}" +# "--auth={network.password}" +# -f "{build.path}/{build.project_name}.bin" + +#Args: (new) +# As defined in 'platform.txt' for 'tools.esptool.upload.network_pattern' +# | possible values/meaning +# | | +# -fi "{build.Filesystem}" 0-4 +# -i "{serial.port}" +# -p "{network.port}" +# "--auth={network.password}" +# --sk "{build.path}/{build.project_name}.bin" +# --fs "{build.path}/{build.project_name}" + +def parse_args( argsIn ): + parser = argparse.ArgumentParser( description = 'Network-Upload-Wrapper for Arduino esp8266' ) + parser.add_argument( '-fi', '--Filesystem', type = int, default = 0, help = '0: Off, 1: LitteFs: Create & Upload, 2: LitteFs: Create only, 3: SPIFFS: Create & Upload, 4: SPIFFS: Create only' ) + parser.add_argument( '-i', '--port', type = str, required = True, help = 'path to serial device' ) + parser.add_argument( '-p', '--netPort', type = str, required = True, help = 'network port' ) + parser.add_argument( '--auth', type = str, help = 'network password' ) + parser.add_argument( '--sk', type = str, required = True, help = 'path_path_to_sketch_binary' ) + parser.add_argument( '--fs', type = str, help = 'path_to_fs_binary_without_ext' ) + global Args + Args = parser.parse_args( argsIn ) + +def main( argsIn = None ): + """ + Main function for netUploadGn + + argsIn - Optional override for default arguments parsing (that uses sys.argv), can be a list of custom arguments. + Arguments and their values need to be added as individual items to the list e.g. "-b 115200" thus becomes ['-b', '115200']. + """ + + parse_args( argsIn ) + + if not os.path.exists( Args.port ): + Msg( "Port: '%s', does not exist!\n...Upload aborted" % Args.port ) + sys.exit( 1 ) + + baseArgs = [ '-i', Args.port, '-p', Args.netPort, '--auth', Args.auth ] + + sketchArgs = baseArgs + [ '-f', Args.sk ] + + Msg( "Uploading Binaries..." ) + + #Debug( str( sketchArgs ) ) + esptool.main( sketchArgs ) + filesUploaded = [ Args.sk ] + + if Args.Filesystem == 1 or Args.Filesystem == 3: + fsArgs = baseArgs + [ '-s', '-f' ] + if Args.Filesystem == 1: + fsArgs = baseArgs + [ "%s.littlefs" % Args.fs ] + elif Args.Filesystem == 3: + fsArgs = baseArgs + [ "%s.spiffs" % Args.fs ] + + #Debug( str( fsArgs ) ) + esptool.main( fsArgs ) + filesUploaded += [ Args.fs ] + + Msg( '...files uploaded: %s' % ", ".join( filesUploaded ) ) + +def main_(): + try: + main() + except RuntimeError as e: + Msg( '\nA RuntimeError error occurred: %s' % e ) + sys.exit( 2 ) + +if __name__ == '__main__': + main_() + diff --git a/tools/postbuild.py b/tools/postbuild.py new file mode 100755 index 0000000000..0ce2a0ef82 --- /dev/null +++ b/tools/postbuild.py @@ -0,0 +1,201 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import os +import sys +import gzip +import shutil +ToolsDir = os.path.dirname( os.path.realpath( __file__ ) ).replace( '\\', '/' ) + "/" # convert to UNIX format +try: + sys.path.insert( 0, ToolsDir ) # ToolsDir + from utillities import * # If this fails, we can't continue and will bomb below +except Exception as e: + sys.stderr.write( '\nImport of utillities.py failed.\n...Is it not next to this %s tool?\n...Exception was: %s\n' % ( __file__, e ) ) + sys.exit( 2 ) + +def parse_args( argsIn ): + parser = argparse.ArgumentParser( description = 'PostBuild for ESP8288' ) + parser.add_argument( '-fi', '--Filesystem', type = int, default = 0, help = '0: Off, 1: LitteFs: Create & Upload, 2: LitteFs: Create only, 3: SPIFFS: Create & Upload, 4: SPIFFS: Create only' ) + parser.add_argument( '-bi', '--Binaries', type = int, default = 0, help = '0: Off, 1: Export (.bin & .bin.signed), 2: Create & Export gzipped Binaries too' ) + parser.add_argument( '-na', '--name', type = str, required = True, help = 'Name of sketch (without extension)' ) + parser.add_argument( '-bp', '--buildPath', type = str, required = True, help = 'Path to temporary dir where sketch was build' ) + parser.add_argument( '-so', '--source', type = str, required = True, help = 'Path to sketch' ) + parser.add_argument( '-va', '--variant', type = str, required = True, help = 'Name of board' ) + parser.add_argument( '-ss', '--spiffs_start', type = str, help = 'build.spiffs_start' ) + parser.add_argument( '-se', '--spiffs_end', type = str, help = 'build.spiffs_end' ) + parser.add_argument( '-sp', '--spiffs_pagesize', type = str, default = '256', help = 'build.spiffs_pagesize' ) + parser.add_argument( '-sl', '--spiffs_blocksize', type = str, default = '4096', help = 'build.spiffs_blocksize' ) + global Args + Args = parser.parse_args( argsIn ) + +def CountFilesInDir( dataDir ): + fileCount = 0 + for root, dir, files in os.walk( dataDir ): + for file in files: + #!? Why Ony count files without '.' ?? + if file[ 0 ] != ".": + fileCount += 1 + return fileCount + +def CreateGzFile( dir, name ): + """ gzip the file 'dir/name' and save the compressed file to 'dir/name.gz'. Return name of generated file as list. """ + outName = "%s.gz" % name + outPath = os.path.join( dir, outName ) + inPath = os.path.join( dir, name ) + with open( inPath, 'rb' ) as inFile: + with gzip.open( outPath, 'wb' ) as outFile: + shutil.copyfileobj( inFile, outFile ) + if not os.path.exists( outPath ): + raise FatalError( "gzip: file '%s' not created" % outName ) + return [ outName ] + +def CreateSignedFile( dir, name ): + """ Signs the file 'dir/name' with the private key (defined by global var 'SigningPrivKeyPath'). + Save the signed binary to 'dir/name.signed'. Return name of generated file as list. """ + inFilePath = os.path.join( dir, name ) + try: + with open( inFilePath, "rb" ) as b: + inFileData = b.read() + signcmd = [ 'openssl', 'dgst', '-sha256', '-sign', SigningPrivKeyPath ] + proc = subprocess.Popen( signcmd, stdout = subprocess.PIPE, stdin = subprocess.PIPE, stderr = subprocess.PIPE ) + signout, signerr = proc.communicate( input = inFileData ) + if proc.returncode: + raise FatalError( "OpenSSL returned an error signing the binary: %d\nSTDERR: %d" % ( proc.returncode, signerr ) ) + outName = "%s.signed" % name + with open( os.path.join( dir, outName ), "wb" ) as out: + out.write( inFileData ) + out.write( signout ) + out.write( b'\x00\x01\x00\x00' ) + return [ outName ] + except Exception as e: + raise FatalError( "Exception while signing '%s': %s" % ( name, e ) ) + return [] + +def CreateFs( fsName, mkFsName ): + """ Creates the given fs from all files inside subdir 'data' of the sketch. + fsName = "littlefs" "spiffs" used for naming the generated binary. + mkFsName = "mklittlefs" | "mkspiffs" the name of the programm that generates the fs """ + mkFsPath = Which( mkFsName, os.path.join( ToolsDir, mkFsName ) ) + res = [] + dataDir = "%s/data" % ( Args.source ) + if len( Args.spiffs_start ) == 0 or len( Args.spiffs_end ) == 0: + raise ProcessError( "CreateFs: %s Not Defined for this board" % fsName ) + if mkFsPath is None or not os.path.exists( mkFsPath ): + raise ProcessError( "CreateFs: %s dir does not exist: %s" % ( mkFsName, mkFsPath ) ) + if not os.path.exists( dataDir ): + raise ProcessError( "CreateFs: data dir does not exist: %s" % dataDir ) + if not os.path.isdir( dataDir ): + raise ProcessError( "CreateFs: data dir is not a directory: %s" % dataDir ) + FilesInDir = CountFilesInDir( dataDir ) + if FilesInDir == 0: + if not ConfirmDialog( "%s Create" % fsName, "No files have been found in your data folder!\nAre you sure you want to create an empty %s image?" % fsName ): + raise ProcessError( "Canceled by user" ) + os.makedirs( DstDir, exist_ok = True ) + imageName = "%s.%s" % ( Args.name, fsName ) + imagePath = os.path.join( Args.source, "bin", Args.variant, imageName ) + cmd = "\"%s\" -c \"%s\" -p %s -b %s -s %d \"%s\"" % ( mkFsPath, dataDir, Args.spiffs_pagesize, Args.spiffs_blocksize, IntValFromStr( Args.spiffs_end ) - IntValFromStr( Args.spiffs_start ), imagePath ) + if os.system( cmd ) != 0 or not os.path.exists( imagePath ): + raise FatalError( "%s: Creating failed" % fsName ) + res += [ imageName ] + + # fs is created inside subdir "bin/{build.variant}/" of sketch folder. + # That means there is no need for doing an (extra) "export". + # But unforunally during "upload" the variable {build.source.path} was not set. + # So, for supporting upload of fs, we copy the generated file back into {build.path} + shutil.copyfile( imagePath, "./%s" % imageName ) + + signing = Signing and os.path.exists( os.path.abspath( Args.name + ".bin.signed" ) ) + if signing: + res += CreateSignedFile( DstDir, imageName ) + if Args.Binaries == 2: + res += CreateGzFile( DstDir, imageName ) + if signing: + res += CreateSignedFile( DstDir, "%s.%s.gz" % ( Args.name, fsName ) ) + return res + +def ProcessFilesystem_(): + if Args.spiffs_start is None or Args.spiffs_end is None: + raise ProcessError( "'spiffs_start' and/or 'spiffs_end' missing" ) + if Args.Filesystem == 1 or Args.Filesystem == 2: + return CreateFs( "littlefs", "mklittlefs" ) + elif Args.Filesystem == 3 or Args.Filesystem == 4: + return CreateFs( "spiffs", "mkspiffs" ) + +def ProcessBinaries_(): + res = [] + os.makedirs( DstDir, exist_ok = True ) + # Copy Binaries + res += CopyToDir( Args.name, "bin", DstDir ) + res += CopyToDir( Args.name, "bin.signed", DstDir ) + if Args.Binaries == 2: + # Create & Export gzipped Binaries too + res += CreateGzFile( DstDir, "%s.bin" % Args.name ) + if os.path.exists( os.path.abspath( os.path.join( DstDir, "%s.bin.signed" % Args.name ) ) ): + res += CreateSignedFile( DstDir, "%s.bin.gz" % Args.name ) + return res + +def ProcessFilesystem(): + Msg( "Creating Filesystem..." ) + try: + filesCreated = ProcessFilesystem_() + Msg( '...files generated: %s' % ", ".join( filesCreated ) ) + except ProcessError as e: + Msg( '...aborted: %s' % e ) + +def ProcessBinaries(): + Msg( "Exporting Binaries..." ) + filesExported = ProcessBinaries_() + Msg( '...files exported: %s' % ", ".join( filesExported ) ) + +def main( argsIn = None ): + """ + Main function for postbuild + + argsIn - Optional override for default arguments parsing (that uses sys.argv), can be a list of custom arguments. + Arguments and their values need to be added as individual items to the list e.g. "-b 115200" thus becomes ['-b', '115200']. + """ + + #Debug( "Python-Path: %s" % sys.executable ) + parse_args( argsIn ) + #Debug( "Args: %s" % ", "join( sys.argv[ 1: ] ) ) + + #!! For unknown reason using/concatinig Args.buildPath with "/" (or enything else) will result in an empthy string ??? + #if You uncomment the following two lines You will see something like: + # Args.buildPath: /buildPath/arduino_build_572904. + # Args.buildPath/: . + #Debug( "Args.buildPath: %s." % Args.buildPath ) + #Debug( "Args.buildPath/: %s/." % Args.buildPath + '/' ) + + # Workaround: cd to the build/temp path + cwd = os.getcwd() + os.chdir( Args.buildPath ) + + #! Even this will not give the correct path ! + #Debug( "abspath: %s" % os.path.abspath( "./" ) ) + #Debug( "abspath2: %s" % os.path.abspath( "./" ) + "/" ) + + global SigningPrivKeyPath, Signing, DstDir + try: + SigningPrivKeyPath = os.path.abspath( "%s/private.key" % Args.source ) + Signing = os.path.isfile( SigningPrivKeyPath ) + DstDir = os.path.join( Args.source, "bin", Args.variant ) + if Args.Filesystem != 0: + ProcessFilesystem() + if Args.Binaries != 0: + ProcessBinaries() + finally: + # restore working dir + os.chdir( cwd ) + +def main_(): + try: + main() + except FatalError as e: + Msg( '\nA fatal error occurred: %s\n' % e ) + sys.exit( 1 ) + except RuntimeError as e: + Msg( '\nA RuntimeError error occurred: %s' % e ) + sys.exit( 2 ) + +if __name__ == '__main__': + main_() diff --git a/tools/uploadGn.py b/tools/uploadGn.py new file mode 100755 index 0000000000..11920f2a2e --- /dev/null +++ b/tools/uploadGn.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python3 + +# New Upload-Wrapper for Arduino esp8266 +# 2021-08-08: G.N.: Totally rewritten to support (optional) uploading of sketch & filesystem in one step + +import os +import sys +ToolsDir = os.path.dirname( os.path.realpath( __file__ ) ).replace( '\\', '/' ) + "/" # convert to UNIX format +try: + sys.path.insert( 0, ToolsDir ) # ToolsDir + from utillities import * # If this fails, we can't continue and will bomb below +except Exception as e: + sys.stderr.write( '\nImport of utillities.py failed.\n...Is it not next to this %s tool?\n...Exception was: %s\n' % ( __file__, e ) ) + sys.exit( 2 ) +import tempfile +from pathlib import Path + +try: + sys.path.insert( 0, ToolsDir + "pyserial" ) # Add pyserial dir to search path + sys.path.insert( 0, ToolsDir + "esptool" ) # Add esptool dir to search path + import esptool # If this fails, we can't continue and will bomb below +except Exception: + Msg( '\npyserial or esptool directories not found next to this uploadGn.py tool.' ) + sys.exit( 2 ) + +#Args: (original) +# As defined in 'platform.txt' for 'tools.esptool.upload.pattern' possible values (from boards.txt[.py]) +# | | +# --chip esp8266 +# --port "{serial.port}" e.g.: /dev/ttyUSB0 +# --baud "{upload.speed}" e.g.: 115200 +# "{upload.verbose}" { '' | '--trace' } +# {upload.erase_cmd} { '' | 'erase_region "{build.rfcal_addr}" 0x4000' | 'erase_flash' } +# {upload.resetmethod} --before { default_reset | no_reset | no_reset_no_sync } --after { hard_reset | soft_reset } +# write_flash 0x0 "{build.path}/{build.project_name}.bin" write_flash + +#Args: (new) +# As defined in 'platform.txt' for 'tools.esptool.upload.pattern' possible values +# | | +# -fi "{build.Filesystem}" 0-4 +# --port "{serial.port}" e.g.: /dev/ttyUSB0 +# --baud "{upload.speed}" e.g.: 115200 +# {upload.resetmethod} --before { default_reset | no_reset | no_reset_no_sync } --after { hard_reset | soft_reset } +# --sk 0x0 "{build.path}/{build.project_name}.bin" +# --fs {build.spiffs_start} "{build.path}/{build.project_name}" +# {upload.erase_cmd} { '' | 'erase_region "{build.rfcal_addr}" 0x4000' | 'erase_flash' } +# "{upload.verbose}" { '' | '--trace' } +# Remark: +# {upload.erase_cmd} "{upload.verbose}" should be the last two parameters given in 'platform.txt' + +def parse_args( argsIn ): + parser = argparse.ArgumentParser( description = 'Upload-Wrapper for Arduino esp8266' ) + parser.add_argument( '-fi', '--Filesystem', type = int, default = 0, help = '0: Off, 1: LitteFs: Create & Upload, 2: LitteFs: Create only, 3: SPIFFS: Create & Upload, 4: SPIFFS: Create only' ) + parser.add_argument( '--port', type = str, required = True, help = 'path to serial device' ) + parser.add_argument( '--baud', type = str, required = True, help = 'baudrate' ) + parser.add_argument( '--before', type = str, required = True, help = 'before (default_reset/no_reset/no_reset_no_sync)' ) + parser.add_argument( '--after', type = str, required = True, help = 'after (hard_reset/soft_reset)' ) + parser.add_argument( '--sk', type = str, nargs=2, help = 'adr path_path_to_sketch_binary' ) + parser.add_argument( '--fs', type = str, nargs=2, help = 'adr path_path_to_fs_binary_without_ext' ) + parser.add_argument( 'erase_cmd', type = str, nargs='*', help = 'erase_cmd' ) + parser.add_argument( '--trace', action='store_true', help = 'verbose' ) + global Args + Args = parser.parse_args( argsIn ) + + +def main( argsIn = None ): + """ + Main function for uploadGn + + argsIn - Optional override for default arguments parsing (that uses sys.argv), can be a list of custom arguments. + Arguments and their values need to be added as individual items to the list e.g. "-b 115200" thus becomes ['-b', '115200']. + """ + + parse_args( argsIn ) + + if not os.path.exists( Args.port ): + Msg( "Port: '%s', does not exist!\n...Upload aborted" % Args.port ) + sys.exit( 1 ) + + # 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 Args.baud == "921600": + Args.baud = "460800" + esptoolArgs = [ '--chip', 'esp8266', '--port', Args.port, '--baud', Args.baud, '--before', Args.before, '--after', Args.after ] + if Args.trace: + esptoolArgs += [ '--trace' ] + esptoolArgs += [ 'write_flash' ] + + if len( Args.erase_cmd ) and Args.erase_cmd[ 0 ] == "erase_flash": + esptoolArgs += [ '--erase-all' ] + esptoolArgs += [ '--flash_size', 'detect', Args.sk[ 0 ], Args.sk[ 1 ] ] + + EraseFilePath = '' + try: + if len( Args.erase_cmd ) and Args.erase_cmd[ 0 ] == "erase_region": + # Generate temporary empty (0xff) file + f, EraseFilePath = tempfile.mkstemp() + os.write( f, bytearray( [ 255 ] * int( Args.erase_cmd[ 2 ], 0 ) ) ) + os.close( f ) + esptoolArgs += [ Args.erase_cmd[ 1 ], EraseFilePath ] + + filesUploaded = [ Path( Args.sk[ 1 ] ).name ] + if Args.Filesystem == 1: + esptoolArgs += [ Args.fs[ 0 ], "%s.littlefs" % Args.fs[ 1 ] ] + filesUploaded += [ Path( Args.fs[ 1 ] ).name ] + elif Args.Filesystem == 3: + esptoolArgs += [ Args.fs[ 0 ], "%s.spiffs" % Args.fs[ 1 ] ] + filesUploaded += [ Path( Args.fs[ 1 ] ).name ] + + Msg( "Uploading Binaries..." ) + #Debug( str( esptoolArgs ) ) + esptool.main( esptoolArgs ) + Msg( '...files uploaded: %s' % ", ".join( filesUploaded ) ) + finally: + if len( EraseFilePath ): + os.remove( EraseFilePath ) + +def main_(): + try: + main() + except RuntimeError as e: + Msg( '\nA RuntimeError error occurred: %s' % e ) + sys.exit( 2 ) + +if __name__ == '__main__': + main_() diff --git a/tools/utillities.py b/tools/utillities.py new file mode 100755 index 0000000000..75af7a1207 --- /dev/null +++ b/tools/utillities.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import os +import sys +import platform +import argparse +import shutil +import subprocess + +PyautoguiAvailable = True +try: + import pyautogui +except: + PyautoguiAvailable = False + + +class FatalError( Exception ): + def __init__( self, msg ): + super().__init__( msg ) + +class ProcessError( Exception ): + def __init__( self, msg ): + super().__init__( msg ) + +def Msg( txt ): + sys.stderr.write( txt + "\n" ) + +def Debug( txt ): + sys.stderr.write( txt + "\n" ) + +def Which_Chdir_( prg, dir ): + cwd = os.getcwd() + try: + os.chdir( dir ) + except: + return None + res = None + try: + res = shutil.which( "./%s" % prg ) + if res is not None: + res = os.path.abspath( os.path.join( os.getcwd(), prg ) ) + finally: + os.chdir( cwd ) + return res + +def Which( prg, dir = None ): + """ returns full path to executable 'prg'. + Takes care of OS, on Windows searches for .exe instead of . + if is given prefers prg inside this dir over others""" + if platform.system() == "Windows": + prg = "%s.exe" % prg + res = None + if dir is not None: + res = Which_Chdir_( prg, dir ) + if res is None: + res = shutil.which( prg ) + return res + +def CopyToDir( name, ext, dstDir ): + """ if file './name.ext' exist, copy it to 'dstDir/name.ext'. Return name of copied file as list. """ + fileName = "%s.%s" % ( name, ext ) + srcPath = os.path.abspath( fileName ) + if not os.path.exists( srcPath ): + return [] + shutil.copyfile( srcPath, os.path.join( dstDir, fileName ) ) + return [ fileName ] + +def IntValFromStr( strVal ): + """ Convert string into integer, can be used with decimal value '123' or hex '0xabc'. """ + return int( strVal.strip(), 0 ) + +def RemoveIno( path ): + """ Returns the given path with extension ".ino" removed (if exist) """ + if path[ -4: ] == ".ino": + path = name[ 0:-4 ] + return path + +def ConfirmDialog( title, text ): + try: + import tkinter + from tkinter import messagebox + except: + raise ProcessError( "tkinter not available.\nPlease install it with:\npip3 install tkinter\n" ) + rootWin = tkinter.Tk() # Create the object + rootWin.overrideredirect( 1 ) # Avoid it appearing and then disappearing quickly + #rootWin.iconbitmap("PythonIcon.ico") # Set an icon (this is optional - must be in a .ico format) + rootWin.withdraw() # Hide the window as we do not want to see this one + return messagebox.askyesno( title, text, parent = rootWin ) + From ea98d66c182463648f82838435b83cfda2cf86f9 Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Wed, 18 Aug 2021 16:11:37 +0200 Subject: [PATCH 14/19] Improved handling of "tkinter not awailable" --- tools/postbuild.py | 5 ++++- tools/utillities.py | 5 +++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tools/postbuild.py b/tools/postbuild.py index 0ce2a0ef82..49b5be581d 100755 --- a/tools/postbuild.py +++ b/tools/postbuild.py @@ -88,7 +88,10 @@ def CreateFs( fsName, mkFsName ): raise ProcessError( "CreateFs: data dir is not a directory: %s" % dataDir ) FilesInDir = CountFilesInDir( dataDir ) if FilesInDir == 0: - if not ConfirmDialog( "%s Create" % fsName, "No files have been found in your data folder!\nAre you sure you want to create an empty %s image?" % fsName ): + answer = ConfirmDialog( "%s Create" % fsName, "No files have been found in your data folder!\nAre you sure you want to create an empty %s image?" % fsName ) + if answer < 0: + raise ProcessError( "tkinter not available.\nCan't ask 'Are you sure you want to create an empty ... image?'\nPlease install it with:\npip3 install tkinter\n" ) + elif: raise ProcessError( "Canceled by user" ) os.makedirs( DstDir, exist_ok = True ) imageName = "%s.%s" % ( Args.name, fsName ) diff --git a/tools/utillities.py b/tools/utillities.py index 75af7a1207..7748d57c84 100755 --- a/tools/utillities.py +++ b/tools/utillities.py @@ -77,14 +77,15 @@ def RemoveIno( path ): return path def ConfirmDialog( title, text ): + """ return -1 if tkinter not installed, 0 if aswer was no, 1 if answer was yes """ try: import tkinter from tkinter import messagebox except: - raise ProcessError( "tkinter not available.\nPlease install it with:\npip3 install tkinter\n" ) + return -1 rootWin = tkinter.Tk() # Create the object rootWin.overrideredirect( 1 ) # Avoid it appearing and then disappearing quickly #rootWin.iconbitmap("PythonIcon.ico") # Set an icon (this is optional - must be in a .ico format) rootWin.withdraw() # Hide the window as we do not want to see this one - return messagebox.askyesno( title, text, parent = rootWin ) + return 1 if messagebox.askyesno( title, text, parent = rootWin ) else 0 From b827489bd8bde50342ea8cae7c2b111e70c0f520 Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Mon, 23 Aug 2021 16:22:07 +0200 Subject: [PATCH 15/19] Improved selection of actions to be performed Added description of changes to docu --- boards.txt | 1113 +++++++++++++++++++++++-------------------- doc/filesystem.rst | 51 +- platform.txt | 6 +- tools/boards.txt.py | 36 +- tools/postbuild.py | 46 +- tools/uploadGn.py | 46 +- tools/utillities.py | 25 +- 7 files changed, 746 insertions(+), 577 deletions(-) diff --git a/boards.txt b/boards.txt index bd30432834..f922d400cd 100644 --- a/boards.txt +++ b/boards.txt @@ -26,8 +26,9 @@ menu.sdk=Espressif FW menu.ssl=SSL Support menu.mmu=MMU menu.non32xfer=Non-32-Bit Access +menu.Upload=Upload menu.Filesystem=Filesystem -menu.Binaries=Binaries +menu.Export=Export ############################################################## generic.name=Generic ESP8266 Module @@ -44,22 +45,24 @@ generic.build.variant=generic generic.build.spiffs_pagesize=256 generic.build.debug_port= generic.build.debug_level= +generic.menu.Upload.Sketch=Sketch +generic.menu.Upload.Sketch.build.Upload=1 +generic.menu.Upload.Filesystem=Filesystem +generic.menu.Upload.Filesystem.build.Upload=2 +generic.menu.Upload.Both=Both +generic.menu.Upload.Both.build.Upload=3 generic.menu.Filesystem.Off=Off generic.menu.Filesystem.Off.build.Filesystem=0 -generic.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -generic.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -generic.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -generic.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -generic.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -generic.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -generic.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -generic.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -generic.menu.Binaries.Off=Off -generic.menu.Binaries.Off.build.Binaries=0 -generic.menu.Binaries.Binaries=Export (.bin & .bin.signed) -generic.menu.Binaries.Binaries.build.Binaries=1 -generic.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -generic.menu.Binaries.PackedBinaries.build.Binaries=2 +generic.menu.Filesystem.LitteFs=LitteFs +generic.menu.Filesystem.LitteFs.build.Filesystem=1 +generic.menu.Filesystem.SPIFFS=SPIFFS +generic.menu.Filesystem.SPIFFS.build.Filesystem=2 +generic.menu.Export.Off=Off +generic.menu.Export.Off.build.Export=0 +generic.menu.Export.Binaries=.bin & .bin.signed +generic.menu.Export.Binaries.build.Export=1 +generic.menu.Export.GzBinaries=Create & Export gzipped Binaries too +generic.menu.Export.GzBinaries.build.Export=2 generic.menu.xtal.80=80 MHz generic.menu.xtal.80.build.f_cpu=80000000L generic.menu.xtal.160=160 MHz @@ -557,22 +560,24 @@ esp8285.build.core=esp8266 esp8285.build.spiffs_pagesize=256 esp8285.build.debug_port= esp8285.build.debug_level= +esp8285.menu.Upload.Sketch=Sketch +esp8285.menu.Upload.Sketch.build.Upload=1 +esp8285.menu.Upload.Filesystem=Filesystem +esp8285.menu.Upload.Filesystem.build.Upload=2 +esp8285.menu.Upload.Both=Both +esp8285.menu.Upload.Both.build.Upload=3 esp8285.menu.Filesystem.Off=Off esp8285.menu.Filesystem.Off.build.Filesystem=0 -esp8285.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -esp8285.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -esp8285.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -esp8285.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -esp8285.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -esp8285.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -esp8285.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -esp8285.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -esp8285.menu.Binaries.Off=Off -esp8285.menu.Binaries.Off.build.Binaries=0 -esp8285.menu.Binaries.Binaries=Export (.bin & .bin.signed) -esp8285.menu.Binaries.Binaries.build.Binaries=1 -esp8285.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -esp8285.menu.Binaries.PackedBinaries.build.Binaries=2 +esp8285.menu.Filesystem.LitteFs=LitteFs +esp8285.menu.Filesystem.LitteFs.build.Filesystem=1 +esp8285.menu.Filesystem.SPIFFS=SPIFFS +esp8285.menu.Filesystem.SPIFFS.build.Filesystem=2 +esp8285.menu.Export.Off=Off +esp8285.menu.Export.Off.build.Export=0 +esp8285.menu.Export.Binaries=.bin & .bin.signed +esp8285.menu.Export.Binaries.build.Export=1 +esp8285.menu.Export.GzBinaries=Create & Export gzipped Binaries too +esp8285.menu.Export.GzBinaries.build.Export=2 esp8285.menu.xtal.80=80 MHz esp8285.menu.xtal.80.build.f_cpu=80000000L esp8285.menu.xtal.160=160 MHz @@ -940,22 +945,24 @@ gen4iod.build.core=esp8266 gen4iod.build.spiffs_pagesize=256 gen4iod.build.debug_port= gen4iod.build.debug_level= +gen4iod.menu.Upload.Sketch=Sketch +gen4iod.menu.Upload.Sketch.build.Upload=1 +gen4iod.menu.Upload.Filesystem=Filesystem +gen4iod.menu.Upload.Filesystem.build.Upload=2 +gen4iod.menu.Upload.Both=Both +gen4iod.menu.Upload.Both.build.Upload=3 gen4iod.menu.Filesystem.Off=Off gen4iod.menu.Filesystem.Off.build.Filesystem=0 -gen4iod.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -gen4iod.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -gen4iod.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -gen4iod.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -gen4iod.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -gen4iod.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -gen4iod.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -gen4iod.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -gen4iod.menu.Binaries.Off=Off -gen4iod.menu.Binaries.Off.build.Binaries=0 -gen4iod.menu.Binaries.Binaries=Export (.bin & .bin.signed) -gen4iod.menu.Binaries.Binaries.build.Binaries=1 -gen4iod.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -gen4iod.menu.Binaries.PackedBinaries.build.Binaries=2 +gen4iod.menu.Filesystem.LitteFs=LitteFs +gen4iod.menu.Filesystem.LitteFs.build.Filesystem=1 +gen4iod.menu.Filesystem.SPIFFS=SPIFFS +gen4iod.menu.Filesystem.SPIFFS.build.Filesystem=2 +gen4iod.menu.Export.Off=Off +gen4iod.menu.Export.Off.build.Export=0 +gen4iod.menu.Export.Binaries=.bin & .bin.signed +gen4iod.menu.Export.Binaries.build.Export=1 +gen4iod.menu.Export.GzBinaries=Create & Export gzipped Binaries too +gen4iod.menu.Export.GzBinaries.build.Export=2 gen4iod.menu.xtal.80=80 MHz gen4iod.menu.xtal.80.build.f_cpu=80000000L gen4iod.menu.xtal.160=160 MHz @@ -1238,22 +1245,24 @@ huzzah.build.core=esp8266 huzzah.build.spiffs_pagesize=256 huzzah.build.debug_port= huzzah.build.debug_level= +huzzah.menu.Upload.Sketch=Sketch +huzzah.menu.Upload.Sketch.build.Upload=1 +huzzah.menu.Upload.Filesystem=Filesystem +huzzah.menu.Upload.Filesystem.build.Upload=2 +huzzah.menu.Upload.Both=Both +huzzah.menu.Upload.Both.build.Upload=3 huzzah.menu.Filesystem.Off=Off huzzah.menu.Filesystem.Off.build.Filesystem=0 -huzzah.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -huzzah.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -huzzah.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -huzzah.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -huzzah.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -huzzah.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -huzzah.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -huzzah.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -huzzah.menu.Binaries.Off=Off -huzzah.menu.Binaries.Off.build.Binaries=0 -huzzah.menu.Binaries.Binaries=Export (.bin & .bin.signed) -huzzah.menu.Binaries.Binaries.build.Binaries=1 -huzzah.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -huzzah.menu.Binaries.PackedBinaries.build.Binaries=2 +huzzah.menu.Filesystem.LitteFs=LitteFs +huzzah.menu.Filesystem.LitteFs.build.Filesystem=1 +huzzah.menu.Filesystem.SPIFFS=SPIFFS +huzzah.menu.Filesystem.SPIFFS.build.Filesystem=2 +huzzah.menu.Export.Off=Off +huzzah.menu.Export.Off.build.Export=0 +huzzah.menu.Export.Binaries=.bin & .bin.signed +huzzah.menu.Export.Binaries.build.Export=1 +huzzah.menu.Export.GzBinaries=Create & Export gzipped Binaries too +huzzah.menu.Export.GzBinaries.build.Export=2 huzzah.menu.xtal.80=80 MHz huzzah.menu.xtal.80.build.f_cpu=80000000L huzzah.menu.xtal.160=160 MHz @@ -1469,22 +1478,24 @@ wifi_slot.build.core=esp8266 wifi_slot.build.spiffs_pagesize=256 wifi_slot.build.debug_port= wifi_slot.build.debug_level= +wifi_slot.menu.Upload.Sketch=Sketch +wifi_slot.menu.Upload.Sketch.build.Upload=1 +wifi_slot.menu.Upload.Filesystem=Filesystem +wifi_slot.menu.Upload.Filesystem.build.Upload=2 +wifi_slot.menu.Upload.Both=Both +wifi_slot.menu.Upload.Both.build.Upload=3 wifi_slot.menu.Filesystem.Off=Off wifi_slot.menu.Filesystem.Off.build.Filesystem=0 -wifi_slot.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -wifi_slot.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -wifi_slot.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -wifi_slot.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -wifi_slot.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -wifi_slot.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -wifi_slot.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -wifi_slot.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -wifi_slot.menu.Binaries.Off=Off -wifi_slot.menu.Binaries.Off.build.Binaries=0 -wifi_slot.menu.Binaries.Binaries=Export (.bin & .bin.signed) -wifi_slot.menu.Binaries.Binaries.build.Binaries=1 -wifi_slot.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -wifi_slot.menu.Binaries.PackedBinaries.build.Binaries=2 +wifi_slot.menu.Filesystem.LitteFs=LitteFs +wifi_slot.menu.Filesystem.LitteFs.build.Filesystem=1 +wifi_slot.menu.Filesystem.SPIFFS=SPIFFS +wifi_slot.menu.Filesystem.SPIFFS.build.Filesystem=2 +wifi_slot.menu.Export.Off=Off +wifi_slot.menu.Export.Off.build.Export=0 +wifi_slot.menu.Export.Binaries=.bin & .bin.signed +wifi_slot.menu.Export.Binaries.build.Export=1 +wifi_slot.menu.Export.GzBinaries=Create & Export gzipped Binaries too +wifi_slot.menu.Export.GzBinaries.build.Export=2 wifi_slot.menu.xtal.80=80 MHz wifi_slot.menu.xtal.80.build.f_cpu=80000000L wifi_slot.menu.xtal.160=160 MHz @@ -1826,22 +1837,24 @@ arduino-esp8266.build.variant=generic arduino-esp8266.build.spiffs_pagesize=256 arduino-esp8266.build.debug_port= arduino-esp8266.build.debug_level= +arduino-esp8266.menu.Upload.Sketch=Sketch +arduino-esp8266.menu.Upload.Sketch.build.Upload=1 +arduino-esp8266.menu.Upload.Filesystem=Filesystem +arduino-esp8266.menu.Upload.Filesystem.build.Upload=2 +arduino-esp8266.menu.Upload.Both=Both +arduino-esp8266.menu.Upload.Both.build.Upload=3 arduino-esp8266.menu.Filesystem.Off=Off arduino-esp8266.menu.Filesystem.Off.build.Filesystem=0 -arduino-esp8266.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -arduino-esp8266.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -arduino-esp8266.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -arduino-esp8266.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -arduino-esp8266.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -arduino-esp8266.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -arduino-esp8266.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -arduino-esp8266.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -arduino-esp8266.menu.Binaries.Off=Off -arduino-esp8266.menu.Binaries.Off.build.Binaries=0 -arduino-esp8266.menu.Binaries.Binaries=Export (.bin & .bin.signed) -arduino-esp8266.menu.Binaries.Binaries.build.Binaries=1 -arduino-esp8266.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -arduino-esp8266.menu.Binaries.PackedBinaries.build.Binaries=2 +arduino-esp8266.menu.Filesystem.LitteFs=LitteFs +arduino-esp8266.menu.Filesystem.LitteFs.build.Filesystem=1 +arduino-esp8266.menu.Filesystem.SPIFFS=SPIFFS +arduino-esp8266.menu.Filesystem.SPIFFS.build.Filesystem=2 +arduino-esp8266.menu.Export.Off=Off +arduino-esp8266.menu.Export.Off.build.Export=0 +arduino-esp8266.menu.Export.Binaries=.bin & .bin.signed +arduino-esp8266.menu.Export.Binaries.build.Export=1 +arduino-esp8266.menu.Export.GzBinaries=Create & Export gzipped Binaries too +arduino-esp8266.menu.Export.GzBinaries.build.Export=2 arduino-esp8266.menu.xtal.80=80 MHz arduino-esp8266.menu.xtal.80.build.f_cpu=80000000L arduino-esp8266.menu.xtal.160=160 MHz @@ -2058,22 +2071,24 @@ espmxdevkit.build.core=esp8266 espmxdevkit.build.spiffs_pagesize=256 espmxdevkit.build.debug_port= espmxdevkit.build.debug_level= +espmxdevkit.menu.Upload.Sketch=Sketch +espmxdevkit.menu.Upload.Sketch.build.Upload=1 +espmxdevkit.menu.Upload.Filesystem=Filesystem +espmxdevkit.menu.Upload.Filesystem.build.Upload=2 +espmxdevkit.menu.Upload.Both=Both +espmxdevkit.menu.Upload.Both.build.Upload=3 espmxdevkit.menu.Filesystem.Off=Off espmxdevkit.menu.Filesystem.Off.build.Filesystem=0 -espmxdevkit.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -espmxdevkit.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -espmxdevkit.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -espmxdevkit.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -espmxdevkit.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -espmxdevkit.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -espmxdevkit.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -espmxdevkit.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -espmxdevkit.menu.Binaries.Off=Off -espmxdevkit.menu.Binaries.Off.build.Binaries=0 -espmxdevkit.menu.Binaries.Binaries=Export (.bin & .bin.signed) -espmxdevkit.menu.Binaries.Binaries.build.Binaries=1 -espmxdevkit.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -espmxdevkit.menu.Binaries.PackedBinaries.build.Binaries=2 +espmxdevkit.menu.Filesystem.LitteFs=LitteFs +espmxdevkit.menu.Filesystem.LitteFs.build.Filesystem=1 +espmxdevkit.menu.Filesystem.SPIFFS=SPIFFS +espmxdevkit.menu.Filesystem.SPIFFS.build.Filesystem=2 +espmxdevkit.menu.Export.Off=Off +espmxdevkit.menu.Export.Off.build.Export=0 +espmxdevkit.menu.Export.Binaries=.bin & .bin.signed +espmxdevkit.menu.Export.Binaries.build.Export=1 +espmxdevkit.menu.Export.GzBinaries=Create & Export gzipped Binaries too +espmxdevkit.menu.Export.GzBinaries.build.Export=2 espmxdevkit.menu.xtal.80=80 MHz espmxdevkit.menu.xtal.80.build.f_cpu=80000000L espmxdevkit.menu.xtal.160=160 MHz @@ -2330,22 +2345,24 @@ oak.build.core=esp8266 oak.build.spiffs_pagesize=256 oak.build.debug_port= oak.build.debug_level= +oak.menu.Upload.Sketch=Sketch +oak.menu.Upload.Sketch.build.Upload=1 +oak.menu.Upload.Filesystem=Filesystem +oak.menu.Upload.Filesystem.build.Upload=2 +oak.menu.Upload.Both=Both +oak.menu.Upload.Both.build.Upload=3 oak.menu.Filesystem.Off=Off oak.menu.Filesystem.Off.build.Filesystem=0 -oak.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -oak.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -oak.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -oak.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -oak.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -oak.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -oak.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -oak.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -oak.menu.Binaries.Off=Off -oak.menu.Binaries.Off.build.Binaries=0 -oak.menu.Binaries.Binaries=Export (.bin & .bin.signed) -oak.menu.Binaries.Binaries.build.Binaries=1 -oak.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -oak.menu.Binaries.PackedBinaries.build.Binaries=2 +oak.menu.Filesystem.LitteFs=LitteFs +oak.menu.Filesystem.LitteFs.build.Filesystem=1 +oak.menu.Filesystem.SPIFFS=SPIFFS +oak.menu.Filesystem.SPIFFS.build.Filesystem=2 +oak.menu.Export.Off=Off +oak.menu.Export.Off.build.Export=0 +oak.menu.Export.Binaries=.bin & .bin.signed +oak.menu.Export.Binaries.build.Export=1 +oak.menu.Export.GzBinaries=Create & Export gzipped Binaries too +oak.menu.Export.GzBinaries.build.Export=2 oak.menu.xtal.80=80 MHz oak.menu.xtal.80.build.f_cpu=80000000L oak.menu.xtal.160=160 MHz @@ -2570,22 +2587,24 @@ espduino.build.core=esp8266 espduino.build.spiffs_pagesize=256 espduino.build.debug_port= espduino.build.debug_level= +espduino.menu.Upload.Sketch=Sketch +espduino.menu.Upload.Sketch.build.Upload=1 +espduino.menu.Upload.Filesystem=Filesystem +espduino.menu.Upload.Filesystem.build.Upload=2 +espduino.menu.Upload.Both=Both +espduino.menu.Upload.Both.build.Upload=3 espduino.menu.Filesystem.Off=Off espduino.menu.Filesystem.Off.build.Filesystem=0 -espduino.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -espduino.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -espduino.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -espduino.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -espduino.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -espduino.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -espduino.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -espduino.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -espduino.menu.Binaries.Off=Off -espduino.menu.Binaries.Off.build.Binaries=0 -espduino.menu.Binaries.Binaries=Export (.bin & .bin.signed) -espduino.menu.Binaries.Binaries.build.Binaries=1 -espduino.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -espduino.menu.Binaries.PackedBinaries.build.Binaries=2 +espduino.menu.Filesystem.LitteFs=LitteFs +espduino.menu.Filesystem.LitteFs.build.Filesystem=1 +espduino.menu.Filesystem.SPIFFS=SPIFFS +espduino.menu.Filesystem.SPIFFS.build.Filesystem=2 +espduino.menu.Export.Off=Off +espduino.menu.Export.Off.build.Export=0 +espduino.menu.Export.Binaries=.bin & .bin.signed +espduino.menu.Export.Binaries.build.Export=1 +espduino.menu.Export.GzBinaries=Create & Export gzipped Binaries too +espduino.menu.Export.GzBinaries.build.Export=2 espduino.menu.xtal.80=80 MHz espduino.menu.xtal.80.build.f_cpu=80000000L espduino.menu.xtal.160=160 MHz @@ -2800,22 +2819,24 @@ espectro.build.core=esp8266 espectro.build.spiffs_pagesize=256 espectro.build.debug_port= espectro.build.debug_level= +espectro.menu.Upload.Sketch=Sketch +espectro.menu.Upload.Sketch.build.Upload=1 +espectro.menu.Upload.Filesystem=Filesystem +espectro.menu.Upload.Filesystem.build.Upload=2 +espectro.menu.Upload.Both=Both +espectro.menu.Upload.Both.build.Upload=3 espectro.menu.Filesystem.Off=Off espectro.menu.Filesystem.Off.build.Filesystem=0 -espectro.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -espectro.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -espectro.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -espectro.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -espectro.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -espectro.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -espectro.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -espectro.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -espectro.menu.Binaries.Off=Off -espectro.menu.Binaries.Off.build.Binaries=0 -espectro.menu.Binaries.Binaries=Export (.bin & .bin.signed) -espectro.menu.Binaries.Binaries.build.Binaries=1 -espectro.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -espectro.menu.Binaries.PackedBinaries.build.Binaries=2 +espectro.menu.Filesystem.LitteFs=LitteFs +espectro.menu.Filesystem.LitteFs.build.Filesystem=1 +espectro.menu.Filesystem.SPIFFS=SPIFFS +espectro.menu.Filesystem.SPIFFS.build.Filesystem=2 +espectro.menu.Export.Off=Off +espectro.menu.Export.Off.build.Export=0 +espectro.menu.Export.Binaries=.bin & .bin.signed +espectro.menu.Export.Binaries.build.Export=1 +espectro.menu.Export.GzBinaries=Create & Export gzipped Binaries too +espectro.menu.Export.GzBinaries.build.Export=2 espectro.menu.xtal.80=80 MHz espectro.menu.xtal.80.build.f_cpu=80000000L espectro.menu.xtal.160=160 MHz @@ -3031,22 +3052,24 @@ espino.build.core=esp8266 espino.build.spiffs_pagesize=256 espino.build.debug_port= espino.build.debug_level= +espino.menu.Upload.Sketch=Sketch +espino.menu.Upload.Sketch.build.Upload=1 +espino.menu.Upload.Filesystem=Filesystem +espino.menu.Upload.Filesystem.build.Upload=2 +espino.menu.Upload.Both=Both +espino.menu.Upload.Both.build.Upload=3 espino.menu.Filesystem.Off=Off espino.menu.Filesystem.Off.build.Filesystem=0 -espino.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -espino.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -espino.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -espino.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -espino.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -espino.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -espino.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -espino.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -espino.menu.Binaries.Off=Off -espino.menu.Binaries.Off.build.Binaries=0 -espino.menu.Binaries.Binaries=Export (.bin & .bin.signed) -espino.menu.Binaries.Binaries.build.Binaries=1 -espino.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -espino.menu.Binaries.PackedBinaries.build.Binaries=2 +espino.menu.Filesystem.LitteFs=LitteFs +espino.menu.Filesystem.LitteFs.build.Filesystem=1 +espino.menu.Filesystem.SPIFFS=SPIFFS +espino.menu.Filesystem.SPIFFS.build.Filesystem=2 +espino.menu.Export.Off=Off +espino.menu.Export.Off.build.Export=0 +espino.menu.Export.Binaries=.bin & .bin.signed +espino.menu.Export.Binaries.build.Export=1 +espino.menu.Export.GzBinaries=Create & Export gzipped Binaries too +espino.menu.Export.GzBinaries.build.Export=2 espino.menu.xtal.80=80 MHz espino.menu.xtal.80.build.f_cpu=80000000L espino.menu.xtal.160=160 MHz @@ -3265,22 +3288,24 @@ espresso_lite_v1.build.core=esp8266 espresso_lite_v1.build.spiffs_pagesize=256 espresso_lite_v1.build.debug_port= espresso_lite_v1.build.debug_level= +espresso_lite_v1.menu.Upload.Sketch=Sketch +espresso_lite_v1.menu.Upload.Sketch.build.Upload=1 +espresso_lite_v1.menu.Upload.Filesystem=Filesystem +espresso_lite_v1.menu.Upload.Filesystem.build.Upload=2 +espresso_lite_v1.menu.Upload.Both=Both +espresso_lite_v1.menu.Upload.Both.build.Upload=3 espresso_lite_v1.menu.Filesystem.Off=Off espresso_lite_v1.menu.Filesystem.Off.build.Filesystem=0 -espresso_lite_v1.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -espresso_lite_v1.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -espresso_lite_v1.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -espresso_lite_v1.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -espresso_lite_v1.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -espresso_lite_v1.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -espresso_lite_v1.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -espresso_lite_v1.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -espresso_lite_v1.menu.Binaries.Off=Off -espresso_lite_v1.menu.Binaries.Off.build.Binaries=0 -espresso_lite_v1.menu.Binaries.Binaries=Export (.bin & .bin.signed) -espresso_lite_v1.menu.Binaries.Binaries.build.Binaries=1 -espresso_lite_v1.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -espresso_lite_v1.menu.Binaries.PackedBinaries.build.Binaries=2 +espresso_lite_v1.menu.Filesystem.LitteFs=LitteFs +espresso_lite_v1.menu.Filesystem.LitteFs.build.Filesystem=1 +espresso_lite_v1.menu.Filesystem.SPIFFS=SPIFFS +espresso_lite_v1.menu.Filesystem.SPIFFS.build.Filesystem=2 +espresso_lite_v1.menu.Export.Off=Off +espresso_lite_v1.menu.Export.Off.build.Export=0 +espresso_lite_v1.menu.Export.Binaries=.bin & .bin.signed +espresso_lite_v1.menu.Export.Binaries.build.Export=1 +espresso_lite_v1.menu.Export.GzBinaries=Create & Export gzipped Binaries too +espresso_lite_v1.menu.Export.GzBinaries.build.Export=2 espresso_lite_v1.menu.xtal.80=80 MHz espresso_lite_v1.menu.xtal.80.build.f_cpu=80000000L espresso_lite_v1.menu.xtal.160=160 MHz @@ -3499,22 +3524,24 @@ espresso_lite_v2.build.core=esp8266 espresso_lite_v2.build.spiffs_pagesize=256 espresso_lite_v2.build.debug_port= espresso_lite_v2.build.debug_level= +espresso_lite_v2.menu.Upload.Sketch=Sketch +espresso_lite_v2.menu.Upload.Sketch.build.Upload=1 +espresso_lite_v2.menu.Upload.Filesystem=Filesystem +espresso_lite_v2.menu.Upload.Filesystem.build.Upload=2 +espresso_lite_v2.menu.Upload.Both=Both +espresso_lite_v2.menu.Upload.Both.build.Upload=3 espresso_lite_v2.menu.Filesystem.Off=Off espresso_lite_v2.menu.Filesystem.Off.build.Filesystem=0 -espresso_lite_v2.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -espresso_lite_v2.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -espresso_lite_v2.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -espresso_lite_v2.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -espresso_lite_v2.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -espresso_lite_v2.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -espresso_lite_v2.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -espresso_lite_v2.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -espresso_lite_v2.menu.Binaries.Off=Off -espresso_lite_v2.menu.Binaries.Off.build.Binaries=0 -espresso_lite_v2.menu.Binaries.Binaries=Export (.bin & .bin.signed) -espresso_lite_v2.menu.Binaries.Binaries.build.Binaries=1 -espresso_lite_v2.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -espresso_lite_v2.menu.Binaries.PackedBinaries.build.Binaries=2 +espresso_lite_v2.menu.Filesystem.LitteFs=LitteFs +espresso_lite_v2.menu.Filesystem.LitteFs.build.Filesystem=1 +espresso_lite_v2.menu.Filesystem.SPIFFS=SPIFFS +espresso_lite_v2.menu.Filesystem.SPIFFS.build.Filesystem=2 +espresso_lite_v2.menu.Export.Off=Off +espresso_lite_v2.menu.Export.Off.build.Export=0 +espresso_lite_v2.menu.Export.Binaries=.bin & .bin.signed +espresso_lite_v2.menu.Export.Binaries.build.Export=1 +espresso_lite_v2.menu.Export.GzBinaries=Create & Export gzipped Binaries too +espresso_lite_v2.menu.Export.GzBinaries.build.Export=2 espresso_lite_v2.menu.xtal.80=80 MHz espresso_lite_v2.menu.xtal.80.build.f_cpu=80000000L espresso_lite_v2.menu.xtal.160=160 MHz @@ -3743,22 +3770,24 @@ sonoff.build.core=esp8266 sonoff.build.spiffs_pagesize=256 sonoff.build.debug_port= sonoff.build.debug_level= +sonoff.menu.Upload.Sketch=Sketch +sonoff.menu.Upload.Sketch.build.Upload=1 +sonoff.menu.Upload.Filesystem=Filesystem +sonoff.menu.Upload.Filesystem.build.Upload=2 +sonoff.menu.Upload.Both=Both +sonoff.menu.Upload.Both.build.Upload=3 sonoff.menu.Filesystem.Off=Off sonoff.menu.Filesystem.Off.build.Filesystem=0 -sonoff.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -sonoff.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -sonoff.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -sonoff.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -sonoff.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -sonoff.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -sonoff.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -sonoff.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -sonoff.menu.Binaries.Off=Off -sonoff.menu.Binaries.Off.build.Binaries=0 -sonoff.menu.Binaries.Binaries=Export (.bin & .bin.signed) -sonoff.menu.Binaries.Binaries.build.Binaries=1 -sonoff.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -sonoff.menu.Binaries.PackedBinaries.build.Binaries=2 +sonoff.menu.Filesystem.LitteFs=LitteFs +sonoff.menu.Filesystem.LitteFs.build.Filesystem=1 +sonoff.menu.Filesystem.SPIFFS=SPIFFS +sonoff.menu.Filesystem.SPIFFS.build.Filesystem=2 +sonoff.menu.Export.Off=Off +sonoff.menu.Export.Off.build.Export=0 +sonoff.menu.Export.Binaries=.bin & .bin.signed +sonoff.menu.Export.Binaries.build.Export=1 +sonoff.menu.Export.GzBinaries=Create & Export gzipped Binaries too +sonoff.menu.Export.GzBinaries.build.Export=2 sonoff.menu.xtal.80=80 MHz sonoff.menu.xtal.80.build.f_cpu=80000000L sonoff.menu.xtal.160=160 MHz @@ -4014,22 +4043,24 @@ inventone.build.core=esp8266 inventone.build.spiffs_pagesize=256 inventone.build.debug_port= inventone.build.debug_level= +inventone.menu.Upload.Sketch=Sketch +inventone.menu.Upload.Sketch.build.Upload=1 +inventone.menu.Upload.Filesystem=Filesystem +inventone.menu.Upload.Filesystem.build.Upload=2 +inventone.menu.Upload.Both=Both +inventone.menu.Upload.Both.build.Upload=3 inventone.menu.Filesystem.Off=Off inventone.menu.Filesystem.Off.build.Filesystem=0 -inventone.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -inventone.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -inventone.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -inventone.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -inventone.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -inventone.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -inventone.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -inventone.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -inventone.menu.Binaries.Off=Off -inventone.menu.Binaries.Off.build.Binaries=0 -inventone.menu.Binaries.Binaries=Export (.bin & .bin.signed) -inventone.menu.Binaries.Binaries.build.Binaries=1 -inventone.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -inventone.menu.Binaries.PackedBinaries.build.Binaries=2 +inventone.menu.Filesystem.LitteFs=LitteFs +inventone.menu.Filesystem.LitteFs.build.Filesystem=1 +inventone.menu.Filesystem.SPIFFS=SPIFFS +inventone.menu.Filesystem.SPIFFS.build.Filesystem=2 +inventone.menu.Export.Off=Off +inventone.menu.Export.Off.build.Export=0 +inventone.menu.Export.Binaries=.bin & .bin.signed +inventone.menu.Export.Binaries.build.Export=1 +inventone.menu.Export.GzBinaries=Create & Export gzipped Binaries too +inventone.menu.Export.GzBinaries.build.Export=2 inventone.menu.xtal.80=80 MHz inventone.menu.xtal.80.build.f_cpu=80000000L inventone.menu.xtal.160=160 MHz @@ -4245,22 +4276,24 @@ d1_mini.build.core=esp8266 d1_mini.build.spiffs_pagesize=256 d1_mini.build.debug_port= d1_mini.build.debug_level= +d1_mini.menu.Upload.Sketch=Sketch +d1_mini.menu.Upload.Sketch.build.Upload=1 +d1_mini.menu.Upload.Filesystem=Filesystem +d1_mini.menu.Upload.Filesystem.build.Upload=2 +d1_mini.menu.Upload.Both=Both +d1_mini.menu.Upload.Both.build.Upload=3 d1_mini.menu.Filesystem.Off=Off d1_mini.menu.Filesystem.Off.build.Filesystem=0 -d1_mini.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -d1_mini.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -d1_mini.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -d1_mini.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -d1_mini.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -d1_mini.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -d1_mini.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -d1_mini.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -d1_mini.menu.Binaries.Off=Off -d1_mini.menu.Binaries.Off.build.Binaries=0 -d1_mini.menu.Binaries.Binaries=Export (.bin & .bin.signed) -d1_mini.menu.Binaries.Binaries.build.Binaries=1 -d1_mini.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -d1_mini.menu.Binaries.PackedBinaries.build.Binaries=2 +d1_mini.menu.Filesystem.LitteFs=LitteFs +d1_mini.menu.Filesystem.LitteFs.build.Filesystem=1 +d1_mini.menu.Filesystem.SPIFFS=SPIFFS +d1_mini.menu.Filesystem.SPIFFS.build.Filesystem=2 +d1_mini.menu.Export.Off=Off +d1_mini.menu.Export.Off.build.Export=0 +d1_mini.menu.Export.Binaries=.bin & .bin.signed +d1_mini.menu.Export.Binaries.build.Export=1 +d1_mini.menu.Export.GzBinaries=Create & Export gzipped Binaries too +d1_mini.menu.Export.GzBinaries.build.Export=2 d1_mini.menu.xtal.80=80 MHz d1_mini.menu.xtal.80.build.f_cpu=80000000L d1_mini.menu.xtal.160=160 MHz @@ -4476,22 +4509,24 @@ d1_mini_clone.build.core=esp8266 d1_mini_clone.build.spiffs_pagesize=256 d1_mini_clone.build.debug_port= d1_mini_clone.build.debug_level= +d1_mini_clone.menu.Upload.Sketch=Sketch +d1_mini_clone.menu.Upload.Sketch.build.Upload=1 +d1_mini_clone.menu.Upload.Filesystem=Filesystem +d1_mini_clone.menu.Upload.Filesystem.build.Upload=2 +d1_mini_clone.menu.Upload.Both=Both +d1_mini_clone.menu.Upload.Both.build.Upload=3 d1_mini_clone.menu.Filesystem.Off=Off d1_mini_clone.menu.Filesystem.Off.build.Filesystem=0 -d1_mini_clone.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -d1_mini_clone.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -d1_mini_clone.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -d1_mini_clone.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -d1_mini_clone.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -d1_mini_clone.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -d1_mini_clone.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -d1_mini_clone.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -d1_mini_clone.menu.Binaries.Off=Off -d1_mini_clone.menu.Binaries.Off.build.Binaries=0 -d1_mini_clone.menu.Binaries.Binaries=Export (.bin & .bin.signed) -d1_mini_clone.menu.Binaries.Binaries.build.Binaries=1 -d1_mini_clone.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -d1_mini_clone.menu.Binaries.PackedBinaries.build.Binaries=2 +d1_mini_clone.menu.Filesystem.LitteFs=LitteFs +d1_mini_clone.menu.Filesystem.LitteFs.build.Filesystem=1 +d1_mini_clone.menu.Filesystem.SPIFFS=SPIFFS +d1_mini_clone.menu.Filesystem.SPIFFS.build.Filesystem=2 +d1_mini_clone.menu.Export.Off=Off +d1_mini_clone.menu.Export.Off.build.Export=0 +d1_mini_clone.menu.Export.Binaries=.bin & .bin.signed +d1_mini_clone.menu.Export.Binaries.build.Export=1 +d1_mini_clone.menu.Export.GzBinaries=Create & Export gzipped Binaries too +d1_mini_clone.menu.Export.GzBinaries.build.Export=2 d1_mini_clone.menu.xtal.80=80 MHz d1_mini_clone.menu.xtal.80.build.f_cpu=80000000L d1_mini_clone.menu.xtal.160=160 MHz @@ -4724,22 +4759,24 @@ d1_mini_lite.build.core=esp8266 d1_mini_lite.build.spiffs_pagesize=256 d1_mini_lite.build.debug_port= d1_mini_lite.build.debug_level= +d1_mini_lite.menu.Upload.Sketch=Sketch +d1_mini_lite.menu.Upload.Sketch.build.Upload=1 +d1_mini_lite.menu.Upload.Filesystem=Filesystem +d1_mini_lite.menu.Upload.Filesystem.build.Upload=2 +d1_mini_lite.menu.Upload.Both=Both +d1_mini_lite.menu.Upload.Both.build.Upload=3 d1_mini_lite.menu.Filesystem.Off=Off d1_mini_lite.menu.Filesystem.Off.build.Filesystem=0 -d1_mini_lite.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -d1_mini_lite.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -d1_mini_lite.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -d1_mini_lite.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -d1_mini_lite.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -d1_mini_lite.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -d1_mini_lite.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -d1_mini_lite.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -d1_mini_lite.menu.Binaries.Off=Off -d1_mini_lite.menu.Binaries.Off.build.Binaries=0 -d1_mini_lite.menu.Binaries.Binaries=Export (.bin & .bin.signed) -d1_mini_lite.menu.Binaries.Binaries.build.Binaries=1 -d1_mini_lite.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -d1_mini_lite.menu.Binaries.PackedBinaries.build.Binaries=2 +d1_mini_lite.menu.Filesystem.LitteFs=LitteFs +d1_mini_lite.menu.Filesystem.LitteFs.build.Filesystem=1 +d1_mini_lite.menu.Filesystem.SPIFFS=SPIFFS +d1_mini_lite.menu.Filesystem.SPIFFS.build.Filesystem=2 +d1_mini_lite.menu.Export.Off=Off +d1_mini_lite.menu.Export.Off.build.Export=0 +d1_mini_lite.menu.Export.Binaries=.bin & .bin.signed +d1_mini_lite.menu.Export.Binaries.build.Export=1 +d1_mini_lite.menu.Export.GzBinaries=Create & Export gzipped Binaries too +d1_mini_lite.menu.Export.GzBinaries.build.Export=2 d1_mini_lite.menu.xtal.80=80 MHz d1_mini_lite.menu.xtal.80.build.f_cpu=80000000L d1_mini_lite.menu.xtal.160=160 MHz @@ -4995,22 +5032,24 @@ d1_mini_pro.build.core=esp8266 d1_mini_pro.build.spiffs_pagesize=256 d1_mini_pro.build.debug_port= d1_mini_pro.build.debug_level= +d1_mini_pro.menu.Upload.Sketch=Sketch +d1_mini_pro.menu.Upload.Sketch.build.Upload=1 +d1_mini_pro.menu.Upload.Filesystem=Filesystem +d1_mini_pro.menu.Upload.Filesystem.build.Upload=2 +d1_mini_pro.menu.Upload.Both=Both +d1_mini_pro.menu.Upload.Both.build.Upload=3 d1_mini_pro.menu.Filesystem.Off=Off d1_mini_pro.menu.Filesystem.Off.build.Filesystem=0 -d1_mini_pro.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -d1_mini_pro.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -d1_mini_pro.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -d1_mini_pro.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -d1_mini_pro.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -d1_mini_pro.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -d1_mini_pro.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -d1_mini_pro.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -d1_mini_pro.menu.Binaries.Off=Off -d1_mini_pro.menu.Binaries.Off.build.Binaries=0 -d1_mini_pro.menu.Binaries.Binaries=Export (.bin & .bin.signed) -d1_mini_pro.menu.Binaries.Binaries.build.Binaries=1 -d1_mini_pro.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -d1_mini_pro.menu.Binaries.PackedBinaries.build.Binaries=2 +d1_mini_pro.menu.Filesystem.LitteFs=LitteFs +d1_mini_pro.menu.Filesystem.LitteFs.build.Filesystem=1 +d1_mini_pro.menu.Filesystem.SPIFFS=SPIFFS +d1_mini_pro.menu.Filesystem.SPIFFS.build.Filesystem=2 +d1_mini_pro.menu.Export.Off=Off +d1_mini_pro.menu.Export.Off.build.Export=0 +d1_mini_pro.menu.Export.Binaries=.bin & .bin.signed +d1_mini_pro.menu.Export.Binaries.build.Export=1 +d1_mini_pro.menu.Export.GzBinaries=Create & Export gzipped Binaries too +d1_mini_pro.menu.Export.GzBinaries.build.Export=2 d1_mini_pro.menu.xtal.80=80 MHz d1_mini_pro.menu.xtal.80.build.f_cpu=80000000L d1_mini_pro.menu.xtal.160=160 MHz @@ -5209,22 +5248,24 @@ d1.build.core=esp8266 d1.build.spiffs_pagesize=256 d1.build.debug_port= d1.build.debug_level= +d1.menu.Upload.Sketch=Sketch +d1.menu.Upload.Sketch.build.Upload=1 +d1.menu.Upload.Filesystem=Filesystem +d1.menu.Upload.Filesystem.build.Upload=2 +d1.menu.Upload.Both=Both +d1.menu.Upload.Both.build.Upload=3 d1.menu.Filesystem.Off=Off d1.menu.Filesystem.Off.build.Filesystem=0 -d1.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -d1.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -d1.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -d1.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -d1.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -d1.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -d1.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -d1.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -d1.menu.Binaries.Off=Off -d1.menu.Binaries.Off.build.Binaries=0 -d1.menu.Binaries.Binaries=Export (.bin & .bin.signed) -d1.menu.Binaries.Binaries.build.Binaries=1 -d1.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -d1.menu.Binaries.PackedBinaries.build.Binaries=2 +d1.menu.Filesystem.LitteFs=LitteFs +d1.menu.Filesystem.LitteFs.build.Filesystem=1 +d1.menu.Filesystem.SPIFFS=SPIFFS +d1.menu.Filesystem.SPIFFS.build.Filesystem=2 +d1.menu.Export.Off=Off +d1.menu.Export.Off.build.Export=0 +d1.menu.Export.Binaries=.bin & .bin.signed +d1.menu.Export.Binaries.build.Export=1 +d1.menu.Export.GzBinaries=Create & Export gzipped Binaries too +d1.menu.Export.GzBinaries.build.Export=2 d1.menu.xtal.80=80 MHz d1.menu.xtal.80.build.f_cpu=80000000L d1.menu.xtal.160=160 MHz @@ -5440,22 +5481,24 @@ agruminolemon.build.core=esp8266 agruminolemon.build.spiffs_pagesize=256 agruminolemon.build.debug_port= agruminolemon.build.debug_level= +agruminolemon.menu.Upload.Sketch=Sketch +agruminolemon.menu.Upload.Sketch.build.Upload=1 +agruminolemon.menu.Upload.Filesystem=Filesystem +agruminolemon.menu.Upload.Filesystem.build.Upload=2 +agruminolemon.menu.Upload.Both=Both +agruminolemon.menu.Upload.Both.build.Upload=3 agruminolemon.menu.Filesystem.Off=Off agruminolemon.menu.Filesystem.Off.build.Filesystem=0 -agruminolemon.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -agruminolemon.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -agruminolemon.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -agruminolemon.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -agruminolemon.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -agruminolemon.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -agruminolemon.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -agruminolemon.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -agruminolemon.menu.Binaries.Off=Off -agruminolemon.menu.Binaries.Off.build.Binaries=0 -agruminolemon.menu.Binaries.Binaries=Export (.bin & .bin.signed) -agruminolemon.menu.Binaries.Binaries.build.Binaries=1 -agruminolemon.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -agruminolemon.menu.Binaries.PackedBinaries.build.Binaries=2 +agruminolemon.menu.Filesystem.LitteFs=LitteFs +agruminolemon.menu.Filesystem.LitteFs.build.Filesystem=1 +agruminolemon.menu.Filesystem.SPIFFS=SPIFFS +agruminolemon.menu.Filesystem.SPIFFS.build.Filesystem=2 +agruminolemon.menu.Export.Off=Off +agruminolemon.menu.Export.Off.build.Export=0 +agruminolemon.menu.Export.Binaries=.bin & .bin.signed +agruminolemon.menu.Export.Binaries.build.Export=1 +agruminolemon.menu.Export.GzBinaries=Create & Export gzipped Binaries too +agruminolemon.menu.Export.GzBinaries.build.Export=2 agruminolemon.menu.xtal.80=80 MHz agruminolemon.menu.xtal.80.build.f_cpu=80000000L agruminolemon.menu.xtal.160=160 MHz @@ -5691,22 +5734,24 @@ nodemcu.build.core=esp8266 nodemcu.build.spiffs_pagesize=256 nodemcu.build.debug_port= nodemcu.build.debug_level= +nodemcu.menu.Upload.Sketch=Sketch +nodemcu.menu.Upload.Sketch.build.Upload=1 +nodemcu.menu.Upload.Filesystem=Filesystem +nodemcu.menu.Upload.Filesystem.build.Upload=2 +nodemcu.menu.Upload.Both=Both +nodemcu.menu.Upload.Both.build.Upload=3 nodemcu.menu.Filesystem.Off=Off nodemcu.menu.Filesystem.Off.build.Filesystem=0 -nodemcu.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -nodemcu.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -nodemcu.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -nodemcu.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -nodemcu.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -nodemcu.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -nodemcu.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -nodemcu.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -nodemcu.menu.Binaries.Off=Off -nodemcu.menu.Binaries.Off.build.Binaries=0 -nodemcu.menu.Binaries.Binaries=Export (.bin & .bin.signed) -nodemcu.menu.Binaries.Binaries.build.Binaries=1 -nodemcu.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -nodemcu.menu.Binaries.PackedBinaries.build.Binaries=2 +nodemcu.menu.Filesystem.LitteFs=LitteFs +nodemcu.menu.Filesystem.LitteFs.build.Filesystem=1 +nodemcu.menu.Filesystem.SPIFFS=SPIFFS +nodemcu.menu.Filesystem.SPIFFS.build.Filesystem=2 +nodemcu.menu.Export.Off=Off +nodemcu.menu.Export.Off.build.Export=0 +nodemcu.menu.Export.Binaries=.bin & .bin.signed +nodemcu.menu.Export.Binaries.build.Export=1 +nodemcu.menu.Export.GzBinaries=Create & Export gzipped Binaries too +nodemcu.menu.Export.GzBinaries.build.Export=2 nodemcu.menu.xtal.80=80 MHz nodemcu.menu.xtal.80.build.f_cpu=80000000L nodemcu.menu.xtal.160=160 MHz @@ -5922,22 +5967,24 @@ nodemcuv2.build.core=esp8266 nodemcuv2.build.spiffs_pagesize=256 nodemcuv2.build.debug_port= nodemcuv2.build.debug_level= +nodemcuv2.menu.Upload.Sketch=Sketch +nodemcuv2.menu.Upload.Sketch.build.Upload=1 +nodemcuv2.menu.Upload.Filesystem=Filesystem +nodemcuv2.menu.Upload.Filesystem.build.Upload=2 +nodemcuv2.menu.Upload.Both=Both +nodemcuv2.menu.Upload.Both.build.Upload=3 nodemcuv2.menu.Filesystem.Off=Off nodemcuv2.menu.Filesystem.Off.build.Filesystem=0 -nodemcuv2.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -nodemcuv2.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -nodemcuv2.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -nodemcuv2.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -nodemcuv2.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -nodemcuv2.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -nodemcuv2.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -nodemcuv2.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -nodemcuv2.menu.Binaries.Off=Off -nodemcuv2.menu.Binaries.Off.build.Binaries=0 -nodemcuv2.menu.Binaries.Binaries=Export (.bin & .bin.signed) -nodemcuv2.menu.Binaries.Binaries.build.Binaries=1 -nodemcuv2.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -nodemcuv2.menu.Binaries.PackedBinaries.build.Binaries=2 +nodemcuv2.menu.Filesystem.LitteFs=LitteFs +nodemcuv2.menu.Filesystem.LitteFs.build.Filesystem=1 +nodemcuv2.menu.Filesystem.SPIFFS=SPIFFS +nodemcuv2.menu.Filesystem.SPIFFS.build.Filesystem=2 +nodemcuv2.menu.Export.Off=Off +nodemcuv2.menu.Export.Off.build.Export=0 +nodemcuv2.menu.Export.Binaries=.bin & .bin.signed +nodemcuv2.menu.Export.Binaries.build.Export=1 +nodemcuv2.menu.Export.GzBinaries=Create & Export gzipped Binaries too +nodemcuv2.menu.Export.GzBinaries.build.Export=2 nodemcuv2.menu.xtal.80=80 MHz nodemcuv2.menu.xtal.80.build.f_cpu=80000000L nodemcuv2.menu.xtal.160=160 MHz @@ -6157,22 +6204,24 @@ modwifi.build.core=esp8266 modwifi.build.spiffs_pagesize=256 modwifi.build.debug_port= modwifi.build.debug_level= +modwifi.menu.Upload.Sketch=Sketch +modwifi.menu.Upload.Sketch.build.Upload=1 +modwifi.menu.Upload.Filesystem=Filesystem +modwifi.menu.Upload.Filesystem.build.Upload=2 +modwifi.menu.Upload.Both=Both +modwifi.menu.Upload.Both.build.Upload=3 modwifi.menu.Filesystem.Off=Off modwifi.menu.Filesystem.Off.build.Filesystem=0 -modwifi.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -modwifi.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -modwifi.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -modwifi.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -modwifi.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -modwifi.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -modwifi.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -modwifi.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -modwifi.menu.Binaries.Off=Off -modwifi.menu.Binaries.Off.build.Binaries=0 -modwifi.menu.Binaries.Binaries=Export (.bin & .bin.signed) -modwifi.menu.Binaries.Binaries.build.Binaries=1 -modwifi.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -modwifi.menu.Binaries.PackedBinaries.build.Binaries=2 +modwifi.menu.Filesystem.LitteFs=LitteFs +modwifi.menu.Filesystem.LitteFs.build.Filesystem=1 +modwifi.menu.Filesystem.SPIFFS=SPIFFS +modwifi.menu.Filesystem.SPIFFS.build.Filesystem=2 +modwifi.menu.Export.Off=Off +modwifi.menu.Export.Off.build.Export=0 +modwifi.menu.Export.Binaries=.bin & .bin.signed +modwifi.menu.Export.Binaries.build.Export=1 +modwifi.menu.Export.GzBinaries=Create & Export gzipped Binaries too +modwifi.menu.Export.GzBinaries.build.Export=2 modwifi.menu.xtal.80=80 MHz modwifi.menu.xtal.80.build.f_cpu=80000000L modwifi.menu.xtal.160=160 MHz @@ -6408,22 +6457,24 @@ phoenix_v1.build.core=esp8266 phoenix_v1.build.spiffs_pagesize=256 phoenix_v1.build.debug_port= phoenix_v1.build.debug_level= +phoenix_v1.menu.Upload.Sketch=Sketch +phoenix_v1.menu.Upload.Sketch.build.Upload=1 +phoenix_v1.menu.Upload.Filesystem=Filesystem +phoenix_v1.menu.Upload.Filesystem.build.Upload=2 +phoenix_v1.menu.Upload.Both=Both +phoenix_v1.menu.Upload.Both.build.Upload=3 phoenix_v1.menu.Filesystem.Off=Off phoenix_v1.menu.Filesystem.Off.build.Filesystem=0 -phoenix_v1.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -phoenix_v1.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -phoenix_v1.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -phoenix_v1.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -phoenix_v1.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -phoenix_v1.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -phoenix_v1.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -phoenix_v1.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -phoenix_v1.menu.Binaries.Off=Off -phoenix_v1.menu.Binaries.Off.build.Binaries=0 -phoenix_v1.menu.Binaries.Binaries=Export (.bin & .bin.signed) -phoenix_v1.menu.Binaries.Binaries.build.Binaries=1 -phoenix_v1.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -phoenix_v1.menu.Binaries.PackedBinaries.build.Binaries=2 +phoenix_v1.menu.Filesystem.LitteFs=LitteFs +phoenix_v1.menu.Filesystem.LitteFs.build.Filesystem=1 +phoenix_v1.menu.Filesystem.SPIFFS=SPIFFS +phoenix_v1.menu.Filesystem.SPIFFS.build.Filesystem=2 +phoenix_v1.menu.Export.Off=Off +phoenix_v1.menu.Export.Off.build.Export=0 +phoenix_v1.menu.Export.Binaries=.bin & .bin.signed +phoenix_v1.menu.Export.Binaries.build.Export=1 +phoenix_v1.menu.Export.GzBinaries=Create & Export gzipped Binaries too +phoenix_v1.menu.Export.GzBinaries.build.Export=2 phoenix_v1.menu.xtal.80=80 MHz phoenix_v1.menu.xtal.80.build.f_cpu=80000000L phoenix_v1.menu.xtal.160=160 MHz @@ -6642,22 +6693,24 @@ phoenix_v2.build.core=esp8266 phoenix_v2.build.spiffs_pagesize=256 phoenix_v2.build.debug_port= phoenix_v2.build.debug_level= +phoenix_v2.menu.Upload.Sketch=Sketch +phoenix_v2.menu.Upload.Sketch.build.Upload=1 +phoenix_v2.menu.Upload.Filesystem=Filesystem +phoenix_v2.menu.Upload.Filesystem.build.Upload=2 +phoenix_v2.menu.Upload.Both=Both +phoenix_v2.menu.Upload.Both.build.Upload=3 phoenix_v2.menu.Filesystem.Off=Off phoenix_v2.menu.Filesystem.Off.build.Filesystem=0 -phoenix_v2.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -phoenix_v2.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -phoenix_v2.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -phoenix_v2.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -phoenix_v2.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -phoenix_v2.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -phoenix_v2.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -phoenix_v2.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -phoenix_v2.menu.Binaries.Off=Off -phoenix_v2.menu.Binaries.Off.build.Binaries=0 -phoenix_v2.menu.Binaries.Binaries=Export (.bin & .bin.signed) -phoenix_v2.menu.Binaries.Binaries.build.Binaries=1 -phoenix_v2.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -phoenix_v2.menu.Binaries.PackedBinaries.build.Binaries=2 +phoenix_v2.menu.Filesystem.LitteFs=LitteFs +phoenix_v2.menu.Filesystem.LitteFs.build.Filesystem=1 +phoenix_v2.menu.Filesystem.SPIFFS=SPIFFS +phoenix_v2.menu.Filesystem.SPIFFS.build.Filesystem=2 +phoenix_v2.menu.Export.Off=Off +phoenix_v2.menu.Export.Off.build.Export=0 +phoenix_v2.menu.Export.Binaries=.bin & .bin.signed +phoenix_v2.menu.Export.Binaries.build.Export=1 +phoenix_v2.menu.Export.GzBinaries=Create & Export gzipped Binaries too +phoenix_v2.menu.Export.GzBinaries.build.Export=2 phoenix_v2.menu.xtal.80=80 MHz phoenix_v2.menu.xtal.80.build.f_cpu=80000000L phoenix_v2.menu.xtal.160=160 MHz @@ -6876,22 +6929,24 @@ eduinowifi.build.core=esp8266 eduinowifi.build.spiffs_pagesize=256 eduinowifi.build.debug_port= eduinowifi.build.debug_level= +eduinowifi.menu.Upload.Sketch=Sketch +eduinowifi.menu.Upload.Sketch.build.Upload=1 +eduinowifi.menu.Upload.Filesystem=Filesystem +eduinowifi.menu.Upload.Filesystem.build.Upload=2 +eduinowifi.menu.Upload.Both=Both +eduinowifi.menu.Upload.Both.build.Upload=3 eduinowifi.menu.Filesystem.Off=Off eduinowifi.menu.Filesystem.Off.build.Filesystem=0 -eduinowifi.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -eduinowifi.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -eduinowifi.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -eduinowifi.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -eduinowifi.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -eduinowifi.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -eduinowifi.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -eduinowifi.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -eduinowifi.menu.Binaries.Off=Off -eduinowifi.menu.Binaries.Off.build.Binaries=0 -eduinowifi.menu.Binaries.Binaries=Export (.bin & .bin.signed) -eduinowifi.menu.Binaries.Binaries.build.Binaries=1 -eduinowifi.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -eduinowifi.menu.Binaries.PackedBinaries.build.Binaries=2 +eduinowifi.menu.Filesystem.LitteFs=LitteFs +eduinowifi.menu.Filesystem.LitteFs.build.Filesystem=1 +eduinowifi.menu.Filesystem.SPIFFS=SPIFFS +eduinowifi.menu.Filesystem.SPIFFS.build.Filesystem=2 +eduinowifi.menu.Export.Off=Off +eduinowifi.menu.Export.Off.build.Export=0 +eduinowifi.menu.Export.Binaries=.bin & .bin.signed +eduinowifi.menu.Export.Binaries.build.Export=1 +eduinowifi.menu.Export.GzBinaries=Create & Export gzipped Binaries too +eduinowifi.menu.Export.GzBinaries.build.Export=2 eduinowifi.menu.xtal.80=80 MHz eduinowifi.menu.xtal.80.build.f_cpu=80000000L eduinowifi.menu.xtal.160=160 MHz @@ -7107,22 +7162,24 @@ wiolink.build.core=esp8266 wiolink.build.spiffs_pagesize=256 wiolink.build.debug_port= wiolink.build.debug_level= +wiolink.menu.Upload.Sketch=Sketch +wiolink.menu.Upload.Sketch.build.Upload=1 +wiolink.menu.Upload.Filesystem=Filesystem +wiolink.menu.Upload.Filesystem.build.Upload=2 +wiolink.menu.Upload.Both=Both +wiolink.menu.Upload.Both.build.Upload=3 wiolink.menu.Filesystem.Off=Off wiolink.menu.Filesystem.Off.build.Filesystem=0 -wiolink.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -wiolink.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -wiolink.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -wiolink.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -wiolink.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -wiolink.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -wiolink.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -wiolink.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -wiolink.menu.Binaries.Off=Off -wiolink.menu.Binaries.Off.build.Binaries=0 -wiolink.menu.Binaries.Binaries=Export (.bin & .bin.signed) -wiolink.menu.Binaries.Binaries.build.Binaries=1 -wiolink.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -wiolink.menu.Binaries.PackedBinaries.build.Binaries=2 +wiolink.menu.Filesystem.LitteFs=LitteFs +wiolink.menu.Filesystem.LitteFs.build.Filesystem=1 +wiolink.menu.Filesystem.SPIFFS=SPIFFS +wiolink.menu.Filesystem.SPIFFS.build.Filesystem=2 +wiolink.menu.Export.Off=Off +wiolink.menu.Export.Off.build.Export=0 +wiolink.menu.Export.Binaries=.bin & .bin.signed +wiolink.menu.Export.Binaries.build.Export=1 +wiolink.menu.Export.GzBinaries=Create & Export gzipped Binaries too +wiolink.menu.Export.GzBinaries.build.Export=2 wiolink.menu.xtal.80=80 MHz wiolink.menu.xtal.80.build.f_cpu=80000000L wiolink.menu.xtal.160=160 MHz @@ -7338,22 +7395,24 @@ blynk.build.core=esp8266 blynk.build.spiffs_pagesize=256 blynk.build.debug_port= blynk.build.debug_level= +blynk.menu.Upload.Sketch=Sketch +blynk.menu.Upload.Sketch.build.Upload=1 +blynk.menu.Upload.Filesystem=Filesystem +blynk.menu.Upload.Filesystem.build.Upload=2 +blynk.menu.Upload.Both=Both +blynk.menu.Upload.Both.build.Upload=3 blynk.menu.Filesystem.Off=Off blynk.menu.Filesystem.Off.build.Filesystem=0 -blynk.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -blynk.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -blynk.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -blynk.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -blynk.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -blynk.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -blynk.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -blynk.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -blynk.menu.Binaries.Off=Off -blynk.menu.Binaries.Off.build.Binaries=0 -blynk.menu.Binaries.Binaries=Export (.bin & .bin.signed) -blynk.menu.Binaries.Binaries.build.Binaries=1 -blynk.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -blynk.menu.Binaries.PackedBinaries.build.Binaries=2 +blynk.menu.Filesystem.LitteFs=LitteFs +blynk.menu.Filesystem.LitteFs.build.Filesystem=1 +blynk.menu.Filesystem.SPIFFS=SPIFFS +blynk.menu.Filesystem.SPIFFS.build.Filesystem=2 +blynk.menu.Export.Off=Off +blynk.menu.Export.Off.build.Export=0 +blynk.menu.Export.Binaries=.bin & .bin.signed +blynk.menu.Export.Binaries.build.Export=1 +blynk.menu.Export.GzBinaries=Create & Export gzipped Binaries too +blynk.menu.Export.GzBinaries.build.Export=2 blynk.menu.xtal.80=80 MHz blynk.menu.xtal.80.build.f_cpu=80000000L blynk.menu.xtal.160=160 MHz @@ -7569,22 +7628,24 @@ thing.build.core=esp8266 thing.build.spiffs_pagesize=256 thing.build.debug_port= thing.build.debug_level= +thing.menu.Upload.Sketch=Sketch +thing.menu.Upload.Sketch.build.Upload=1 +thing.menu.Upload.Filesystem=Filesystem +thing.menu.Upload.Filesystem.build.Upload=2 +thing.menu.Upload.Both=Both +thing.menu.Upload.Both.build.Upload=3 thing.menu.Filesystem.Off=Off thing.menu.Filesystem.Off.build.Filesystem=0 -thing.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -thing.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -thing.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -thing.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -thing.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -thing.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -thing.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -thing.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -thing.menu.Binaries.Off=Off -thing.menu.Binaries.Off.build.Binaries=0 -thing.menu.Binaries.Binaries=Export (.bin & .bin.signed) -thing.menu.Binaries.Binaries.build.Binaries=1 -thing.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -thing.menu.Binaries.PackedBinaries.build.Binaries=2 +thing.menu.Filesystem.LitteFs=LitteFs +thing.menu.Filesystem.LitteFs.build.Filesystem=1 +thing.menu.Filesystem.SPIFFS=SPIFFS +thing.menu.Filesystem.SPIFFS.build.Filesystem=2 +thing.menu.Export.Off=Off +thing.menu.Export.Off.build.Export=0 +thing.menu.Export.Binaries=.bin & .bin.signed +thing.menu.Export.Binaries.build.Export=1 +thing.menu.Export.GzBinaries=Create & Export gzipped Binaries too +thing.menu.Export.GzBinaries.build.Export=2 thing.menu.xtal.80=80 MHz thing.menu.xtal.80.build.f_cpu=80000000L thing.menu.xtal.160=160 MHz @@ -7800,22 +7861,24 @@ thingdev.build.core=esp8266 thingdev.build.spiffs_pagesize=256 thingdev.build.debug_port= thingdev.build.debug_level= +thingdev.menu.Upload.Sketch=Sketch +thingdev.menu.Upload.Sketch.build.Upload=1 +thingdev.menu.Upload.Filesystem=Filesystem +thingdev.menu.Upload.Filesystem.build.Upload=2 +thingdev.menu.Upload.Both=Both +thingdev.menu.Upload.Both.build.Upload=3 thingdev.menu.Filesystem.Off=Off thingdev.menu.Filesystem.Off.build.Filesystem=0 -thingdev.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -thingdev.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -thingdev.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -thingdev.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -thingdev.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -thingdev.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -thingdev.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -thingdev.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -thingdev.menu.Binaries.Off=Off -thingdev.menu.Binaries.Off.build.Binaries=0 -thingdev.menu.Binaries.Binaries=Export (.bin & .bin.signed) -thingdev.menu.Binaries.Binaries.build.Binaries=1 -thingdev.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -thingdev.menu.Binaries.PackedBinaries.build.Binaries=2 +thingdev.menu.Filesystem.LitteFs=LitteFs +thingdev.menu.Filesystem.LitteFs.build.Filesystem=1 +thingdev.menu.Filesystem.SPIFFS=SPIFFS +thingdev.menu.Filesystem.SPIFFS.build.Filesystem=2 +thingdev.menu.Export.Off=Off +thingdev.menu.Export.Off.build.Export=0 +thingdev.menu.Export.Binaries=.bin & .bin.signed +thingdev.menu.Export.Binaries.build.Export=1 +thingdev.menu.Export.GzBinaries=Create & Export gzipped Binaries too +thingdev.menu.Export.GzBinaries.build.Export=2 thingdev.menu.xtal.80=80 MHz thingdev.menu.xtal.80.build.f_cpu=80000000L thingdev.menu.xtal.160=160 MHz @@ -8031,22 +8094,24 @@ esp210.build.variant=generic esp210.build.spiffs_pagesize=256 esp210.build.debug_port= esp210.build.debug_level= +esp210.menu.Upload.Sketch=Sketch +esp210.menu.Upload.Sketch.build.Upload=1 +esp210.menu.Upload.Filesystem=Filesystem +esp210.menu.Upload.Filesystem.build.Upload=2 +esp210.menu.Upload.Both=Both +esp210.menu.Upload.Both.build.Upload=3 esp210.menu.Filesystem.Off=Off esp210.menu.Filesystem.Off.build.Filesystem=0 -esp210.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -esp210.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -esp210.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -esp210.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -esp210.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -esp210.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -esp210.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -esp210.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -esp210.menu.Binaries.Off=Off -esp210.menu.Binaries.Off.build.Binaries=0 -esp210.menu.Binaries.Binaries=Export (.bin & .bin.signed) -esp210.menu.Binaries.Binaries.build.Binaries=1 -esp210.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -esp210.menu.Binaries.PackedBinaries.build.Binaries=2 +esp210.menu.Filesystem.LitteFs=LitteFs +esp210.menu.Filesystem.LitteFs.build.Filesystem=1 +esp210.menu.Filesystem.SPIFFS=SPIFFS +esp210.menu.Filesystem.SPIFFS.build.Filesystem=2 +esp210.menu.Export.Off=Off +esp210.menu.Export.Off.build.Export=0 +esp210.menu.Export.Binaries=.bin & .bin.signed +esp210.menu.Export.Binaries.build.Export=1 +esp210.menu.Export.GzBinaries=Create & Export gzipped Binaries too +esp210.menu.Export.GzBinaries.build.Export=2 esp210.menu.xtal.80=80 MHz esp210.menu.xtal.80.build.f_cpu=80000000L esp210.menu.xtal.160=160 MHz @@ -8262,22 +8327,24 @@ espinotee.build.core=esp8266 espinotee.build.spiffs_pagesize=256 espinotee.build.debug_port= espinotee.build.debug_level= +espinotee.menu.Upload.Sketch=Sketch +espinotee.menu.Upload.Sketch.build.Upload=1 +espinotee.menu.Upload.Filesystem=Filesystem +espinotee.menu.Upload.Filesystem.build.Upload=2 +espinotee.menu.Upload.Both=Both +espinotee.menu.Upload.Both.build.Upload=3 espinotee.menu.Filesystem.Off=Off espinotee.menu.Filesystem.Off.build.Filesystem=0 -espinotee.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -espinotee.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -espinotee.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -espinotee.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -espinotee.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -espinotee.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -espinotee.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -espinotee.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -espinotee.menu.Binaries.Off=Off -espinotee.menu.Binaries.Off.build.Binaries=0 -espinotee.menu.Binaries.Binaries=Export (.bin & .bin.signed) -espinotee.menu.Binaries.Binaries.build.Binaries=1 -espinotee.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -espinotee.menu.Binaries.PackedBinaries.build.Binaries=2 +espinotee.menu.Filesystem.LitteFs=LitteFs +espinotee.menu.Filesystem.LitteFs.build.Filesystem=1 +espinotee.menu.Filesystem.SPIFFS=SPIFFS +espinotee.menu.Filesystem.SPIFFS.build.Filesystem=2 +espinotee.menu.Export.Off=Off +espinotee.menu.Export.Off.build.Export=0 +espinotee.menu.Export.Binaries=.bin & .bin.signed +espinotee.menu.Export.Binaries.build.Export=1 +espinotee.menu.Export.GzBinaries=Create & Export gzipped Binaries too +espinotee.menu.Export.GzBinaries.build.Export=2 espinotee.menu.xtal.80=80 MHz espinotee.menu.xtal.80.build.f_cpu=80000000L espinotee.menu.xtal.160=160 MHz @@ -8493,22 +8560,24 @@ wifi_kit_8.build.core=esp8266 wifi_kit_8.build.spiffs_pagesize=256 wifi_kit_8.build.debug_port= wifi_kit_8.build.debug_level= +wifi_kit_8.menu.Upload.Sketch=Sketch +wifi_kit_8.menu.Upload.Sketch.build.Upload=1 +wifi_kit_8.menu.Upload.Filesystem=Filesystem +wifi_kit_8.menu.Upload.Filesystem.build.Upload=2 +wifi_kit_8.menu.Upload.Both=Both +wifi_kit_8.menu.Upload.Both.build.Upload=3 wifi_kit_8.menu.Filesystem.Off=Off wifi_kit_8.menu.Filesystem.Off.build.Filesystem=0 -wifi_kit_8.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -wifi_kit_8.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -wifi_kit_8.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -wifi_kit_8.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -wifi_kit_8.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -wifi_kit_8.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -wifi_kit_8.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -wifi_kit_8.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -wifi_kit_8.menu.Binaries.Off=Off -wifi_kit_8.menu.Binaries.Off.build.Binaries=0 -wifi_kit_8.menu.Binaries.Binaries=Export (.bin & .bin.signed) -wifi_kit_8.menu.Binaries.Binaries.build.Binaries=1 -wifi_kit_8.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -wifi_kit_8.menu.Binaries.PackedBinaries.build.Binaries=2 +wifi_kit_8.menu.Filesystem.LitteFs=LitteFs +wifi_kit_8.menu.Filesystem.LitteFs.build.Filesystem=1 +wifi_kit_8.menu.Filesystem.SPIFFS=SPIFFS +wifi_kit_8.menu.Filesystem.SPIFFS.build.Filesystem=2 +wifi_kit_8.menu.Export.Off=Off +wifi_kit_8.menu.Export.Off.build.Export=0 +wifi_kit_8.menu.Export.Binaries=.bin & .bin.signed +wifi_kit_8.menu.Export.Binaries.build.Export=1 +wifi_kit_8.menu.Export.GzBinaries=Create & Export gzipped Binaries too +wifi_kit_8.menu.Export.GzBinaries.build.Export=2 wifi_kit_8.menu.xtal.80=80 MHz wifi_kit_8.menu.xtal.80.build.f_cpu=80000000L wifi_kit_8.menu.xtal.160=160 MHz @@ -8724,22 +8793,24 @@ wifiduino.build.core=esp8266 wifiduino.build.spiffs_pagesize=256 wifiduino.build.debug_port= wifiduino.build.debug_level= +wifiduino.menu.Upload.Sketch=Sketch +wifiduino.menu.Upload.Sketch.build.Upload=1 +wifiduino.menu.Upload.Filesystem=Filesystem +wifiduino.menu.Upload.Filesystem.build.Upload=2 +wifiduino.menu.Upload.Both=Both +wifiduino.menu.Upload.Both.build.Upload=3 wifiduino.menu.Filesystem.Off=Off wifiduino.menu.Filesystem.Off.build.Filesystem=0 -wifiduino.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -wifiduino.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -wifiduino.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -wifiduino.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -wifiduino.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -wifiduino.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -wifiduino.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -wifiduino.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -wifiduino.menu.Binaries.Off=Off -wifiduino.menu.Binaries.Off.build.Binaries=0 -wifiduino.menu.Binaries.Binaries=Export (.bin & .bin.signed) -wifiduino.menu.Binaries.Binaries.build.Binaries=1 -wifiduino.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -wifiduino.menu.Binaries.PackedBinaries.build.Binaries=2 +wifiduino.menu.Filesystem.LitteFs=LitteFs +wifiduino.menu.Filesystem.LitteFs.build.Filesystem=1 +wifiduino.menu.Filesystem.SPIFFS=SPIFFS +wifiduino.menu.Filesystem.SPIFFS.build.Filesystem=2 +wifiduino.menu.Export.Off=Off +wifiduino.menu.Export.Off.build.Export=0 +wifiduino.menu.Export.Binaries=.bin & .bin.signed +wifiduino.menu.Export.Binaries.build.Export=1 +wifiduino.menu.Export.GzBinaries=Create & Export gzipped Binaries too +wifiduino.menu.Export.GzBinaries.build.Export=2 wifiduino.menu.xtal.80=80 MHz wifiduino.menu.xtal.80.build.f_cpu=80000000L wifiduino.menu.xtal.160=160 MHz @@ -8972,22 +9043,24 @@ wifinfo.build.core=esp8266 wifinfo.build.spiffs_pagesize=256 wifinfo.build.debug_port= wifinfo.build.debug_level= +wifinfo.menu.Upload.Sketch=Sketch +wifinfo.menu.Upload.Sketch.build.Upload=1 +wifinfo.menu.Upload.Filesystem=Filesystem +wifinfo.menu.Upload.Filesystem.build.Upload=2 +wifinfo.menu.Upload.Both=Both +wifinfo.menu.Upload.Both.build.Upload=3 wifinfo.menu.Filesystem.Off=Off wifinfo.menu.Filesystem.Off.build.Filesystem=0 -wifinfo.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -wifinfo.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -wifinfo.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -wifinfo.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -wifinfo.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -wifinfo.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -wifinfo.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -wifinfo.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -wifinfo.menu.Binaries.Off=Off -wifinfo.menu.Binaries.Off.build.Binaries=0 -wifinfo.menu.Binaries.Binaries=Export (.bin & .bin.signed) -wifinfo.menu.Binaries.Binaries.build.Binaries=1 -wifinfo.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -wifinfo.menu.Binaries.PackedBinaries.build.Binaries=2 +wifinfo.menu.Filesystem.LitteFs=LitteFs +wifinfo.menu.Filesystem.LitteFs.build.Filesystem=1 +wifinfo.menu.Filesystem.SPIFFS=SPIFFS +wifinfo.menu.Filesystem.SPIFFS.build.Filesystem=2 +wifinfo.menu.Export.Off=Off +wifinfo.menu.Export.Off.build.Export=0 +wifinfo.menu.Export.Binaries=.bin & .bin.signed +wifinfo.menu.Export.Binaries.build.Export=1 +wifinfo.menu.Export.GzBinaries=Create & Export gzipped Binaries too +wifinfo.menu.Export.GzBinaries.build.Export=2 wifinfo.menu.xtal.80=80 MHz wifinfo.menu.xtal.80.build.f_cpu=80000000L wifinfo.menu.xtal.160=160 MHz @@ -9250,22 +9323,24 @@ cw01.build.core=esp8266 cw01.build.spiffs_pagesize=256 cw01.build.debug_port= cw01.build.debug_level= +cw01.menu.Upload.Sketch=Sketch +cw01.menu.Upload.Sketch.build.Upload=1 +cw01.menu.Upload.Filesystem=Filesystem +cw01.menu.Upload.Filesystem.build.Upload=2 +cw01.menu.Upload.Both=Both +cw01.menu.Upload.Both.build.Upload=3 cw01.menu.Filesystem.Off=Off cw01.menu.Filesystem.Off.build.Filesystem=0 -cw01.menu.Filesystem.LitteFsCreateUpload=LitteFs: Create & Upload -cw01.menu.Filesystem.LitteFsCreateUpload.build.Filesystem=1 -cw01.menu.Filesystem.LitteFsCreateExport=LitteFs: Create only -cw01.menu.Filesystem.LitteFsCreateExport.build.Filesystem=2 -cw01.menu.Filesystem.SPIFFSCreateUpload=SPIFFS: Create & Upload -cw01.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem=3 -cw01.menu.Filesystem.SPIFFSCreateExport=SPIFFS: Create only -cw01.menu.Filesystem.SPIFFSCreateExport.build.Filesystem=4 -cw01.menu.Binaries.Off=Off -cw01.menu.Binaries.Off.build.Binaries=0 -cw01.menu.Binaries.Binaries=Export (.bin & .bin.signed) -cw01.menu.Binaries.Binaries.build.Binaries=1 -cw01.menu.Binaries.PackedBinaries=Create & Export gzipped Binaries too -cw01.menu.Binaries.PackedBinaries.build.Binaries=2 +cw01.menu.Filesystem.LitteFs=LitteFs +cw01.menu.Filesystem.LitteFs.build.Filesystem=1 +cw01.menu.Filesystem.SPIFFS=SPIFFS +cw01.menu.Filesystem.SPIFFS.build.Filesystem=2 +cw01.menu.Export.Off=Off +cw01.menu.Export.Off.build.Export=0 +cw01.menu.Export.Binaries=.bin & .bin.signed +cw01.menu.Export.Binaries.build.Export=1 +cw01.menu.Export.GzBinaries=Create & Export gzipped Binaries too +cw01.menu.Export.GzBinaries.build.Export=2 cw01.menu.xtal.80=80 MHz cw01.menu.xtal.80.build.f_cpu=80000000L cw01.menu.xtal.160=160 MHz diff --git a/doc/filesystem.rst b/doc/filesystem.rst index 85ee96abb0..988b4d558a 100644 --- a/doc/filesystem.rst +++ b/doc/filesystem.rst @@ -192,8 +192,55 @@ in the specific subdirectory. This mimics the POSIX behavior for directory traversal most C programmers are used to. -Uploading files to file system ------------------------------- +Uploading files to file system (new) +------------------------------------ + +Since PullRequest #8266 Filsystem generation is integrated into the +“compile and/or upload” action of Arduino. +There is no need to download any additional tool. + +This integration is done by adding 3 entries (“Upload”, "Filesystem" and “Export”) +to the tools-menu. These entries are presented just like any other options +for esp8266 (“Upload speed” ... “Non-32-Bit Access”) and placed right after +the last. + +Menu-Entry “Upload” let You choose between: +- Sketch +- Filesystem +- Both +This Menu controls which parts are uploaded when You choose "Sketch->Upload" +(Ctrl-U) from the Arduino Menu. + +Menu-Entry “Filesystem” let You choose between: +- Off +- LitteFs +- SPIFFS +This Menu controls which Fs will be created when You choose "Sketch->Compile" +(Ctrl-R) from the Arduino Menu. The Fs will always be created inside the +"export" dir (see below). + +Menu-Entry “Export” let You choose between: +- Off +- .bin & .bin.signed) +- Create & Export gzipped Binaries too +This Menu controls export & generation of (extra) Sketch-Binaries. + +The "export" dir +................ +After a (successful) compile, the files will be exported to a subdir +“bin/{variant}” of Your sketch directory +(“{variant}” replaced with the name of the board as shown behind +“Tools -> Board:”). +Signed variants of all Binaries are generated similar to the +“automatic signing” done for normal sketch binary. + +As valid for the "old" tools mentioned below, it is nessesary to place +files you want to be inside the generated file system into a directory +named ``data`` inside Your sketch directory. + + +Uploading files to file system (old tools) +------------------------------------------ *ESP8266FS* is a tool which integrates into the Arduino IDE. It adds a menu item to *Tools* menu for uploading the contents of sketch data diff --git a/platform.txt b/platform.txt index bff7be2490..d1f7e356c9 100644 --- a/platform.txt +++ b/platform.txt @@ -131,7 +131,7 @@ recipe.objcopy.hex.2.pattern="{runtime.tools.python3.path}/python3" -I "{runtime recipe.objcopy.hex.3.pattern="{runtime.tools.python3.path}/python3" -I "{runtime.tools.sizes}" --elf "{build.path}/{build.project_name}.elf" --path "{runtime.tools.xtensa-lx106-elf-gcc.path}/bin" --mmu "{build.mmuflags}" # Post-Build: Handle new Menu-Enties: Filesystem & Binaries -recipe.hooks.objcopy.postobjcopy.1.pattern="{runtime.tools.python3.path}/python3" -I "{runtime.tools.postbuild}" -fi "{build.Filesystem}" -bi "{build.Binaries}" -na "{build.project_name}" -bp "{build.path}" -so "{build.source.path}" -va "{build.variant}" -ss "{build.spiffs_start}" -se "{build.spiffs_end}" -sp "{build.spiffs_pagesize}" -sl "{build.spiffs_blocksize}" +recipe.hooks.objcopy.postobjcopy.1.pattern="{runtime.tools.python3.path}/python3" -I "{runtime.tools.postbuild}" -fi "{build.Filesystem}" -ex "{build.Export}" -na "{build.project_name}" -bp "{build.path}" -so "{build.source.path}" -va "{build.variant}" -ss "{build.spiffs_start}" -se "{build.spiffs_end}" -sp "{build.spiffs_pagesize}" -sl "{build.spiffs_blocksize}" ## Save hex recipe.output.tmp_file.1={build.project_name}.bin @@ -163,9 +163,9 @@ tools.esptool.upload.params.quiet= # Old behaviour (without integrated handling of filesystem & gzipd Binaries) can be (re)enabled by commenting in/out the following 2x2 entries #tools.esptool.upload.pattern="{cmd}" -I "{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.pattern="{cmd}" -I "{runtime.platform.path}/tools/uploadGn.py" -fi "{build.Filesystem}" --port "{serial.port}" --baud "{upload.speed}" {upload.resetmethod} --sk 0x0 "{build.path}/{build.project_name}.bin" --fs {build.spiffs_start} "{build.path}/{build.project_name}" {upload.erase_cmd} "{upload.verbose}" +tools.esptool.upload.pattern="{cmd}" -I "{runtime.platform.path}/tools/uploadGn.py" -fi "{build.Filesystem}" -up "{build.Upload}" --port "{serial.port}" --baud "{upload.speed}" {upload.resetmethod} --sk 0x0 "{build.path}/{build.project_name}.bin" --fs {build.spiffs_start} "{build.path}/{build.project_name}" {upload.erase_cmd} "{upload.verbose}" #tools.esptool.upload.network_pattern="{network_cmd}" -I "{runtime.platform.path}/tools/espota.py" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin" -tools.esptool.upload.network_pattern="{network_cmd}" -I "{runtime.platform.path}/tools/netUploadGn.py" -fi "{build.Filesystem}" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" --sk "{build.path}/{build.project_name}.bin" --fs "{build.path}/{build.project_name}" +tools.esptool.upload.network_pattern="{network_cmd}" -I "{runtime.platform.path}/tools/netUploadGn.py" -fi "{build.Filesystem}" -up "{build.Upload}" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" --sk "{build.path}/{build.project_name}.bin" --fs "{build.path}/{build.project_name}" tools.mkspiffs.cmd=mkspiffs tools.mkspiffs.cmd.windows=mkspiffs.exe diff --git a/tools/boards.txt.py b/tools/boards.txt.py index d62356f10b..98c9b09174 100755 --- a/tools/boards.txt.py +++ b/tools/boards.txt.py @@ -1033,23 +1033,26 @@ ( '.build.debug_port', '' ), ( '.build.debug_level', '' ), + ( '.menu.Upload.Sketch', 'Sketch' ), + ( '.menu.Upload.Sketch.build.Upload', '1' ), + ( '.menu.Upload.Filesystem', 'Filesystem' ), + ( '.menu.Upload.Filesystem.build.Upload', '2' ), + ( '.menu.Upload.Both', 'Both' ), + ( '.menu.Upload.Both.build.Upload', '3' ), + ( '.menu.Filesystem.Off', 'Off' ), ( '.menu.Filesystem.Off.build.Filesystem', '0' ), - ( '.menu.Filesystem.LitteFsCreateUpload', 'LitteFs: Create & Upload' ), - ( '.menu.Filesystem.LitteFsCreateUpload.build.Filesystem', '1' ), - ( '.menu.Filesystem.LitteFsCreateExport', 'LitteFs: Create only' ), - ( '.menu.Filesystem.LitteFsCreateExport.build.Filesystem', '2' ), - ( '.menu.Filesystem.SPIFFSCreateUpload', 'SPIFFS: Create & Upload' ), - ( '.menu.Filesystem.SPIFFSCreateUpload.build.Filesystem', '3' ), - ( '.menu.Filesystem.SPIFFSCreateExport', 'SPIFFS: Create only' ), - ( '.menu.Filesystem.SPIFFSCreateExport.build.Filesystem', '4' ), - - ( '.menu.Binaries.Off', 'Off' ), - ( '.menu.Binaries.Off.build.Binaries', '0' ), - ( '.menu.Binaries.Binaries', 'Export (.bin & .bin.signed)' ), - ( '.menu.Binaries.Binaries.build.Binaries', '1' ), - ( '.menu.Binaries.PackedBinaries', 'Create & Export gzipped Binaries too' ), - ( '.menu.Binaries.PackedBinaries.build.Binaries', '2' ), + ( '.menu.Filesystem.LitteFs', 'LitteFs' ), + ( '.menu.Filesystem.LitteFs.build.Filesystem', '1' ), + ( '.menu.Filesystem.SPIFFS', 'SPIFFS' ), + ( '.menu.Filesystem.SPIFFS.build.Filesystem', '2' ), + + ( '.menu.Export.Off', 'Off' ), + ( '.menu.Export.Off.build.Export', '0' ), + ( '.menu.Export.Binaries', '.bin & .bin.signed' ), + ( '.menu.Export.Binaries.build.Export', '1' ), + ( '.menu.Export.GzBinaries', 'Create & Export gzipped Binaries too' ), + ( '.menu.Export.GzBinaries.build.Export', '2' ), ]), ####################### @@ -1676,8 +1679,9 @@ def all_boards (): print('menu.ssl=SSL Support') print('menu.mmu=MMU') print('menu.non32xfer=Non-32-Bit Access') + print('menu.Upload=Upload') print('menu.Filesystem=Filesystem') - print('menu.Binaries=Binaries') + print('menu.Export=Export') print('') missingboards = [] diff --git a/tools/postbuild.py b/tools/postbuild.py index 0ce2a0ef82..700b29f531 100755 --- a/tools/postbuild.py +++ b/tools/postbuild.py @@ -15,8 +15,8 @@ def parse_args( argsIn ): parser = argparse.ArgumentParser( description = 'PostBuild for ESP8288' ) - parser.add_argument( '-fi', '--Filesystem', type = int, default = 0, help = '0: Off, 1: LitteFs: Create & Upload, 2: LitteFs: Create only, 3: SPIFFS: Create & Upload, 4: SPIFFS: Create only' ) - parser.add_argument( '-bi', '--Binaries', type = int, default = 0, help = '0: Off, 1: Export (.bin & .bin.signed), 2: Create & Export gzipped Binaries too' ) + parser.add_argument( '-fi', '--Filesystem', type = int, default = 0, help = '0: Off, 1: LitteFs, 3: SPIFFS' ) + parser.add_argument( '-ex', '--Export', type = int, default = 0, help = '0: Off, 1: .bin & .bin.signed, 2: Create & Export gzipped Binaries too' ) parser.add_argument( '-na', '--name', type = str, required = True, help = 'Name of sketch (without extension)' ) parser.add_argument( '-bp', '--buildPath', type = str, required = True, help = 'Path to temporary dir where sketch was build' ) parser.add_argument( '-so', '--source', type = str, required = True, help = 'Path to sketch' ) @@ -71,11 +71,21 @@ def CreateSignedFile( dir, name ): raise FatalError( "Exception while signing '%s': %s" % ( name, e ) ) return [] +def RemoveFs( fsName ): + """ Removes the (possible existing from prev. builds) given fs from {build.path} + This enshures, that (at upload-stage) we don't use the wrong fs created formerly. + fsName = "littlefs" "spiffs" used for naming the binary to remove. """ + imageName = "./%s.%s" % ( Args.name, fsName ) + if os.path.exists( imageName ): + os.remove( imageName ) + def CreateFs( fsName, mkFsName ): """ Creates the given fs from all files inside subdir 'data' of the sketch. fsName = "littlefs" "spiffs" used for naming the generated binary. mkFsName = "mklittlefs" | "mkspiffs" the name of the programm that generates the fs """ mkFsPath = Which( mkFsName, os.path.join( ToolsDir, mkFsName ) ) + if mkFsPath is None: + mkFsPath = Which( "%s.exe" % mkFsName, os.path.join( ToolsDir, mkFsName ) ) res = [] dataDir = "%s/data" % ( Args.source ) if len( Args.spiffs_start ) == 0 or len( Args.spiffs_end ) == 0: @@ -107,7 +117,7 @@ def CreateFs( fsName, mkFsName ): signing = Signing and os.path.exists( os.path.abspath( Args.name + ".bin.signed" ) ) if signing: res += CreateSignedFile( DstDir, imageName ) - if Args.Binaries == 2: + if Args.Export == 2: res += CreateGzFile( DstDir, imageName ) if signing: res += CreateSignedFile( DstDir, "%s.%s.gz" % ( Args.name, fsName ) ) @@ -116,18 +126,20 @@ def CreateFs( fsName, mkFsName ): def ProcessFilesystem_(): if Args.spiffs_start is None or Args.spiffs_end is None: raise ProcessError( "'spiffs_start' and/or 'spiffs_end' missing" ) - if Args.Filesystem == 1 or Args.Filesystem == 2: + if Args.Filesystem == 1: + RemoveFs( "spiffs" ) return CreateFs( "littlefs", "mklittlefs" ) - elif Args.Filesystem == 3 or Args.Filesystem == 4: + elif Args.Filesystem == 2: + RemoveFs( "littlefs" ) return CreateFs( "spiffs", "mkspiffs" ) -def ProcessBinaries_(): +def ProcessExport_(): res = [] os.makedirs( DstDir, exist_ok = True ) # Copy Binaries res += CopyToDir( Args.name, "bin", DstDir ) res += CopyToDir( Args.name, "bin.signed", DstDir ) - if Args.Binaries == 2: + if Args.Export == 2: # Create & Export gzipped Binaries too res += CreateGzFile( DstDir, "%s.bin" % Args.name ) if os.path.exists( os.path.abspath( os.path.join( DstDir, "%s.bin.signed" % Args.name ) ) ): @@ -141,10 +153,14 @@ def ProcessFilesystem(): Msg( '...files generated: %s' % ", ".join( filesCreated ) ) except ProcessError as e: Msg( '...aborted: %s' % e ) + try: + WarningDialog( "Filesystem Create aborted", e ) + except ProcessError: + pass -def ProcessBinaries(): +def ProcessExport(): Msg( "Exporting Binaries..." ) - filesExported = ProcessBinaries_() + filesExported = ProcessExport_() Msg( '...files exported: %s' % ", ".join( filesExported ) ) def main( argsIn = None ): @@ -157,7 +173,7 @@ def main( argsIn = None ): #Debug( "Python-Path: %s" % sys.executable ) parse_args( argsIn ) - #Debug( "Args: %s" % ", "join( sys.argv[ 1: ] ) ) + #Debug( "Posbuild: Args: %s" % ", ".join( sys.argv[ 1: ] ) ) #!! For unknown reason using/concatinig Args.buildPath with "/" (or enything else) will result in an empthy string ??? #if You uncomment the following two lines You will see something like: @@ -169,6 +185,7 @@ def main( argsIn = None ): # Workaround: cd to the build/temp path cwd = os.getcwd() os.chdir( Args.buildPath ) + Msg( 'Build-Dir: %s\n' % Args.buildPath ) #! Even this will not give the correct path ! #Debug( "abspath: %s" % os.path.abspath( "./" ) ) @@ -179,10 +196,13 @@ def main( argsIn = None ): SigningPrivKeyPath = os.path.abspath( "%s/private.key" % Args.source ) Signing = os.path.isfile( SigningPrivKeyPath ) DstDir = os.path.join( Args.source, "bin", Args.variant ) - if Args.Filesystem != 0: + if Args.Filesystem == 0: + RemoveFs( "littlefs" ) + RemoveFs( "spiffs" ) + else: ProcessFilesystem() - if Args.Binaries != 0: - ProcessBinaries() + if Args.Export != 0: + ProcessExport() finally: # restore working dir os.chdir( cwd ) diff --git a/tools/uploadGn.py b/tools/uploadGn.py index 11920f2a2e..2282264763 100755 --- a/tools/uploadGn.py +++ b/tools/uploadGn.py @@ -37,7 +37,8 @@ #Args: (new) # As defined in 'platform.txt' for 'tools.esptool.upload.pattern' possible values # | | -# -fi "{build.Filesystem}" 0-4 +# -up "{build.Upload}" 1-3 +# -fi "{build.Filesystem}" 0-2 # --port "{serial.port}" e.g.: /dev/ttyUSB0 # --baud "{upload.speed}" e.g.: 115200 # {upload.resetmethod} --before { default_reset | no_reset | no_reset_no_sync } --after { hard_reset | soft_reset } @@ -50,7 +51,8 @@ def parse_args( argsIn ): parser = argparse.ArgumentParser( description = 'Upload-Wrapper for Arduino esp8266' ) - parser.add_argument( '-fi', '--Filesystem', type = int, default = 0, help = '0: Off, 1: LitteFs: Create & Upload, 2: LitteFs: Create only, 3: SPIFFS: Create & Upload, 4: SPIFFS: Create only' ) + parser.add_argument( '-up', '--Upload', type = int, default = 1, help = '1: Sketch, 2: Filesystem, 3: Both' ) + parser.add_argument( '-fi', '--Filesystem', type = int, default = 0, help = '0: Off, 1: LitteFs, 3: SPIFFS' ) parser.add_argument( '--port', type = str, required = True, help = 'path to serial device' ) parser.add_argument( '--baud', type = str, required = True, help = 'baudrate' ) parser.add_argument( '--before', type = str, required = True, help = 'before (default_reset/no_reset/no_reset_no_sync)' ) @@ -87,27 +89,29 @@ def main( argsIn = None ): esptoolArgs += [ '--trace' ] esptoolArgs += [ 'write_flash' ] - if len( Args.erase_cmd ) and Args.erase_cmd[ 0 ] == "erase_flash": - esptoolArgs += [ '--erase-all' ] - esptoolArgs += [ '--flash_size', 'detect', Args.sk[ 0 ], Args.sk[ 1 ] ] - EraseFilePath = '' + filesUploaded = [] try: - if len( Args.erase_cmd ) and Args.erase_cmd[ 0 ] == "erase_region": - # Generate temporary empty (0xff) file - f, EraseFilePath = tempfile.mkstemp() - os.write( f, bytearray( [ 255 ] * int( Args.erase_cmd[ 2 ], 0 ) ) ) - os.close( f ) - esptoolArgs += [ Args.erase_cmd[ 1 ], EraseFilePath ] - - filesUploaded = [ Path( Args.sk[ 1 ] ).name ] - if Args.Filesystem == 1: - esptoolArgs += [ Args.fs[ 0 ], "%s.littlefs" % Args.fs[ 1 ] ] - filesUploaded += [ Path( Args.fs[ 1 ] ).name ] - elif Args.Filesystem == 3: - esptoolArgs += [ Args.fs[ 0 ], "%s.spiffs" % Args.fs[ 1 ] ] - filesUploaded += [ Path( Args.fs[ 1 ] ).name ] - + if ( Args.Upload & 1 ) == 1: + if len( Args.erase_cmd ) and Args.erase_cmd[ 0 ] == "erase_flash": + esptoolArgs += [ '--erase-all' ] + esptoolArgs += [ '--flash_size', 'detect', Args.sk[ 0 ], Args.sk[ 1 ] ] + + if len( Args.erase_cmd ) and Args.erase_cmd[ 0 ] == "erase_region": + # Generate temporary empty (0xff) file + f, EraseFilePath = tempfile.mkstemp() + os.write( f, bytearray( [ 255 ] * int( Args.erase_cmd[ 2 ], 0 ) ) ) + os.close( f ) + esptoolArgs += [ Args.erase_cmd[ 1 ], EraseFilePath ] + + filesUploaded += [ Path( Args.sk[ 1 ] ).name ] + + if ( Args.Upload & 2 ) == 2: + fsName = "%s.%s" % ( Args.fs[ 1 ], "littlefs" if Args.Filesystem == 1 else "spiffs" ) + if os.path.exists( fsName ): + esptoolArgs += [ Args.fs[ 0 ], fsName ] + filesUploaded += [ Path( fsName ).name ] + Msg( "Uploading Binaries..." ) #Debug( str( esptoolArgs ) ) esptool.main( esptoolArgs ) diff --git a/tools/utillities.py b/tools/utillities.py index 75af7a1207..d300b7b0a7 100755 --- a/tools/utillities.py +++ b/tools/utillities.py @@ -75,8 +75,8 @@ def RemoveIno( path ): if path[ -4: ] == ".ino": path = name[ 0:-4 ] return path - -def ConfirmDialog( title, text ): + +def TkDialog( title, text, mbName ): try: import tkinter from tkinter import messagebox @@ -86,5 +86,24 @@ def ConfirmDialog( title, text ): rootWin.overrideredirect( 1 ) # Avoid it appearing and then disappearing quickly #rootWin.iconbitmap("PythonIcon.ico") # Set an icon (this is optional - must be in a .ico format) rootWin.withdraw() # Hide the window as we do not want to see this one - return messagebox.askyesno( title, text, parent = rootWin ) + mbFunc = getattr( messagebox, mbName ) + return mbFunc( title, text, parent = rootWin ) +def InfoDialog( title, text ): + return TkDialog( title, text, 'showinfo' ) +def WarningDialog( title, text ): + return TkDialog( title, text, 'showwarning' ) +def ErrorDialog( title, text ): + return TkDialog( title, text, 'showerror' ) +def QuestionDialog( title, text ): + return TkDialog( title, text, 'askquestion' ) +def OkCancelDialog( title, text ): + return TkDialog( title, text, 'askokcancel' ) +def RetryCancelDialog( title, text ): + return TkDialog( title, text, 'askretrycancel' ) +def YesNoDialog( title, text ): + return TkDialog( title, text, 'askyesno' ) +def ConfirmDialog( title, text ): + return TkDialog( title, text, 'askyesno' ) +def YesNoCancelDialog( title, text ): + return TkDialog( title, text, 'askyesnocancel' ) From 87eacb418607ab4bcabf8270467ddae83ba18655 Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Wed, 8 Sep 2021 10:17:42 +0200 Subject: [PATCH 16/19] Remover empthy dir --- libraries/SoftwareSerial | 1 - 1 file changed, 1 deletion(-) delete mode 160000 libraries/SoftwareSerial diff --git a/libraries/SoftwareSerial b/libraries/SoftwareSerial deleted file mode 160000 index 566809f3de..0000000000 --- a/libraries/SoftwareSerial +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 566809f3de9de551ce1f2dedd3f7417c8b2b7e79 From 33801488f58f8281da4fe5ff0be80f5af7e356c8 Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Wed, 15 Sep 2021 08:40:30 +0200 Subject: [PATCH 17/19] Changes as requested by d-a-v --- .gitignore | 1 + doc/filesystem.rst | 22 ++-- platform.txt | 7 +- tools/{netUploadGn.py => netUpload.py} | 8 +- tools/postbuild.py | 4 +- tools/upload.py | 170 +++++++++++++++++-------- tools/uploadGn.py | 131 ------------------- tools/{utillities.py => utilities.py} | 0 8 files changed, 135 insertions(+), 208 deletions(-) rename tools/{netUploadGn.py => netUpload.py} (91%) delete mode 100755 tools/uploadGn.py rename tools/{utillities.py => utilities.py} (100%) diff --git a/.gitignore b/.gitignore index 4952ee07b2..7fd384ea42 100644 --- a/.gitignore +++ b/.gitignore @@ -36,5 +36,6 @@ tools/sdk/ld/backup/* tools/Gui.py tools/Replace2SpceWith4.txt *(Kopie)* +platform.local.txt diff --git a/doc/filesystem.rst b/doc/filesystem.rst index 988b4d558a..3a8dbbf2b7 100644 --- a/doc/filesystem.rst +++ b/doc/filesystem.rst @@ -192,31 +192,29 @@ in the specific subdirectory. This mimics the POSIX behavior for directory traversal most C programmers are used to. -Uploading files to file system (new) ------------------------------------- +Uploading files to file system (combined firmware and filesystem) +----------------------------------------------------------------- Since PullRequest #8266 Filsystem generation is integrated into the “compile and/or upload” action of Arduino. There is no need to download any additional tool. -This integration is done by adding 3 entries (“Upload”, "Filesystem" and “Export”) -to the tools-menu. These entries are presented just like any other options -for esp8266 (“Upload speed” ... “Non-32-Bit Access”) and placed right after -the last. +Its configuration has 3 entries (“Upload”, "Filesystem" and "Export") in +the IDE's "Tools" menu, and is described as follows: -Menu-Entry “Upload” let You choose between: +Menu-Entry “Upload” lets You choose between: - Sketch - Filesystem - Both -This Menu controls which parts are uploaded when You choose "Sketch->Upload" -(Ctrl-U) from the Arduino Menu. +This Menu controls which parts are uploaded when "Sketch->Upload" (Ctrl-U) +is selected from the Arduino Menu. -Menu-Entry “Filesystem” let You choose between: +Menu-Entry “Filesystem” lets You choose between: - Off - LitteFs - SPIFFS -This Menu controls which Fs will be created when You choose "Sketch->Compile" -(Ctrl-R) from the Arduino Menu. The Fs will always be created inside the +This Menu controls which Fs will be created when "Sketch->Compile" (Ctrl-R) +is selected from the Arduino Menu. The Fs will always be created inside the "export" dir (see below). Menu-Entry “Export” let You choose between: diff --git a/platform.txt b/platform.txt index d1f7e356c9..b2a4070430 100644 --- a/platform.txt +++ b/platform.txt @@ -161,11 +161,8 @@ tools.esptool.upload.protocol=esp tools.esptool.upload.params.verbose= tools.esptool.upload.params.quiet= -# Old behaviour (without integrated handling of filesystem & gzipd Binaries) can be (re)enabled by commenting in/out the following 2x2 entries -#tools.esptool.upload.pattern="{cmd}" -I "{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.pattern="{cmd}" -I "{runtime.platform.path}/tools/uploadGn.py" -fi "{build.Filesystem}" -up "{build.Upload}" --port "{serial.port}" --baud "{upload.speed}" {upload.resetmethod} --sk 0x0 "{build.path}/{build.project_name}.bin" --fs {build.spiffs_start} "{build.path}/{build.project_name}" {upload.erase_cmd} "{upload.verbose}" -#tools.esptool.upload.network_pattern="{network_cmd}" -I "{runtime.platform.path}/tools/espota.py" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin" -tools.esptool.upload.network_pattern="{network_cmd}" -I "{runtime.platform.path}/tools/netUploadGn.py" -fi "{build.Filesystem}" -up "{build.Upload}" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" --sk "{build.path}/{build.project_name}.bin" --fs "{build.path}/{build.project_name}" +tools.esptool.upload.pattern="{cmd}" -I "{runtime.platform.path}/tools/upload.py" -fi "{build.Filesystem}" -up "{build.Upload}" --port "{serial.port}" --baud "{upload.speed}" {upload.resetmethod} --sk 0x0 "{build.path}/{build.project_name}.bin" --fs {build.spiffs_start} "{build.path}/{build.project_name}" {upload.erase_cmd} "{upload.verbose}" +tools.esptool.upload.network_pattern="{network_cmd}" -I "{runtime.platform.path}/tools/netUpload.py" -fi "{build.Filesystem}" -up "{build.Upload}" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" --sk "{build.path}/{build.project_name}.bin" --fs "{build.path}/{build.project_name}" tools.mkspiffs.cmd=mkspiffs tools.mkspiffs.cmd.windows=mkspiffs.exe diff --git a/tools/netUploadGn.py b/tools/netUpload.py similarity index 91% rename from tools/netUploadGn.py rename to tools/netUpload.py index 1138a337bf..f80af195c6 100755 --- a/tools/netUploadGn.py +++ b/tools/netUpload.py @@ -8,16 +8,16 @@ ToolsDir = os.path.dirname( os.path.realpath( __file__ ) ).replace( '\\', '/' ) + "/" # convert to UNIX format try: sys.path.insert( 0, ToolsDir ) # ToolsDir - from utillities import * # If this fails, we can't continue and will bomb below + from utilities import * # If this fails, we can't continue and will bomb below except Exception as e: - sys.stderr.write( '\nImport of utillities.py failed.\n...Is it not next to this %s tool?\n...Exception was: %s\n' % ( __file__, e ) ) + sys.stderr.write( '\nImport of utilities.py failed.\n...Is it not next to this %s tool?\n...Exception was: %s\n' % ( __file__, e ) ) sys.exit( 2 ) try: sys.path.insert( 0, ToolsDir ) # Add this dir to search path import espota # If this fails, we can't continue and will bomb below except Exception: - Msg( '\nespota not found next to this netUploadGn.py tool.' ) + Msg( '\nespota not found next to this netUpload.py tool.' ) sys.exit( 2 ) #Args: (original) @@ -51,7 +51,7 @@ def parse_args( argsIn ): def main( argsIn = None ): """ - Main function for netUploadGn + Main function for netUpload argsIn - Optional override for default arguments parsing (that uses sys.argv), can be a list of custom arguments. Arguments and their values need to be added as individual items to the list e.g. "-b 115200" thus becomes ['-b', '115200']. diff --git a/tools/postbuild.py b/tools/postbuild.py index 700b29f531..96c06606a9 100755 --- a/tools/postbuild.py +++ b/tools/postbuild.py @@ -8,9 +8,9 @@ ToolsDir = os.path.dirname( os.path.realpath( __file__ ) ).replace( '\\', '/' ) + "/" # convert to UNIX format try: sys.path.insert( 0, ToolsDir ) # ToolsDir - from utillities import * # If this fails, we can't continue and will bomb below + from utilities import * # If this fails, we can't continue and will bomb below except Exception as e: - sys.stderr.write( '\nImport of utillities.py failed.\n...Is it not next to this %s tool?\n...Exception was: %s\n' % ( __file__, e ) ) + sys.stderr.write( '\nImport of utilities.py failed.\n...Is it not next to this %s tool?\n...Exception was: %s\n' % ( __file__, e ) ) sys.exit( 2 ) def parse_args( argsIn ): diff --git a/tools/upload.py b/tools/upload.py index 2b7016cc95..dd58587727 100755 --- a/tools/upload.py +++ b/tools/upload.py @@ -1,69 +1,131 @@ #!/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 +# New Upload-Wrapper for Arduino esp8266 +# 2021-08-08: G.N.: Totally rewritten to support (optional) uploading of sketch & filesystem in one step -# 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 sys +ToolsDir = os.path.dirname( os.path.realpath( __file__ ) ).replace( '\\', '/' ) + "/" # convert to UNIX format +try: + sys.path.insert( 0, ToolsDir ) # ToolsDir + from utilities import * # If this fails, we can't continue and will bomb below +except Exception as e: + sys.stderr.write( '\nImport of utilities.py failed.\n...Is it not next to this %s tool?\n...Exception was: %s\n' % ( __file__, e ) ) + sys.exit( 2 ) import tempfile +from pathlib import Path -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 + sys.path.insert( 0, ToolsDir + "pyserial" ) # Add pyserial dir to search path + sys.path.insert( 0, ToolsDir + "esptool" ) # Add esptool dir to search path import esptool # If this fails, we can't continue and will bomb below except Exception: - sys.stderr.write("pyserial or esptool directories not found next to this upload.py tool.\n") - sys.exit(1) + Msg( '\npyserial or esptool directories not found next to this upload.py tool.' ) + sys.exit( 2 ) + +#Args: (original) +# As defined in 'platform.txt' for 'tools.esptool.upload.pattern' possible values (from boards.txt[.py]) +# | | +# --chip esp8266 +# --port "{serial.port}" e.g.: /dev/ttyUSB0 +# --baud "{upload.speed}" e.g.: 115200 +# "{upload.verbose}" { '' | '--trace' } +# {upload.erase_cmd} { '' | 'erase_region "{build.rfcal_addr}" 0x4000' | 'erase_flash' } +# {upload.resetmethod} --before { default_reset | no_reset | no_reset_no_sync } --after { hard_reset | soft_reset } +# write_flash 0x0 "{build.path}/{build.project_name}.bin" write_flash + +#Args: (combined firmware and filesystem) +# As defined in 'platform.txt' for 'tools.esptool.upload.pattern' possible values +# | | +# -up "{build.Upload}" 1-3 +# -fi "{build.Filesystem}" 0-2 +# --port "{serial.port}" e.g.: /dev/ttyUSB0 +# --baud "{upload.speed}" e.g.: 115200 +# {upload.resetmethod} --before { default_reset | no_reset | no_reset_no_sync } --after { hard_reset | soft_reset } +# --sk 0x0 "{build.path}/{build.project_name}.bin" +# --fs {build.spiffs_start} "{build.path}/{build.project_name}" +# {upload.erase_cmd} { '' | 'erase_region "{build.rfcal_addr}" 0x4000' | 'erase_flash' } +# "{upload.verbose}" { '' | '--trace' } +# Remark: +# {upload.erase_cmd} "{upload.verbose}" should be the last two parameters given in 'platform.txt' + +def parse_args( argsIn ): + parser = argparse.ArgumentParser( description = 'Upload-Wrapper for Arduino esp8266' ) + parser.add_argument( '-up', '--Upload', type = int, default = 1, help = '1: Sketch, 2: Filesystem, 3: Both' ) + parser.add_argument( '-fi', '--Filesystem', type = int, default = 0, help = '0: Off, 1: LitteFs, 3: SPIFFS' ) + parser.add_argument( '--port', type = str, required = True, help = 'path to serial device' ) + parser.add_argument( '--baud', type = str, required = True, help = 'baudrate' ) + parser.add_argument( '--before', type = str, required = True, help = 'before (default_reset/no_reset/no_reset_no_sync)' ) + parser.add_argument( '--after', type = str, required = True, help = 'after (hard_reset/soft_reset)' ) + parser.add_argument( '--sk', type = str, nargs=2, help = 'adr path_path_to_sketch_binary' ) + parser.add_argument( '--fs', type = str, nargs=2, help = 'adr path_path_to_fs_binary_without_ext' ) + parser.add_argument( 'erase_cmd', type = str, nargs='*', help = 'erase_cmd' ) + parser.add_argument( '--trace', action='store_true', help = 'verbose' ) + global Args + Args = parser.parse_args( argsIn ) + -cmdline = [] -write_option = '' -write_addr = '0x0' -erase_addr = '' -erase_len = '' +def main( argsIn = None ): + """ + Main function for upload -while len(sys.argv): - thisarg = sys.argv.pop(0) + argsIn - Optional override for default arguments parsing (that uses sys.argv), can be a list of custom arguments. + Arguments and their values need to be added as individual items to the list e.g. "-b 115200" thus becomes ['-b', '115200']. + """ + + parse_args( argsIn ) + + if not os.path.exists( Args.port ): + Msg( "Port: '%s', does not exist!\n...Upload aborted" % Args.port ) + sys.exit( 1 ) # 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 + ['--flash_size', 'detect'] -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) + if Args.baud == "921600": + Args.baud = "460800" + esptoolArgs = [ '--chip', 'esp8266', '--port', Args.port, '--baud', Args.baud, '--before', Args.before, '--after', Args.after ] + if Args.trace: + esptoolArgs += [ '--trace' ] + esptoolArgs += [ 'write_flash' ] + + EraseFilePath = '' + filesUploaded = [] + try: + if ( Args.Upload & 1 ) == 1: + if len( Args.erase_cmd ) and Args.erase_cmd[ 0 ] == "erase_flash": + esptoolArgs += [ '--erase-all' ] + esptoolArgs += [ '--flash_size', 'detect', Args.sk[ 0 ], Args.sk[ 1 ] ] + + if len( Args.erase_cmd ) and Args.erase_cmd[ 0 ] == "erase_region": + # Generate temporary empty (0xff) file + f, EraseFilePath = tempfile.mkstemp() + os.write( f, bytearray( [ 255 ] * int( Args.erase_cmd[ 2 ], 0 ) ) ) + os.close( f ) + esptoolArgs += [ Args.erase_cmd[ 1 ], EraseFilePath ] + + filesUploaded += [ Path( Args.sk[ 1 ] ).name ] + + if ( Args.Upload & 2 ) == 2: + fsName = "%s.%s" % ( Args.fs[ 1 ], "littlefs" if Args.Filesystem == 1 else "spiffs" ) + if os.path.exists( fsName ): + esptoolArgs += [ Args.fs[ 0 ], fsName ] + filesUploaded += [ Path( fsName ).name ] + + Msg( "Uploading Binaries..." ) + #Debug( str( esptoolArgs ) ) + esptool.main( esptoolArgs ) + Msg( '...files uploaded: %s' % ", ".join( filesUploaded ) ) + finally: + if len( EraseFilePath ): + os.remove( EraseFilePath ) + +def main_(): + try: + main() + except RuntimeError as e: + Msg( '\nA RuntimeError error occurred: %s' % e ) + sys.exit( 2 ) + +if __name__ == '__main__': + main_() diff --git a/tools/uploadGn.py b/tools/uploadGn.py deleted file mode 100755 index 2282264763..0000000000 --- a/tools/uploadGn.py +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env python3 - -# New Upload-Wrapper for Arduino esp8266 -# 2021-08-08: G.N.: Totally rewritten to support (optional) uploading of sketch & filesystem in one step - -import os -import sys -ToolsDir = os.path.dirname( os.path.realpath( __file__ ) ).replace( '\\', '/' ) + "/" # convert to UNIX format -try: - sys.path.insert( 0, ToolsDir ) # ToolsDir - from utillities import * # If this fails, we can't continue and will bomb below -except Exception as e: - sys.stderr.write( '\nImport of utillities.py failed.\n...Is it not next to this %s tool?\n...Exception was: %s\n' % ( __file__, e ) ) - sys.exit( 2 ) -import tempfile -from pathlib import Path - -try: - sys.path.insert( 0, ToolsDir + "pyserial" ) # Add pyserial dir to search path - sys.path.insert( 0, ToolsDir + "esptool" ) # Add esptool dir to search path - import esptool # If this fails, we can't continue and will bomb below -except Exception: - Msg( '\npyserial or esptool directories not found next to this uploadGn.py tool.' ) - sys.exit( 2 ) - -#Args: (original) -# As defined in 'platform.txt' for 'tools.esptool.upload.pattern' possible values (from boards.txt[.py]) -# | | -# --chip esp8266 -# --port "{serial.port}" e.g.: /dev/ttyUSB0 -# --baud "{upload.speed}" e.g.: 115200 -# "{upload.verbose}" { '' | '--trace' } -# {upload.erase_cmd} { '' | 'erase_region "{build.rfcal_addr}" 0x4000' | 'erase_flash' } -# {upload.resetmethod} --before { default_reset | no_reset | no_reset_no_sync } --after { hard_reset | soft_reset } -# write_flash 0x0 "{build.path}/{build.project_name}.bin" write_flash - -#Args: (new) -# As defined in 'platform.txt' for 'tools.esptool.upload.pattern' possible values -# | | -# -up "{build.Upload}" 1-3 -# -fi "{build.Filesystem}" 0-2 -# --port "{serial.port}" e.g.: /dev/ttyUSB0 -# --baud "{upload.speed}" e.g.: 115200 -# {upload.resetmethod} --before { default_reset | no_reset | no_reset_no_sync } --after { hard_reset | soft_reset } -# --sk 0x0 "{build.path}/{build.project_name}.bin" -# --fs {build.spiffs_start} "{build.path}/{build.project_name}" -# {upload.erase_cmd} { '' | 'erase_region "{build.rfcal_addr}" 0x4000' | 'erase_flash' } -# "{upload.verbose}" { '' | '--trace' } -# Remark: -# {upload.erase_cmd} "{upload.verbose}" should be the last two parameters given in 'platform.txt' - -def parse_args( argsIn ): - parser = argparse.ArgumentParser( description = 'Upload-Wrapper for Arduino esp8266' ) - parser.add_argument( '-up', '--Upload', type = int, default = 1, help = '1: Sketch, 2: Filesystem, 3: Both' ) - parser.add_argument( '-fi', '--Filesystem', type = int, default = 0, help = '0: Off, 1: LitteFs, 3: SPIFFS' ) - parser.add_argument( '--port', type = str, required = True, help = 'path to serial device' ) - parser.add_argument( '--baud', type = str, required = True, help = 'baudrate' ) - parser.add_argument( '--before', type = str, required = True, help = 'before (default_reset/no_reset/no_reset_no_sync)' ) - parser.add_argument( '--after', type = str, required = True, help = 'after (hard_reset/soft_reset)' ) - parser.add_argument( '--sk', type = str, nargs=2, help = 'adr path_path_to_sketch_binary' ) - parser.add_argument( '--fs', type = str, nargs=2, help = 'adr path_path_to_fs_binary_without_ext' ) - parser.add_argument( 'erase_cmd', type = str, nargs='*', help = 'erase_cmd' ) - parser.add_argument( '--trace', action='store_true', help = 'verbose' ) - global Args - Args = parser.parse_args( argsIn ) - - -def main( argsIn = None ): - """ - Main function for uploadGn - - argsIn - Optional override for default arguments parsing (that uses sys.argv), can be a list of custom arguments. - Arguments and their values need to be added as individual items to the list e.g. "-b 115200" thus becomes ['-b', '115200']. - """ - - parse_args( argsIn ) - - if not os.path.exists( Args.port ): - Msg( "Port: '%s', does not exist!\n...Upload aborted" % Args.port ) - sys.exit( 1 ) - - # 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 Args.baud == "921600": - Args.baud = "460800" - esptoolArgs = [ '--chip', 'esp8266', '--port', Args.port, '--baud', Args.baud, '--before', Args.before, '--after', Args.after ] - if Args.trace: - esptoolArgs += [ '--trace' ] - esptoolArgs += [ 'write_flash' ] - - EraseFilePath = '' - filesUploaded = [] - try: - if ( Args.Upload & 1 ) == 1: - if len( Args.erase_cmd ) and Args.erase_cmd[ 0 ] == "erase_flash": - esptoolArgs += [ '--erase-all' ] - esptoolArgs += [ '--flash_size', 'detect', Args.sk[ 0 ], Args.sk[ 1 ] ] - - if len( Args.erase_cmd ) and Args.erase_cmd[ 0 ] == "erase_region": - # Generate temporary empty (0xff) file - f, EraseFilePath = tempfile.mkstemp() - os.write( f, bytearray( [ 255 ] * int( Args.erase_cmd[ 2 ], 0 ) ) ) - os.close( f ) - esptoolArgs += [ Args.erase_cmd[ 1 ], EraseFilePath ] - - filesUploaded += [ Path( Args.sk[ 1 ] ).name ] - - if ( Args.Upload & 2 ) == 2: - fsName = "%s.%s" % ( Args.fs[ 1 ], "littlefs" if Args.Filesystem == 1 else "spiffs" ) - if os.path.exists( fsName ): - esptoolArgs += [ Args.fs[ 0 ], fsName ] - filesUploaded += [ Path( fsName ).name ] - - Msg( "Uploading Binaries..." ) - #Debug( str( esptoolArgs ) ) - esptool.main( esptoolArgs ) - Msg( '...files uploaded: %s' % ", ".join( filesUploaded ) ) - finally: - if len( EraseFilePath ): - os.remove( EraseFilePath ) - -def main_(): - try: - main() - except RuntimeError as e: - Msg( '\nA RuntimeError error occurred: %s' % e ) - sys.exit( 2 ) - -if __name__ == '__main__': - main_() diff --git a/tools/utillities.py b/tools/utilities.py similarity index 100% rename from tools/utillities.py rename to tools/utilities.py From 311c9c3f084abee97d8702061dd2667685ed477a Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Wed, 15 Sep 2021 08:51:33 +0200 Subject: [PATCH 18/19] Removed changes not contained inside master --- cores/esp8266/WString.cpp | 61 +++++++++++++++++++ cores/esp8266/WString.h | 54 +++++++--------- .../src/ESP8266HTTPClient.cpp | 41 ++++++++++--- .../ESP8266HTTPClient/src/ESP8266HTTPClient.h | 3 + libraries/ESP8266WiFi/src/WiFiClient.h | 3 +- .../src/ESP8266httpUpdate.cpp | 12 +++- .../ESP8266httpUpdate/src/ESP8266httpUpdate.h | 7 ++- 7 files changed, 137 insertions(+), 44 deletions(-) diff --git a/cores/esp8266/WString.cpp b/cores/esp8266/WString.cpp index 6e6dc94beb..8184224957 100644 --- a/cores/esp8266/WString.cpp +++ b/cores/esp8266/WString.cpp @@ -273,6 +273,13 @@ String &String::operator =(const __FlashStringHelper *pstr) { return *this; } +String &String::operator =(char c) { + char buffer[2] { c, '\0' }; + *this = buffer; + return *this; +} + + /*********************************************/ /* concat */ /*********************************************/ @@ -500,6 +507,10 @@ bool String::equals(const char *cstr) const { return strcmp(buffer(), cstr) == 0; } +bool String::equals(const __FlashStringHelper *s) const { + return equals(String(s)); +} + bool String::operator<(const String &rhs) const { return compareTo(rhs) < 0; } @@ -532,6 +543,10 @@ bool String::equalsIgnoreCase(const String &s2) const { return true; } +bool String::equalsIgnoreCase(const __FlashStringHelper *s) const { + return equalsIgnoreCase(String(s)); +} + unsigned char String::equalsConstantTime(const String &s2) const { // To avoid possible time-based attacks present function // compares given strings in a constant time. @@ -565,18 +580,37 @@ bool String::startsWith(const String &s2) const { return startsWith(s2, 0); } +bool String::startsWith(const char *prefix) const { + return this->startsWith(String(prefix)); +} +bool String::startsWith(const __FlashStringHelper *prefix) const { + return this->startsWith(String(prefix)); +} + bool String::startsWith(const String &s2, unsigned int offset) const { if (offset > (unsigned)(len() - s2.len()) || !buffer() || !s2.buffer()) return false; return strncmp(&buffer()[offset], s2.buffer(), s2.len()) == 0; } +bool String::startsWith(const __FlashStringHelper *prefix, unsigned int offset) const { + return startsWith(String(prefix), offset); +} + bool String::endsWith(const String &s2) const { if (len() < s2.len() || !buffer() || !s2.buffer()) return false; return strcmp(&buffer()[len() - s2.len()], s2.buffer()) == 0; } +bool String::endsWith(const char *suffix) const { + return this->endsWith(String(suffix)); +} +bool String::endsWith(const __FlashStringHelper *suffix) const { + return this->endsWith(String(suffix)); +} + + /*********************************************/ /* Character Access */ /*********************************************/ @@ -678,6 +712,15 @@ int String::lastIndexOf(const String &s2, unsigned int fromIndex) const { return found; } +int String::lastIndexOf(const __FlashStringHelper *str) const { + return lastIndexOf(String(str)); +} + +int String::lastIndexOf(const __FlashStringHelper *str, unsigned int fromIndex) const { + return lastIndexOf(String(str), fromIndex); +} + + String String::substring(unsigned int left, unsigned int right) const { if (left > right) { unsigned int temp = right; @@ -756,6 +799,24 @@ void String::replace(const String &find, const String &replace) { } } + +void String::replace(const char *find, const String &replace) { + this->replace(String(find), replace); +} +void String::replace(const __FlashStringHelper *find, const String &replace) { + this->replace(String(find), replace); +} +void String::replace(const char *find, const char *replace) { + this->replace(String(find), String(replace)); +} +void String::replace(const __FlashStringHelper *find, const char *replace) { + this->replace(String(find), String(replace)); +} +void String::replace(const __FlashStringHelper *find, const __FlashStringHelper *replace) { + this->replace(String(find), String(replace)); +} + + void String::remove(unsigned int index, unsigned int count) { if (index >= len()) { return; diff --git a/cores/esp8266/WString.h b/cores/esp8266/WString.h index 37bb3becb6..ad35a0cb4a 100644 --- a/cores/esp8266/WString.h +++ b/cores/esp8266/WString.h @@ -101,11 +101,7 @@ class String { String &operator =(const char *cstr); String &operator =(const __FlashStringHelper *str); String &operator =(String &&rval) noexcept; - String &operator =(char c) { - char buffer[2] { c, '\0' }; - *this = buffer; - return *this; - } + String &operator =(char c); // concatenate (works w/ built-in types) @@ -142,39 +138,40 @@ class String { int compareTo(const String &s) const; bool equals(const String &s) const; bool equals(const char *cstr) const; + bool equals(const __FlashStringHelper *s) const; bool operator ==(const String &rhs) const { return equals(rhs); } bool operator ==(const char *cstr) const { return equals(cstr); } + bool operator ==(const __FlashStringHelper *rhs) const { + return equals(rhs); + } bool operator !=(const String &rhs) const { return !equals(rhs); } bool operator !=(const char *cstr) const { return !equals(cstr); } + bool operator !=(const __FlashStringHelper *rhs) const { + return !equals(rhs); + } bool operator <(const String &rhs) const; bool operator >(const String &rhs) const; bool operator <=(const String &rhs) const; bool operator >=(const String &rhs) const; bool equalsIgnoreCase(const String &s) const; + bool equalsIgnoreCase(const __FlashStringHelper *s) const; unsigned char equalsConstantTime(const String &s) const; bool startsWith(const String &prefix) const; - bool startsWith(const char *prefix) const { - return this->startsWith(String(prefix)); - } - bool startsWith(const __FlashStringHelper *prefix) const { - return this->startsWith(String(prefix)); - } + bool startsWith(const char *prefix) const; + bool startsWith(const __FlashStringHelper *prefix) const; bool startsWith(const String &prefix, unsigned int offset) const; + bool startsWith(const __FlashStringHelper *prefix, unsigned int offset) const; bool endsWith(const String &suffix) const; - bool endsWith(const char *suffix) const { - return this->endsWith(String(suffix)); - } - bool endsWith(const __FlashStringHelper *suffix) const { - return this->endsWith(String(suffix)); - } + bool endsWith(const char *suffix) const; + bool endsWith(const __FlashStringHelper *suffix) const; // character access char charAt(unsigned int index) const { @@ -204,6 +201,8 @@ class String { int lastIndexOf(char ch, unsigned int fromIndex) const; int lastIndexOf(const String &str) const; int lastIndexOf(const String &str, unsigned int fromIndex) const; + int lastIndexOf(const __FlashStringHelper *str) const; + int lastIndexOf(const __FlashStringHelper *str, unsigned int fromIndex) const; String substring(unsigned int beginIndex) const { return substring(beginIndex, len()); } @@ -212,21 +211,12 @@ class String { // modification void replace(char find, char replace); void replace(const String &find, const String &replace); - void replace(const char *find, const String &replace) { - this->replace(String(find), replace); - } - void replace(const __FlashStringHelper *find, const String &replace) { - this->replace(String(find), replace); - } - void replace(const char *find, const char *replace) { - this->replace(String(find), String(replace)); - } - void replace(const __FlashStringHelper *find, const char *replace) { - this->replace(String(find), String(replace)); - } - void replace(const __FlashStringHelper *find, const __FlashStringHelper *replace) { - this->replace(String(find), String(replace)); - } + void replace(const char *find, const String &replace); + void replace(const __FlashStringHelper *find, const String &replace); + void replace(const char *find, const char *replace); + void replace(const __FlashStringHelper *find, const char *replace); + void replace(const __FlashStringHelper *find, const __FlashStringHelper *replace); + // Pass the biggest integer if the count is not specified. // The remove method below will take care of truncating it at the end of the string. void remove(unsigned int index, unsigned int count = (unsigned int)-1); diff --git a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp index c933b5c21f..b98edcccc0 100644 --- a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp +++ b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp @@ -276,17 +276,26 @@ void HTTPClient::setAuthorization(const char * user, const char * password) } /** - * set the Authorizatio for the http request + * set the Authorization for the http request * @param auth const char * base64 */ void HTTPClient::setAuthorization(const char * auth) { - if(auth) { - _base64Authorization = auth; - _base64Authorization.replace(String('\n'), emptyString); + if (auth) { + setAuthorization(String(auth)); } } +/** + * set the Authorization for the http request + * @param auth String base64 + */ +void HTTPClient::setAuthorization(String auth) +{ + _base64Authorization = std::move(auth); + _base64Authorization.replace(String('\n'), emptyString); +} + /** * set the timeout for the TCP connection * @param timeout unsigned int @@ -354,6 +363,14 @@ int HTTPClient::GET() { return sendRequest("GET"); } +/** + * send a DELETE request + * @return http code + */ +int HTTPClient::DELETE() +{ + return sendRequest("DELETE"); +} /** * sends a post request to the server @@ -610,8 +627,18 @@ WiFiClient* HTTPClient::getStreamPtr(void) */ int HTTPClient::writeToStream(Stream * stream) { + return writeToPrint(stream); +} - if(!stream) { +/** + * write all message body / payload to Print + * @param print Print * + * @return bytes written ( negative values are error codes ) + */ +int HTTPClient::writeToPrint(Print * print) +{ + + if(!print) { return returnError(HTTPC_ERROR_NO_STREAM); } @@ -628,7 +655,7 @@ int HTTPClient::writeToStream(Stream * stream) if(_transferEncoding == HTTPC_TE_IDENTITY) { // len < 0: transfer all of it, with timeout // len >= 0: max:len, with timeout - ret = _client->sendSize(stream, len); + ret = _client->sendSize(print, len); // do we have an error? if(_client->getLastSendReport() != Stream::Report::Success) { @@ -656,7 +683,7 @@ int HTTPClient::writeToStream(Stream * stream) // data left? if(len > 0) { // read len bytes with timeout - int r = _client->sendSize(stream, len); + int r = _client->sendSize(print, len); if (_client->getLastSendReport() != Stream::Report::Success) // not all data transferred return returnError(StreamReportToHttpClientReport(_client->getLastSendReport())); diff --git a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.h b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.h index 3605a807f3..4b9015c9e5 100644 --- a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.h +++ b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.h @@ -176,6 +176,7 @@ class HTTPClient void setUserAgent(const String& userAgent); void setAuthorization(const char * user, const char * password); void setAuthorization(const char * auth); + void setAuthorization(String auth); void setTimeout(uint16_t timeout); // Redirections @@ -187,6 +188,7 @@ class HTTPClient /// request handling int GET(); + int DELETE(); int POST(const uint8_t* payload, size_t size); int POST(const String& payload); int PUT(const uint8_t* payload, size_t size); @@ -213,6 +215,7 @@ class HTTPClient WiFiClient& getStream(void); WiFiClient* getStreamPtr(void); + int writeToPrint(Print* print); int writeToStream(Stream* stream); const String& getString(void); static String errorToString(int error); diff --git a/libraries/ESP8266WiFi/src/WiFiClient.h b/libraries/ESP8266WiFi/src/WiFiClient.h index 038e8032df..6f89aede06 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.h +++ b/libraries/ESP8266WiFi/src/WiFiClient.h @@ -59,7 +59,8 @@ class WiFiClient : public Client, public SList { virtual size_t write(uint8_t) override; virtual size_t write(const uint8_t *buf, size_t size) override; virtual size_t write_P(PGM_P buf, size_t size); - size_t write(Stream& stream) [[ deprecated("use stream.sendHow(client...)") ]]; + [[ deprecated("use stream.sendHow(client...)") ]] + size_t write(Stream& stream); virtual int available() override; virtual int read() override; diff --git a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp index f3d67b40ea..a0a7104282 100755 --- a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp +++ b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp @@ -211,8 +211,14 @@ HTTPUpdateResult ESP8266HTTPUpdate::handleUpdate(HTTPClient& http, const String& DEBUG_HTTP_UPDATE("[httpUpdate] - code: %d\n", code); DEBUG_HTTP_UPDATE("[httpUpdate] - len: %d\n", len); - if(http.hasHeader("x-MD5")) { - DEBUG_HTTP_UPDATE("[httpUpdate] - MD5: %s\n", http.header("x-MD5").c_str()); + String md5; + if (_md5Sum.length()) { + md5 = _md5Sum; + } else if(http.hasHeader("x-MD5")) { + md5 = http.header("x-MD5"); + } + if(md5.length()) { + DEBUG_HTTP_UPDATE("[httpUpdate] - MD5: %s\n", md5.c_str()); } DEBUG_HTTP_UPDATE("[httpUpdate] ESP8266 info:\n"); @@ -298,7 +304,7 @@ HTTPUpdateResult ESP8266HTTPUpdate::handleUpdate(HTTPClient& http, const String& } } } - if(runUpdate(*tcp, len, http.header("x-MD5"), command)) { + if(runUpdate(*tcp, len, md5, command)) { ret = HTTP_UPDATE_OK; DEBUG_HTTP_UPDATE("[httpUpdate] Update ok\n"); http.end(); diff --git a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h index c825d8abab..6c6b140f39 100755 --- a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h +++ b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h @@ -108,6 +108,11 @@ class ESP8266HTTPUpdate _ledOn = ledOn; } + void setMD5sum(const String &md5Sum) + { + _md5Sum = md5Sum; + } + void setAuthorization(const String& user, const String& password); void setAuthorization(const String& auth); @@ -142,7 +147,7 @@ class ESP8266HTTPUpdate String _user; String _password; String _auth; - + String _md5Sum; private: int _httpClientTimeout; followRedirects_t _followRedirects = HTTPC_DISABLE_FOLLOW_REDIRECTS; From b7751e3bf9383711fd27112fa386935a0969b4e8 Mon Sep 17 00:00:00 2001 From: gneiss15 Date: Wed, 15 Sep 2021 08:59:23 +0200 Subject: [PATCH 19/19] platformio-build.py forgotten --- tools/platformio-build.py | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/tools/platformio-build.py b/tools/platformio-build.py index 8998fcde78..a462ff391a 100644 --- a/tools/platformio-build.py +++ b/tools/platformio-build.py @@ -139,12 +139,8 @@ def scons_patched_match_splitext(path, suffixes=None): join(FRAMEWORK_DIR, "tools", "sdk", "ld") ], - # A list of one or more libraries that will be linked with any executable programs created by this environment - LIBS=[ - "hal", "phy", "pp", "net80211", "wpa", "crypto", "main", - "wps", "bearssl", "espnow", "smartconfig", "airkiss", "wpa2", - "m", "c", "gcc" - ], + # LIBS is set at the bottom of the builder script + # where we know about all system libraries to be included LIBSOURCE_DIRS=[ join(FRAMEWORK_DIR, "libraries") @@ -218,43 +214,44 @@ def scons_patched_match_splitext(path, suffixes=None): # # lwIP # +lwip_lib = None if "PIO_FRAMEWORK_ARDUINO_LWIP2_IPV6_LOW_MEMORY" in flatten_cppdefines: env.Append( CPPDEFINES=[("TCP_MSS", 536), ("LWIP_FEATURES", 1), ("LWIP_IPV6", 1)], CPPPATH=[join(FRAMEWORK_DIR, "tools", "sdk", "lwip2", "include")], - LIBS=["lwip6-536-feat"] ) + lwip_lib = "lwip6-536-feat" elif "PIO_FRAMEWORK_ARDUINO_LWIP2_IPV6_HIGHER_BANDWIDTH" in flatten_cppdefines: env.Append( CPPDEFINES=[("TCP_MSS", 1460), ("LWIP_FEATURES", 1), ("LWIP_IPV6", 1)], CPPPATH=[join(FRAMEWORK_DIR, "tools", "sdk", "lwip2", "include")], - LIBS=["lwip6-1460-feat"] ) + lwip_lib = "lwip6-1460-feat" elif "PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH" in flatten_cppdefines: env.Append( CPPDEFINES=[("TCP_MSS", 1460), ("LWIP_FEATURES", 1), ("LWIP_IPV6", 0)], CPPPATH=[join(FRAMEWORK_DIR, "tools", "sdk", "lwip2", "include")], - LIBS=["lwip2-1460-feat"] ) + lwip_lib = "lwip2-1460-feat" elif "PIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY_LOW_FLASH" in flatten_cppdefines: env.Append( CPPDEFINES=[("TCP_MSS", 536), ("LWIP_FEATURES", 0), ("LWIP_IPV6", 0)], CPPPATH=[join(FRAMEWORK_DIR, "tools", "sdk", "lwip2", "include")], - LIBS=["lwip2-536"] ) + lwip_lib = "lwip2-536" elif "PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH" in flatten_cppdefines: env.Append( CPPDEFINES=[("TCP_MSS", 1460), ("LWIP_FEATURES", 0), ("LWIP_IPV6", 0)], CPPPATH=[join(FRAMEWORK_DIR, "tools", "sdk", "lwip2", "include")], - LIBS=["lwip2-1460"] ) + lwip_lib = "lwip2-1460" # PIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY (default) else: env.Append( CPPDEFINES=[("TCP_MSS", 536), ("LWIP_FEATURES", 1), ("LWIP_IPV6", 0)], CPPPATH=[join(FRAMEWORK_DIR, "tools", "sdk", "lwip2", "include")], - LIBS=["lwip2-536-feat"] ) + lwip_lib = "lwip2-536-feat" # # Waveform @@ -266,17 +263,17 @@ def scons_patched_match_splitext(path, suffixes=None): # # Exceptions # +stdcpp_lib = None if "PIO_FRAMEWORK_ARDUINO_ENABLE_EXCEPTIONS" in flatten_cppdefines: env.Append( CXXFLAGS=["-fexceptions"], - LIBS=["stdc++-exc"] ) + stdcpp_lib = "stdc++-exc" else: env.Append( CXXFLAGS=["-fno-exceptions"], - LIBS=["stdc++"] ) - + stdcpp_lib = "stdc++" # # VTables # @@ -355,6 +352,15 @@ def scons_patched_match_splitext(path, suffixes=None): assert mmu_flags env.Append(CPPDEFINES=mmu_flags) +# A list of one or more libraries that will be linked with any executable programs created by this environment +# We do this at this point so that we can put the libraries in their correct order more easily +env.Append( + LIBS=[ + "hal", "phy", "pp", "net80211", lwip_lib, "wpa", "crypto", "main", + "wps", "bearssl", "espnow", "smartconfig", "airkiss", "wpa2", + stdcpp_lib, "m", "c", "gcc" + ] +) # Build the eagle.app.v6.common.ld linker file app_ld = env.Command(