# Copyright (c) 2023 Cypress Semiconductor Corporation (an Infineon company) or
# an affiliate of Cypress Semiconductor Corporation
#
# SPDX-License-Identifier: Apache-2.0

set(hal_dir         ${ZEPHYR_HAL_INFINEON_MODULE_DIR}/mtb-hal-cat1)
set(hal_cat1a_dir   ${hal_dir}/COMPONENT_CAT1A)

# PSoC 6 family defines
zephyr_compile_definitions_ifdef(CONFIG_SOC_FAMILY_INFINEON_CAT1A COMPONENT_CAT1A)
zephyr_compile_definitions_ifdef(CONFIG_SOC_FAMILY_INFINEON_CAT1 COMPONENT_CAT1)
zephyr_compile_definitions_ifdef(CONFIG_SOC_FAMILY_INFINEON_CAT1 CY_USING_HAL)

# Add mtb-hal-cat1
zephyr_include_directories(${hal_dir}/include)
zephyr_include_directories(${hal_dir}/include_pvt)
zephyr_include_directories_ifdef(CONFIG_SOC_FAMILY_INFINEON_CAT1A ${hal_cat1a_dir}/include)

# Packages sources
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_01_104_M_CSP_BLE
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_01_104_m_csp_ble.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_01_104_M_CSP_BLE_USB
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_01_104_m_csp_ble_usb.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_01_116_BGA_BLE
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_01_116_bga_ble.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_01_116_BGA_USB
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_01_116_bga_usb.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_01_124_BGA
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_01_124_bga.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_01_124_BGA_SIP
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_01_124_bga_sip.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_01_43_SMT
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_01_43_smt.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_01_68_QFN_BLE
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_01_68_qfn_ble.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_01_80_WLCSP
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_01_80_wlcsp.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_02_100_WLCSP
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_02_100_wlcsp.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_02_124_BGA
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_02_124_bga.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_02_128_TQFP
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_02_128_tqfp.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_02_68_QFN
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_02_68_qfn.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_03_100_TQFP
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_03_100_tqfp.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_03_49_WLCSP
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_03_49_wlcsp.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_03_68_QFN
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_03_68_qfn.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_04_64_TQFP
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_04_64_tqfp.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_04_68_QFN
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_04_68_qfn.c)
zephyr_library_sources_ifdef(CONFIG_SOC_PACKAGE_PSOC6_04_80_TQFP
  ${hal_cat1a_dir}/source/pin_packages/cyhal_psoc6_04_80_tqfp.c)

zephyr_library_sources_ifdef(CONFIG_SOC_DIE_PSOC6_01
  ${hal_cat1a_dir}/source/triggers/cyhal_triggers_psoc6_01.c)
zephyr_library_sources_ifdef(CONFIG_SOC_DIE_PSOC6_02
  ${hal_cat1a_dir}/source/triggers/cyhal_triggers_psoc6_02.c)
zephyr_library_sources_ifdef(CONFIG_SOC_DIE_PSOC6_03
  ${hal_cat1a_dir}/source/triggers/cyhal_triggers_psoc6_03.c)
zephyr_library_sources_ifdef(CONFIG_SOC_DIE_PSOC6_04
  ${hal_cat1a_dir}/source/triggers/cyhal_triggers_psoc6_04.c)

# High level interface for interacting with CAT1 hardware
zephyr_library_sources_ifdef(CONFIG_USE_INFINEON_ADC     ${hal_dir}/source/cyhal_adc_sar.c)
zephyr_library_sources_ifdef(CONFIG_USE_INFINEON_FLASH   ${hal_dir}/source/cyhal_nvm.c)
zephyr_library_sources_ifdef(CONFIG_USE_INFINEON_I2C     ${hal_dir}/source/cyhal_i2c.c)
zephyr_library_sources_ifdef(CONFIG_USE_INFINEON_LPTIMER ${hal_dir}/source/cyhal_lptimer.c)
zephyr_library_sources_ifdef(CONFIG_USE_INFINEON_PWM     ${hal_dir}/source/cyhal_pwm.c)
zephyr_library_sources_ifdef(CONFIG_USE_INFINEON_RTC     ${hal_dir}/source/cyhal_rtc.c)
zephyr_library_sources_ifdef(CONFIG_USE_INFINEON_SDIO    ${hal_dir}/source/cyhal_sdhc.c)
zephyr_library_sources_ifdef(CONFIG_USE_INFINEON_SPI     ${hal_dir}/source/cyhal_spi.c)
zephyr_library_sources_ifdef(CONFIG_USE_INFINEON_TIMER   ${hal_dir}/source/cyhal_timer.c)
zephyr_library_sources_ifdef(CONFIG_USE_INFINEON_TRNG    ${hal_dir}/source/cyhal_trng.c)
zephyr_library_sources_ifdef(CONFIG_USE_INFINEON_UART    ${hal_dir}/source/cyhal_uart.c)
zephyr_library_sources_ifdef(CONFIG_USE_INFINEON_WDT     ${hal_dir}/source/cyhal_wdt.c)

if(CONFIG_USE_INFINEON_ADC)
  zephyr_library_sources(${hal_dir}/source/cyhal_analog_common.c)
  zephyr_library_sources(${hal_dir}/source/cyhal_dma.c)
  zephyr_library_sources(${hal_dir}/source/cyhal_dma_dmac.c)
  zephyr_library_sources(${hal_dir}/source/cyhal_dma_dw.c)
endif()

if(CONFIG_USE_INFINEON_TIMER)
  zephyr_library_sources(${hal_dir}/source/cyhal_tcpwm_common.c)
endif()

if(CONFIG_USE_INFINEON_UART OR CONFIG_USE_INFINEON_I2C OR CONFIG_USE_INFINEON_SPI)
  zephyr_library_sources(${hal_dir}/source/cyhal_scb_common.c)
endif()

# Common part
zephyr_library_sources(${hal_dir}/source/cyhal_clock.c)
zephyr_library_sources(${hal_dir}/source/cyhal_gpio.c)
zephyr_library_sources(${hal_dir}/source/cyhal_hwmgr.c)
zephyr_library_sources(${hal_dir}/source/cyhal_interconnect.c)
zephyr_library_sources(${hal_dir}/source/cyhal_syspm.c)
zephyr_library_sources(${hal_dir}/source/cyhal_system.c)
zephyr_library_sources(${hal_dir}/source/cyhal_utils.c)
zephyr_library_sources(${hal_dir}/source/cyhal_utils_impl.c)
zephyr_library_sources(${hal_dir}/source/cyhal_wdt.c)
zephyr_library_sources(${hal_dir}/source/cyhal_irq_impl.c)
