set(OPENKNX_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../knx")
set(TPUART_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../tpuart")

if(NOT EXISTS "${OPENKNX_ROOT}/src/knx/platform.h")
    message(FATAL_ERROR "OpenKNX submodule is missing at ${OPENKNX_ROOT}")
endif()

if(NOT EXISTS "${TPUART_ROOT}/src/TPUart/DataLinkLayer.h")
    message(FATAL_ERROR "TPUart submodule is missing at ${TPUART_ROOT}")
endif()

file(GLOB OPENKNX_SRCS
    "${OPENKNX_ROOT}/src/knx/*.cpp"
)

if(CONFIG_GATEWAY_KNX_DATA_SECURE_SUPPORTED)
    list(APPEND OPENKNX_SRCS
        "${OPENKNX_ROOT}/src/knx/aes.c"
    )
endif()

set(TPUART_SRCS
    "${TPUART_ROOT}/src/TPUart/DataLinkLayer.cpp"
    "${TPUART_ROOT}/src/TPUart/Receiver.cpp"
    "${TPUART_ROOT}/src/TPUart/RepetitionFilter.cpp"
    "${TPUART_ROOT}/src/TPUart/RingBuffer.cpp"
    "${TPUART_ROOT}/src/TPUart/SearchBuffer.cpp"
    "${TPUART_ROOT}/src/TPUart/Statistics.cpp"
    "${TPUART_ROOT}/src/TPUart/SystemState.cpp"
    "${TPUART_ROOT}/src/TPUart/Transmitter.cpp"
    "${TPUART_ROOT}/src/TPUart.cpp"
)

idf_component_register(
    SRCS
        "src/arduino_compat.cpp"
        "src/esp_idf_platform.cpp"
        "src/ets_device_runtime.cpp"
        "src/ets_memory_loader.cpp"
        "src/security_storage.cpp"
        "src/tpuart_uart_interface.cpp"
        ${OPENKNX_SRCS}
        ${TPUART_SRCS}
    INCLUDE_DIRS
        "include"
        "${OPENKNX_ROOT}/src"
        "${TPUART_ROOT}/src"
    REQUIRES
        esp_driver_gpio
        esp_driver_uart
        esp_netif
        esp_system
        esp_timer
        esp_wifi
        freertos
        log
        lwip
        mbedtls
        nvs_flash
)

target_compile_definitions(${COMPONENT_LIB} PUBLIC
    MASK_VERSION=0x07B0
    KNX_FLASH_SIZE=4096
    KNX_NO_AUTOMATIC_GLOBAL_INSTANCE
    KNX_NO_SPI
    USE_CEMI_SERVER
)

if(CONFIG_GATEWAY_KNX_DATA_SECURE_SUPPORTED)
    target_compile_definitions(${COMPONENT_LIB} PUBLIC USE_DATASECURE)
endif()

target_compile_options(${COMPONENT_LIB} PRIVATE
    -Wno-unused-parameter
)

set_property(TARGET ${COMPONENT_LIB} PROPERTY CXX_STANDARD 17)