mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-01-18 16:03:30 +08:00
[driver][wlan] add raw frame send interface and Management frame filter interface
Signed-off-by: chenyong <1521761801@qq.com>
This commit is contained in:
parent
02722864d6
commit
986b64cbe0
@ -574,6 +574,77 @@ rt_err_t rt_wlan_dev_report_data(struct rt_wlan_device *device, void *buff, int
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rt_err_t rt_wlan_dev_enter_mgnt_filter(struct rt_wlan_device *device)
|
||||||
|
{
|
||||||
|
rt_err_t result = RT_EOK;
|
||||||
|
int enable = 1;
|
||||||
|
|
||||||
|
if (device == RT_NULL)
|
||||||
|
{
|
||||||
|
return -RT_EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = rt_device_control(RT_DEVICE(device), RT_WLAN_CMD_CFG_MGNT_FILTER, &enable);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
rt_err_t rt_wlan_dev_exit_mgnt_filter(struct rt_wlan_device *device)
|
||||||
|
{
|
||||||
|
rt_err_t result = RT_EOK;
|
||||||
|
int enable = 0;
|
||||||
|
|
||||||
|
if (device == RT_NULL)
|
||||||
|
{
|
||||||
|
return -RT_EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = rt_device_control(RT_DEVICE(device), RT_WLAN_CMD_CFG_MGNT_FILTER, &enable);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
rt_err_t rt_wlan_dev_set_mgnt_filter_callback(struct rt_wlan_device *device, rt_wlan_mgnt_filter_callback_t callback)
|
||||||
|
{
|
||||||
|
if (device == RT_NULL)
|
||||||
|
{
|
||||||
|
return -RT_EIO;
|
||||||
|
}
|
||||||
|
device->mgnt_filter_callback = callback;
|
||||||
|
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void rt_wlan_dev_mgnt_filter_handler(struct rt_wlan_device *device, void *data, int len)
|
||||||
|
{
|
||||||
|
rt_wlan_mgnt_filter_callback_t callback;
|
||||||
|
|
||||||
|
if (device == RT_NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
callback = device->mgnt_filter_callback;
|
||||||
|
|
||||||
|
if (callback != RT_NULL)
|
||||||
|
{
|
||||||
|
callback(device, data, len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int rt_wlan_dev_send_raw_frame(struct rt_wlan_device *device, void *buff, int len)
|
||||||
|
{
|
||||||
|
if (device == RT_NULL)
|
||||||
|
{
|
||||||
|
return -RT_EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (device->ops->wlan_send_raw_frame)
|
||||||
|
{
|
||||||
|
return device->ops->wlan_send_raw_frame(device, buff, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
return -RT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
static rt_err_t _rt_wlan_dev_init(rt_device_t dev)
|
static rt_err_t _rt_wlan_dev_init(rt_device_t dev)
|
||||||
{
|
{
|
||||||
struct rt_wlan_device *wlan = (struct rt_wlan_device *)dev;
|
struct rt_wlan_device *wlan = (struct rt_wlan_device *)dev;
|
||||||
@ -716,6 +787,15 @@ static rt_err_t _rt_wlan_dev_control(rt_device_t dev, int cmd, void *args)
|
|||||||
err = wlan->ops->wlan_cfg_filter(wlan, filter);
|
err = wlan->ops->wlan_cfg_filter(wlan, filter);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case RT_WLAN_CMD_CFG_MGNT_FILTER:
|
||||||
|
{
|
||||||
|
rt_bool_t start = *((rt_bool_t *)args);
|
||||||
|
|
||||||
|
LOG_D("%s %d cmd[%d]:%s run......", __FUNCTION__, __LINE__, RT_WLAN_CMD_CFG_MGNT_FILTER, "RT_WLAN_CMD_CFG_MGNT_FILTER");
|
||||||
|
if (wlan->ops->wlan_cfg_mgnt_filter)
|
||||||
|
err = wlan->ops->wlan_cfg_mgnt_filter(wlan, start);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case RT_WLAN_CMD_SET_CHANNEL:
|
case RT_WLAN_CMD_SET_CHANNEL:
|
||||||
{
|
{
|
||||||
int channel = *(int *)args;
|
int channel = *(int *)args;
|
||||||
|
@ -37,7 +37,8 @@ typedef enum
|
|||||||
RT_WLAN_CMD_SET_POWERSAVE,
|
RT_WLAN_CMD_SET_POWERSAVE,
|
||||||
RT_WLAN_CMD_GET_POWERSAVE,
|
RT_WLAN_CMD_GET_POWERSAVE,
|
||||||
RT_WLAN_CMD_CFG_PROMISC, /* start/stop minitor */
|
RT_WLAN_CMD_CFG_PROMISC, /* start/stop minitor */
|
||||||
RT_WLAN_CMD_CFG_FILTER,
|
RT_WLAN_CMD_CFG_FILTER, /* start/stop frame filter */
|
||||||
|
RT_WLAN_CMD_CFG_MGNT_FILTER, /* start/stop management frame filter */
|
||||||
RT_WLAN_CMD_SET_CHANNEL,
|
RT_WLAN_CMD_SET_CHANNEL,
|
||||||
RT_WLAN_CMD_GET_CHANNEL,
|
RT_WLAN_CMD_GET_CHANNEL,
|
||||||
RT_WLAN_CMD_SET_COUNTRY,
|
RT_WLAN_CMD_SET_COUNTRY,
|
||||||
@ -360,6 +361,8 @@ typedef void (*rt_wlan_dev_event_handler)(struct rt_wlan_device *device, rt_wlan
|
|||||||
|
|
||||||
typedef void (*rt_wlan_pormisc_callback_t)(struct rt_wlan_device *device, void *data, int len);
|
typedef void (*rt_wlan_pormisc_callback_t)(struct rt_wlan_device *device, void *data, int len);
|
||||||
|
|
||||||
|
typedef void (*rt_wlan_mgnt_filter_callback_t)(struct rt_wlan_device *device, void *data, int len);
|
||||||
|
|
||||||
struct rt_wlan_ssid
|
struct rt_wlan_ssid
|
||||||
{
|
{
|
||||||
rt_uint8_t len;
|
rt_uint8_t len;
|
||||||
@ -445,6 +448,7 @@ struct rt_wlan_device
|
|||||||
struct rt_mutex lock;
|
struct rt_mutex lock;
|
||||||
struct rt_wlan_dev_event_desc handler_table[RT_WLAN_DEV_EVT_MAX][RT_WLAN_DEV_EVENT_NUM];
|
struct rt_wlan_dev_event_desc handler_table[RT_WLAN_DEV_EVT_MAX][RT_WLAN_DEV_EVENT_NUM];
|
||||||
rt_wlan_pormisc_callback_t pormisc_callback;
|
rt_wlan_pormisc_callback_t pormisc_callback;
|
||||||
|
rt_wlan_mgnt_filter_callback_t mgnt_filter_callback;
|
||||||
const struct rt_wlan_dev_ops *ops;
|
const struct rt_wlan_dev_ops *ops;
|
||||||
rt_uint32_t flags;
|
rt_uint32_t flags;
|
||||||
struct netdev *netdev;
|
struct netdev *netdev;
|
||||||
@ -495,6 +499,7 @@ struct rt_wlan_dev_ops
|
|||||||
int (*wlan_get_powersave)(struct rt_wlan_device *wlan);
|
int (*wlan_get_powersave)(struct rt_wlan_device *wlan);
|
||||||
rt_err_t (*wlan_cfg_promisc)(struct rt_wlan_device *wlan, rt_bool_t start);
|
rt_err_t (*wlan_cfg_promisc)(struct rt_wlan_device *wlan, rt_bool_t start);
|
||||||
rt_err_t (*wlan_cfg_filter)(struct rt_wlan_device *wlan, struct rt_wlan_filter *filter);
|
rt_err_t (*wlan_cfg_filter)(struct rt_wlan_device *wlan, struct rt_wlan_filter *filter);
|
||||||
|
rt_err_t (*wlan_cfg_mgnt_filter)(struct rt_wlan_device *wlan, rt_bool_t start);
|
||||||
rt_err_t (*wlan_set_channel)(struct rt_wlan_device *wlan, int channel);
|
rt_err_t (*wlan_set_channel)(struct rt_wlan_device *wlan, int channel);
|
||||||
int (*wlan_get_channel)(struct rt_wlan_device *wlan);
|
int (*wlan_get_channel)(struct rt_wlan_device *wlan);
|
||||||
rt_err_t (*wlan_set_country)(struct rt_wlan_device *wlan, rt_country_code_t country_code);
|
rt_err_t (*wlan_set_country)(struct rt_wlan_device *wlan, rt_country_code_t country_code);
|
||||||
@ -503,6 +508,7 @@ struct rt_wlan_dev_ops
|
|||||||
rt_err_t (*wlan_get_mac)(struct rt_wlan_device *wlan, rt_uint8_t mac[]);
|
rt_err_t (*wlan_get_mac)(struct rt_wlan_device *wlan, rt_uint8_t mac[]);
|
||||||
int (*wlan_recv)(struct rt_wlan_device *wlan, void *buff, int len);
|
int (*wlan_recv)(struct rt_wlan_device *wlan, void *buff, int len);
|
||||||
int (*wlan_send)(struct rt_wlan_device *wlan, void *buff, int len);
|
int (*wlan_send)(struct rt_wlan_device *wlan, void *buff, int len);
|
||||||
|
int (*wlan_send_raw_frame)(struct rt_wlan_device *wlan, void *buff, int len);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user