[wlan] add get_info api for more new sta information

This commit is contained in:
Evlers 2024-12-25 17:33:09 +08:00 committed by Rbb666
parent 0932e31ca3
commit c75e095a27
3 changed files with 45 additions and 1 deletions

View File

@ -6,6 +6,7 @@
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2018-08-03 tyx the first version * 2018-08-03 tyx the first version
* 2024-12-25 Evlers add get_info api for more new sta information
*/ */
#include <rthw.h> #include <rthw.h>
@ -249,6 +250,25 @@ int rt_wlan_dev_get_rssi(struct rt_wlan_device *device)
return rssi; return rssi;
} }
rt_err_t rt_wlan_dev_get_info(struct rt_wlan_device *device, struct rt_wlan_info *info)
{
rt_err_t result = RT_EOK;
if (device == RT_NULL)
{
return -RT_EIO;
}
result = rt_device_control(RT_DEVICE(device), RT_WLAN_CMD_GET_INFO, info);
if (result != RT_EOK)
{
rt_set_errno(result);
return 0;
}
return result;
}
rt_err_t rt_wlan_dev_get_mac(struct rt_wlan_device *device, rt_uint8_t mac[6]) rt_err_t rt_wlan_dev_get_mac(struct rt_wlan_device *device, rt_uint8_t mac[6])
{ {
rt_err_t result = RT_EOK; rt_err_t result = RT_EOK;
@ -784,6 +804,17 @@ static rt_err_t _rt_wlan_dev_control(rt_device_t dev, int cmd, void *args)
*rssi = wlan->ops->wlan_get_rssi(wlan); *rssi = wlan->ops->wlan_get_rssi(wlan);
break; break;
} }
case RT_WLAN_CMD_GET_INFO:
{
struct rt_wlan_info *info = args;
LOG_D("%s %d cmd[%d]:%s run......", __FUNCTION__, __LINE__, RT_WLAN_CMD_GET_INFO, "RT_WLAN_CMD_GET_INFO");
if (wlan->ops->wlan_get_info)
err = wlan->ops->wlan_get_info(wlan, info);
else
err = -RT_ERROR;
break;
}
case RT_WLAN_CMD_SET_POWERSAVE: case RT_WLAN_CMD_SET_POWERSAVE:
{ {
int level = *((int *)args); int level = *((int *)args);

View File

@ -6,6 +6,7 @@
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2018-08-03 tyx the first version * 2018-08-03 tyx the first version
* 2024-12-25 Evlers add get_info api for more new sta information
*/ */
#ifndef __DEV_WLAN_DEVICE_H__ #ifndef __DEV_WLAN_DEVICE_H__
@ -15,6 +16,8 @@
extern "C" { extern "C" {
#endif #endif
#define RT_WLAN_DEV_VERSION 0x10000 /* 1.0.0 */
typedef enum typedef enum
{ {
RT_WLAN_NONE, RT_WLAN_NONE,
@ -34,6 +37,7 @@ typedef enum
RT_WLAN_CMD_AP_DEAUTH, RT_WLAN_CMD_AP_DEAUTH,
RT_WLAN_CMD_SCAN_STOP, RT_WLAN_CMD_SCAN_STOP,
RT_WLAN_CMD_GET_RSSI, /* get sensitivity (dBm) */ RT_WLAN_CMD_GET_RSSI, /* get sensitivity (dBm) */
RT_WLAN_CMD_GET_INFO, /* get information (rssi, channel, datarate.) */
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 */
@ -497,6 +501,7 @@ struct rt_wlan_dev_ops
rt_err_t (*wlan_ap_deauth)(struct rt_wlan_device *wlan, rt_uint8_t mac[]); rt_err_t (*wlan_ap_deauth)(struct rt_wlan_device *wlan, rt_uint8_t mac[]);
rt_err_t (*wlan_scan_stop)(struct rt_wlan_device *wlan); rt_err_t (*wlan_scan_stop)(struct rt_wlan_device *wlan);
int (*wlan_get_rssi)(struct rt_wlan_device *wlan); int (*wlan_get_rssi)(struct rt_wlan_device *wlan);
int (*wlan_get_info)(struct rt_wlan_device *wlan, struct rt_wlan_info *info);
rt_err_t (*wlan_set_powersave)(struct rt_wlan_device *wlan, int level); rt_err_t (*wlan_set_powersave)(struct rt_wlan_device *wlan, int level);
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);
@ -527,6 +532,7 @@ rt_err_t rt_wlan_dev_connect(struct rt_wlan_device *device, struct rt_wlan_info
rt_err_t rt_wlan_dev_fast_connect(struct rt_wlan_device *device, struct rt_wlan_info *info, const char *password, int password_len); rt_err_t rt_wlan_dev_fast_connect(struct rt_wlan_device *device, struct rt_wlan_info *info, const char *password, int password_len);
rt_err_t rt_wlan_dev_disconnect(struct rt_wlan_device *device); rt_err_t rt_wlan_dev_disconnect(struct rt_wlan_device *device);
int rt_wlan_dev_get_rssi(struct rt_wlan_device *device); int rt_wlan_dev_get_rssi(struct rt_wlan_device *device);
rt_err_t rt_wlan_dev_get_info(struct rt_wlan_device *device, struct rt_wlan_info *info);
/* /*
* wlan device ap interface * wlan device ap interface

View File

@ -7,6 +7,7 @@
* Date Author Notes * Date Author Notes
* 2018-08-06 tyx the first version * 2018-08-06 tyx the first version
* 2023-12-12 Evlers add the wlan join scan function * 2023-12-12 Evlers add the wlan join scan function
* 2024-12-25 Evlers add get_info api for more new sta information
*/ */
#include <rthw.h> #include <rthw.h>
@ -1185,8 +1186,14 @@ rt_err_t rt_wlan_get_info(struct rt_wlan_info *info)
if (rt_wlan_is_connected() == RT_TRUE) if (rt_wlan_is_connected() == RT_TRUE)
{ {
/* Initialize the information to the scan first */
*info = _sta_mgnt.info; *info = _sta_mgnt.info;
info->rssi = rt_wlan_get_rssi(); /* Try using get_info's API for more new information */
if (rt_wlan_dev_get_info(STA_DEVICE(), info) != RT_EOK)
{
/* The get_info returns an error and gets the rssi value separately */
info->rssi = rt_wlan_get_rssi();
}
return RT_EOK; return RT_EOK;
} }
return -RT_ERROR; return -RT_ERROR;