mirror of
https://github.com/cesanta/mongoose.git
synced 2026-10-28 12:30:58 +00:00
92 lines
2.5 KiB
C
92 lines
2.5 KiB
C
#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_NXP_WIFI) && \
|
|
MG_ENABLE_DRIVER_NXP_WIFI
|
|
|
|
#include "drivers/nxp_wifi.h"
|
|
|
|
bool __attribute__((weak)) netif_init(struct mg_tcpip_if *ifp) {
|
|
(void) ifp;
|
|
MG_ERROR(("Please link wifi/port/net contents"));
|
|
return false;
|
|
}
|
|
size_t __attribute__((weak))
|
|
netif_tx(const void *bfr, size_t len, struct mg_tcpip_if *ifp) {
|
|
(void) bfr;
|
|
(void) len;
|
|
netif_init(ifp);
|
|
return 0;
|
|
}
|
|
bool __attribute__((weak)) netif_connect(struct mg_wifi_data *wifi) {
|
|
(void) wifi;
|
|
return netif_init(NULL);
|
|
}
|
|
bool __attribute__((weak))
|
|
netif_poll(struct mg_tcpip_if *ifp, bool s1, mg_tcpip_event_handler_t evcb) {
|
|
(void) ifp;
|
|
(void) s1;
|
|
(void) evcb;
|
|
return false;
|
|
}
|
|
|
|
static struct mg_tcpip_if *s_ifp;
|
|
static uint32_t s_ip, s_mask;
|
|
|
|
static void wifi_cb(struct mg_tcpip_if *ifp, int ev, void *ev_data) {
|
|
struct mg_wifi_data *wifi =
|
|
&((struct mg_tcpip_driver_nxp_wifi_data *) ifp->driver_data)->wifi;
|
|
if (wifi->apmode && ev == MG_TCPIP_EV_STATE_CHANGE &&
|
|
*(uint8_t *) ev_data == MG_TCPIP_STATE_UP) {
|
|
MG_DEBUG(("Access Point started"));
|
|
s_ip = ifp->ip, ifp->ip = wifi->apip;
|
|
s_mask = ifp->mask, ifp->mask = wifi->apmask;
|
|
ifp->enable_dhcp_client = false;
|
|
ifp->enable_dhcp_server = true;
|
|
}
|
|
}
|
|
|
|
static bool nxp_wifi_init(struct mg_tcpip_if *ifp) {
|
|
struct mg_wifi_data *wifi =
|
|
&((struct mg_tcpip_driver_nxp_wifi_data *) ifp->driver_data)->wifi;
|
|
s_ifp = ifp;
|
|
s_ip = ifp->ip;
|
|
s_mask = ifp->mask;
|
|
ifp->pfn = wifi_cb;
|
|
if (!netif_init(ifp)) return false;
|
|
if (wifi->apmode) {
|
|
return mg_wifi_ap_start(wifi);
|
|
} else if (wifi->ssid != NULL && wifi->pass != NULL) {
|
|
return mg_wifi_connect(wifi);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool nxp_wifi_poll(struct mg_tcpip_if *ifp, bool s1) {
|
|
return netif_poll(ifp, s1, mg_tcpip_call);
|
|
}
|
|
|
|
struct mg_tcpip_driver mg_tcpip_driver_nxp_wifi = {nxp_wifi_init, netif_tx,
|
|
NULL, nxp_wifi_poll};
|
|
|
|
bool mg_wifi_connect(struct mg_wifi_data *wifi) {
|
|
s_ifp->ip = s_ip;
|
|
s_ifp->mask = s_mask;
|
|
if (s_ifp->ip == 0) s_ifp->enable_dhcp_client = true;
|
|
s_ifp->enable_dhcp_server = false;
|
|
return netif_connect(wifi);
|
|
}
|
|
|
|
bool __attribute__((weak)) mg_wifi_scan(void) {
|
|
return netif_init(NULL);
|
|
}
|
|
bool __attribute__((weak)) mg_wifi_disconnect(void) {
|
|
return netif_init(NULL);
|
|
}
|
|
bool __attribute__((weak)) mg_wifi_ap_start(struct mg_wifi_data *wifi) {
|
|
(void) wifi;
|
|
return netif_init(NULL);
|
|
}
|
|
bool __attribute__((weak)) mg_wifi_ap_stop(void) {
|
|
return netif_init(NULL);
|
|
}
|
|
|
|
#endif
|