@@ -53,19 +53,21 @@ bool WiFiNetwork::isConnected() const {
5353void WiFiNetwork::setWiFiCredentials (const char * SSID, const char * pass) {
5454 wifiProvisioning.stopSearchForProvider ();
5555 wifiProvisioning.stopProvisioning ();
56- WiFi.persistent (true );
5756 tryConnecting (false , SSID, pass);
5857 retriedOnG = false ;
59- // Reset state, will get back into provisioning if can't connect
60- hadWifi = false ;
6158 wifiState = WiFiReconnectionStatus::ServerCredAttempt;
6259}
6360
61+ void WiFiNetwork::setProvisionedWiFiCredentials (const char * SSID, const char * pass) {
62+ tryConnecting (false , SSID, pass);
63+ retriedOnG = false ;
64+ wifiState = WiFiReconnectionStatus::ProvisionedAttempt;
65+ }
66+
6467IPAddress WiFiNetwork::getAddress () { return WiFi.localIP (); }
6568
6669void WiFiNetwork::setUp () {
67- // Don't need to save the already saved credentials or the hardcoded ones
68- WiFi.persistent (false );
70+ WiFi.persistent (true );
6971 wifiHandlerLogger.info (" Setting up WiFi" );
7072 WiFi.mode (WIFI_AP_STA);
7173 WiFi.hostname (" SlimeVR FBT Tracker" );
@@ -109,7 +111,6 @@ void WiFiNetwork::setUp() {
109111
110112void WiFiNetwork::onConnected () {
111113 wifiState = WiFiReconnectionStatus::Success;
112- wifiProvisioning.stopProvisioning ();
113114 statusManager.setStatus (SlimeVR::Status::WIFI_CONNECTING, false );
114115 hadWifi = true ;
115116 wifiHandlerLogger.info (
@@ -201,6 +202,12 @@ void WiFiNetwork::upkeep() {
201202 wifiState = WiFiReconnectionStatus::Failed;
202203 }
203204 return ;
205+ case WiFiReconnectionStatus::ProvisionedAttempt: // Couldn't connect with
206+ // credentials received from
207+ // provisioning
208+ if (!tryProvisionedCredentials ()) {
209+ wifiState = WiFiReconnectionStatus::Failed;
210+ }
204211 case WiFiReconnectionStatus::Failed: // Couldn't connect with second set of
205212 // credentials or server credentials
206213 if (startedProvisioning) {
@@ -347,6 +354,20 @@ bool WiFiNetwork::tryServerCredentials() {
347354 return tryConnecting (true );
348355}
349356
357+ bool WiFiNetwork::tryProvisionedCredentials () {
358+ if (WiFi.status () != WL_DISCONNECTED) {
359+ return false ;
360+ }
361+
362+ if (retriedOnG) {
363+ return false ;
364+ }
365+
366+ retriedOnG = true ;
367+
368+ return tryConnecting (true );
369+ }
370+
350371bool WiFiNetwork::tryConnecting (bool phyModeG, const char * SSID, const char * pass) {
351372#if ESP8266
352373 if (phyModeG) {
0 commit comments