/**
 *@file sr_netdev.h
 *@brief 网卡设备管理接口
 *@details 提供网卡设备管理相关枚举、结构体、API声明
 *@copyright Copyright (c) 2024 lierda. All rights reserved.
 *@author Lierda-RDC
 *@date 2024-04-01
 *@example ZhaoyangSDK\example\pal\hal\netdev_mng_example.c
 */

#ifndef _SR_NETDEV_H
#define _SR_NETDEV_H

#include "sr_config.h"
#include "sr_stddef.h"
#include "sr_list.h"

typedef struct SR_NETDEV SR_NETDEV_T;

#include "at.h"

/**  
* @brief 网卡结构体
*/  
struct SR_NETDEV
{
  const char *name;         /*!<网卡名称*/   
  os_list_node_t list;      /*!<链表*/

  void *devomOps;           /*!<设备运维操作函数集*/
  void *netEvtCb;           /*!<网络运维事件回调*/
  void *netEvtArgs;         /*!<网络运维事件回调的参数*/

  void *wifiOps;            /*!<wifi操作函数集*/
  void *wifiEvtCb;          /*!<wifi事件回调*/
  void *wifiEvtArgs;        /*!<wifi事件回调的参数*/
          
  void *netconn;            /*!<网络连接操作函数集*/
  void *ctwOps;             /*!<CTWING操作函数集*/
  void *ctwEvtCb;           /*!<CTWING事件回调*/
  void *ctwEvtArgs;         /*!<CTWING事件回调*/

  AT_DEVICE_T *atDev;       /*!<AT设备指针*/	

  uint8_t pdpSta;           /*!<PDP状态暂存变量*/
  uint8_t linkSta;          /*!<核心网连接状态暂存变量*/
	
};



/**  
* @brief 网卡设备查找    
*
* @param[in] name  在BSP层注册的网卡设备名称  
*
* @return 成功返回SR_NETDEV_T对象指针，失败返回OS_NULL 
*/  
SR_NETDEV_T *SR_NetdevFind(const char *name);



/**  
* @brief 网卡设备注册  
*
* @param[in] dev  网卡设备对象指针
*
* @return 成功返回0，失败返回负值错误码
*/  
int SR_NetdevRegister(SR_NETDEV_T *dev);



/**  
* @brief 获取默认网卡设备
*
* @return 成功返回SR_NETDEV_T对象指针，失败返回OS_NULL
*/  
SR_NETDEV_T *SR_NetdevGetDefault(void);


/**  
* @brief 设置默认网卡设备
*
* @param[in] dev  网卡设备对象指针
*
* @return 成功返回0，失败返回负值错误码
*/  
int SR_NetdevSetDefault(SR_NETDEV_T *dev);


#include "sr_netdev_om.h"
#include "sr_netdev_conn.h"
#include "sr_netdev_wifi.h"

#endif
