|
@@ -16,7 +16,8 @@
|
|
|
|
|
|
WiFiUDP UDP;
|
|
|
|
|
|
-static const char *ssid, *password, *hostname, *dnsserver;
|
|
|
+static const char *ssid, *password, *hostname;
|
|
|
+static IPAddress dnsserver;
|
|
|
static TimerHandle_t sta_failure_timer;
|
|
|
|
|
|
enum connected {
|
|
@@ -27,6 +28,28 @@ enum connected {
|
|
|
static volatile bool sta_timeout_enabled;
|
|
|
static volatile unsigned int sta_timeout_count;
|
|
|
static unsigned int connected;
|
|
|
+static const IPAddress null_ip(0,0,0,0);
|
|
|
+
|
|
|
+static inline bool setvar_ip(enum sysvars_enum var, const esp_ip_addr_t &ip)
|
|
|
+{
|
|
|
+ return setvar_ip(var, ip.u_addr.ip4.addr);
|
|
|
+}
|
|
|
+static inline bool setvar_ip(enum sysvars_enum var, const ip_addr_t &ip)
|
|
|
+{
|
|
|
+ return setvar_ip(var, ip.u_addr.ip4.addr);
|
|
|
+}
|
|
|
+static inline esp_ip_addr_t *ip_toesp(esp_ip_addr_t *eip, IPAddress ip)
|
|
|
+{
|
|
|
+ memset(eip, 0, sizeof *eip);
|
|
|
+ eip->u_addr.ip4.addr = (uint32_t)ip;
|
|
|
+ return eip;
|
|
|
+}
|
|
|
+static inline ip_addr_t *ip_toaddr(ip_addr_t *eip, IPAddress ip)
|
|
|
+{
|
|
|
+ memset(eip, 0, sizeof *eip);
|
|
|
+ eip->u_addr.ip4.addr = (uint32_t)ip;
|
|
|
+ return eip;
|
|
|
+}
|
|
|
|
|
|
static void sta_bounce(void)
|
|
|
{
|
|
@@ -93,13 +116,13 @@ static void sntp_sync_cb(struct timeval *tv)
|
|
|
|
|
|
static void my_sntp_start(void)
|
|
|
{
|
|
|
- setenv_bool("status.net.sntp.sync", false);
|
|
|
+ setvar_bool(status_net_sntp_sync, false);
|
|
|
|
|
|
- if (getenv_bool("sntp.enabled")) {
|
|
|
+ if (getvar_bool(config_sntp_enabled)) {
|
|
|
sntp_set_time_sync_notification_cb(sntp_sync_cb);
|
|
|
|
|
|
sntp_setoperatingmode(SNTP_OPMODE_POLL);
|
|
|
- sntp_servermode_dhcp(!getenv_bool("ip4.dhcp.nosntp"));
|
|
|
+ sntp_servermode_dhcp(!getvar_bool(config_ip4_dhcp_nosntp));
|
|
|
sntp_set_sync_mode(SNTP_SYNC_MODE_IMMED); // Until first sync
|
|
|
sntp_init();
|
|
|
} else {
|
|
@@ -129,11 +152,10 @@ static void sntp_server_show(void)
|
|
|
const ip_addr_t *sntp_ip = sntp_getserver(0);
|
|
|
|
|
|
if (!invalid_ip(sntp_ip)) {
|
|
|
- const char *sntp_server = inet_ntoa(*sntp_ip);
|
|
|
- printf("[SNTP] Time server: %s\n", sntp_server);
|
|
|
- setenv_cond("status.net.sntp.server", sntp_server);
|
|
|
+ printf("[SNTP] Time server: %s\n", inet_ntoa(*sntp_ip));
|
|
|
+ setvar_ip(status_net_sntp_server, *sntp_ip);
|
|
|
} else {
|
|
|
- setenv_cond("status.net.sntp.server", NULL);
|
|
|
+ setvar_ip(status_net_sntp_server, null_ip);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -165,27 +187,17 @@ static void dns_setup(void)
|
|
|
{
|
|
|
const ip_addr_t *dns_ip = dns_getserver(0);
|
|
|
|
|
|
- if (invalid_ip(dns_ip) || getenv_bool("ip4.dhcp.nodns")) {
|
|
|
+ if (invalid_ip(dns_ip) || getvar_bool(config_ip4_dhcp_nodns)) {
|
|
|
/* Static DNS server configuration */
|
|
|
ip_addr_t addr;
|
|
|
- if (dnsserver && inet_aton(dnsserver, &addr)) {
|
|
|
- if (memcmp(dns_ip, &addr, sizeof addr))
|
|
|
- dns_setserver(0, &addr);
|
|
|
- }
|
|
|
+ ip_toaddr(&addr, dnsserver);
|
|
|
+ if (memcmp(&addr, dns_ip, sizeof addr))
|
|
|
+ dns_setserver(0, &addr);
|
|
|
}
|
|
|
|
|
|
dns_ip = dns_getserver(0);
|
|
|
- const char *dns_server_str = inet_ntoa(*dns_ip);
|
|
|
- printf("[DNS] DNS server: %s\n", dns_server_str);
|
|
|
- setenv_cond("status.net.dns.server", dns_server_str);
|
|
|
-}
|
|
|
-
|
|
|
-static esp_ip_addr_t ipaddr_toesp(IPAddress ip)
|
|
|
-{
|
|
|
- esp_ip_addr_t eip;
|
|
|
- memset(&eip, 0, sizeof eip);
|
|
|
- eip.u_addr.ip4.addr = (uint32_t)ip;
|
|
|
- return eip;
|
|
|
+ printf("[DNS] DNS server: %s\n", inet_ntoa(*dns_ip));
|
|
|
+ setvar_ip(status_net_dns_server, *dns_ip);
|
|
|
}
|
|
|
|
|
|
static void mdns_setup(void)
|
|
@@ -204,7 +216,7 @@ static void mdns_setup(void)
|
|
|
if (mdns_started)
|
|
|
mdns_free();
|
|
|
|
|
|
- if (!getenv_bool("mdns.enabled"))
|
|
|
+ if (!getvar_bool(config_mdns_enabled))
|
|
|
return;
|
|
|
|
|
|
mdns_started = mdns_init() == ESP_OK;
|
|
@@ -219,7 +231,7 @@ static void mdns_setup(void)
|
|
|
snprintf(unique_name, sizeof unique_name, "MAX80-%s", serial_number);
|
|
|
if (connected & CON_STA) {
|
|
|
mdns_ip_addr_t iplist;
|
|
|
- iplist.addr = ipaddr_toesp(WiFi.localIP());
|
|
|
+ ip_toesp(&iplist.addr, WiFi.localIP());
|
|
|
iplist.next = NULL;
|
|
|
unique_mdns = mdns_delegate_hostname_add(unique_name, &iplist);
|
|
|
printf("[MDNS] mDNS unique hostname: %s\n", unique_name);
|
|
@@ -242,7 +254,7 @@ static void start_services(void)
|
|
|
|
|
|
// If Arduino supported both of these at the same that would be
|
|
|
// awesome, but it requires ESP-IDF reconfiguration...
|
|
|
- if (getenv_bool("sntp.enabled")) {
|
|
|
+ if (getvar_bool(config_sntp_enabled)) {
|
|
|
if (!invalid_ip(sntp_getserver(0))) {
|
|
|
sntp_server_show();
|
|
|
} else {
|
|
@@ -259,18 +271,6 @@ static void start_services(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static const char *ip_str(const IPAddress &ip)
|
|
|
-{
|
|
|
- static char ip_buf[4*4];
|
|
|
- const IPAddress ip_none(0,0,0,0);
|
|
|
- return strcpy(ip_buf, ip == ip_none ? "" : ip.toString().c_str());
|
|
|
-}
|
|
|
-
|
|
|
-static void setenv_ip(const char *var, const IPAddress &ip)
|
|
|
-{
|
|
|
- setenv_config(var, ip_str(ip));
|
|
|
-}
|
|
|
-
|
|
|
static bool force_conn_update;
|
|
|
|
|
|
static void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info)
|
|
@@ -281,7 +281,7 @@ static void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info)
|
|
|
static int ap_clients;
|
|
|
int prev_ap_clients = ap_clients;
|
|
|
IPAddress wifi_local_ip = WiFi.localIP();
|
|
|
- const char *local_ip = ip_str(wifi_local_ip);
|
|
|
+ const char *local_ip = wifi_local_ip.toString().c_str();
|
|
|
|
|
|
switch (event) {
|
|
|
case ARDUINO_EVENT_WIFI_READY:
|
|
@@ -416,20 +416,20 @@ static void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info)
|
|
|
force_conn_update = false;
|
|
|
|
|
|
if (conn_change & CON_STA) {
|
|
|
- setenv_bool("status.net.sta.conn", connected & CON_STA);
|
|
|
- setenv_config("status.net.sta.ip4",
|
|
|
- connected & CON_STA ? local_ip : "");
|
|
|
- setenv_ip("status.net.sta.ip4.mask", WiFi.subnetMask());
|
|
|
- setenv_ip("status.net.sta.ip4.gw", WiFi.gatewayIP());
|
|
|
+ setvar_bool(status_net_sta_conn, connected & CON_STA);
|
|
|
+ setvar_ip(status_net_sta_ip4,
|
|
|
+ connected & CON_STA ? wifi_local_ip : null_ip);
|
|
|
+ setvar_ip(status_net_sta_ip4_mask, WiFi.subnetMask());
|
|
|
+ setvar_ip(status_net_sta_ip4_gw, WiFi.gatewayIP());
|
|
|
}
|
|
|
if (conn_change & CON_AP)
|
|
|
- setenv_bool("status.net.ap.conn", connected & CON_AP);
|
|
|
+ setvar_bool(status_net_ap_conn, connected & CON_AP);
|
|
|
if (conn_change & CON_ETH) {
|
|
|
- setenv_bool("status.net.eth.conn", connected & CON_ETH);
|
|
|
- setenv_config("status.net.eth.ip4",
|
|
|
- connected & CON_ETH ? local_ip : "");
|
|
|
- setenv_ip("status.net.eth.ip4.mask", WiFi.subnetMask());
|
|
|
- setenv_ip("status.net.eth.ip4.gw", WiFi.gatewayIP());
|
|
|
+ setvar_bool(status_net_eth_conn, connected & CON_ETH);
|
|
|
+ setvar_ip(status_net_eth_ip4,
|
|
|
+ connected & CON_STA ? wifi_local_ip : null_ip);
|
|
|
+ setvar_ip(status_net_eth_ip4_mask, WiFi.subnetMask());
|
|
|
+ setvar_ip(status_net_eth_ip4_gw, WiFi.gatewayIP());
|
|
|
}
|
|
|
|
|
|
if (!ssid) {
|
|
@@ -445,7 +445,7 @@ static void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info)
|
|
|
}
|
|
|
|
|
|
if (ap_clients != prev_ap_clients)
|
|
|
- setenv_ul("status.net.ap.clients", ap_clients);
|
|
|
+ setvar_uint(status_net_ap_clients, ap_clients);
|
|
|
|
|
|
/*
|
|
|
* Don't keep retrying if there are AP clients - makes the AP
|
|
@@ -456,15 +456,6 @@ static void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void setenv_mac(const char *var, const uint8_t mac[6])
|
|
|
-{
|
|
|
- char mac_str[3*6];
|
|
|
-
|
|
|
- snprintf(mac_str, sizeof mac_str, "%02x:%02x:%02x:%02x:%02x:%02x",
|
|
|
- mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
|
|
- setenv_cond(var, mac_str);
|
|
|
-}
|
|
|
-
|
|
|
static void wifi_config_ap(void)
|
|
|
{
|
|
|
/* No network configuration set */
|
|
@@ -476,7 +467,7 @@ static void wifi_config_ap(void)
|
|
|
static char ap_ssid[64];
|
|
|
|
|
|
WiFi.softAPmacAddress(mac);
|
|
|
- setenv_mac("status.net.ap.mac", mac);
|
|
|
+ setvar_mac(status_net_ap_mac, mac);
|
|
|
|
|
|
/* The last two bytes of the efuse MAC */
|
|
|
snprintf(ap_ssid, sizeof ap_ssid, "MAX80_%02X%02X",
|
|
@@ -485,10 +476,10 @@ static void wifi_config_ap(void)
|
|
|
printf("[WIFI] AP SSID %s IP %s netmask %s channel %u\n",
|
|
|
ap_ssid, AP_IP.toString().c_str(),
|
|
|
AP_Netmask.toString().c_str(), channel);
|
|
|
- setenv_cond("status.net.ap.ssid", ap_ssid);
|
|
|
- setenv_ip("status.net.ap.ip4", AP_IP);
|
|
|
- setenv_ip("status.net.ap.ip4.mask", AP_Netmask);
|
|
|
- setenv_ul("status.net.ap.clients", 0);
|
|
|
+ setvar_str(status_net_ap_ssid, ap_ssid);
|
|
|
+ setvar_ip(status_net_ap_ip4, AP_IP);
|
|
|
+ setvar_ip(status_net_ap_ip4_mask, AP_Netmask);
|
|
|
+ setvar_uint(status_net_ap_clients, 0);
|
|
|
|
|
|
printf("WiFi.softAP\n");
|
|
|
WiFi.softAP(ap_ssid, NULL, channel, 0, 4, true);
|
|
@@ -513,10 +504,10 @@ static void wifi_config_sta(void)
|
|
|
printf("WiFi.macAddress\n");
|
|
|
WiFi.macAddress(mac);
|
|
|
printf("setenv_mac\n");
|
|
|
- setenv_mac("status.net.sta.mac", mac);
|
|
|
+ setvar_mac(status_net_sta_mac, mac);
|
|
|
|
|
|
printf("setenv ssid\n");
|
|
|
- setenv_cond("status.net.sta.ssid", ssid);
|
|
|
+ setvar_str(status_net_sta_ssid, ssid);
|
|
|
if (!ssid) {
|
|
|
WiFi.enableSTA(false);
|
|
|
return;
|
|
@@ -539,10 +530,10 @@ static void wifi_config_sta(void)
|
|
|
|
|
|
static void wifi_config(void)
|
|
|
{
|
|
|
- ssid = getenv_notempty("wifi.ssid");
|
|
|
- password = getenv_notempty("wifi.psk");
|
|
|
- hostname = getenv_def("hostname", "max80");
|
|
|
- dnsserver = getenv_notempty("ip4.dns");
|
|
|
+ ssid = dupstr(getvar_str(config_wifi_ssid));
|
|
|
+ password = dupstr(getvar_str(config_wifi_psk));
|
|
|
+ hostname = dupstr(getvar_str(config_hostname));
|
|
|
+ dnsserver = IPAddress(getvar_ip(config_ip4_dns));
|
|
|
|
|
|
force_conn_update = true;
|
|
|
|
|
@@ -553,7 +544,7 @@ static void wifi_config(void)
|
|
|
|
|
|
WiFi.setTxPower(WIFI_POWER_19_5dBm);
|
|
|
|
|
|
- setenv_config("status.hostname", hostname);
|
|
|
+ setvar_str(status_hostname, hostname);
|
|
|
WiFi.hostname(hostname);
|
|
|
|
|
|
printf("wifi_config_ap\n");
|