/**
 * Copyright 2023-2024 NXP
 * SPDX-License-Identifier: Apache-2.0
 *
 * @file nxp_wifi_drv.h
 * Shim layer between wifi driver connection manager and zephyr
 * Wi-Fi L2 layer
 */

#ifndef ZEPHYR_DRIVERS_WIFI_NNP_WIFI_DRV_H_
#define ZEPHYR_DRIVERS_WIFI_NXP_WIFI_DRV_H_

#include <zephyr/kernel.h>
#include <stdio.h>
#ifdef CONFIG_SDIO_STACK
#include <zephyr/sd/sd.h>
#include <zephyr/sd/sdio.h>
#endif
#include <zephyr/drivers/gpio.h>
#include <zephyr/net/wifi_mgmt.h>
#include <zephyr/net/dhcpv4_server.h>

#include "wlan_bt_fw.h"
#include "wlan.h"
#include "wm_net.h"
#if defined(CONFIG_NXP_WIFI_SHELL)
#include "wifi_shell.h"
#endif
#if defined(CONFIG_WIFI_NM_WPA_SUPPLICANT)
#include "wifi_nxp.h"
#include "rtos_wpa_supp_if.h"
#endif

#define MAX_DATA_SIZE 1600

#define NXP_WIFI_SYNC_TIMEOUT_MS K_FOREVER

#define NXP_WIFI_UAP_NETWORK_NAME "uap-network"

#define NXP_WIFI_STA_NETWORK_NAME "sta-network"

#define NXP_WIFI_EVENT_BIT(event) (1 << event)

#define NXP_WIFI_SYNC_INIT_GROUP                                                                   \
	NXP_WIFI_EVENT_BIT(WLAN_REASON_INITIALIZED) |                                              \
		NXP_WIFI_EVENT_BIT(WLAN_REASON_INITIALIZATION_FAILED)

#define NXP_WIFI_SYNC_PS_GROUP                                                                     \
	NXP_WIFI_EVENT_BIT(WLAN_REASON_PS_ENTER) | NXP_WIFI_EVENT_BIT(WLAN_REASON_PS_EXIT)

enum nxp_wifi_ret {
	NXP_WIFI_RET_SUCCESS,
	NXP_WIFI_RET_FAIL,
	NXP_WIFI_RET_NOT_FOUND,
	NXP_WIFI_RET_AUTH_FAILED,
	NXP_WIFI_RET_ADDR_FAILED,
	NXP_WIFI_RET_NOT_CONNECTED,
	NXP_WIFI_RET_NOT_READY,
	NXP_WIFI_RET_TIMEOUT,
	NXP_WIFI_RET_BAD_PARAM,
};

enum nxp_wifi_state {
	NXP_WIFI_NOT_INITIALIZED,
	NXP_WIFI_INITIALIZED,
	NXP_WIFI_STARTED,
};

struct nxp_wifi_dev {
	struct net_if *iface;
	scan_result_cb_t scan_cb;
	struct k_mutex mutex;
};

int nxp_wifi_wlan_event_callback(enum wlan_event_reason reason, void *data);

#if defined(CONFIG_NXP_WIFI_SHELL)
void nxp_wifi_shell_register(struct nxp_wifi_dev *dev);
#else
#define nxp_wifi_shell_register(dev)
#endif

#endif
