Backing up an unused program in case of future need

Dependencies:   mbed

Committer:
andrewboyson
Date:
Fri Apr 22 09:23:57 2016 +0000
Revision:
2:06fa34661f19
Parent:
1:94282484baae
Child:
3:accba7e07a0d
Added configuration file.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andrewboyson 0:09f915e6f9f6 1 #include "mbed.h"
andrewboyson 0:09f915e6f9f6 2 #include "esp.h"
andrewboyson 0:09f915e6f9f6 3 #include "at.h"
andrewboyson 0:09f915e6f9f6 4 #include "wifi.h"
andrewboyson 0:09f915e6f9f6 5 #include "log.h"
andrewboyson 0:09f915e6f9f6 6 #include "io.h"
andrewboyson 2:06fa34661f19 7 #include "cfg.h"
andrewboyson 0:09f915e6f9f6 8
andrewboyson 2:06fa34661f19 9 #define IP_WAIT_TIME_MS 5000
andrewboyson 0:09f915e6f9f6 10
andrewboyson 0:09f915e6f9f6 11 int WifiStatus;
andrewboyson 0:09f915e6f9f6 12
andrewboyson 2:06fa34661f19 13 /*
andrewboyson 2:06fa34661f19 14 START
andrewboyson 2:06fa34661f19 15 =====
andrewboyson 2:06fa34661f19 16 AT_SUCCESS + WIFI_GOT_IP -> MUX Under normal circumstances the module will start at the correct baud and already set up for the wifi.
andrewboyson 2:06fa34661f19 17 AT_TIMEOUT + WIFI_CONNECTED -> GET_STATUS Connected to WiFi but no IP given - give the wifi a bit longer
andrewboyson 2:06fa34661f19 18 AT_TIMEOUT + WIFI_READY -> GET_STATUS Not connected to WiFi - give the wifi a bit longer
andrewboyson 2:06fa34661f19 19 AT_TIMEOUT + WIFI_NONE -> AUTOBAUD Not even the module ready message was received: probably the baud rate is wrong so check each baud.
andrewboyson 2:06fa34661f19 20
andrewboyson 2:06fa34661f19 21 AUTOBAUD
andrewboyson 2:06fa34661f19 22 ========
andrewboyson 2:06fa34661f19 23 Changes the baud rate; sends AT and waits for OK
andrewboyson 2:06fa34661f19 24 AT_SUCCESS -> CHANGE_BAUD Found a baud rate which works so now need to change to the correct baud rate
andrewboyson 2:06fa34661f19 25 AT_TIMEOUT Try the next baud rate
andrewboyson 2:06fa34661f19 26
andrewboyson 2:06fa34661f19 27 CHANGE_BAUD
andrewboyson 2:06fa34661f19 28 ===========
andrewboyson 2:06fa34661f19 29 AT_SUCCESS -> GET_STATUS Don't know the wifi status at this point so find it
andrewboyson 2:06fa34661f19 30
andrewboyson 2:06fa34661f19 31 GET_STATUS
andrewboyson 2:06fa34661f19 32 ==========
andrewboyson 2:06fa34661f19 33 wait until some time has passed since start
andrewboyson 2:06fa34661f19 34 AT_SUCCESS + WIFI_GOT_IP -> MUX
andrewboyson 2:06fa34661f19 35 AT_SUCCESS + WIFI_CONNECTED -> BOMB_OUT Connected to wifi but could not get an IP
andrewboyson 2:06fa34661f19 36 AT_SUCCESS + WIFI_READY -> CONNECT This happens when the module has never been, or has lost its connection to, the wifi.
andrewboyson 2:06fa34661f19 37 AT_SUCCESS + WIFI_NONE -> BOMB_OUT This should not happen
andrewboyson 2:06fa34661f19 38
andrewboyson 2:06fa34661f19 39 CONNECT
andrewboyson 2:06fa34661f19 40 =======
andrewboyson 2:06fa34661f19 41 AT_SUCCESS -> GET_STATUS
andrewboyson 2:06fa34661f19 42
andrewboyson 2:06fa34661f19 43 AT_MUX
andrewboyson 2:06fa34661f19 44 ======
andrewboyson 2:06fa34661f19 45
andrewboyson 2:06fa34661f19 46 AT_VERSION
andrewboyson 2:06fa34661f19 47 ==========
andrewboyson 2:06fa34661f19 48
andrewboyson 2:06fa34661f19 49 AT_STARTED
andrewboyson 2:06fa34661f19 50 ==========
andrewboyson 2:06fa34661f19 51
andrewboyson 2:06fa34661f19 52 */
andrewboyson 2:06fa34661f19 53
andrewboyson 2:06fa34661f19 54 #define AM_STOP 0
andrewboyson 2:06fa34661f19 55 #define AM_START 1
andrewboyson 2:06fa34661f19 56 #define AM_AUTOBAUD 2
andrewboyson 2:06fa34661f19 57 #define AM_CHANGE_BAUD 3
andrewboyson 2:06fa34661f19 58 #define AM_CONNECT 4
andrewboyson 2:06fa34661f19 59 #define AM_GET_STATUS 5
andrewboyson 2:06fa34661f19 60 #define AM_WAIT_WIFI 6
andrewboyson 2:06fa34661f19 61 #define AM_MUX 7
andrewboyson 2:06fa34661f19 62 #define AM_VERSION 8
andrewboyson 2:06fa34661f19 63 #define AM_STARTED 9
andrewboyson 2:06fa34661f19 64 static int am = AM_STOP;
andrewboyson 0:09f915e6f9f6 65 int WifiStarted() { return am == AM_STARTED; }
andrewboyson 0:09f915e6f9f6 66
andrewboyson 0:09f915e6f9f6 67 int WifiMain()
andrewboyson 0:09f915e6f9f6 68 {
andrewboyson 0:09f915e6f9f6 69 if (AtBusy()) return 0;
andrewboyson 0:09f915e6f9f6 70
andrewboyson 0:09f915e6f9f6 71 static int result = AT_NONE;
andrewboyson 0:09f915e6f9f6 72 static int autoBaud = 1;
andrewboyson 0:09f915e6f9f6 73
andrewboyson 2:06fa34661f19 74 static Timer wifiWaitTimer;
andrewboyson 0:09f915e6f9f6 75
andrewboyson 0:09f915e6f9f6 76 switch (am)
andrewboyson 0:09f915e6f9f6 77 {
andrewboyson 2:06fa34661f19 78 case AM_STOP:
andrewboyson 0:09f915e6f9f6 79 AtResetAndStop();
andrewboyson 2:06fa34661f19 80 am = AM_START;
andrewboyson 0:09f915e6f9f6 81 result = AT_NONE;
andrewboyson 0:09f915e6f9f6 82 break;
andrewboyson 2:06fa34661f19 83 case AM_START:
andrewboyson 0:09f915e6f9f6 84 switch (result)
andrewboyson 0:09f915e6f9f6 85 {
andrewboyson 0:09f915e6f9f6 86 case AT_NONE:
andrewboyson 0:09f915e6f9f6 87 AtReleaseResetAndStart(&result);
andrewboyson 2:06fa34661f19 88 wifiWaitTimer.reset();
andrewboyson 2:06fa34661f19 89 wifiWaitTimer.start();
andrewboyson 0:09f915e6f9f6 90 break;
andrewboyson 0:09f915e6f9f6 91 case AT_SUCCESS:
andrewboyson 0:09f915e6f9f6 92 switch (WifiStatus)
andrewboyson 0:09f915e6f9f6 93 {
andrewboyson 0:09f915e6f9f6 94 case WIFI_GOT_IP:
andrewboyson 2:06fa34661f19 95 am = AM_MUX;
andrewboyson 0:09f915e6f9f6 96 result = AT_NONE;
andrewboyson 0:09f915e6f9f6 97 break;
andrewboyson 0:09f915e6f9f6 98 default:
andrewboyson 0:09f915e6f9f6 99 LogF("Started WiFi and expected WIFI_GOT_IP but had %d", WifiStatus);
andrewboyson 0:09f915e6f9f6 100 return -1;
andrewboyson 0:09f915e6f9f6 101 }
andrewboyson 0:09f915e6f9f6 102 break;
andrewboyson 0:09f915e6f9f6 103 default:
andrewboyson 0:09f915e6f9f6 104 switch (WifiStatus)
andrewboyson 0:09f915e6f9f6 105 {
andrewboyson 0:09f915e6f9f6 106 case WIFI_READY:
andrewboyson 2:06fa34661f19 107 am = AM_CONNECT;
andrewboyson 0:09f915e6f9f6 108 result = AT_NONE;
andrewboyson 0:09f915e6f9f6 109 break;
andrewboyson 0:09f915e6f9f6 110 default:
andrewboyson 2:06fa34661f19 111 am = AM_AUTOBAUD;
andrewboyson 0:09f915e6f9f6 112 result = AT_NONE;
andrewboyson 0:09f915e6f9f6 113 autoBaud = 1;
andrewboyson 0:09f915e6f9f6 114 break;
andrewboyson 0:09f915e6f9f6 115 }
andrewboyson 0:09f915e6f9f6 116 break;
andrewboyson 0:09f915e6f9f6 117 }
andrewboyson 0:09f915e6f9f6 118 break;
andrewboyson 2:06fa34661f19 119 case AM_AUTOBAUD:
andrewboyson 0:09f915e6f9f6 120 switch (result)
andrewboyson 0:09f915e6f9f6 121 {
andrewboyson 0:09f915e6f9f6 122 case AT_NONE:
andrewboyson 2:06fa34661f19 123 EspBaud(9600 * autoBaud);
andrewboyson 0:09f915e6f9f6 124 AtAt(&result);
andrewboyson 0:09f915e6f9f6 125 break;
andrewboyson 0:09f915e6f9f6 126 case AT_SUCCESS:
andrewboyson 2:06fa34661f19 127 am = AM_CHANGE_BAUD;
andrewboyson 0:09f915e6f9f6 128 result = AT_NONE;
andrewboyson 0:09f915e6f9f6 129 break;
andrewboyson 0:09f915e6f9f6 130 default:
andrewboyson 2:06fa34661f19 131 if (autoBaud == 48)
andrewboyson 0:09f915e6f9f6 132 {
andrewboyson 2:06fa34661f19 133 LogCrLf("Could not find a baud rate to connect to ESP");
andrewboyson 0:09f915e6f9f6 134 return -1;
andrewboyson 0:09f915e6f9f6 135 }
andrewboyson 0:09f915e6f9f6 136 autoBaud++;
andrewboyson 0:09f915e6f9f6 137 result = AT_NONE;
andrewboyson 0:09f915e6f9f6 138 break;
andrewboyson 0:09f915e6f9f6 139 }
andrewboyson 0:09f915e6f9f6 140 break;
andrewboyson 2:06fa34661f19 141 case AM_CHANGE_BAUD:
andrewboyson 0:09f915e6f9f6 142 switch (result)
andrewboyson 0:09f915e6f9f6 143 {
andrewboyson 0:09f915e6f9f6 144 case AT_NONE:
andrewboyson 2:06fa34661f19 145 LogF("Changing baud to %d\r\n", CfgBaud);
andrewboyson 2:06fa34661f19 146 AtBaud(CfgBaud, &result);
andrewboyson 0:09f915e6f9f6 147 break;
andrewboyson 0:09f915e6f9f6 148 case AT_SUCCESS:
andrewboyson 2:06fa34661f19 149 EspBaud(CfgBaud);
andrewboyson 2:06fa34661f19 150 am = AM_GET_STATUS;
andrewboyson 0:09f915e6f9f6 151 result = AT_NONE;
andrewboyson 0:09f915e6f9f6 152 break;
andrewboyson 0:09f915e6f9f6 153 default:
andrewboyson 0:09f915e6f9f6 154 LogCrLf("Could not change baud");
andrewboyson 0:09f915e6f9f6 155 return -1;
andrewboyson 0:09f915e6f9f6 156 }
andrewboyson 0:09f915e6f9f6 157 break;
andrewboyson 2:06fa34661f19 158 case AM_CONNECT:
andrewboyson 0:09f915e6f9f6 159 switch (result)
andrewboyson 0:09f915e6f9f6 160 {
andrewboyson 0:09f915e6f9f6 161 case AT_NONE:
andrewboyson 2:06fa34661f19 162 AtConnect(CfgSsid, CfgPassword, &result);
andrewboyson 0:09f915e6f9f6 163 break;
andrewboyson 0:09f915e6f9f6 164 case AT_SUCCESS:
andrewboyson 2:06fa34661f19 165 wifiWaitTimer.reset();
andrewboyson 2:06fa34661f19 166 wifiWaitTimer.start();
andrewboyson 2:06fa34661f19 167 am = AM_GET_STATUS;
andrewboyson 0:09f915e6f9f6 168 result = AT_NONE;
andrewboyson 0:09f915e6f9f6 169 break;
andrewboyson 0:09f915e6f9f6 170 default:
andrewboyson 0:09f915e6f9f6 171 LogCrLf("Could not connect to WiFi");
andrewboyson 0:09f915e6f9f6 172 return -1;
andrewboyson 0:09f915e6f9f6 173 }
andrewboyson 0:09f915e6f9f6 174 break;
andrewboyson 2:06fa34661f19 175 case AM_GET_STATUS:
andrewboyson 2:06fa34661f19 176 if (wifiWaitTimer.read_ms() < IP_WAIT_TIME_MS) break; //Do nothing until enough time has passed
andrewboyson 2:06fa34661f19 177 wifiWaitTimer.stop();
andrewboyson 2:06fa34661f19 178 switch (result)
andrewboyson 2:06fa34661f19 179 {
andrewboyson 2:06fa34661f19 180 case AT_NONE:
andrewboyson 2:06fa34661f19 181 AtGetEspStatus(&result);
andrewboyson 2:06fa34661f19 182 break;
andrewboyson 2:06fa34661f19 183 case AT_SUCCESS:
andrewboyson 2:06fa34661f19 184 switch(AtEspStatus)
andrewboyson 2:06fa34661f19 185 {
andrewboyson 2:06fa34661f19 186 case 2:
andrewboyson 2:06fa34661f19 187 WifiStatus = WIFI_GOT_IP;
andrewboyson 2:06fa34661f19 188 am = AM_MUX;
andrewboyson 2:06fa34661f19 189 break;
andrewboyson 2:06fa34661f19 190 case 3:
andrewboyson 2:06fa34661f19 191 WifiStatus = WIFI_CONNECTED;
andrewboyson 2:06fa34661f19 192 LogCrLf("Could connect but not get an IP address");
andrewboyson 2:06fa34661f19 193 return -1;
andrewboyson 2:06fa34661f19 194 case 4:
andrewboyson 2:06fa34661f19 195 WifiStatus = WIFI_READY;
andrewboyson 2:06fa34661f19 196 am = AM_CONNECT;
andrewboyson 2:06fa34661f19 197 break;
andrewboyson 2:06fa34661f19 198 default:
andrewboyson 2:06fa34661f19 199 LogF("Unknown CIPSTATUS --> STATUS:%d", AtEspStatus);
andrewboyson 2:06fa34661f19 200 return -1;
andrewboyson 2:06fa34661f19 201 }
andrewboyson 2:06fa34661f19 202 result = AT_NONE;
andrewboyson 2:06fa34661f19 203 break;
andrewboyson 2:06fa34661f19 204 default:
andrewboyson 2:06fa34661f19 205 LogCrLf("Could not connect to WiFi");
andrewboyson 2:06fa34661f19 206 return -1;
andrewboyson 2:06fa34661f19 207 }
andrewboyson 2:06fa34661f19 208 break;
andrewboyson 2:06fa34661f19 209
andrewboyson 2:06fa34661f19 210 case AM_MUX:
andrewboyson 0:09f915e6f9f6 211 switch (result)
andrewboyson 0:09f915e6f9f6 212 {
andrewboyson 0:09f915e6f9f6 213 case AT_NONE:
andrewboyson 0:09f915e6f9f6 214 AtMux(&result);
andrewboyson 0:09f915e6f9f6 215 break;
andrewboyson 0:09f915e6f9f6 216 case AT_SUCCESS:
andrewboyson 2:06fa34661f19 217 am = AM_VERSION;
andrewboyson 2:06fa34661f19 218 result = AT_NONE;
andrewboyson 2:06fa34661f19 219 break;
andrewboyson 2:06fa34661f19 220 default:
andrewboyson 2:06fa34661f19 221 LogCrLf("Could not set up multiple ids");
andrewboyson 2:06fa34661f19 222 return -1;
andrewboyson 2:06fa34661f19 223 }
andrewboyson 2:06fa34661f19 224 break;
andrewboyson 2:06fa34661f19 225 case AM_VERSION:
andrewboyson 2:06fa34661f19 226 switch (result)
andrewboyson 2:06fa34661f19 227 {
andrewboyson 2:06fa34661f19 228 case AT_NONE:
andrewboyson 2:06fa34661f19 229 AtGetEspVersion(&result);
andrewboyson 2:06fa34661f19 230 break;
andrewboyson 2:06fa34661f19 231 case AT_SUCCESS:
andrewboyson 0:09f915e6f9f6 232 am = AM_STARTED;
andrewboyson 0:09f915e6f9f6 233 result = AT_NONE;
andrewboyson 0:09f915e6f9f6 234 break;
andrewboyson 0:09f915e6f9f6 235 default:
andrewboyson 0:09f915e6f9f6 236 LogCrLf("Could not set up multiple ids");
andrewboyson 0:09f915e6f9f6 237 return -1;
andrewboyson 0:09f915e6f9f6 238 }
andrewboyson 2:06fa34661f19 239 break;
andrewboyson 0:09f915e6f9f6 240 case AM_STARTED:
andrewboyson 2:06fa34661f19 241 wifiWaitTimer.stop();
andrewboyson 0:09f915e6f9f6 242 return 0;
andrewboyson 0:09f915e6f9f6 243 default:
andrewboyson 0:09f915e6f9f6 244 LogF("Unknown \'am\' %d", am);
andrewboyson 0:09f915e6f9f6 245 return -1;
andrewboyson 0:09f915e6f9f6 246 }
andrewboyson 0:09f915e6f9f6 247
andrewboyson 0:09f915e6f9f6 248 return 0;
andrewboyson 0:09f915e6f9f6 249 }