From 1716c4d6f99b85ae7457fafd27ea77033cf92e29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Sat, 5 Nov 2022 15:02:06 +0100 Subject: [PATCH] Allow static IP for WLAN and portentially fix reconnect issues --- protobufs | 2 +- src/mesh/generated/config.pb.h | 21 +++++++-------------- src/mesh/generated/localonly.pb.h | 2 +- src/mesh/http/WiFiAPClient.cpp | 9 ++++++--- 4 files changed, 15 insertions(+), 19 deletions(-) diff --git a/protobufs b/protobufs index 7e102f0f..2954e5b0 160000 --- a/protobufs +++ b/protobufs @@ -1 +1 @@ -Subproject commit 7e102f0f3c4d6a41e9ee42e4771ca3c35c517d56 +Subproject commit 2954e5b0228c85902c841bfb0f18add43980a2e2 diff --git a/src/mesh/generated/config.pb.h b/src/mesh/generated/config.pb.h index 263b1e91..a9005ddc 100644 --- a/src/mesh/generated/config.pb.h +++ b/src/mesh/generated/config.pb.h @@ -31,12 +31,6 @@ typedef enum _Config_PositionConfig_PositionFlags { Config_PositionConfig_PositionFlags_SPEED = 512 } Config_PositionConfig_PositionFlags; -typedef enum _Config_NetworkConfig_WiFiMode { - Config_NetworkConfig_WiFiMode_CLIENT = 0, - Config_NetworkConfig_WiFiMode_ACCESS_POINT = 1, - Config_NetworkConfig_WiFiMode_ACCESS_POINT_HIDDEN = 2 -} Config_NetworkConfig_WiFiMode; - typedef enum _Config_NetworkConfig_EthMode { Config_NetworkConfig_EthMode_DHCP = 0, Config_NetworkConfig_EthMode_STATIC = 1 @@ -164,6 +158,7 @@ typedef struct _Config_PowerConfig { typedef struct _Config_NetworkConfig { bool wifi_enabled; + Config_NetworkConfig_EthMode wifi_mode; char wifi_ssid[33]; char wifi_psk[64]; char ntp_server[33]; @@ -196,10 +191,6 @@ typedef struct _Config { #define _Config_PositionConfig_PositionFlags_MAX Config_PositionConfig_PositionFlags_SPEED #define _Config_PositionConfig_PositionFlags_ARRAYSIZE ((Config_PositionConfig_PositionFlags)(Config_PositionConfig_PositionFlags_SPEED+1)) -#define _Config_NetworkConfig_WiFiMode_MIN Config_NetworkConfig_WiFiMode_CLIENT -#define _Config_NetworkConfig_WiFiMode_MAX Config_NetworkConfig_WiFiMode_ACCESS_POINT_HIDDEN -#define _Config_NetworkConfig_WiFiMode_ARRAYSIZE ((Config_NetworkConfig_WiFiMode)(Config_NetworkConfig_WiFiMode_ACCESS_POINT_HIDDEN+1)) - #define _Config_NetworkConfig_EthMode_MIN Config_NetworkConfig_EthMode_DHCP #define _Config_NetworkConfig_EthMode_MAX Config_NetworkConfig_EthMode_STATIC #define _Config_NetworkConfig_EthMode_ARRAYSIZE ((Config_NetworkConfig_EthMode)(Config_NetworkConfig_EthMode_STATIC+1)) @@ -238,7 +229,7 @@ extern "C" { #define Config_DeviceConfig_init_default {_Config_DeviceConfig_Role_MIN, 0, 0} #define Config_PositionConfig_init_default {0, 0, 0, 0, 0, 0, 0} #define Config_PowerConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0} -#define Config_NetworkConfig_init_default {0, "", "", "", 0, _Config_NetworkConfig_EthMode_MIN, false, Config_NetworkConfig_IpV4Config_init_default} +#define Config_NetworkConfig_init_default {0, _Config_NetworkConfig_EthMode_MIN, "", "", "", 0, _Config_NetworkConfig_EthMode_MIN, false, Config_NetworkConfig_IpV4Config_init_default} #define Config_NetworkConfig_IpV4Config_init_default {0, 0, 0, 0} #define Config_DisplayConfig_init_default {0, _Config_DisplayConfig_GpsCoordinateFormat_MIN, 0, 0, 0, _Config_DisplayConfig_DisplayUnits_MIN, _Config_DisplayConfig_OledType_MIN} #define Config_LoRaConfig_init_default {0, _Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, 0, 0, {0, 0, 0}} @@ -247,7 +238,7 @@ extern "C" { #define Config_DeviceConfig_init_zero {_Config_DeviceConfig_Role_MIN, 0, 0} #define Config_PositionConfig_init_zero {0, 0, 0, 0, 0, 0, 0} #define Config_PowerConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0} -#define Config_NetworkConfig_init_zero {0, "", "", "", 0, _Config_NetworkConfig_EthMode_MIN, false, Config_NetworkConfig_IpV4Config_init_zero} +#define Config_NetworkConfig_init_zero {0, _Config_NetworkConfig_EthMode_MIN, "", "", "", 0, _Config_NetworkConfig_EthMode_MIN, false, Config_NetworkConfig_IpV4Config_init_zero} #define Config_NetworkConfig_IpV4Config_init_zero {0, 0, 0, 0} #define Config_DisplayConfig_init_zero {0, _Config_DisplayConfig_GpsCoordinateFormat_MIN, 0, 0, 0, _Config_DisplayConfig_DisplayUnits_MIN, _Config_DisplayConfig_OledType_MIN} #define Config_LoRaConfig_init_zero {0, _Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, 0, 0, {0, 0, 0}} @@ -299,6 +290,7 @@ extern "C" { #define Config_PowerConfig_ls_secs_tag 7 #define Config_PowerConfig_min_wake_secs_tag 8 #define Config_NetworkConfig_wifi_enabled_tag 1 +#define Config_NetworkConfig_wifi_mode_tag 2 #define Config_NetworkConfig_wifi_ssid_tag 3 #define Config_NetworkConfig_wifi_psk_tag 4 #define Config_NetworkConfig_ntp_server_tag 5 @@ -364,6 +356,7 @@ X(a, STATIC, SINGULAR, UINT32, min_wake_secs, 8) #define Config_NetworkConfig_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, BOOL, wifi_enabled, 1) \ +X(a, STATIC, SINGULAR, UENUM, wifi_mode, 2) \ X(a, STATIC, SINGULAR, STRING, wifi_ssid, 3) \ X(a, STATIC, SINGULAR, STRING, wifi_psk, 4) \ X(a, STATIC, SINGULAR, STRING, ntp_server, 5) \ @@ -443,10 +436,10 @@ extern const pb_msgdesc_t Config_BluetoothConfig_msg; #define Config_DisplayConfig_size 22 #define Config_LoRaConfig_size 68 #define Config_NetworkConfig_IpV4Config_size 20 -#define Config_NetworkConfig_size 161 +#define Config_NetworkConfig_size 163 #define Config_PositionConfig_size 30 #define Config_PowerConfig_size 43 -#define Config_size 164 +#define Config_size 166 #ifdef __cplusplus } /* extern "C" */ diff --git a/src/mesh/generated/localonly.pb.h b/src/mesh/generated/localonly.pb.h index 783c523c..a69aefc1 100644 --- a/src/mesh/generated/localonly.pb.h +++ b/src/mesh/generated/localonly.pb.h @@ -150,7 +150,7 @@ extern const pb_msgdesc_t LocalModuleConfig_msg; #define LocalModuleConfig_fields &LocalModuleConfig_msg /* Maximum encoded size of messages (where known) */ -#define LocalConfig_size 361 +#define LocalConfig_size 363 #define LocalModuleConfig_size 294 #ifdef __cplusplus diff --git a/src/mesh/http/WiFiAPClient.cpp b/src/mesh/http/WiFiAPClient.cpp index a031414e..6caad79c 100644 --- a/src/mesh/http/WiFiAPClient.cpp +++ b/src/mesh/http/WiFiAPClient.cpp @@ -169,6 +169,11 @@ bool initWifi() WiFi.mode(WIFI_MODE_STA); WiFi.setHostname(ourHost); WiFi.onEvent(WiFiEvent); + WiFi.setAutoReconnect(true); + WiFi.setSleep(false); + if (config.network.wifi_mode == Config_NetworkConfig_EthMode_STATIC && config.network.ipv4_config.ip != 0) { + WiFi.config(config.network.ipv4_config.ip,config.network.ipv4_config.gateway,config.network.ipv4_config.subnet,config.network.ipv4_config.dns,config.network.ipv4_config.dns); + } // This is needed to improve performance. esp_wifi_set_ps(WIFI_PS_NONE); // Disable radio power saving @@ -222,8 +227,6 @@ static void WiFiEvent(WiFiEvent_t event) break; case SYSTEM_EVENT_STA_DISCONNECTED: DEBUG_MSG("Disconnected from WiFi access point\n"); - // Event 5 - needReconnect = true; break; case SYSTEM_EVENT_STA_AUTHMODE_CHANGE: @@ -236,6 +239,7 @@ static void WiFiEvent(WiFiEvent_t event) break; case SYSTEM_EVENT_STA_LOST_IP: DEBUG_MSG("Lost IP address and IP address is reset to 0\n"); + needReconnect = true; break; case SYSTEM_EVENT_STA_WPS_ER_SUCCESS: DEBUG_MSG("WiFi Protected Setup (WPS): succeeded in enrollee mode\n"); @@ -251,7 +255,6 @@ static void WiFiEvent(WiFiEvent_t event) break; case SYSTEM_EVENT_AP_START: DEBUG_MSG("WiFi access point started\n"); - onNetworkConnected(); break; case SYSTEM_EVENT_AP_STOP: