|
|
|
@@ -1,7 +1,6 @@
|
|
|
|
|
/****************************************************************************
|
|
|
|
|
* arch/sim/src/sim/sim_wifidriver.c
|
|
|
|
|
*
|
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
* arch/sim/src/sim/sim_wifihost.c
|
|
|
|
|
* Manage the host wireless
|
|
|
|
|
*
|
|
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
|
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
|
|
@@ -35,6 +34,7 @@
|
|
|
|
|
#include <sys/time.h>
|
|
|
|
|
|
|
|
|
|
#include "sim_internal.h"
|
|
|
|
|
#include "sim_wifihost.h"
|
|
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
|
* Pre-processor Definitions
|
|
|
|
@@ -105,6 +105,9 @@
|
|
|
|
|
ret__; \
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
#define NETDEV2WIFI(dev) \
|
|
|
|
|
((struct sim_wifi_s *)((struct sim_wifihost_lowerhalf_s *)dev)->wifi)
|
|
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
|
* Private Types
|
|
|
|
|
****************************************************************************/
|
|
|
|
@@ -155,10 +158,9 @@ struct sim_bss_info_s
|
|
|
|
|
int16_t snr; /* average SNR of during frame reception */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct sim_netdev_s
|
|
|
|
|
struct sim_wifi_s
|
|
|
|
|
{
|
|
|
|
|
struct netdev_lowerhalf_s dev;
|
|
|
|
|
uint8_t buf[SIM_NETDEV_BUFSIZE]; /* Used when packet buffer is fragmented */
|
|
|
|
|
struct netdev_lowerhalf_s *dev;
|
|
|
|
|
char ssid[SSID_MAX_LEN];
|
|
|
|
|
char bssid[ETH_ALEN];
|
|
|
|
|
uint16_t channel;
|
|
|
|
@@ -257,7 +259,7 @@ static const struct wireless_ops_s g_iw_ops =
|
|
|
|
|
* Private Functions
|
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
|
|
|
|
static int get_cmd_result_num(struct sim_netdev_s *wifidev, char *cmd)
|
|
|
|
|
static int get_cmd_result_num(struct sim_wifi_s *wifidev, char *cmd)
|
|
|
|
|
{
|
|
|
|
|
int num = 0;
|
|
|
|
|
char rbuf[BUF_LEN];
|
|
|
|
@@ -277,21 +279,21 @@ static int get_cmd_result_num(struct sim_netdev_s *wifidev, char *cmd)
|
|
|
|
|
|
|
|
|
|
/* For sta, add an available network. */
|
|
|
|
|
|
|
|
|
|
static int wpa_add_network(struct sim_netdev_s *wifidev)
|
|
|
|
|
static int wpa_add_network(struct sim_wifi_s *wifidev)
|
|
|
|
|
{
|
|
|
|
|
return get_cmd_result_num(wifidev, "add_network");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* For sta, get the number of available networks. */
|
|
|
|
|
|
|
|
|
|
static int wpa_get_network_num(struct sim_netdev_s *wifidev)
|
|
|
|
|
static int wpa_get_network_num(struct sim_wifi_s *wifidev)
|
|
|
|
|
{
|
|
|
|
|
return get_cmd_result_num(wifidev, "list_network | grep \"\\[\" | wc -l");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* For sta, get the available network_id. */
|
|
|
|
|
|
|
|
|
|
static int wpa_get_last_network_id(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wpa_get_last_network_id(struct sim_wifi_s *wifidev,
|
|
|
|
|
int network_num)
|
|
|
|
|
{
|
|
|
|
|
int num;
|
|
|
|
@@ -823,7 +825,7 @@ static int get_bss_info(struct sim_bss_info_s *bss_info, char *buf, int len)
|
|
|
|
|
return OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int get_scan_results(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int get_scan_results(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct sim_scan_result_s *scan_reqs)
|
|
|
|
|
{
|
|
|
|
|
int ret;
|
|
|
|
@@ -898,7 +900,7 @@ get_scan:
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static bool get_wpa_state(struct sim_netdev_s *wifidev)
|
|
|
|
|
static bool get_wpa_state(struct sim_wifi_s *wifidev)
|
|
|
|
|
{
|
|
|
|
|
int ret;
|
|
|
|
|
char rbuf[BUF_LEN];
|
|
|
|
@@ -914,7 +916,7 @@ static bool get_wpa_state(struct sim_netdev_s *wifidev)
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static bool get_wpa_bssid(struct sim_netdev_s *wifidev,
|
|
|
|
|
static bool get_wpa_bssid(struct sim_wifi_s *wifidev,
|
|
|
|
|
unsigned char *bssid)
|
|
|
|
|
{
|
|
|
|
|
int ret;
|
|
|
|
@@ -931,7 +933,7 @@ static bool get_wpa_bssid(struct sim_netdev_s *wifidev,
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static bool get_wpa_rssi(struct sim_netdev_s *wifidev, int32_t *rssi)
|
|
|
|
|
static bool get_wpa_rssi(struct sim_wifi_s *wifidev, int32_t *rssi)
|
|
|
|
|
{
|
|
|
|
|
int ret;
|
|
|
|
|
char rbuf[BUF_LEN];
|
|
|
|
@@ -948,14 +950,14 @@ static bool get_wpa_rssi(struct sim_netdev_s *wifidev, int32_t *rssi)
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void get_wpa_ssid(struct sim_netdev_s *wifidev,
|
|
|
|
|
static void get_wpa_ssid(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iw_point *essid)
|
|
|
|
|
{
|
|
|
|
|
essid->length = strlen(wifidev->ssid);
|
|
|
|
|
strlcpy(essid->pointer, wifidev->ssid, essid->length + 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int get_wpa_freq(struct sim_netdev_s *wifidev)
|
|
|
|
|
static int get_wpa_freq(struct sim_wifi_s *wifidev)
|
|
|
|
|
{
|
|
|
|
|
return get_cmd_result_num(wifidev,
|
|
|
|
|
"status | grep freq | awk -F'=' '{print $2}'");
|
|
|
|
@@ -1075,7 +1077,7 @@ static int wifi_send_event(struct net_driver_s *dev, unsigned int cmd,
|
|
|
|
|
return OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_start_scan(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_start_scan(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
int ret;
|
|
|
|
@@ -1110,7 +1112,7 @@ static int wifidriver_start_scan(struct sim_netdev_s *wifidev,
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_scan_result(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_scan_result(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
struct sim_scan_result_s scan_req;
|
|
|
|
@@ -1139,7 +1141,7 @@ static int wifidriver_scan_result(struct sim_netdev_s *wifidev,
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_set_auth(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_set_auth(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
int ret = 0;
|
|
|
|
@@ -1210,7 +1212,7 @@ static int wifidriver_set_auth(struct sim_netdev_s *wifidev,
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_get_auth(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_get_auth(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
int ret = 0;
|
|
|
|
@@ -1233,7 +1235,7 @@ static int wifidriver_get_auth(struct sim_netdev_s *wifidev,
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_set_psk(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_set_psk(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
struct iw_encode_ext *ext;
|
|
|
|
@@ -1287,7 +1289,7 @@ static int wifidriver_set_psk(struct sim_netdev_s *wifidev,
|
|
|
|
|
return ret ;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_get_psk(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_get_psk(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
struct iw_encode_ext *ext;
|
|
|
|
@@ -1323,7 +1325,7 @@ static int wifidriver_get_psk(struct sim_netdev_s *wifidev,
|
|
|
|
|
return ret ;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_set_essid(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_set_essid(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
char ssid_buf[SSID_MAX_LEN];
|
|
|
|
@@ -1379,7 +1381,7 @@ static int wifidriver_set_essid(struct sim_netdev_s *wifidev,
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_get_essid(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_get_essid(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
int ret = 0;
|
|
|
|
@@ -1414,7 +1416,7 @@ static int wifidriver_get_essid(struct sim_netdev_s *wifidev,
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_set_bssid(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_set_bssid(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
int ret = 0;
|
|
|
|
@@ -1453,7 +1455,7 @@ static int wifidriver_set_bssid(struct sim_netdev_s *wifidev,
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_get_bssid(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_get_bssid(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
struct sockaddr *sockaddr = &pwrq->u.ap_addr;
|
|
|
|
@@ -1485,7 +1487,7 @@ static int wifidriver_get_bssid(struct sim_netdev_s *wifidev,
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_start_connect(struct sim_netdev_s *wifidev)
|
|
|
|
|
static int wifidriver_start_connect(struct sim_wifi_s *wifidev)
|
|
|
|
|
{
|
|
|
|
|
int timeout = 10;
|
|
|
|
|
|
|
|
|
@@ -1519,7 +1521,7 @@ static int wifidriver_start_connect(struct sim_netdev_s *wifidev)
|
|
|
|
|
|
|
|
|
|
memset(&wrqu, 0, sizeof(wrqu));
|
|
|
|
|
memcpy(wrqu.ap_addr.sa_data, bssid, ETH_ALEN);
|
|
|
|
|
wifi_send_event(&wifidev->dev.netdev, SIOCGIWAP, &wrqu);
|
|
|
|
|
wifi_send_event(&wifidev->dev->netdev, SIOCGIWAP, &wrqu);
|
|
|
|
|
return OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1544,7 +1546,7 @@ static int wifidriver_start_connect(struct sim_netdev_s *wifidev)
|
|
|
|
|
return OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_start_disconnect(struct sim_netdev_s *wifidev)
|
|
|
|
|
static int wifidriver_start_disconnect(struct sim_wifi_s *wifidev)
|
|
|
|
|
{
|
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
|
@@ -1564,14 +1566,14 @@ static int wifidriver_start_disconnect(struct sim_netdev_s *wifidev)
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_get_mode(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_get_mode(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
pwrq->u.mode = wifidev->mode;
|
|
|
|
|
return OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_set_mode(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_set_mode(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
int ret;
|
|
|
|
@@ -1638,7 +1640,7 @@ static int wifidriver_set_mode(struct sim_netdev_s *wifidev,
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_set_country(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_set_country(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
char country[4] =
|
|
|
|
@@ -1658,7 +1660,7 @@ static int wifidriver_set_country(struct sim_netdev_s *wifidev,
|
|
|
|
|
return set_cmd(wifidev, "set country %s", country);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_get_country(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_get_country(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
char country[128];
|
|
|
|
@@ -1696,7 +1698,7 @@ static int wifidriver_get_country(struct sim_netdev_s *wifidev,
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_get_sensitivity(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_get_sensitivity(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
int32_t rssi;
|
|
|
|
@@ -1722,7 +1724,7 @@ static int wifidriver_get_sensitivity(struct sim_netdev_s *wifidev,
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int wifidriver_set_freq(struct sim_netdev_s *wifidev, struct iwreq *pwrq)
|
|
|
|
|
int wifidriver_set_freq(struct sim_wifi_s *wifidev, struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
int channel;
|
|
|
|
|
int ret = 0;
|
|
|
|
@@ -1747,7 +1749,7 @@ int wifidriver_set_freq(struct sim_netdev_s *wifidev, struct iwreq *pwrq)
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_get_freq(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_get_freq(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
switch (wifidev->mode)
|
|
|
|
@@ -1775,7 +1777,7 @@ static int wifidriver_get_freq(struct sim_netdev_s *wifidev,
|
|
|
|
|
return OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_get_range(struct sim_netdev_s *wifidev,
|
|
|
|
|
static int wifidriver_get_range(struct sim_wifi_s *wifidev,
|
|
|
|
|
struct iwreq *pwrq)
|
|
|
|
|
{
|
|
|
|
|
int k;
|
|
|
|
@@ -1798,7 +1800,7 @@ static int wifidriver_connect(struct netdev_lowerhalf_s *dev)
|
|
|
|
|
{
|
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
|
|
ret = wifidriver_start_connect((struct sim_netdev_s *)dev);
|
|
|
|
|
ret = wifidriver_start_connect(NETDEV2WIFI(dev));
|
|
|
|
|
if (ret >= 0)
|
|
|
|
|
{
|
|
|
|
|
netdev_lower_carrier_on(dev);
|
|
|
|
@@ -1812,7 +1814,7 @@ static int wifidriver_disconnect(struct netdev_lowerhalf_s *dev)
|
|
|
|
|
int ret;
|
|
|
|
|
union iwreq_data wrqu;
|
|
|
|
|
|
|
|
|
|
ret = wifidriver_start_disconnect((struct sim_netdev_s *)dev);
|
|
|
|
|
ret = wifidriver_start_disconnect(NETDEV2WIFI(dev));
|
|
|
|
|
if (ret >= 0)
|
|
|
|
|
{
|
|
|
|
|
netdev_lower_carrier_off(dev);
|
|
|
|
@@ -1827,7 +1829,7 @@ static int wifidriver_disconnect(struct netdev_lowerhalf_s *dev)
|
|
|
|
|
static int wifidriver_essid(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
struct iwreq *iwr, bool set)
|
|
|
|
|
{
|
|
|
|
|
struct sim_netdev_s *wifidev = (struct sim_netdev_s *)dev;
|
|
|
|
|
struct sim_wifi_s *wifidev = NETDEV2WIFI(dev);
|
|
|
|
|
|
|
|
|
|
if (set)
|
|
|
|
|
{
|
|
|
|
@@ -1843,7 +1845,7 @@ static int wifidriver_bssid(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
struct iwreq *iwr, bool set)
|
|
|
|
|
{
|
|
|
|
|
int ret;
|
|
|
|
|
struct sim_netdev_s *wifidev = (struct sim_netdev_s *)dev;
|
|
|
|
|
struct sim_wifi_s *wifidev = NETDEV2WIFI(dev);
|
|
|
|
|
|
|
|
|
|
if (set)
|
|
|
|
|
{
|
|
|
|
@@ -1866,18 +1868,18 @@ static int wifidriver_passwd(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
{
|
|
|
|
|
if (set)
|
|
|
|
|
{
|
|
|
|
|
return wifidriver_set_psk((struct sim_netdev_s *)dev, iwr);
|
|
|
|
|
return wifidriver_set_psk(NETDEV2WIFI(dev), iwr);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return wifidriver_get_psk((struct sim_netdev_s *)dev, iwr);
|
|
|
|
|
return wifidriver_get_psk(NETDEV2WIFI(dev), iwr);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int wifidriver_mode(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
struct iwreq *iwr, bool set)
|
|
|
|
|
{
|
|
|
|
|
struct sim_netdev_s *wifidev = (struct sim_netdev_s *)dev;
|
|
|
|
|
struct sim_wifi_s *wifidev = NETDEV2WIFI(dev);
|
|
|
|
|
|
|
|
|
|
if (set)
|
|
|
|
|
{
|
|
|
|
@@ -1892,7 +1894,7 @@ static int wifidriver_mode(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
static int wifidriver_auth(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
struct iwreq *iwr, bool set)
|
|
|
|
|
{
|
|
|
|
|
struct sim_netdev_s *wifidev = (struct sim_netdev_s *)dev;
|
|
|
|
|
struct sim_wifi_s *wifidev = NETDEV2WIFI(dev);
|
|
|
|
|
|
|
|
|
|
if (set)
|
|
|
|
|
{
|
|
|
|
@@ -1907,7 +1909,7 @@ static int wifidriver_auth(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
static int wifidriver_freq(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
struct iwreq *iwr, bool set)
|
|
|
|
|
{
|
|
|
|
|
struct sim_netdev_s *wifidev = (struct sim_netdev_s *)dev;
|
|
|
|
|
struct sim_wifi_s *wifidev = NETDEV2WIFI(dev);
|
|
|
|
|
|
|
|
|
|
if (set)
|
|
|
|
|
{
|
|
|
|
@@ -1934,7 +1936,7 @@ static int wifidriver_txpower(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
static int wifidriver_country(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
struct iwreq *iwr, bool set)
|
|
|
|
|
{
|
|
|
|
|
struct sim_netdev_s *wifidev = (struct sim_netdev_s *)dev;
|
|
|
|
|
struct sim_wifi_s *wifidev = NETDEV2WIFI(dev);
|
|
|
|
|
|
|
|
|
|
if (set)
|
|
|
|
|
{
|
|
|
|
@@ -1949,7 +1951,7 @@ static int wifidriver_country(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
static int wifidriver_sensitivity(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
struct iwreq *iwr, bool set)
|
|
|
|
|
{
|
|
|
|
|
struct sim_netdev_s *wifidev = (struct sim_netdev_s *)dev;
|
|
|
|
|
struct sim_wifi_s *wifidev = NETDEV2WIFI(dev);
|
|
|
|
|
|
|
|
|
|
if (set)
|
|
|
|
|
{
|
|
|
|
@@ -1964,7 +1966,7 @@ static int wifidriver_sensitivity(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
static int wifidriver_scan(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
struct iwreq *iwr, bool set)
|
|
|
|
|
{
|
|
|
|
|
struct sim_netdev_s *wifidev = (struct sim_netdev_s *)dev;
|
|
|
|
|
struct sim_wifi_s *wifidev = NETDEV2WIFI(dev);
|
|
|
|
|
|
|
|
|
|
if (set)
|
|
|
|
|
{
|
|
|
|
@@ -1979,12 +1981,20 @@ static int wifidriver_scan(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
static int wifidriver_range(struct netdev_lowerhalf_s *dev,
|
|
|
|
|
struct iwreq *iwr)
|
|
|
|
|
{
|
|
|
|
|
return wifidriver_get_range((struct sim_netdev_s *)dev, iwr);
|
|
|
|
|
return wifidriver_get_range(NETDEV2WIFI(dev), iwr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static bool wifidriver_connected(struct netdev_lowerhalf_s *dev)
|
|
|
|
|
/****************************************************************************
|
|
|
|
|
* Public Functions
|
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
|
* Name: sim_wifihost_connected
|
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
|
|
|
|
bool sim_wifihost_connected(struct sim_wifihost_lowerhalf_s *dev)
|
|
|
|
|
{
|
|
|
|
|
struct sim_netdev_s *wifidev = (struct sim_netdev_s *)dev;
|
|
|
|
|
struct sim_wifi_s *wifidev = (struct sim_wifi_s *)dev->wifi;
|
|
|
|
|
|
|
|
|
|
if (wifidev->mode == IW_MODE_MASTER)
|
|
|
|
|
{
|
|
|
|
@@ -1998,21 +2008,36 @@ static bool wifidriver_connected(struct netdev_lowerhalf_s *dev)
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void wifidriver_init(struct netdev_lowerhalf_s *dev, int devidx)
|
|
|
|
|
{
|
|
|
|
|
struct sim_netdev_s *wifidev = (struct sim_netdev_s *)dev;
|
|
|
|
|
/****************************************************************************
|
|
|
|
|
* Name: sim_wifihost_init
|
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
|
|
|
|
wifidev->mode = IW_MODE_AUTO;
|
|
|
|
|
wifidev->devidx = devidx;
|
|
|
|
|
int sim_wifihost_init(struct sim_wifihost_lowerhalf_s *dev, int devidx)
|
|
|
|
|
{
|
|
|
|
|
struct sim_wifi_s *priv;
|
|
|
|
|
|
|
|
|
|
priv = kmm_zalloc(sizeof(*priv));
|
|
|
|
|
if (priv == NULL)
|
|
|
|
|
{
|
|
|
|
|
nerr("wifi driver priv alloc failed\n");
|
|
|
|
|
return -ENOMEM;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dev->wifi = priv;
|
|
|
|
|
priv->dev = &dev->lower;
|
|
|
|
|
priv->mode = IW_MODE_AUTO;
|
|
|
|
|
priv->devidx = devidx;
|
|
|
|
|
|
|
|
|
|
/* Bind the wireless ops interfaces. */
|
|
|
|
|
|
|
|
|
|
dev->lower.iw_ops = &g_iw_ops;
|
|
|
|
|
|
|
|
|
|
/* The default host wlan interface name is corresponding to the nuttx
|
|
|
|
|
* wlan interface name. If not, should modify the host wlan interface
|
|
|
|
|
* name.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
snprintf(wifidev->host_ifname, IFNAMSIZ, "wlan%d", devidx);
|
|
|
|
|
snprintf(priv->host_ifname, IFNAMSIZ, "wlan%d", devidx);
|
|
|
|
|
|
|
|
|
|
/* Bind the wireless ops interfaces. */
|
|
|
|
|
|
|
|
|
|
dev->iw_ops = &g_iw_ops;
|
|
|
|
|
return OK;
|
|
|
|
|
}
|