mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2024-11-30 03:26:13 +01:00
Frightrisk hostname fix (#144)
* Fix esp8266 hostname in STA mode by checking for new version of the AT cmd instead of old cmd since some firmware still allows old commands * Add more old firmware checks and set oldCmd earlier * increment version number
This commit is contained in:
parent
b541614a19
commit
45eb7c80b6
|
@ -171,16 +171,16 @@ wifiSerialState WifiInterface::setup2(const FSH* SSid, const FSH* password,
|
||||||
#ifdef DONT_TOUCH_WIFI_CONF
|
#ifdef DONT_TOUCH_WIFI_CONF
|
||||||
DIAG(F("DONT_TOUCH_WIFI_CONF was set: Using existing config"));
|
DIAG(F("DONT_TOUCH_WIFI_CONF was set: Using existing config"));
|
||||||
#else
|
#else
|
||||||
StringFormatter::send(wifiStream, F("AT+CWMODE=1\r\n")); // configure as "station" = WiFi client
|
|
||||||
checkForOK(1000, true); // Not always OK, sometimes "no change"
|
|
||||||
|
|
||||||
// Older ES versions have AT+CWJAP, newer ones have AT+CWJAP_CUR and AT+CWHOSTNAME
|
// Older ES versions have AT+CWJAP, newer ones have AT+CWJAP_CUR and AT+CWHOSTNAME
|
||||||
StringFormatter::send(wifiStream, F("AT+CWJAP?\r\n"));
|
StringFormatter::send(wifiStream, F("AT+CWJAP_CUR?\r\n"));
|
||||||
if (checkForOK(2000, true)) {
|
if (!(checkForOK(2000, true))) {
|
||||||
oldCmd=true;
|
oldCmd=true;
|
||||||
while (wifiStream->available()) StringFormatter::printEscape( wifiStream->read()); /// THIS IS A DIAG IN DISGUISE
|
while (wifiStream->available()) StringFormatter::printEscape( wifiStream->read()); /// THIS IS A DIAG IN DISGUISE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StringFormatter::send(wifiStream, F("AT+CWMODE%s=1\r\n"), oldCmd ? "" : "_CUR"); // configure as "station" = WiFi client
|
||||||
|
checkForOK(1000, true); // Not always OK, sometimes "no change"
|
||||||
|
|
||||||
const char *yourNetwork = "Your network ";
|
const char *yourNetwork = "Your network ";
|
||||||
if (strncmp_P(yourNetwork, (const char*)SSid, 13) == 0 || strncmp_P("", (const char*)SSid, 13) == 0) {
|
if (strncmp_P(yourNetwork, (const char*)SSid, 13) == 0 || strncmp_P("", (const char*)SSid, 13) == 0) {
|
||||||
if (strncmp_P(yourNetwork, (const char*)password, 13) == 0) {
|
if (strncmp_P(yourNetwork, (const char*)password, 13) == 0) {
|
||||||
|
@ -199,40 +199,40 @@ wifiSerialState WifiInterface::setup2(const FSH* SSid, const FSH* password,
|
||||||
} else {
|
} else {
|
||||||
// SSID was configured, so we assume station (client) mode.
|
// SSID was configured, so we assume station (client) mode.
|
||||||
if (oldCmd) {
|
if (oldCmd) {
|
||||||
// AT command early version supports CWJAP/CWSAP
|
// AT command early version supports CWJAP/CWSAP
|
||||||
StringFormatter::send(wifiStream, F("AT+CWJAP=\"%S\",\"%S\"\r\n"), SSid, password);
|
StringFormatter::send(wifiStream, F("AT+CWJAP=\"%S\",\"%S\"\r\n"), SSid, password);
|
||||||
ipOK = checkForOK(WIFI_CONNECT_TIMEOUT, true);
|
ipOK = checkForOK(WIFI_CONNECT_TIMEOUT, true);
|
||||||
} else {
|
} else {
|
||||||
// later version supports CWJAP_CUR
|
// later version supports CWJAP_CUR
|
||||||
StringFormatter::send(wifiStream, F("AT+CWHOSTNAME=\"%S\"\r\n"), hostname); // Set Host name for Wifi Client
|
StringFormatter::send(wifiStream, F("AT+CWHOSTNAME=\"%S\"\r\n"), hostname); // Set Host name for Wifi Client
|
||||||
checkForOK(2000, true); // dont care if not supported
|
checkForOK(2000, true); // dont care if not supported
|
||||||
|
|
||||||
StringFormatter::send(wifiStream, F("AT+CWJAP_CUR=\"%S\",\"%S\"\r\n"), SSid, password);
|
StringFormatter::send(wifiStream, F("AT+CWJAP_CUR=\"%S\",\"%S\"\r\n"), SSid, password);
|
||||||
ipOK = checkForOK(WIFI_CONNECT_TIMEOUT, true);
|
ipOK = checkForOK(WIFI_CONNECT_TIMEOUT, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ipOK) {
|
if (ipOK) {
|
||||||
// But we really only have the ESSID and password correct
|
// But we really only have the ESSID and password correct
|
||||||
// Let's check for IP (via DHCP)
|
// Let's check for IP (via DHCP)
|
||||||
ipOK = false;
|
ipOK = false;
|
||||||
StringFormatter::send(wifiStream, F("AT+CIFSR\r\n"));
|
StringFormatter::send(wifiStream, F("AT+CIFSR\r\n"));
|
||||||
if (checkForOK(5000, F("+CIFSR:STAIP"), true,false))
|
if (checkForOK(5000, F("+CIFSR:STAIP"), true,false))
|
||||||
if (!checkForOK(1000, F("0.0.0.0"), true,false))
|
if (!checkForOK(1000, F("0.0.0.0"), true,false))
|
||||||
ipOK = true;
|
ipOK = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ipOK) {
|
if (!ipOK) {
|
||||||
// If we have not managed to get this going in station mode, go for AP mode
|
// If we have not managed to get this going in station mode, go for AP mode
|
||||||
|
|
||||||
// StringFormatter::send(wifiStream, F("AT+RST\r\n"));
|
// StringFormatter::send(wifiStream, F("AT+RST\r\n"));
|
||||||
// checkForOK(1000, true); // Not always OK, sometimes "no change"
|
// checkForOK(1000, true); // Not always OK, sometimes "no change"
|
||||||
|
|
||||||
int i=0;
|
int i=0;
|
||||||
do {
|
do {
|
||||||
// configure as AccessPoint. Try really hard as this is the
|
// configure as AccessPoint. Try really hard as this is the
|
||||||
// last way out to get any Wifi connectivity.
|
// last way out to get any Wifi connectivity.
|
||||||
StringFormatter::send(wifiStream, F("AT+CWMODE=2\r\n"));
|
StringFormatter::send(wifiStream, F("AT+CWMODE%s=2\r\n"), oldCmd ? "" : "_CUR");
|
||||||
} while (!checkForOK(1000+i*500, true) && i++<10);
|
} while (!checkForOK(1000+i*500, true) && i++<10);
|
||||||
|
|
||||||
while (wifiStream->available()) StringFormatter::printEscape( wifiStream->read()); /// THIS IS A DIAG IN DISGUISE
|
while (wifiStream->available()) StringFormatter::printEscape( wifiStream->read()); /// THIS IS A DIAG IN DISGUISE
|
||||||
|
@ -262,7 +262,7 @@ wifiSerialState WifiInterface::setup2(const FSH* SSid, const FSH* password,
|
||||||
oldCmd ? "" : "_CUR", macTail, macTail, channel);
|
oldCmd ? "" : "_CUR", macTail, macTail, channel);
|
||||||
} else {
|
} else {
|
||||||
// password configured by user
|
// password configured by user
|
||||||
StringFormatter::send(wifiStream, F("AT+CWSAP%s=\"DCCEX_%s\",\"%S\",%d,4\r\n"), oldCmd ? "" : "_CUR",
|
StringFormatter::send(wifiStream, F("AT+CWSAP%s=\"DCCEX_%s\",\"%S\",%d,4\r\n"), oldCmd ? "" : "_CUR",
|
||||||
macTail, password, channel);
|
macTail, password, channel);
|
||||||
}
|
}
|
||||||
} while (!checkForOK(WIFI_CONNECT_TIMEOUT, true) && i++<2); // do twice if necessary but ignore failure as AP mode may still be ok
|
} while (!checkForOK(WIFI_CONNECT_TIMEOUT, true) && i++<2); // do twice if necessary but ignore failure as AP mode may still be ok
|
||||||
|
|
|
@ -3,7 +3,9 @@
|
||||||
|
|
||||||
#include "StringFormatter.h"
|
#include "StringFormatter.h"
|
||||||
|
|
||||||
#define VERSION "3.0.11"
|
#define VERSION "3.0.12"
|
||||||
|
// 3.0.12 fix esp8266 test for new firmware
|
||||||
|
// 3.0.11 ?
|
||||||
// 3.0.10 Teensy Support
|
// 3.0.10 Teensy Support
|
||||||
// 3.0.9 rearranges serial newlines for the benefit of JMRI.
|
// 3.0.9 rearranges serial newlines for the benefit of JMRI.
|
||||||
// 3.0.8 Includes <* *> wraps around DIAGs for the benefit of JMRI.
|
// 3.0.8 Includes <* *> wraps around DIAGs for the benefit of JMRI.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user