/*
 * Copyright (c) 2023 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
 */

/**
 * @brief Header containing Coexistence APIs.
 */

#ifndef __COEX_H__
#define __COEX_H__

#include <stdbool.h>

/* Indicates WLAN frequency band of operation */
enum nrf_wifi_pta_wlan_op_band {
	NRF_WIFI_PTA_WLAN_OP_BAND_2_4_GHZ = 0,
	NRF_WIFI_PTA_WLAN_OP_BAND_5_GHZ,
	NRF_WIFI_PTA_WLAN_OP_BAND_NONE = 0xFF
};

/**
 * @function   nrf_wifi_coex_config_pta(enum nrf_wifi_pta_wlan_op_band wlan_band,
 *             bool separate_antennas, bool is_sr_protocol_ble)
 *
 * @brief      Function used to configure PTA tables of coexistence hardware.
 *
 * @param[in]  enum nrf_wifi_pta_wlan_op_band wlan_band
 * @param[in]  separate_antennas
 *             Indicates whether separate antenans are used or not.
 * @param[in]  is_sr_protocol_ble
 *             Indicates if SR protocol is Bluetooth LE or not.
 * @return     Returns status of configuration.
 *             Returns zero upon successful configuration.
 *             Returns non-zero upon unsuccessful configuration.
 */
int nrf_wifi_coex_config_pta(enum nrf_wifi_pta_wlan_op_band wlan_band, bool separate_antennas,
	bool is_sr_protocol_ble);

#if defined(CONFIG_NRF700X_SR_COEX_RF_SWITCH) || defined(__DOXYGEN__)
/**
 * @function   nrf_wifi_config_sr_switch(bool separate_antennas)
 *
 * @brief      Function used to configure SR side switch (nRF5340 side switch in nRF7002 DK).
 *
 * @param[in]  separate_antennas
 *               Indicates whether separate antenans are used or not.
 *
 * @return     Returns status of configuration.
 *             Returns zero upon successful configuration.
 *             Returns non-zero upon unsuccessful configuration.
 */
int nrf_wifi_config_sr_switch(bool separate_antennas);
#endif /* CONFIG_NRF700X_SR_COEX_RF_SWITCH */

/**
 * @function   nrf_wifi_coex_config_non_pta(bool separate_antennas)
 *
 * @brief      Function used to configure non-PTA registers of coexistence hardware.
 *
 * @param[in]  separate_antennas
 *             Indicates whether separate antenans are used or not.
 * @param[in]  is_sr_protocol_ble
 *             Indicates if SR protocol is Bluetooth LE or not.
 *
 * @return     Returns status of configuration.
 *             Returns zero upon successful configuration.
 *             Returns non-zero upon unsuccessful configuration.
 */
int nrf_wifi_coex_config_non_pta(bool separate_antennas, bool is_sr_protocol_ble);

/**
 * @function   nrf_wifi_coex_hw_reset(void)
 *
 * @brief      Function used to reset coexistence hardware.
 *
 * @return     Returns status of configuration.
 *             Returns zero upon successful configuration.
 *             Returns non-zero upon unsuccessful configuration.
 */
int nrf_wifi_coex_hw_reset(void);

#endif /* __COEX_H__ */
