diff --git a/pio-scripts/patch_apply.py b/pio-scripts/patch_apply.py index 17e25584c..5734c4aa0 100644 --- a/pio-scripts/patch_apply.py +++ b/pio-scripts/patch_apply.py @@ -9,7 +9,10 @@ Import("env") def getPatchPath(env): - return os.path.join(env["PROJECT_DIR"], "patches", env.GetProjectOption('custom_patches')) + patchList = [] + for patch in env.GetProjectOption('custom_patches').split(","): + patchList.append(os.path.join(env["PROJECT_DIR"], "patches", patch)) + return patchList def is_tool(name): """Check whether `name` is on PATH and marked as executable.""" @@ -44,35 +47,36 @@ def main(): print('Git not found. Will not apply custom patches!') return - directory = getPatchPath(env) - if (not os.path.isdir(directory)): - print('Patch directory not found: ' + directory) - return - - for file in os.listdir(directory): - if (not file.endswith('.patch')): - continue - - fullPath = os.path.join(directory, file) - preparePath = fullPath + '.prepare' - replaceInFile(fullPath, preparePath, '$$$env$$$', env['PIOENV']) - print('Working on patch: ' + fullPath + '... ', end='') + directories = getPatchPath(env) + for directory in directories: + if (not os.path.isdir(directory)): + print('Patch directory not found: ' + directory) + return + + for file in os.listdir(directory): + if (not file.endswith('.patch')): + continue + + fullPath = os.path.join(directory, file) + preparePath = fullPath + '.prepare' + replaceInFile(fullPath, preparePath, '$$$env$$$', env['PIOENV']) + print('Working on patch: ' + fullPath + '... ', end='') + + # Check if patch was already applied + process = subprocess.run(['git', 'apply', '--reverse', '--check', preparePath], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + if (process.returncode == 0): + print('already applied') + os.remove(preparePath) + continue + + # Apply patch + process = subprocess.run(['git', 'apply', preparePath]) + if (process.returncode == 0): + print('applied') + else: + print('failed') - # Check if patch was already applied - process = subprocess.run(['git', 'apply', '--reverse', '--check', preparePath], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - if (process.returncode == 0): - print('already applied') os.remove(preparePath) - continue - - # Apply patch - process = subprocess.run(['git', 'apply', preparePath]) - if (process.returncode == 0): - print('applied') - else: - print('failed') - - os.remove(preparePath) -main() \ No newline at end of file +main() diff --git a/platformio.ini b/platformio.ini index 5c9f7a3af..54f39481a 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1,237 +1,239 @@ -; PlatformIO Project Configuration File -; -; Build options: build flags, source filter -; Upload options: custom upload port, speed and extra flags -; Library options: dependencies, extra library storages -; Advanced options: extra scripting -; -; Please visit documentation for the other options and examples -; https://docs.platformio.org/page/projectconf.html - -[platformio] -default_envs = generic_esp32 -extra_configs = - platformio_override.ini - -[env] -; Make sure to NOT add any spaces in the custom_ci_action property -; (also the position in the file is important) -custom_ci_action = generic,generic_esp32,generic_esp32s3,generic_esp32s3_usb - -framework = arduino -platform = espressif32@6.5.0 - -build_flags = - -DPIOENV=\"$PIOENV\" - -D_TASK_STD_FUNCTION=1 - -D_TASK_THREAD_SAFE=1 - -Wall -Wextra -Wunused -Wmisleading-indentation -Wduplicated-cond -Wlogical-op -Wnull-dereference -; Have to remove -Werror because of -; https://github.com/espressif/arduino-esp32/issues/9044 and -; https://github.com/espressif/arduino-esp32/issues/9045 -; -Werror - -std=c++17 - -std=gnu++17 -build_unflags = - -std=gnu++11 - -lib_deps = - https://github.com/yubox-node-org/ESPAsyncWebServer - bblanchon/ArduinoJson @ ^6.21.4 - https://github.com/bertmelis/espMqttClient.git#v1.5.0 - nrf24/RF24 @ ^1.4.8 - olikraus/U8g2 @ ^2.35.9 - buelowp/sunset @ ^1.1.7 - https://github.com/arkhipenko/TaskScheduler#testing - -extra_scripts = - pre:pio-scripts/auto_firmware_version.py - pre:pio-scripts/patch_apply.py - post:pio-scripts/create_factory_bin.py - -board_build.partitions = partitions_custom.csv -board_build.filesystem = littlefs -board_build.embed_files = - webapp_dist/index.html.gz - webapp_dist/zones.json.gz - webapp_dist/favicon.ico - webapp_dist/favicon.png - webapp_dist/js/app.js.gz - webapp_dist/site.webmanifest - -monitor_filters = esp32_exception_decoder, time, log2file, colorize -monitor_speed = 115200 -upload_protocol = esptool - -; Specify port in platformio_override.ini. Comment out (add ; in front of line) to use auto detection. -; monitor_port = COM4 -; upload_port = COM4 - - -[env:generic_esp32] -board = esp32dev -build_flags = ${env.build_flags} - - -[env:generic_esp32c3] -board = esp32-c3-devkitc-02 -custom_patches = esp32c3 -build_flags = ${env.build_flags} - - -[env:generic_esp32c3_usb] -board = esp32-c3-devkitc-02 -custom_patches = esp32c3 -build_flags = ${env.build_flags} - -DARDUINO_USB_MODE=1 - -DARDUINO_USB_CDC_ON_BOOT=1 - - -[env:generic_esp32s3] -board = esp32-s3-devkitc-1 -build_flags = ${env.build_flags} - - -[env:generic_esp32s3_usb] -board = esp32-s3-devkitc-1 -upload_protocol = esp-builtin -build_flags = ${env.build_flags} - -DARDUINO_USB_MODE=1 - -DARDUINO_USB_CDC_ON_BOOT=1 - - -[env:generic] -board = esp32dev -build_flags = ${env.build_flags} - -DHOYMILES_PIN_MISO=19 - -DHOYMILES_PIN_MOSI=23 - -DHOYMILES_PIN_SCLK=18 - -DHOYMILES_PIN_IRQ=16 - -DHOYMILES_PIN_CE=4 - -DHOYMILES_PIN_CS=5 - - -[env:olimex_esp32_poe] -; https://www.olimex.com/Products/IoT/ESP32/ESP32-POE/open-source-hardware -board = esp32-poe -build_flags = ${env.build_flags} - -DHOYMILES_PIN_MISO=15 - -DHOYMILES_PIN_MOSI=2 - -DHOYMILES_PIN_SCLK=14 - -DHOYMILES_PIN_IRQ=13 - -DHOYMILES_PIN_CE=16 - -DHOYMILES_PIN_CS=5 - -DOPENDTU_ETHERNET - - -[env:olimex_esp32_evb] -; https://www.olimex.com/Products/IoT/ESP32/ESP32-EVB/open-source-hardware -board = esp32-evb -build_flags = ${env.build_flags} - -DHOYMILES_PIN_MISO=15 - -DHOYMILES_PIN_MOSI=2 - -DHOYMILES_PIN_SCLK=14 - -DHOYMILES_PIN_IRQ=13 - -DHOYMILES_PIN_CE=16 - -DHOYMILES_PIN_CS=17 - -DOPENDTU_ETHERNET - - -[env:d1_mini_esp32] -board = wemos_d1_mini32 -build_flags = - ${env.build_flags} - -DHOYMILES_PIN_MISO=19 - -DHOYMILES_PIN_MOSI=23 - -DHOYMILES_PIN_SCLK=18 - -DHOYMILES_PIN_IRQ=16 - -DHOYMILES_PIN_CE=17 - -DHOYMILES_PIN_CS=5 - - -[env:wt32_eth01] -; http://www.wireless-tag.com/portfolio/wt32-eth01/ -board = wt32-eth01 -build_flags = ${env.build_flags} - -DHOYMILES_PIN_MISO=4 - -DHOYMILES_PIN_MOSI=2 - -DHOYMILES_PIN_SCLK=32 - -DHOYMILES_PIN_IRQ=33 - -DHOYMILES_PIN_CE=14 - -DHOYMILES_PIN_CS=15 - -DOPENDTU_ETHERNET - - -[env:esp_s3_12k_kit] -; https://www.waveshare.com/wiki/NodeMCU-ESP-S3-12K-Kit -board = esp32-s3-devkitc-1 -build_flags = ${env.build_flags} - -DHOYMILES_PIN_MISO=16 - -DHOYMILES_PIN_MOSI=17 - -DHOYMILES_PIN_SCLK=18 - -DHOYMILES_PIN_IRQ=3 - -DHOYMILES_PIN_CE=4 - -DHOYMILES_PIN_CS=5 - - -[env:lolin32_lite] -; https://www.makershop.de/plattformen/esp8266/wemos-lolin32/ -; https://www.az-delivery.de/products/esp32-lolin-lolin32 -board = lolin32_lite -build_flags = ${env.build_flags} - -DHOYMILES_PIN_MISO=19 - -DHOYMILES_PIN_MOSI=23 - -DHOYMILES_PIN_SCLK=18 - -DHOYMILES_PIN_IRQ=16 - -DHOYMILES_PIN_CE=17 - -DHOYMILES_PIN_CS=5 - -[env:lolin_s2_mini] -board = lolin_s2_mini -build_flags = ${env.build_flags} - -DHOYMILES_PIN_MISO=13 - -DHOYMILES_PIN_MOSI=11 - -DHOYMILES_PIN_SCLK=12 - -DHOYMILES_PIN_CS=10 - -DHOYMILES_PIN_IRQ=4 - -DHOYMILES_PIN_CE=5 - - -[env:opendtufusionv1] -board = esp32-s3-devkitc-1 -upload_protocol = esp-builtin -debug_tool = esp-builtin -debug_speed = 12000 -build_flags = ${env.build_flags} - -DHOYMILES_PIN_MISO=48 - -DHOYMILES_PIN_MOSI=35 - -DHOYMILES_PIN_SCLK=36 - -DHOYMILES_PIN_IRQ=47 - -DHOYMILES_PIN_CE=38 - -DHOYMILES_PIN_CS=37 - -DLED0=17 - -DLED1=18 - -DARDUINO_USB_MODE=1 - -[env:opendtufusionv2] -board = esp32-s3-devkitc-1 -upload_protocol = esp-builtin -debug_tool = esp-builtin -debug_speed = 12000 -build_flags = ${env.build_flags} - -DHOYMILES_PIN_MISO=48 - -DHOYMILES_PIN_MOSI=35 - -DHOYMILES_PIN_SCLK=36 - -DHOYMILES_PIN_IRQ=47 - -DHOYMILES_PIN_CE=38 - -DHOYMILES_PIN_CS=37 - -DLED0=17 - -DLED1=18 - -DCMT_CLK=6 - -DCMT_CS=4 - -DCMT_FCS=21 - -DCMT_GPIO2=3 - -DCMT_GPIO3=8 - -DCMT_SDIO=5 - -DARDUINO_USB_MODE=1 - -DARDUINO_USB_CDC_ON_BOOT=1 \ No newline at end of file +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[platformio] +default_envs = generic_esp32 +extra_configs = + platformio_override.ini + +[env] +; Make sure to NOT add any spaces in the custom_ci_action property +; (also the position in the file is important) +custom_ci_action = generic,generic_esp32,generic_esp32s3,generic_esp32s3_usb + +framework = arduino +platform = espressif32@6.5.0 + +build_flags = + -DPIOENV=\"$PIOENV\" + -D_TASK_STD_FUNCTION=1 + -D_TASK_THREAD_SAFE=1 + -Wall -Wextra -Wunused -Wmisleading-indentation -Wduplicated-cond -Wlogical-op -Wnull-dereference +; Have to remove -Werror because of +; https://github.com/espressif/arduino-esp32/issues/9044 and +; https://github.com/espressif/arduino-esp32/issues/9045 +; -Werror + -std=c++17 + -std=gnu++17 +build_unflags = + -std=gnu++11 + +lib_deps = + https://github.com/yubox-node-org/ESPAsyncWebServer + bblanchon/ArduinoJson @ ^6.21.4 + https://github.com/bertmelis/espMqttClient.git#v1.5.0 + nrf24/RF24 @ ^1.4.8 + olikraus/U8g2 @ ^2.35.9 + buelowp/sunset @ ^1.1.7 + https://github.com/arkhipenko/TaskScheduler#testing + +extra_scripts = + pre:pio-scripts/auto_firmware_version.py + pre:pio-scripts/patch_apply.py + post:pio-scripts/create_factory_bin.py + +board_build.partitions = partitions_custom.csv +board_build.filesystem = littlefs +board_build.embed_files = + webapp_dist/index.html.gz + webapp_dist/zones.json.gz + webapp_dist/favicon.ico + webapp_dist/favicon.png + webapp_dist/js/app.js.gz + webapp_dist/site.webmanifest + +custom_patches = + +monitor_filters = esp32_exception_decoder, time, log2file, colorize +monitor_speed = 115200 +upload_protocol = esptool + +; Specify port in platformio_override.ini. Comment out (add ; in front of line) to use auto detection. +; monitor_port = COM4 +; upload_port = COM4 + + +[env:generic_esp32] +board = esp32dev +build_flags = ${env.build_flags} + + +[env:generic_esp32c3] +board = esp32-c3-devkitc-02 +custom_patches = ${env.custom_patches},esp32c3 +build_flags = ${env.build_flags} + + +[env:generic_esp32c3_usb] +board = esp32-c3-devkitc-02 +custom_patches = ${env.custom_patches},esp32c3 +build_flags = ${env.build_flags} + -DARDUINO_USB_MODE=1 + -DARDUINO_USB_CDC_ON_BOOT=1 + + +[env:generic_esp32s3] +board = esp32-s3-devkitc-1 +build_flags = ${env.build_flags} + + +[env:generic_esp32s3_usb] +board = esp32-s3-devkitc-1 +upload_protocol = esp-builtin +build_flags = ${env.build_flags} + -DARDUINO_USB_MODE=1 + -DARDUINO_USB_CDC_ON_BOOT=1 + + +[env:generic] +board = esp32dev +build_flags = ${env.build_flags} + -DHOYMILES_PIN_MISO=19 + -DHOYMILES_PIN_MOSI=23 + -DHOYMILES_PIN_SCLK=18 + -DHOYMILES_PIN_IRQ=16 + -DHOYMILES_PIN_CE=4 + -DHOYMILES_PIN_CS=5 + + +[env:olimex_esp32_poe] +; https://www.olimex.com/Products/IoT/ESP32/ESP32-POE/open-source-hardware +board = esp32-poe +build_flags = ${env.build_flags} + -DHOYMILES_PIN_MISO=15 + -DHOYMILES_PIN_MOSI=2 + -DHOYMILES_PIN_SCLK=14 + -DHOYMILES_PIN_IRQ=13 + -DHOYMILES_PIN_CE=16 + -DHOYMILES_PIN_CS=5 + -DOPENDTU_ETHERNET + + +[env:olimex_esp32_evb] +; https://www.olimex.com/Products/IoT/ESP32/ESP32-EVB/open-source-hardware +board = esp32-evb +build_flags = ${env.build_flags} + -DHOYMILES_PIN_MISO=15 + -DHOYMILES_PIN_MOSI=2 + -DHOYMILES_PIN_SCLK=14 + -DHOYMILES_PIN_IRQ=13 + -DHOYMILES_PIN_CE=16 + -DHOYMILES_PIN_CS=17 + -DOPENDTU_ETHERNET + + +[env:d1_mini_esp32] +board = wemos_d1_mini32 +build_flags = + ${env.build_flags} + -DHOYMILES_PIN_MISO=19 + -DHOYMILES_PIN_MOSI=23 + -DHOYMILES_PIN_SCLK=18 + -DHOYMILES_PIN_IRQ=16 + -DHOYMILES_PIN_CE=17 + -DHOYMILES_PIN_CS=5 + + +[env:wt32_eth01] +; http://www.wireless-tag.com/portfolio/wt32-eth01/ +board = wt32-eth01 +build_flags = ${env.build_flags} + -DHOYMILES_PIN_MISO=4 + -DHOYMILES_PIN_MOSI=2 + -DHOYMILES_PIN_SCLK=32 + -DHOYMILES_PIN_IRQ=33 + -DHOYMILES_PIN_CE=14 + -DHOYMILES_PIN_CS=15 + -DOPENDTU_ETHERNET + + +[env:esp_s3_12k_kit] +; https://www.waveshare.com/wiki/NodeMCU-ESP-S3-12K-Kit +board = esp32-s3-devkitc-1 +build_flags = ${env.build_flags} + -DHOYMILES_PIN_MISO=16 + -DHOYMILES_PIN_MOSI=17 + -DHOYMILES_PIN_SCLK=18 + -DHOYMILES_PIN_IRQ=3 + -DHOYMILES_PIN_CE=4 + -DHOYMILES_PIN_CS=5 + + +[env:lolin32_lite] +; https://www.makershop.de/plattformen/esp8266/wemos-lolin32/ +; https://www.az-delivery.de/products/esp32-lolin-lolin32 +board = lolin32_lite +build_flags = ${env.build_flags} + -DHOYMILES_PIN_MISO=19 + -DHOYMILES_PIN_MOSI=23 + -DHOYMILES_PIN_SCLK=18 + -DHOYMILES_PIN_IRQ=16 + -DHOYMILES_PIN_CE=17 + -DHOYMILES_PIN_CS=5 + +[env:lolin_s2_mini] +board = lolin_s2_mini +build_flags = ${env.build_flags} + -DHOYMILES_PIN_MISO=13 + -DHOYMILES_PIN_MOSI=11 + -DHOYMILES_PIN_SCLK=12 + -DHOYMILES_PIN_CS=10 + -DHOYMILES_PIN_IRQ=4 + -DHOYMILES_PIN_CE=5 + + +[env:opendtufusionv1] +board = esp32-s3-devkitc-1 +upload_protocol = esp-builtin +debug_tool = esp-builtin +debug_speed = 12000 +build_flags = ${env.build_flags} + -DHOYMILES_PIN_MISO=48 + -DHOYMILES_PIN_MOSI=35 + -DHOYMILES_PIN_SCLK=36 + -DHOYMILES_PIN_IRQ=47 + -DHOYMILES_PIN_CE=38 + -DHOYMILES_PIN_CS=37 + -DLED0=17 + -DLED1=18 + -DARDUINO_USB_MODE=1 + +[env:opendtufusionv2] +board = esp32-s3-devkitc-1 +upload_protocol = esp-builtin +debug_tool = esp-builtin +debug_speed = 12000 +build_flags = ${env.build_flags} + -DHOYMILES_PIN_MISO=48 + -DHOYMILES_PIN_MOSI=35 + -DHOYMILES_PIN_SCLK=36 + -DHOYMILES_PIN_IRQ=47 + -DHOYMILES_PIN_CE=38 + -DHOYMILES_PIN_CS=37 + -DLED0=17 + -DLED1=18 + -DCMT_CLK=6 + -DCMT_CS=4 + -DCMT_FCS=21 + -DCMT_GPIO2=3 + -DCMT_GPIO3=8 + -DCMT_SDIO=5 + -DARDUINO_USB_MODE=1 + -DARDUINO_USB_CDC_ON_BOOT=1