|
|
|
@ -3,8 +3,9 @@ |
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
#include "wifimgr.h" |
|
|
|
|
#include "persist.h" |
|
|
|
|
|
|
|
|
|
WiFiConfigBlock wificonf; |
|
|
|
|
WiFiConfigBundle * const wificonf = &persist.current.wificonf; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Restore defaults in the WiFi config block. |
|
|
|
@ -17,31 +18,31 @@ wifimgr_restore_defaults(void) |
|
|
|
|
u8 mac[6]; |
|
|
|
|
wifi_get_macaddr(SOFTAP_IF, mac); |
|
|
|
|
|
|
|
|
|
wificonf.opmode = SOFTAP_MODE; |
|
|
|
|
wificonf.tpw = 20; |
|
|
|
|
wificonf.ap_channel = 1; |
|
|
|
|
sprintf((char *) wificonf.ap_ssid, "TERM-%02X%02X%02X", mac[3], mac[4], mac[5]); |
|
|
|
|
wificonf.ap_password[0] = 0; // PSK2 always if password is not null.
|
|
|
|
|
wificonf.ap_hidden = false; |
|
|
|
|
wificonf->opmode = SOFTAP_MODE; |
|
|
|
|
wificonf->tpw = 20; |
|
|
|
|
wificonf->ap_channel = 1; |
|
|
|
|
sprintf((char *) wificonf->ap_ssid, "TERM-%02X%02X%02X", mac[3], mac[4], mac[5]); |
|
|
|
|
wificonf->ap_password[0] = 0; // PSK2 always if password is not null.
|
|
|
|
|
wificonf->ap_hidden = false; |
|
|
|
|
|
|
|
|
|
IP4_ADDR(&wificonf.ap_ip.ip, 192, 168, 4, 60); |
|
|
|
|
IP4_ADDR(&wificonf.ap_ip.netmask, 255, 255, 255, 0); |
|
|
|
|
wificonf.ap_ip.gw.addr = wificonf.ap_ip.gw.addr; |
|
|
|
|
IP4_ADDR(&wificonf->ap_ip.ip, 192, 168, 4, 60); |
|
|
|
|
IP4_ADDR(&wificonf->ap_ip.netmask, 255, 255, 255, 0); |
|
|
|
|
wificonf->ap_ip.gw.addr = wificonf->ap_ip.gw.addr; |
|
|
|
|
|
|
|
|
|
IP4_ADDR(&wificonf.ap_dhcp_range.start_ip, 192, 168, 4, 100); |
|
|
|
|
IP4_ADDR(&wificonf.ap_dhcp_range.end_ip, 192, 168, 4, 200); |
|
|
|
|
wificonf.ap_dhcp_range.enable = 1; |
|
|
|
|
wificonf.ap_dhcp_lease_time = 120; |
|
|
|
|
IP4_ADDR(&wificonf->ap_dhcp_range.start_ip, 192, 168, 4, 100); |
|
|
|
|
IP4_ADDR(&wificonf->ap_dhcp_range.end_ip, 192, 168, 4, 200); |
|
|
|
|
wificonf->ap_dhcp_range.enable = 1; |
|
|
|
|
wificonf->ap_dhcp_lease_time = 120; |
|
|
|
|
|
|
|
|
|
// --- Client config ---
|
|
|
|
|
wificonf.sta_ssid[0] = 0; |
|
|
|
|
wificonf.sta_password[0] = 0; |
|
|
|
|
strcpy((char *) wificonf.sta_hostname, (char *) wificonf.ap_ssid); // use the same value for sta_hostname as AP name
|
|
|
|
|
wificonf.sta_dhcp_enable = true; |
|
|
|
|
|
|
|
|
|
IP4_ADDR(&wificonf.sta_ip.ip, 192, 168, 0, (mac[5]==1?2:mac[5]));// avoid being the same as "default gw"
|
|
|
|
|
IP4_ADDR(&wificonf.sta_ip.netmask, 255, 255, 255, 0); |
|
|
|
|
IP4_ADDR(&wificonf.sta_ip.gw, 192, 168, 0, 1); |
|
|
|
|
wificonf->sta_ssid[0] = 0; |
|
|
|
|
wificonf->sta_password[0] = 0; |
|
|
|
|
strcpy((char *) wificonf->sta_hostname, (char *) wificonf->ap_ssid); // use the same value for sta_hostname as AP name
|
|
|
|
|
wificonf->sta_dhcp_enable = true; |
|
|
|
|
|
|
|
|
|
IP4_ADDR(&wificonf->sta_ip.ip, 192, 168, 0, (mac[5]==1?2:mac[5]));// avoid being the same as "default gw"
|
|
|
|
|
IP4_ADDR(&wificonf->sta_ip.netmask, 255, 255, 255, 0); |
|
|
|
|
IP4_ADDR(&wificonf->sta_ip.gw, 192, 168, 0, 1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void ICACHE_FLASH_ATTR |
|
|
|
@ -49,17 +50,17 @@ configure_station(void) |
|
|
|
|
{ |
|
|
|
|
info("[WiFi] Configuring Station mode..."); |
|
|
|
|
struct station_config conf; |
|
|
|
|
strcpy((char *) conf.ssid, (char *) wificonf.sta_ssid); |
|
|
|
|
strcpy((char *) conf.password, (char *) wificonf.sta_password); |
|
|
|
|
strcpy((char *) conf.ssid, (char *) wificonf->sta_ssid); |
|
|
|
|
strcpy((char *) conf.password, (char *) wificonf->sta_password); |
|
|
|
|
dbg("[WiFi] Connecting to \"%s\", password \"%s\"", conf.ssid, conf.password); |
|
|
|
|
conf.bssid_set = 0; |
|
|
|
|
conf.bssid[0] = 0; |
|
|
|
|
wifi_station_disconnect(); |
|
|
|
|
wifi_station_set_config_current(&conf); |
|
|
|
|
dbg("[WiFi] Hostname = %s", wificonf.sta_hostname); |
|
|
|
|
wifi_station_set_hostname((char*)wificonf.sta_hostname); |
|
|
|
|
dbg("[WiFi] Hostname = %s", wificonf->sta_hostname); |
|
|
|
|
wifi_station_set_hostname((char*)wificonf->sta_hostname); |
|
|
|
|
|
|
|
|
|
if (wificonf.sta_dhcp_enable) { |
|
|
|
|
if (wificonf->sta_dhcp_enable) { |
|
|
|
|
dbg("[WiFi] Starting DHCP..."); |
|
|
|
|
if (!wifi_station_dhcpc_start()) { |
|
|
|
|
error("[WiFi] DHCp failed to start!"); |
|
|
|
@ -68,13 +69,13 @@ configure_station(void) |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
info("[WiFi] Setting up static IP..."); |
|
|
|
|
dbg("[WiFi] Client.ip = "IPSTR, GOOD_IP2STR(wificonf.sta_ip.ip.addr)); |
|
|
|
|
dbg("[WiFi] Client.mask = "IPSTR, GOOD_IP2STR(wificonf.sta_ip.netmask.addr)); |
|
|
|
|
dbg("[WiFi] Client.gw = "IPSTR, GOOD_IP2STR(wificonf.sta_ip.gw.addr)); |
|
|
|
|
dbg("[WiFi] Client.ip = "IPSTR, GOOD_IP2STR(wificonf->sta_ip.ip.addr)); |
|
|
|
|
dbg("[WiFi] Client.mask = "IPSTR, GOOD_IP2STR(wificonf->sta_ip.netmask.addr)); |
|
|
|
|
dbg("[WiFi] Client.gw = "IPSTR, GOOD_IP2STR(wificonf->sta_ip.gw.addr)); |
|
|
|
|
|
|
|
|
|
wifi_station_dhcpc_stop(); |
|
|
|
|
// Load static IP config
|
|
|
|
|
if (!wifi_set_ip_info(STATION_IF, &wificonf.sta_ip)) { |
|
|
|
|
if (!wifi_set_ip_info(STATION_IF, &wificonf->sta_ip)) { |
|
|
|
|
error("[WiFi] Error setting static IP!"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
@ -92,12 +93,12 @@ configure_ap(void) |
|
|
|
|
info("[WiFi] Configuring SoftAP mode..."); |
|
|
|
|
// AP is enabled
|
|
|
|
|
struct softap_config conf; |
|
|
|
|
conf.channel = wificonf.ap_channel; |
|
|
|
|
strcpy((char *) conf.ssid, (char *) wificonf.ap_ssid); |
|
|
|
|
strcpy((char *) conf.password, (char *) wificonf.ap_password); |
|
|
|
|
conf.authmode = (wificonf.ap_password[0] == 0 ? AUTH_OPEN : AUTH_WPA2_PSK); |
|
|
|
|
conf.channel = wificonf->ap_channel; |
|
|
|
|
strcpy((char *) conf.ssid, (char *) wificonf->ap_ssid); |
|
|
|
|
strcpy((char *) conf.password, (char *) wificonf->ap_password); |
|
|
|
|
conf.authmode = (wificonf->ap_password[0] == 0 ? AUTH_OPEN : AUTH_WPA2_PSK); |
|
|
|
|
conf.ssid_len = (uint8_t) strlen((char *) conf.ssid); |
|
|
|
|
conf.ssid_hidden = wificonf.ap_hidden; |
|
|
|
|
conf.ssid_hidden = wificonf->ap_hidden; |
|
|
|
|
conf.max_connection = 4; // default 4 (max possible)
|
|
|
|
|
conf.beacon_interval = 100; // default 100 ms
|
|
|
|
|
|
|
|
|
@ -112,29 +113,29 @@ configure_ap(void) |
|
|
|
|
|
|
|
|
|
// Set IP
|
|
|
|
|
info("[WiFi] Configuring SoftAP local IP..."); |
|
|
|
|
dbg("[WiFi] SoftAP.ip = "IPSTR, GOOD_IP2STR(wificonf.ap_ip.ip.addr)); |
|
|
|
|
dbg("[WiFi] SoftAP.mask = "IPSTR, GOOD_IP2STR(wificonf.ap_ip.netmask.addr)); |
|
|
|
|
dbg("[WiFi] SoftAP.gw = "IPSTR, GOOD_IP2STR(wificonf.ap_ip.gw.addr)); |
|
|
|
|
dbg("[WiFi] SoftAP.ip = "IPSTR, GOOD_IP2STR(wificonf->ap_ip.ip.addr)); |
|
|
|
|
dbg("[WiFi] SoftAP.mask = "IPSTR, GOOD_IP2STR(wificonf->ap_ip.netmask.addr)); |
|
|
|
|
dbg("[WiFi] SoftAP.gw = "IPSTR, GOOD_IP2STR(wificonf->ap_ip.gw.addr)); |
|
|
|
|
|
|
|
|
|
wifi_softap_dhcps_stop(); |
|
|
|
|
|
|
|
|
|
// Configure DHCP
|
|
|
|
|
if (!wifi_set_ip_info(SOFTAP_IF, &wificonf.ap_ip)) { |
|
|
|
|
if (!wifi_set_ip_info(SOFTAP_IF, &wificonf->ap_ip)) { |
|
|
|
|
error("[WiFi] IP set fail!"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
info("[WiFi] Configuring SoftAP DHCP server..."); |
|
|
|
|
dbg("[WiFi] DHCP.start = "IPSTR, GOOD_IP2STR(wificonf.ap_dhcp_range.start_ip.addr)); |
|
|
|
|
dbg("[WiFi] DHCP.end = "IPSTR, GOOD_IP2STR(wificonf.ap_dhcp_range.end_ip.addr)); |
|
|
|
|
dbg("[WiFi] DHCP.lease = %d minutes", wificonf.ap_dhcp_lease_time); |
|
|
|
|
dbg("[WiFi] DHCP.start = "IPSTR, GOOD_IP2STR(wificonf->ap_dhcp_range.start_ip.addr)); |
|
|
|
|
dbg("[WiFi] DHCP.end = "IPSTR, GOOD_IP2STR(wificonf->ap_dhcp_range.end_ip.addr)); |
|
|
|
|
dbg("[WiFi] DHCP.lease = %d minutes", wificonf->ap_dhcp_lease_time); |
|
|
|
|
|
|
|
|
|
if (!wifi_softap_set_dhcps_lease(&wificonf.ap_dhcp_range)) { |
|
|
|
|
if (!wifi_softap_set_dhcps_lease(&wificonf->ap_dhcp_range)) { |
|
|
|
|
error("[WiFi] DHCP address range set fail!"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!wifi_softap_set_dhcps_lease_time(wificonf.ap_dhcp_lease_time)) { |
|
|
|
|
if (!wifi_softap_set_dhcps_lease_time(wificonf->ap_dhcp_lease_time)) { |
|
|
|
|
error("[WiFi] DHCP lease time set fail!"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
@ -159,15 +160,15 @@ wifimgr_apply_settings(void) |
|
|
|
|
|
|
|
|
|
// Force wifi cycle
|
|
|
|
|
wifi_set_opmode(NULL_MODE); |
|
|
|
|
wifi_set_opmode(wificonf.opmode); |
|
|
|
|
wifi_set_opmode(wificonf->opmode); |
|
|
|
|
|
|
|
|
|
// Configure the client
|
|
|
|
|
if (wificonf.opmode == STATIONAP_MODE || wificonf.opmode == STATION_MODE) { |
|
|
|
|
if (wificonf->opmode == STATIONAP_MODE || wificonf->opmode == STATION_MODE) { |
|
|
|
|
configure_station(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Configure the AP
|
|
|
|
|
if (wificonf.opmode == STATIONAP_MODE || wificonf.opmode == SOFTAP_MODE) { |
|
|
|
|
if (wificonf->opmode == STATIONAP_MODE || wificonf->opmode == SOFTAP_MODE) { |
|
|
|
|
configure_ap(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|