![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Backing up an unused program in case of future need
Diff: wifi.cpp
- Revision:
- 0:09f915e6f9f6
- Child:
- 1:94282484baae
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wifi.cpp Wed Apr 13 09:21:02 2016 +0000 @@ -0,0 +1,153 @@ +#include "mbed.h" +#include "esp.h" +#include "at.h" +#include "wifi.h" +#include "log.h" +#include "io.h" + +#define SSID "Andrew and Kate" +#define PASSWORD "Hopeless" + + +int WifiStatus; + +#define AM_STOPPING 0 +#define AM_STARTING 1 +#define AM_AUTOBAUDING 2 +#define AM_BAUDING 3 +#define AM_CONNECTING 4 +#define AM_MUXING 5 +#define AM_STARTED 6 +static int am = AM_STOPPING; +int WifiStarted() { return am == AM_STARTED; } + +int WifiMain() +{ + if (AtBusy()) return 0; + + static int result = AT_NONE; + static int autoBaud = 1; + + static int autoBaudSucceeded = false; + + switch (am) + { + case AM_STOPPING: + AtResetAndStop(); + am = AM_STARTING; + result = AT_NONE; + break; + case AM_STARTING: + switch (result) + { + case AT_NONE: + AtReleaseResetAndStart(&result); + break; + case AT_SUCCESS: + switch (WifiStatus) + { + case WIFI_GOT_IP: + am = AM_MUXING; + result = AT_NONE; + break; + default: + LogF("Started WiFi and expected WIFI_GOT_IP but had %d", WifiStatus); + return -1; + } + break; + default: + switch (WifiStatus) + { + case WIFI_READY: + am = AM_CONNECTING; + result = AT_NONE; + break; + default: + am = AM_AUTOBAUDING; + result = AT_NONE; + autoBaud = 1; + break; + } + break; + } + break; + case AM_AUTOBAUDING: + if (autoBaudSucceeded) return -1; + EspBaud(9600 * autoBaud); + switch (result) + { + case AT_NONE: + AtAt(&result); + break; + case AT_SUCCESS: + autoBaudSucceeded = true; + am = AM_BAUDING; + result = AT_NONE; + break; + default: + if (autoBaud == 16) + { + LogCrLf("Could not connect to ESP"); + return -1; + } + autoBaud++; + result = AT_NONE; + break; + } + break; + case AM_BAUDING: + switch (result) + { + case AT_NONE: + AtBaud(BAUD, &result); + break; + case AT_SUCCESS: + EspBaud(BAUD); + am = AM_STOPPING; + result = AT_NONE; + break; + default: + LogCrLf("Could not change baud"); + return -1; + } + break; + case AM_CONNECTING: + switch (result) + { + case AT_NONE: + AtConnect(SSID, PASSWORD, &result); + break; + case AT_SUCCESS: + am = AM_MUXING; + result = AT_NONE; + break; + default: + LogCrLf("Could not connect to WiFi"); + return -1; + } + break; + case AM_MUXING: + switch (result) + { + case AT_NONE: + AtMux(&result); + break; + case AT_SUCCESS: + am = AM_STARTED; + result = AT_NONE; + break; + default: + LogCrLf("Could not set up multiple ids"); + return -1; + } + break; + case AM_STARTED: + LogEnable(false); + return 0; + default: + LogF("Unknown \'am\' %d", am); + return -1; + } + + return 0; +}