mirror of
https://github.com/apache/nuttx.git
synced 2026-08-02 12:49:00 +00:00
simwifi: Refactor the interfaces of simwifi and simnet
Refactor simwifi to separate host and sim logic. Signed-off-by: liqinhui <liqinhui@xiaomi.com>
This commit is contained in:
parent
58110f3d1a
commit
dce89e1820
5 changed files with 189 additions and 70 deletions
|
|
@ -211,6 +211,7 @@ endif
|
|||
|
||||
ifneq ($(CONFIG_SIM_WIFIDEV_NUMBER),0)
|
||||
CFLAGS += -DTOPDIR=\"$(TOPDIR)\"
|
||||
CSRCS += sim_wifihost.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_SIM_NETDEV_TAP),y)
|
||||
|
|
|
|||
|
|
@ -213,6 +213,11 @@ if(CONFIG_SIM_X11FB)
|
|||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT ${CONFIG_SIM_WIFIDEV_NUMBER} EQUAL 0)
|
||||
add_compile_options(-DTOPDIR=$(TOPDIR))
|
||||
list(APPEND SRCS sim_wifihost.c)
|
||||
endif()
|
||||
|
||||
if(CONFIG_SIM_NETDEV_TAP)
|
||||
list(APPEND SRCS sim_netdriver.c)
|
||||
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@
|
|||
#include <nuttx/net/pkt.h>
|
||||
|
||||
#include "sim_internal.h"
|
||||
#include "sim_wifihost.h"
|
||||
|
||||
#define SIM_NETDEV_BUFSIZE (CONFIG_SIM_NETDEV_MTU + ETH_HDRLEN + \
|
||||
CONFIG_NET_GUARDSIZE)
|
||||
|
|
@ -90,20 +91,22 @@
|
|||
#define DEVIDX(p) ((struct sim_netdev_s *)(p) - g_sim_dev)
|
||||
#define DEVBUF(p) (((struct sim_netdev_s *)(p))->buf)
|
||||
|
||||
#if CONFIG_SIM_WIFIDEV_NUMBER != 0
|
||||
# include "sim_wifidriver.c"
|
||||
#else
|
||||
#define IDXDEV(i) ((struct netdev_lowerhalf_s *)(&g_sim_dev[i].dev))
|
||||
|
||||
/****************************************************************************
|
||||
* Private Types
|
||||
****************************************************************************/
|
||||
|
||||
struct sim_netdev_s
|
||||
{
|
||||
#if CONFIG_SIM_WIFIDEV_NUMBER != 0
|
||||
struct sim_wifihost_lowerhalf_s dev;
|
||||
#else
|
||||
struct netdev_lowerhalf_s dev;
|
||||
#endif
|
||||
uint8_t buf[SIM_NETDEV_BUFSIZE]; /* Used when packet buffer is fragmented */
|
||||
struct wdog_s wdog;
|
||||
};
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Private Function Prototypes
|
||||
|
|
@ -211,7 +214,7 @@ static int netdriver_ifup(struct netdev_lowerhalf_s *dev)
|
|||
#if CONFIG_SIM_WIFIDEV_NUMBER != 0
|
||||
if (DEVIDX(dev) < CONFIG_SIM_WIFIDEV_NUMBER)
|
||||
{
|
||||
if (wifidriver_connected(dev))
|
||||
if (sim_wifihost_connected((struct sim_wifihost_lowerhalf_s *)dev))
|
||||
{
|
||||
netdev_lower_carrier_on(dev);
|
||||
}
|
||||
|
|
@ -283,7 +286,7 @@ int sim_netdriver_init(void)
|
|||
|
||||
for (devidx = 0; devidx < CONFIG_SIM_NETDEV_NUMBER; devidx++)
|
||||
{
|
||||
dev = &g_sim_dev[devidx].dev;
|
||||
dev = IDXDEV(devidx);
|
||||
|
||||
/* Internal initialization */
|
||||
|
||||
|
|
@ -300,7 +303,8 @@ int sim_netdriver_init(void)
|
|||
#if CONFIG_SIM_WIFIDEV_NUMBER != 0
|
||||
if (devidx < CONFIG_SIM_WIFIDEV_NUMBER)
|
||||
{
|
||||
wifidriver_init(dev, devidx);
|
||||
sim_wifihost_init((struct sim_wifihost_lowerhalf_s *)dev,
|
||||
devidx);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -319,13 +323,24 @@ int sim_netdriver_init(void)
|
|||
|
||||
void sim_netdriver_setmacaddr(int devidx, unsigned char *macaddr)
|
||||
{
|
||||
memcpy(g_sim_dev[devidx].dev.netdev.d_mac.ether.ether_addr_octet, macaddr,
|
||||
memcpy(IDXDEV(devidx)->netdev.d_mac.ether.ether_addr_octet, macaddr,
|
||||
IFHWADDRLEN);
|
||||
}
|
||||
|
||||
void sim_netdriver_setmtu(int devidx, int mtu)
|
||||
{
|
||||
g_sim_dev[devidx].dev.netdev.d_pktsize = MIN(SIM_NETDEV_BUFSIZE,
|
||||
IDXDEV(devidx)->netdev.d_pktsize = MIN(SIM_NETDEV_BUFSIZE,
|
||||
mtu + ETH_HDRLEN);
|
||||
}
|
||||
|
||||
void sim_netdriver_loop(void)
|
||||
{
|
||||
int devidx;
|
||||
for (devidx = 0; devidx < CONFIG_SIM_NETDEV_NUMBER; devidx++)
|
||||
{
|
||||
if (sim_netdev_avail(devidx))
|
||||
{
|
||||
netdev_lower_rxready(IDXDEV(devidx));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
73
arch/sim/src/sim/sim_wifihost.h
Normal file
73
arch/sim/src/sim/sim_wifihost.h
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
/****************************************************************************
|
||||
* arch/sim/src/sim/sim_wifihost.h
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership. The
|
||||
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the
|
||||
* License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef __ARCH_SIM_SRC_SIM_WIFIHOST_H
|
||||
#define __ARCH_SIM_SRC_SIM_WIFIHOST_H
|
||||
|
||||
#if CONFIG_SIM_WIFIDEV_NUMBER != 0
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
#include <nuttx/net/netdev_lowerhalf.h>
|
||||
|
||||
/****************************************************************************
|
||||
* Public Data
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define EXTERN extern "C"
|
||||
extern "C"
|
||||
{
|
||||
#else
|
||||
#define EXTERN extern
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Public Type Definitions
|
||||
****************************************************************************/
|
||||
|
||||
struct sim_wifihost_lowerhalf_s
|
||||
{
|
||||
/* This holds the information visible to the NuttX network */
|
||||
|
||||
struct netdev_lowerhalf_s lower; /* The netdev lowerhalf */
|
||||
|
||||
void *wifi;
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
* Public Function Prototypes
|
||||
****************************************************************************/
|
||||
|
||||
int sim_wifihost_init(struct sim_wifihost_lowerhalf_s *dev, int devidx);
|
||||
bool sim_wifihost_connected(struct sim_wifihost_lowerhalf_s *dev);
|
||||
|
||||
#undef EXTERN
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_DRIVERS_WIFI_SIM */
|
||||
#endif /* __ARCH_SIM_SRC_SIM_WIFIHOST_H */
|
||||
Loading…
Add table
Add a link
Reference in a new issue