This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit dce89e18200fe3ca56ebca14df8f12e884e64db0 Author: liqinhui <[email protected]> AuthorDate: Tue Apr 15 15:07:14 2025 +0800 simwifi: Refactor the interfaces of simwifi and simnet Refactor simwifi to separate host and sim logic. Signed-off-by: liqinhui <[email protected]> --- arch/sim/src/Makefile | 1 + arch/sim/src/sim/CMakeLists.txt | 5 + arch/sim/src/sim/sim_netdriver.c | 33 +++-- .../src/sim/{sim_wifidriver.c => sim_wifihost.c} | 145 ++++++++++++--------- arch/sim/src/sim/sim_wifihost.h | 73 +++++++++++ 5 files changed, 188 insertions(+), 69 deletions(-) diff --git a/arch/sim/src/Makefile b/arch/sim/src/Makefile index 1f65cdff48a..a84649acbd6 100644 --- a/arch/sim/src/Makefile +++ b/arch/sim/src/Makefile @@ -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) diff --git a/arch/sim/src/sim/CMakeLists.txt b/arch/sim/src/sim/CMakeLists.txt index 2c90e3fad47..875040d5ef0 100644 --- a/arch/sim/src/sim/CMakeLists.txt +++ b/arch/sim/src/sim/CMakeLists.txt @@ -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) diff --git a/arch/sim/src/sim/sim_netdriver.c b/arch/sim/src/sim/sim_netdriver.c index 4dfef8da682..9a893b53b64 100644 --- a/arch/sim/src/sim/sim_netdriver.c +++ b/arch/sim/src/sim/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)); + } + } +} diff --git a/arch/sim/src/sim/sim_wifidriver.c b/arch/sim/src/sim/sim_wifihost.c similarity index 91% rename from arch/sim/src/sim/sim_wifidriver.c rename to arch/sim/src/sim/sim_wifihost.c index 16036860e33..5d45177167e 100644 --- a/arch/sim/src/sim/sim_wifidriver.c +++ b/arch/sim/src/sim/sim_wifihost.c @@ -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) +/**************************************************************************** + * Name: sim_wifihost_init + ****************************************************************************/ + +int sim_wifihost_init(struct sim_wifihost_lowerhalf_s *dev, int devidx) { - struct sim_netdev_s *wifidev = (struct sim_netdev_s *)dev; + struct sim_wifi_s *priv; - wifidev->mode = IW_MODE_AUTO; - wifidev->devidx = devidx; + 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; } diff --git a/arch/sim/src/sim/sim_wifihost.h b/arch/sim/src/sim/sim_wifihost.h new file mode 100644 index 00000000000..8c2c0d90b4f --- /dev/null +++ b/arch/sim/src/sim/sim_wifihost.h @@ -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 */
