Backing up an unused program in case of future need

Dependencies:   mbed

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;
+}