# additional modules dependencies

include $(RIOTCPU)/esp_common/Makefile.dep

USEMODULE += esp_idf_driver
USEMODULE += esp_idf_esp32
USEMODULE += esp_idf_soc

ifneq (,$(filter newlib,$(USEMODULE)))
  DEFAULT_MODULE += newlib_nano
endif

ifneq (,$(filter esp_eth,$(USEMODULE)))
  USEMODULE += esp_freertos
  USEMODULE += esp_idf_eth
  USEMODULE += esp_idf_eth_phy
  USEMODULE += netdev_eth
  USEMODULE += netopt
  USEMODULE += xtimer
endif

ifneq (,$(filter esp_wifi_any,$(USEMODULE)))
  # add additional modules used for any WiFi interface
  USEMODULE += esp_freertos
  USEMODULE += esp_idf_heap
  USEMODULE += esp_idf_nvs_flash
  USEMODULE += esp_idf_wpa_supplicant_crypto
  USEMODULE += esp_idf_wpa_supplicant_port
endif

ifneq (,$(filter esp_wifi_enterprise,$(USEMODULE)))
  # add additional modules used for WPA2 Enterprise mode
  USEMODULE += esp_idf_wpa_supplicant_wpa2_eap_peer
  USEMODULE += esp_idf_wpa_supplicant_wpa2_tls
  USEMODULE += esp_idf_wpa_supplicant_wpa2_utils
endif

ifneq (,$(filter esp_idf_nvs_flash,$(USEMODULE)))
  # add additional modules required by esp_idf_nvs_flash
  USEMODULE += mtd
endif

ifneq (,$(filter periph_rtc,$(USEMODULE)))
    FEATURES_OPTIONAL += esp_rtc_timer_32k
endif

ifneq (,$(filter esp_rtc_timer_32k,$(FEATURES_USED)))
    USEMODULE += esp_rtc_timer_32k
endif

ifneq (,$(filter periph_adc periph_dac,$(USEMODULE)))
  FEATURES_REQUIRED += periph_adc_ctrl
endif

ifneq (,$(filter periph_i2c,$(USEMODULE)))
  ifneq (,$(filter esp_i2c_hw,$(USEMODULE)))
    USEMODULE += core_thread_flags
    USEMODULE += xtimer
    USEMODULE += periph_i2c_hw
  else
    # PLEASE NOTE: because of the very poor and faulty hardware implementation
    # we use software implementation by default for the moment (if module
    # esp_i2c_hw is not explicitly used)
    USEMODULE += esp_i2c_sw
    USEMODULE += periph_i2c_sw
  endif
endif

ifneq (,$(filter esp_spi_ram,$(DISABLE_MODULE)))
  USEMODULE := $(filter-out esp_spi_ram,$(USEMODULE))
endif

ifneq (,$(filter esp_now esp_wifi esp_spi_ram,$(USEMODULE)))
  # the ESP-IDF heap has to be used if SPI RAM is used
  USEMODULE += esp_idf_heap
endif

ifneq (,$(filter mtd,$(USEMODULE)))
  USEMODULE += esp_idf_spi_flash
endif

ifneq (,$(filter ndn-riot,$(USEPKG)))
  USEMODULE += crypto
  USEMODULE += cipher_modes
endif

ifneq (,$(filter periph_rtc,$(USEMODULE)))
  USEMODULE += rtt_rtc
endif

ifneq (,$(filter pm_layered,$(USEMODULE)))
  USEMODULE += periph_rtt
endif

ifneq (,$(filter periph_rtt,$(USEMODULE)))
  USEMODULE += periph_rtt_hw_sys
  USEMODULE += periph_rtt_hw_rtc
endif

ifneq (,$(filter shell,$(USEMODULE)))
  USEMODULE += ps
endif