MeterLogger
wifi.c
Go to the documentation of this file.
1 /*
2  * wifi.c
3  *
4  * Created on: Dec 30, 2014
5  * Author: Minh
6  */
7 #include <esp8266.h>
8 // open lwip networking
9 #ifdef AP
10 #include <lwip/ip.h>
11 #include <lwip/udp.h>
12 #include <lwip/tcp_impl.h>
13 #include <netif/etharp.h>
14 #include <lwip/netif.h>
15 #include <lwip/lwip_napt.h>
16 #include <lwip/dns.h>
17 #include <lwip/app/dhcpserver.h>
18 #include <lwip/opt.h>
19 #else
20 #include <ip_addr.h>
21 #endif // AP
22 #include <espconn.h>
23 
24 #include "wifi.h"
25 #include "mqtt_msg.h"
26 #include "mqtt_utils.h"
27 #include "debug.h"
28 #include "user_config.h"
29 #include "config.h"
30 #include "led.h"
31 #include "tinyprintf.h"
32 
33 #define WIFI_SCAN_INTERVAL 5000
34 #define WIFI_SCAN_TIMEOUT 60000
35 #define RSSI_CHECK_INTERVAL 10000
36 
40 
43 
44 volatile uint8_t* config_ssid;
45 volatile uint8_t* config_pass;
46 static uint8_t wifi_status = STATION_IDLE;
48 bool wifi_present = false;
49 volatile bool wifi_fallback_present = false;
51 volatile bool wifi_scan_runnning = false;
52 //volatile bool wifi_reconnect = false;
53 volatile sint8_t rssi = 31; // set rssi to fail state at init time
54 volatile bool get_rssi_running = false;
55 volatile bool wifi_default_ok = false;
56 volatile bool my_auto_connect = true;
57 
58 #ifdef AP
61 
66 
67 ICACHE_FLASH_ATTR err_t my_input_ap(struct pbuf *p, struct netif *inp) {
68  err_t err;
69 
70  if (acl_check_packet(p)) {
71  err = orig_input_ap(p, inp);
72  }
73  else {
74  pbuf_free(p);
75  return ERR_ABRT;
76  }
77  return err;
78 }
79 
80 ICACHE_FLASH_ATTR err_t my_output_ap(struct netif *outp, struct pbuf *p) {
81  err_t err;
82  err = orig_output_ap(outp, p);
83  return err;
84 }
85 
86 
88  struct netif *nif;
89  ip_addr_t ap_ip;
90 
91  ap_ip = ap_network_addr;
92  ip4_addr4(&ap_ip) = 1;
93 
94  for (nif = netif_list; nif != NULL && nif->ip_addr.addr != ap_ip.addr; nif = nif->next) {
95  // skip
96  }
97  if (nif == NULL) {
98  return;
99  }
100 
101  nif->napt = nat ? 1 : 0;
102  if (nif->input != ifn) {
103  orig_input_ap = nif->input;
104  nif->input = ifn;
105  }
106  if (nif->linkoutput != ofn) {
107  orig_output_ap = nif->linkoutput;
108  nif->linkoutput = ofn;
109  }
110 #ifdef DEBUG
111  os_printf("patched!\n");
112 #endif
113 }
114 
116  struct eth_hdr *mac_h;
117  struct ip_hdr *ip_h;
118  uint8_t proto;
119  struct udp_hdr *udp_h;
120  struct tcp_hdr *tcp_h;
121  uint16_t src_port = 0;
122  uint16_t dest_port = 0;
123  uint8_t *packet;
124 
125  if (p->len < sizeof(struct eth_hdr)) {
126  return false;
127  }
128 
129  mac_h = (struct eth_hdr *)p->payload;
130 
131  // Allow ARP
132  if (ntohs(mac_h->type) == ETHTYPE_ARP) {
133  return true;
134  }
135 
136  // Drop anything else if not IPv4
137  if (ntohs(mac_h->type) != ETHTYPE_IP) {
138  return false;
139  }
140 
141  if (p->len < sizeof(struct eth_hdr)+sizeof(struct ip_hdr)) {
142  return false;
143  }
144 
145  packet = (uint8_t*)p->payload;
146  ip_h = (struct ip_hdr *)&packet[sizeof(struct eth_hdr)];
147  proto = IPH_PROTO(ip_h);
148 
149  switch (proto) {
150  case IP_PROTO_UDP:
151  if (p->len < sizeof(struct eth_hdr)+sizeof(struct ip_hdr)+sizeof(struct udp_hdr)) {
152  return false;
153  }
154  udp_h = (struct udp_hdr *)&packet[sizeof(struct eth_hdr)+sizeof(struct ip_hdr)];
155  src_port = ntohs(udp_h->src);
156  dest_port = ntohs(udp_h->dest);
157  break;
158 
159  case IP_PROTO_TCP:
160  if (p->len < sizeof(struct eth_hdr)+sizeof(struct ip_hdr)+sizeof(struct tcp_hdr)) {
161  return false;
162  }
163  tcp_h = (struct tcp_hdr *)&packet[sizeof(struct eth_hdr)+sizeof(struct ip_hdr)];
164  src_port = ntohs(tcp_h->src);
165  dest_port = ntohs(tcp_h->dest);
166  break;
167 
168  case IP_PROTO_ICMP:
169  src_port = dest_port = 0;
170  break;
171  }
172 
173  // allow dhcp requests to broadcast network
174  if ((ip_h->dest.addr == IPADDR_BROADCAST) && (dest_port == 67)) {
175  return true;
176  }
177 
178  // allow dns requests to nameserver on uplink network
179  if ((ip_h->dest.addr == dns_ip.addr) && (dest_port == 53)) {
180  return true;
181  }
182 
183  // deny connections to hosts on uplink network
184  if ((ip_h->dest.addr & sta_network_mask.addr) == sta_network_addr.addr) {
185 #ifdef DEBUG
186  os_printf("dropping packet to uplink network: src: %d.%d.%d.%d dst: %d.%d.%d.%d proto: %s sport:%d dport:%d\n",
187  IP2STR(&ip_h->src), IP2STR(&ip_h->dest),
188  proto == IP_PROTO_TCP ? "TCP" : proto == IP_PROTO_UDP ? "UDP" : "IP4", src_port, dest_port);
189 #endif
190  return false;
191  }
192 
193  // default allow everything else
194  return true;
195 }
196 #endif // AP
197 
198 // static functions
199 static void ICACHE_FLASH_ATTR wifi_get_rssi_timer_func(void *arg);
200 static void ICACHE_FLASH_ATTR wifi_scan_timer_func(void *arg);
201 static void ICACHE_FLASH_ATTR wifi_scan_timeout_timer_func(void *arg);
202 
204 #ifdef DEBUG
205  uint8_t mac_str[20];
206 #endif
207  struct station_config stationConf;
208 
210  wifi_event = evt->event;
211 
212  os_memset(&stationConf, 0, sizeof(struct station_config));
213  wifi_station_get_config(&stationConf);
214 
215 #ifdef DEBUG
216 // os_printf("E%dW%d\n", evt->event, wifi_status);
217 #endif
218  switch (evt->event) {
220  // set default network status
221  if (os_strncmp((char *)&stationConf.ssid, sys_cfg.sta_ssid, sizeof(sys_cfg.sta_ssid)) == 0) {
222  wifi_default_ok = true;
223  }
224  break;
226 #ifdef DEBUG
227  os_printf("disconnected from ssid %s, reason %d\n", evt->event_info.disconnected.ssid, evt->event_info.disconnected.reason);
228 #endif
229  // set default network status
230  if (os_strncmp((char *)&stationConf.ssid, sys_cfg.sta_ssid, sizeof(sys_cfg.sta_ssid)) == 0) {
231  wifi_default_ok = false;
232  }
233  if (my_auto_connect) {
234 #ifdef DEBUG
235  os_printf("reconnecting on disconnect\n");
236 #endif
237  wifi_station_connect(); // reconnect on disconnect
238  }
239  break;
240  case EVENT_STAMODE_GOT_IP:
241  // set default network status
242  if (os_strncmp((char *)&stationConf.ssid, sys_cfg.sta_ssid, sizeof(sys_cfg.sta_ssid)) == 0) {
243  wifi_default_ok = true;
244  }
245 #ifdef AP
246  // set ap_network_addr from uplink
249  sta_network_addr.addr &= sta_network_mask.addr;
250 
252 
253  wifi_station_set_auto_connect(0); // disale auto connect, we handle reconnect with this event handler
254 #endif // AP
255  wifi_cb(wifi_status);
256  break;
258 #ifdef DEBUG
260  os_printf("station: %s join, AID = %d\n", mac_str, evt->event_info.sta_connected.aid);
261 #endif
262 #ifdef AP
264 #endif // AP
265  break;
266  default:
267  break;
268  }
269 }
270 
272  get_rssi_running = true;
273  if (wifi_default_ok) { // only get rssi if connected to configured ssid
275  }
276  get_rssi_running = false;
277 }
278 
279 static void ICACHE_FLASH_ATTR wifi_scan_timer_func(void *arg) {
280 // struct scan_config config;
281 
282  if (!wifi_scan_runnning) {
283  // scan for fallback network
284  wifi_scan_runnning = true;
285 #ifdef DEBUG
286  os_printf("RSSI: %d\n", wifi_get_rssi()); // DEBUG: should not be here at all
287 #endif
288  // start wifi scan timeout timer
289  // hack to avoid wifi_station_scan() sometimes doesnt calling the callback
293  if (wifi_station_scan(NULL, wifi_scan_done_cb) == false) {
294  // something went wrong, restart scanner
295 #ifdef DEBUG
296  os_printf("wifi_station_scan() returned false, restarting scanner\n");
297 #endif
298  wifi_scan_runnning = false;
299 // led_pattern_a(); // DEBUG slow led blink to show if wifi_station_scan() returned false (indicates scanner restarting)
300  wifi_start_scan();
301  }
302  else {
303 // led_pattern_b(); // DEBUG fast led blink to show if wifi_scan_done_cb() returned true (indicates wifi scanner running)
304  }
305 // os_printf("scan running\n");
306  }
307 }
308 
310 #ifdef DEBUG
311  os_printf("scan timeout called\n");
312 #endif
313  wifi_scan_runnning = false;
315 // led_stop_pattern(); // DEBUG
316 
317  // start wifi scan timer again
318  wifi_start_scan();
319 }
320 
321 void ICACHE_FLASH_ATTR wifi_scan_done_cb(void *arg, STATUS status) {
322  struct bss_info *info;
323 
324  wifi_present = false;
325  wifi_fallback_present = false;
326 
327  // check if fallback network is present
328  if ((arg != NULL) && (status == OK)) {
329  info = (struct bss_info *)arg;
330  wifi_fallback_present = false;
331 
332  while (info != NULL) {
333  if ((info != NULL) && (info->ssid != NULL) && (os_strncmp(info->ssid, sys_cfg.sta_ssid, sizeof(sys_cfg.sta_ssid)) == 0)) {
334  wifi_present = true;
335  }
336  if ((info != NULL) && (info->ssid != NULL) && (os_strncmp(info->ssid, STA_FALLBACK_SSID, sizeof(STA_FALLBACK_SSID)) == 0)) {
337  wifi_fallback_present = true;
338  }
339 
340  // handle sending scan results via mqtt
341  if (wifi_scan_result_cb) {
342  wifi_scan_result_cb(info);
343  }
344 
345  info = info->next.stqe_next;
346  }
347  wifi_scan_result_cb_unregister(); // done sending via mqtt
348 
349  // if fallback network appeared connect to it
351  wifi_fallback();
352  led_pattern_a();
353  }
354  // if fallback network disappeared connect to default network
356  wifi_default();
358  }
359 
361 #ifdef DEBUG
362  uint8_t s;
364  os_printf("wifi present: %s\n", (wifi_present ? "yes" : "no"));
365  os_printf("wifi fallback present: %s\n", (wifi_fallback_present ? "yes" : "no"));
366  os_printf("wifi status: %s (%u)\n", (s == STATION_GOT_IP) ? "connected" : "not connected", s);
367 #endif
368  }
369 
370  wifi_scan_runnning = false;
371 // os_printf("scan done\n");
373 // led_stop_pattern(); // DEBUG
374 
375  // start wifi scan timer again
376  wifi_start_scan();
377 }
378 
380  struct station_config stationConf;
381 
382  // go back to saved network
383  os_printf("DEFAULT_SSID\r\n");
385 #ifdef AP
386  if (sys_cfg.ap_enabled == true) {
388  }
389  else {
391  }
392 #else
394 #endif // AP
395  os_memset(&stationConf, 0, sizeof(struct station_config));
396  wifi_station_get_config(&stationConf);
397 
398  tfp_snprintf(stationConf.ssid, 32, "%s", config_ssid);
399  tfp_snprintf(stationConf.password, 64, "%s", config_pass);
400 
401  wifi_station_set_config_current(&stationConf);
402 
404 
405  // start wifi rssi timer
409 }
410 
412  struct station_config stationConf;
413 
414  // try fallback network
415  os_printf("FALLBACK_SSID\r\n");
417 #ifdef AP
418  if (sys_cfg.ap_enabled == true) {
420  }
421  else {
423  }
424 #else
426 #endif // AP
427  os_memset(&stationConf, 0, sizeof(struct station_config));
428  wifi_station_get_config(&stationConf);
429 
430  tfp_snprintf(stationConf.ssid, 32, "%s", STA_FALLBACK_SSID);
431  tfp_snprintf(stationConf.password, 64, "%s", STA_FALLBACK_PASS);
432 
433  wifi_station_set_config_current(&stationConf);
435 }
436 
437 void ICACHE_FLASH_ATTR wifi_connect(uint8_t* ssid, uint8_t* pass, WifiCallback cb) {
438  struct station_config stationConf;
439 
440  INFO("WIFI_INIT\r\n");
442 
443 #ifdef AP
444  if (sys_cfg.ap_enabled) {
446  }
447  else {
449  }
450 #else
452 #endif // AP
453 
454  wifi_cb = cb;
455  config_ssid = ssid;
456  config_pass = pass;
457 
458  os_memset(&stationConf, 0, sizeof(struct station_config));
459 
460  tfp_snprintf(stationConf.ssid, 32, "%s", ssid);
461  tfp_snprintf(stationConf.password, 64, "%s", pass);
462 
463  my_auto_connect = false; // disable wifi wifi_handle_event_cb() based auto connect
465  wifi_station_set_config(&stationConf);
466 
467  // start wifi scan timer
468  wifi_start_scan();
469 
471  my_auto_connect = true; // enable wifi wifi_handle_event_cb() based auto connect
472 
474 
475  // start wifi rssi timer
479 
480 // led_stop_pattern();
481 }
482 
483 void ICACHE_FLASH_ATTR wifi_softap_config(uint8_t* ssid, uint8_t* pass, uint8_t authmode) {
484  struct softap_config ap_conf;
485 
486  wifi_softap_get_config(&ap_conf);
487  memset(ap_conf.ssid, 0, sizeof(ap_conf.ssid));
488  memset(ap_conf.password, 0, sizeof(ap_conf.password));
489  tfp_snprintf(ap_conf.ssid, 32, ssid);
490  tfp_snprintf(ap_conf.password, 64, pass);
491  ap_conf.authmode = authmode;
492  ap_conf.ssid_len = 0;
493  ap_conf.beacon_interval = 100;
494  ap_conf.channel = 1;
495  ap_conf.max_connection = 8;
496  ap_conf.ssid_hidden = 0;
497 
498  wifi_softap_set_config(&ap_conf);
499 }
500 
501 #ifdef AP
503  struct ip_info info;
504  struct dhcps_lease dhcp_lease;
505  struct netif *nif;
506 
507  // find the netif of the AP (that with num != 0)
508  for (nif = netif_list; nif != NULL && nif->num == 0; nif = nif->next) {
509  // skip
510  }
511  if (nif == NULL) {
512  return;
513  }
514  // if is not 1, set it to 1.
515  // kind of a hack, but the Espressif-internals expect it like this (hardcoded 1).
516  nif->num = 1;
517 
518  // configure AP dhcp
520 
521  // if we have not got an ip set ap ip to default
522  if (ap_network_addr.addr == 0) {
524  }
525  // increment ap_network_addr if same as sta_network_addr
527  ip4_addr3(&ap_network_addr) += 1;
528  }
529 
530  // if we have not got a dns server set to default
531  dns_ip = dns_getserver(0);
532  if (dns_ip.addr == 0) {
533  // Google's DNS as default, as long as we havn't got one from DHCP
534  IP4_ADDR(&dns_ip, 8, 8, 8, 8);
535  }
538 #ifdef DEBUG
539  os_printf("sta net:" IPSTR ",ap net:" IPSTR ",dns:" IPSTR "\n", IP2STR(&sta_network_addr), IP2STR(&ap_network_addr), IP2STR(&dns_ip));
540 #endif
541 
542  info.ip = ap_network_addr;
543  ip4_addr4(&info.ip) = 1;
544  info.gw = info.ip;
545  IP4_ADDR(&info.netmask, 255, 255, 255, 0);
546 
547  wifi_set_ip_info(nif->num, &info);
548 
549  dhcp_lease.start_ip = ap_network_addr;
550  ip4_addr4(&dhcp_lease.start_ip) = 2;
551  dhcp_lease.end_ip = ap_network_addr;
552  ip4_addr4(&dhcp_lease.end_ip) = 254;
553  wifi_softap_set_dhcps_lease(&dhcp_lease);
554 
556 }
557 #endif // AP
558 
560  while (get_rssi_running == true) {
561  // wait for lock
562  }
563  return rssi;
564 }
565 
567  return wifi_default_ok;
568 }
569 
571  // start wifi scan timer
575 }
576 
578  // stop wifi scan timer
580  wifi_scan_runnning = false;
581 }
582 
584  return wifi_scan_runnning;
585 }
586 
588  return wifi_fallback_present;
589 }
590 
592  my_auto_connect = enabled;
593 }
594 
596  wifi_scan_result_cb = cb;
597 }
598 
601 }
#define os_sprintf
Definition: osapi.h:54
err_t(* netif_input_fn)(struct pbuf *p, struct netif *inp)
Definition: netif.h:109
ICACHE_FLASH_ATTR err_t my_output_ap(struct netif *outp, struct pbuf *p)
Definition: wifi.c:80
uint8_t sta_ssid[64]
Definition: config.h:48
#define IP_PROTO_ICMP
Definition: ip.h:52
struct ip_addr ip
Definition: ip_addr.h:248
void wifi_handle_event_cb(System_Event_t *evt)
Definition: wifi.c:203
volatile bool wifi_fallback_present
Definition: wifi.c:49
void(* wifi_scan_result_event_cb_t)(const struct bss_info *info)
Definition: wifi.h:16
void ICACHE_FLASH_ATTR wifi_fallback()
Definition: wifi.c:411
volatile sint8_t rssi
Definition: wifi.c:53
#define os_timer_t
Definition: os_type.h:34
#define MAC2STR(a)
bool wifi_set_opmode_current(uint8 opmode)
u16_t len
Definition: pbuf.h:93
#define os_timer_disarm
Definition: osapi.h:51
#define os_strncmp
Definition: osapi.h:44
#define memset(x, a, b)
Definition: platform.h:21
static void ICACHE_FLASH_ATTR wifi_scan_timeout_timer_func(void *arg)
Definition: wifi.c:309
volatile uint8_t * config_pass
Definition: wifi.c:45
volatile bool my_auto_connect
Definition: wifi.c:56
sint8_t ICACHE_FLASH_ATTR wifi_get_rssi()
Definition: wifi.c:559
void ICACHE_FLASH_ATTR wifi_softap_config(uint8_t *ssid, uint8_t *pass, uint8_t authmode)
Definition: wifi.c:483
struct netif * netif_list
Definition: netif.c:75
#define WIFI_SCAN_TIMEOUT
Definition: wifi.c:34
#define NULL_MODE
#define STATIONAP_MODE
void espconn_dns_setserver(u8_t numdns, ip_addr_t *dnsserver)
Definition: espconn.c:1302
Event_Info_u event_info
#define NULL
Definition: def.h:47
WifiCallback wifi_cb
Definition: wifi.c:41
Event_SoftAPMode_StaConnected_t sta_connected
void ICACHE_FLASH_ATTR wifi_start_scan()
Definition: wifi.c:570
#define IP_PROTO_TCP
Definition: ip.h:56
void ICACHE_FLASH_ATTR wifi_scan_done_cb(void *arg, STATUS status)
Definition: wifi.c:321
struct ip_addr end_ip
bool wifi_softap_dhcps_stop(void)
#define ICACHE_FLASH_ATTR
Definition: c_types.h:99
u8_t num
Definition: netif.h:197
#define os_timer_func_t
Definition: os_type.h:35
volatile bool wifi_scan_runnning
Definition: wifi.c:51
volatile bool wifi_default_ok
Definition: wifi.c:55
bool wifi_station_get_config(struct station_config *config)
void ICACHE_FLASH_ATTR wifi_connect(uint8_t *ssid, uint8_t *pass, WifiCallback cb)
Definition: wifi.c:437
#define IP2STR(ipaddr)
Definition: ip_addr.h:240
#define ERR_ABRT
Definition: err.h:63
struct ip_addr gw
Definition: ip_addr.h:250
uint8 wifi_station_get_connect_status(void)
#define AP_NETWORK
Definition: user_config.h:81
#define os_printf
Definition: osapi.h:62
uint8_t ICACHE_FLASH_ATTR UTILS_StrToIP(const int8_t *str, void *ip)
Definition: mqtt_utils.c:91
#define os_timer_setfn
Definition: osapi.h:52
void wifi_scan_result_cb_register(wifi_scan_result_event_cb_t cb)
Definition: wifi.c:595
bool wifi_softap_get_config(struct softap_config *config)
static ip_addr_t ap_network_addr
Definition: wifi.c:64
static void ICACHE_FLASH_ATTR wifi_scan_timer_func(void *arg)
Definition: wifi.c:279
static ip_addr_t sta_network_addr
Definition: wifi.c:62
bool wifi_station_set_config(struct station_config *config)
signed char sint8_t
Definition: c_types.h:31
uint8 ssid[32]
bool ICACHE_FLASH_ATTR wifi_fallback_is_present()
Definition: wifi.c:587
void ICACHE_FLASH_ATTR wifi_stop_scan()
Definition: wifi.c:577
#define STA_FALLBACK_SSID
Definition: user_config.h:68
#define os_memset
Definition: osapi.h:38
#define ip_addr_cmp(addr1, addr2)
Definition: ip_addr.h:198
#define MACSTR
void ICACHE_FLASH_ATTR set_my_auto_connect(bool enabled)
Definition: wifi.c:591
AUTH_MODE authmode
bool wifi_softap_dhcps_start(void)
bool wifi_fallback_last_present
Definition: wifi.c:50
struct netif * next
Definition: netif.h:141
bool wifi_set_ip_info(uint8 if_index, struct ip_info *info)
bool ap_enabled
Definition: config.h:51
static netif_linkoutput_fn orig_output_ap
Definition: wifi.c:60
uint8 password[64]
ICACHE_FLASH_ATTR err_t my_input_ap(struct pbuf *p, struct netif *inp)
Definition: wifi.c:67
wifi_scan_result_event_cb_t wifi_scan_result_cb
Definition: wifi.c:42
uint8 password[64]
void(* WifiCallback)(uint8_t)
Definition: wifi.h:15
static ICACHE_FLASH_ATTR void patch_netif_ap(netif_input_fn ifn, netif_linkoutput_fn ofn, bool nat)
Definition: wifi.c:87
Definition: pbuf.h:76
bool ICACHE_FLASH_ATTR wifi_get_status()
Definition: wifi.c:566
s8_t err_t
Definition: err.h:47
static ip_addr_t dns_ip
Definition: wifi.c:65
typedefPACK_STRUCT_END struct ip_addr ip_addr_t
Definition: ip_addr.h:64
bool wifi_present
Definition: wifi.c:48
Definition: netif.h:139
#define IPSTR
Definition: ip_addr.h:245
#define IPADDR_BROADCAST
Definition: ip_addr.h:102
bool ICACHE_FLASH_ATTR wifi_softap_set_dhcps_lease(struct dhcps_lease *please)
Definition: dhcpserver.c:952
void wifi_set_event_handler_cb(wifi_event_handler_cb_t cb)
static netif_input_fn orig_input_ap
Definition: wifi.c:59
ip_addr_t ip_addr
Definition: netif.h:144
STATUS
Definition: c_types.h:79
static os_timer_t wifi_scan_timeout_timer
Definition: wifi.c:38
Definition: c_types.h:80
#define WIFI_SCAN_INTERVAL
Definition: wifi.c:33
static os_timer_t wifi_scan_timer
Definition: wifi.c:37
static os_timer_t wifi_get_rssi_timer
Definition: wifi.c:39
uint8 ssid[32]
#define ip4_addr3(ipaddr)
Definition: ip_addr.h:222
bool wifi_station_disconnect(void)
struct ip_addr netmask
Definition: ip_addr.h:249
volatile bool get_rssi_running
Definition: wifi.c:54
u8_t pbuf_free(struct pbuf *p) ICACHE_FLASH_ATTR
Definition: pbuf.c:685
struct ip_addr start_ip
bool wifi_station_set_auto_connect(uint8 set)
volatile uint8_t * config_ssid
Definition: wifi.c:44
ICACHE_FLASH_ATTR int tfp_snprintf(char *str, size_t size, const char *format,...)
Definition: tinyprintf.c:480
sint8 wifi_station_get_rssi(void)
static void ICACHE_FLASH_ATTR wifi_get_rssi_timer_func(void *arg)
Definition: wifi.c:271
#define STATION_MODE
#define IP_PROTO_UDP
Definition: ip.h:54
bool wifi_station_scan(struct scan_config *config, scan_done_cb_t cb)
Definition: ip.h:116
bool wifi_station_set_config_current(struct station_config *config)
#define os_timer_arm(a, b, c)
Definition: osapi.h:50
netif_input_fn input
Definition: netif.h:150
bool ICACHE_FLASH_ATTR wifi_scan_is_running()
Definition: wifi.c:583
void * payload
Definition: pbuf.h:81
ICACHE_FLASH_ATTR void led_pattern_a(void)
Definition: led.c:106
#define INFO(...)
Definition: debug.h:17
Event_StaMode_Disconnected_t disconnected
bool ICACHE_FLASH_ATTR acl_check_packet(struct pbuf *p)
Definition: wifi.c:115
bool wifi_softap_set_config(struct softap_config *config)
#define STA_FALLBACK_PASS
Definition: user_config.h:69
uint16 beacon_interval
static uint8_t wifi_status
Definition: wifi.c:46
#define ip4_addr4(ipaddr)
Definition: ip_addr.h:223
ICACHE_FLASH_ATTR void led_stop_pattern(void)
Definition: led.c:128
void ICACHE_FLASH_ATTR wifi_default()
Definition: wifi.c:379
#define RSSI_CHECK_INTERVAL
Definition: wifi.c:35
netif_linkoutput_fn linkoutput
Definition: netif.h:158
void ICACHE_FLASH_ATTR wifi_softap_ip_config(void)
Definition: wifi.c:502
syscfg_t sys_cfg
Definition: config.c:12
err_t(* netif_linkoutput_fn)(struct netif *netif, struct pbuf *p)
Definition: netif.h:126
bool wifi_station_connect(void)
void wifi_scan_result_cb_unregister(wifi_scan_result_event_cb_t cb)
Definition: wifi.c:599
void dhcps_set_DNS(struct ip_addr *dns_ip) ICACHE_FLASH_ATTR
Definition: dhcpserver.c:1155
#define ntohs(x)
Definition: def.h:82
#define IPH_PROTO(hdr)
Definition: ip.h:151
static uint8_t wifi_event
Definition: wifi.c:47
static ip_addr_t sta_network_mask
Definition: wifi.c:63
#define IP4_ADDR(ipaddr, a, b, c, d)
Definition: ip_addr.h:139
Event_StaMode_Got_IP_t got_ip