; 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.9.0
platform_packages =
    platformio/tool-mklittlefs

build_flags =
    -DPIOENV=\"$PIOENV\"
    -D_TASK_STD_FUNCTION=1
    -D_TASK_THREAD_SAFE=1
    -DCONFIG_ASYNC_TCP_EVENT_QUEUE_SIZE=128
    -DCONFIG_ASYNC_TCP_QUEUE_SIZE=128
    -DEMC_TASK_STACK_SIZE=6400
    -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 =
    mathieucarbou/ESPAsyncWebServer @ 3.3.1
    bblanchon/ArduinoJson @ 7.2.0
    https://github.com/bertmelis/espMqttClient.git#v1.7.0
    nrf24/RF24 @ 1.4.9
    olikraus/U8g2 @ 2.35.30
    buelowp/sunset @ 1.1.7
    arkhipenko/TaskScheduler @ 3.8.5

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_4mb.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_esp32_16mb_psram]
board = esp32dev
board_build.flash_mode = qio
board_build.partitions = partitions_custom_16mb.csv
board_upload.flash_size = 16MB
build_flags = ${env.build_flags}
    -DBOARD_HAS_PSRAM
    -mfix-esp32-psram-cache-issue


[env:generic_esp32c3]
board = esp32-c3-devkitc-02
custom_patches = ${env.custom_patches}
build_flags = ${env.build_flags}


[env:generic_esp32c3_usb]
board = esp32-c3-devkitc-02
custom_patches = ${env.custom_patches}
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
    -DARDUINO_USB_CDC_ON_BOOT=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

[env:opendtufusionv2_poe]
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
    -DW5500_MOSI=40
    -DW5500_MISO=41
    -DW5500_SCLK=39
    -DW5500_CS=42
    -DW5500_INT=44
    -DW5500_RST=43
    -DARDUINO_USB_MODE=1
    -DARDUINO_USB_CDC_ON_BOOT=1
