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"
)

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_memory_loader.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_timer
        esp_wifi
        freertos
        log
        lwip
        nvs_flash
)

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

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

set_property(TARGET ${COMPONENT_LIB} PROPERTY CXX_STANDARD 17)