diff --git a/builder/main.py b/builder/main.py index d70798b..6d8fa03 100644 --- a/builder/main.py +++ b/builder/main.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import re from os.path import join from SCons.Script import (AlwaysBuild, Builder, Default, DefaultEnvironment) @@ -85,6 +86,8 @@ env.Replace( UPLOADER=join( platform.get_package_dir("tool-esptoolpy") or "", "esptool.py"), + UPLOADEROTA=join(platform.get_package_dir("tool-espotapy") or "", + "espota.py"), UPLOADERFLAGS=[ "--chip", "esp32", @@ -97,8 +100,17 @@ env.Replace( "--flash_freq", "${__get_board_f_flash(__env__)}", "--flash_size", "detect" ], + UPLOADEROTAFLAGS=[ + "--debug", + "--progress", + "-i", "$UPLOAD_PORT", + "-p", "3232", + "$UPLOAD_FLAGS" + ], UPLOADCMD='"$PYTHONEXE" "$UPLOADER" $UPLOADERFLAGS $SOURCE', + UPLOADOTACMD='"$PYTHONEXE" "$UPLOADEROTA" $UPLOADEROTAFLAGS -f $SOURCE', + SIZEPRINTCMD='$SIZETOOL -B -d $SOURCES', PROGNAME="firmware", @@ -133,6 +145,16 @@ env.Append( ) ) +if env.subst("$PIOFRAMEWORK") == "arduino": + # Handle uploading via OTA + ota_port = None + if env.get("UPLOAD_PORT"): + ota_port = re.match( + r"\"?((([0-9]{1,3}\.){3}[0-9]{1,3})|.+\.local)\"?$", + env.get("UPLOAD_PORT")) + if ota_port: + env.Replace(UPLOADCMD="$UPLOADOTACMD") + # # Target: Build executable and linkable firmware or SPIFFS image # diff --git a/platform.json b/platform.json index d372fbb..7b8e9c4 100644 --- a/platform.json +++ b/platform.json @@ -66,6 +66,11 @@ "tool-esptoolpy": { "type": "uploader", "version": "~1.20000.0" + }, + "tool-espotapy": { + "type": "uploader", + "optional": true, + "version": "~1.0.0" } } }