diff --git a/WifiInterface.cpp b/WifiInterface.cpp index ac309ef..45531fb 100644 --- a/WifiInterface.cpp +++ b/WifiInterface.cpp @@ -34,6 +34,10 @@ const unsigned long LOOP_TIMEOUT = 2000; bool WifiInterface::connected = false; Stream * WifiInterface::wifiStream; +#ifndef WIFI_CONNECT_TIMEOUT +// Tested how long it takes to FAIL an unknown SSID on firmware 1.7.4. +#define WIFI_CONNECT_TIMEOUT 14000 +#endif //////////////////////////////////////////////////////////////////////////////// // @@ -174,12 +178,12 @@ wifiSerialState WifiInterface::setup2(const __FlashStringHelper* SSid, const __F const char *yourNetwork = "Your network "; if (strncmp_P(yourNetwork, (const char*)SSid, 13) == 0 || ((const char *)SSid)[0] == '\0') { delay(8000); // give a preconfigured ES8266 a chance to connect to a router - + // typical connect time approx 7 seconds StringFormatter::send(wifiStream, F("AT+CIFSR\r\n")); if (checkForOK(5000, (const char*) F("+CIFSR:STAIP"), true,false)) if (!checkForOK(1000, (const char*) F("0.0.0.0"), true,false)) ipOK = true; - } else { + } else { // Should this really be "else" here /haba if (!ipOK) { @@ -192,7 +196,7 @@ wifiSerialState WifiInterface::setup2(const __FlashStringHelper* SSid, const __F // AT command early version supports CWJAP/CWSAP if (SSid) { StringFormatter::send(wifiStream, F("AT+CWJAP=\"%S\",\"%S\"\r\n"), SSid, password); - ipOK = checkForOK(16000, OK_SEARCH, true); + ipOK = checkForOK(WIFI_CONNECT_TIMEOUT, OK_SEARCH, true); } DIAG(F("\n**\n")); @@ -204,10 +208,9 @@ wifiSerialState WifiInterface::setup2(const __FlashStringHelper* SSid, const __F if (SSid) { StringFormatter::send(wifiStream, F("AT+CWJAP_CUR=\"%S\",\"%S\"\r\n"), SSid, password); - ipOK = checkForOK(20000, OK_SEARCH, true); + ipOK = checkForOK(WIFI_CONNECT_TIMEOUT, OK_SEARCH, true); } } - delay(8000); // give a preconfigured ES8266 a chance to connect to a router if (ipOK) { // But we really only have the ESSID and password correct @@ -252,8 +255,7 @@ wifiSerialState WifiInterface::setup2(const __FlashStringHelper* SSid, const __F // password configured by user StringFormatter::send(wifiStream, F("AT+CWSAP=\"DCCEX_%s\",\"%s\",1,4\r\n"), macTail, password); } - } while (i++<2 && !checkForOK(16000, OK_SEARCH, true)); // do twice if necessary but ignore failure as AP mode may still be ok - + } while (i++<2 && !checkForOK(WIFI_CONNECT_TIMEOUT, OK_SEARCH, true)); // do twice if necessary but ignore failure as AP mode may still be ok } else { StringFormatter::send(wifiStream, F("AT+CWSAP_CUR=\"DCCEX_%s\",\"PASS_%s\",1,4\r\n"), macTail, macTail); @@ -265,17 +267,17 @@ wifiSerialState WifiInterface::setup2(const __FlashStringHelper* SSid, const __F } StringFormatter::send(wifiStream, F("AT+CIPSERVER=0\r\n")); // turn off tcp server (to clean connections before CIPMUX=1) - checkForOK(10000, OK_SEARCH, true); // ignore result in case it already was off + checkForOK(1000, OK_SEARCH, true); // ignore result in case it already was off StringFormatter::send(wifiStream, F("AT+CIPMUX=1\r\n")); // configure for multiple connections - if (!checkForOK(10000, OK_SEARCH, true)) return WIFI_DISCONNECTED; + if (!checkForOK(1000, OK_SEARCH, true)) return WIFI_DISCONNECTED; StringFormatter::send(wifiStream, F("AT+CIPSERVER=1,%d\r\n"), port); // turn on server on port - if (!checkForOK(10000, OK_SEARCH, true)) return WIFI_DISCONNECTED; + if (!checkForOK(1000, OK_SEARCH, true)) return WIFI_DISCONNECTED; #endif //DONT_TOUCH_WIFI_CONF StringFormatter::send(wifiStream, F("AT+CIFSR\r\n")); // Display ip addresses to the DIAG - if (!checkForOK(10000, OK_SEARCH, true, false)) return WIFI_DISCONNECTED; + if (!checkForOK(1000, OK_SEARCH, true, false)) return WIFI_DISCONNECTED; DIAG(F("\nPORT=%d\n"),port); return WIFI_CONNECTED; diff --git a/config.example.h b/config.example.h index ab55c21..174e590 100644 --- a/config.example.h +++ b/config.example.h @@ -68,6 +68,13 @@ The configuration file for DCC++ EX Command Station // // WIFI_HOSTNAME: You probably don't need to change this #define WIFI_HOSTNAME "dccex" +// +///////////////////////////////////////////////////////////////////////////////////// +// +// Wifi connect timeout in milliseconds. Default is 14000 (14 seconds). You only need +// to set this if you have an extremely slow Wifi router. +// +//#define WIFI_CONNECT_TIMEOUT 14000 ///////////////////////////////////////////////////////////////////////////////////// //