Backing up an unused program in case of future need

Dependencies:   mbed

Committer:
andrewboyson
Date:
Fri Apr 15 09:03:54 2016 +0000
Revision:
1:94282484baae
Parent:
0:09f915e6f9f6
Child:
2:06fa34661f19
Streamed the log in chunks to allow the send buffer to be reduced. That in turn allowed the log buffer to be increased.; Added content type text/html to http responses.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andrewboyson 0:09f915e6f9f6 1 #include "mbed.h"
andrewboyson 0:09f915e6f9f6 2 #include "log.h"
andrewboyson 0:09f915e6f9f6 3 #include "esp.h"
andrewboyson 0:09f915e6f9f6 4 #include "io.h"
andrewboyson 0:09f915e6f9f6 5 #include "at.h"
andrewboyson 0:09f915e6f9f6 6 #include "wifi.h"
andrewboyson 0:09f915e6f9f6 7
andrewboyson 0:09f915e6f9f6 8 #define TIMEOUT 10
andrewboyson 0:09f915e6f9f6 9 #define TIMEOUT_OK 2
andrewboyson 0:09f915e6f9f6 10
andrewboyson 0:09f915e6f9f6 11 #define WAIT_FOR_COMMAND 0
andrewboyson 0:09f915e6f9f6 12 #define WAIT_FOR_ESP_READY 1
andrewboyson 0:09f915e6f9f6 13 #define WAIT_FOR_WIFI_CONNECTED 2
andrewboyson 0:09f915e6f9f6 14 #define WAIT_FOR_WIFI_GOT_IP 3
andrewboyson 0:09f915e6f9f6 15 #define WAIT_FOR_OK 4
andrewboyson 0:09f915e6f9f6 16 #define WAIT_FOR_SEND_OK 5
andrewboyson 0:09f915e6f9f6 17 static int wait_for;
andrewboyson 0:09f915e6f9f6 18
andrewboyson 0:09f915e6f9f6 19 static int * pFeedback;
andrewboyson 0:09f915e6f9f6 20 static void startCommand(int* pStatus, int waitfor)
andrewboyson 0:09f915e6f9f6 21 {
andrewboyson 0:09f915e6f9f6 22 wait_for = waitfor;
andrewboyson 0:09f915e6f9f6 23 pFeedback = pStatus;
andrewboyson 0:09f915e6f9f6 24 if (pFeedback) *pFeedback = AT_NONE;
andrewboyson 0:09f915e6f9f6 25 }
andrewboyson 0:09f915e6f9f6 26 static void finishAndReset(int feedback)
andrewboyson 0:09f915e6f9f6 27 {
andrewboyson 0:09f915e6f9f6 28 if (pFeedback)
andrewboyson 0:09f915e6f9f6 29 {
andrewboyson 0:09f915e6f9f6 30 *pFeedback = feedback;
andrewboyson 0:09f915e6f9f6 31 pFeedback = NULL;
andrewboyson 0:09f915e6f9f6 32 }
andrewboyson 0:09f915e6f9f6 33 wait_for = WAIT_FOR_COMMAND;
andrewboyson 0:09f915e6f9f6 34 }
andrewboyson 0:09f915e6f9f6 35 void AtReleaseResetAndStart(int *pStatus)
andrewboyson 0:09f915e6f9f6 36 {
andrewboyson 0:09f915e6f9f6 37 startCommand(pStatus, WAIT_FOR_ESP_READY);
andrewboyson 0:09f915e6f9f6 38 EspReleaseFromReset();
andrewboyson 0:09f915e6f9f6 39 }
andrewboyson 0:09f915e6f9f6 40 void AtConnect(const char *ssid, const char *password, int *pStatus)
andrewboyson 0:09f915e6f9f6 41 {
andrewboyson 0:09f915e6f9f6 42 startCommand(pStatus, WAIT_FOR_OK);
andrewboyson 0:09f915e6f9f6 43 EspSendStringF("AT+CWJAP=\"%s\",\"%s\"\r\n", ssid, password);
andrewboyson 0:09f915e6f9f6 44 }
andrewboyson 0:09f915e6f9f6 45 void AtAt(int *pStatus)
andrewboyson 0:09f915e6f9f6 46 {
andrewboyson 0:09f915e6f9f6 47 startCommand(pStatus, WAIT_FOR_OK);
andrewboyson 0:09f915e6f9f6 48 EspSendString("AT\r\n");
andrewboyson 0:09f915e6f9f6 49 }
andrewboyson 0:09f915e6f9f6 50
andrewboyson 0:09f915e6f9f6 51 void AtConnectId(int id, char * type, char * addr, int port, void * buffer, int bufferlength, int *pStatus)
andrewboyson 0:09f915e6f9f6 52 {
andrewboyson 0:09f915e6f9f6 53 startCommand(pStatus, WAIT_FOR_OK);
andrewboyson 0:09f915e6f9f6 54
andrewboyson 0:09f915e6f9f6 55 EspIpdBuffer[id] = buffer;
andrewboyson 0:09f915e6f9f6 56 EspIpdBufferLen[id] = bufferlength;
andrewboyson 0:09f915e6f9f6 57
andrewboyson 0:09f915e6f9f6 58 EspSendStringF("AT+CIPSTART=%d,\"%s\",\"%s\",%d\r\n", id, type, addr, port);
andrewboyson 0:09f915e6f9f6 59 }
andrewboyson 0:09f915e6f9f6 60 void AtStartServer(int port, int *pStatus)
andrewboyson 0:09f915e6f9f6 61 {
andrewboyson 0:09f915e6f9f6 62 startCommand(pStatus, WAIT_FOR_OK);
andrewboyson 0:09f915e6f9f6 63 EspSendStringF("AT+CIPSERVER=1,%d\r\n", port);
andrewboyson 0:09f915e6f9f6 64 }
andrewboyson 0:09f915e6f9f6 65 void AtClose(int id, int *pStatus)
andrewboyson 0:09f915e6f9f6 66 {
andrewboyson 0:09f915e6f9f6 67 startCommand(pStatus, WAIT_FOR_OK);
andrewboyson 0:09f915e6f9f6 68 EspSendStringF("AT+CIPCLOSE=%d\r\n", id);
andrewboyson 0:09f915e6f9f6 69 }
andrewboyson 0:09f915e6f9f6 70 void AtMux(int *pStatus)
andrewboyson 0:09f915e6f9f6 71 {
andrewboyson 0:09f915e6f9f6 72 startCommand(pStatus, WAIT_FOR_OK);
andrewboyson 0:09f915e6f9f6 73 EspSendString("AT+CIPMUX=1\r\n");
andrewboyson 0:09f915e6f9f6 74 }
andrewboyson 0:09f915e6f9f6 75 void AtBaud(int baud, int *pStatus)
andrewboyson 0:09f915e6f9f6 76 {
andrewboyson 0:09f915e6f9f6 77 startCommand(pStatus, WAIT_FOR_OK);
andrewboyson 0:09f915e6f9f6 78 EspSendStringF("AT+CIOBAUD=%d\r\n", baud);
andrewboyson 0:09f915e6f9f6 79 }
andrewboyson 0:09f915e6f9f6 80
andrewboyson 0:09f915e6f9f6 81 void AtSendData(int id, int length, const void * pdata, int *pStatus)
andrewboyson 0:09f915e6f9f6 82 {
andrewboyson 0:09f915e6f9f6 83 startCommand(pStatus, WAIT_FOR_SEND_OK);
andrewboyson 0:09f915e6f9f6 84 EspLengthToSend = length;
andrewboyson 0:09f915e6f9f6 85 EspDataToSend = pdata;
andrewboyson 0:09f915e6f9f6 86 EspSendStringF("AT+CIPSEND=%d,%d\r\n", id, length);
andrewboyson 0:09f915e6f9f6 87 }
andrewboyson 0:09f915e6f9f6 88
andrewboyson 0:09f915e6f9f6 89 int AtBusy()
andrewboyson 0:09f915e6f9f6 90 {
andrewboyson 0:09f915e6f9f6 91 return wait_for;
andrewboyson 0:09f915e6f9f6 92 }
andrewboyson 0:09f915e6f9f6 93 void AtResetAndStop()
andrewboyson 0:09f915e6f9f6 94 {
andrewboyson 0:09f915e6f9f6 95 startCommand(NULL, WAIT_FOR_COMMAND);
andrewboyson 0:09f915e6f9f6 96 EspResetAndStop();
andrewboyson 0:09f915e6f9f6 97 WifiStatus = WIFI_STOPPED;
andrewboyson 0:09f915e6f9f6 98 }
andrewboyson 0:09f915e6f9f6 99 void AtInit()
andrewboyson 0:09f915e6f9f6 100 {
andrewboyson 0:09f915e6f9f6 101 startCommand(NULL, WAIT_FOR_COMMAND);
andrewboyson 0:09f915e6f9f6 102 WifiStatus = WIFI_STOPPED;
andrewboyson 0:09f915e6f9f6 103 }
andrewboyson 0:09f915e6f9f6 104 int handleLine()
andrewboyson 0:09f915e6f9f6 105 {
andrewboyson 0:09f915e6f9f6 106 switch (wait_for)
andrewboyson 0:09f915e6f9f6 107 {
andrewboyson 0:09f915e6f9f6 108 //No command
andrewboyson 0:09f915e6f9f6 109 case WAIT_FOR_COMMAND:
andrewboyson 0:09f915e6f9f6 110 return 0;
andrewboyson 0:09f915e6f9f6 111
andrewboyson 0:09f915e6f9f6 112 //Connect
andrewboyson 0:09f915e6f9f6 113 case WAIT_FOR_ESP_READY:
andrewboyson 0:09f915e6f9f6 114 if (strcmp(EspLine, "ready") == 0)
andrewboyson 0:09f915e6f9f6 115 {
andrewboyson 0:09f915e6f9f6 116 WifiStatus = WIFI_READY;
andrewboyson 0:09f915e6f9f6 117 wait_for = WAIT_FOR_WIFI_CONNECTED;
andrewboyson 0:09f915e6f9f6 118 }
andrewboyson 0:09f915e6f9f6 119 return 0;
andrewboyson 0:09f915e6f9f6 120 case WAIT_FOR_WIFI_CONNECTED:
andrewboyson 0:09f915e6f9f6 121 if (strcmp(EspLine, "WIFI CONNECTED") == 0)
andrewboyson 0:09f915e6f9f6 122 {
andrewboyson 0:09f915e6f9f6 123 WifiStatus = WIFI_CONNECTED;
andrewboyson 0:09f915e6f9f6 124 wait_for = WAIT_FOR_WIFI_GOT_IP;
andrewboyson 0:09f915e6f9f6 125 }
andrewboyson 0:09f915e6f9f6 126 return 0;
andrewboyson 0:09f915e6f9f6 127 case WAIT_FOR_WIFI_GOT_IP:
andrewboyson 0:09f915e6f9f6 128 if (strcmp(EspLine, "WIFI GOT IP") == 0)
andrewboyson 0:09f915e6f9f6 129 {
andrewboyson 0:09f915e6f9f6 130 WifiStatus = WIFI_GOT_IP;
andrewboyson 0:09f915e6f9f6 131 finishAndReset(AT_SUCCESS);
andrewboyson 0:09f915e6f9f6 132 }
andrewboyson 0:09f915e6f9f6 133 return 0;
andrewboyson 0:09f915e6f9f6 134
andrewboyson 0:09f915e6f9f6 135 //Send command
andrewboyson 0:09f915e6f9f6 136 case WAIT_FOR_SEND_OK:
andrewboyson 0:09f915e6f9f6 137 if (strcmp(EspLine, "SEND OK") == 0) finishAndReset(AT_SUCCESS);
andrewboyson 0:09f915e6f9f6 138 return 0;
andrewboyson 0:09f915e6f9f6 139
andrewboyson 0:09f915e6f9f6 140 //Most commands
andrewboyson 0:09f915e6f9f6 141 case WAIT_FOR_OK:
andrewboyson 0:09f915e6f9f6 142 if (strcmp(EspLine, "OK" ) == 0) finishAndReset(AT_SUCCESS);
andrewboyson 0:09f915e6f9f6 143 if (strcmp(EspLine, "ERROR" ) == 0) finishAndReset(AT_ERROR);
andrewboyson 0:09f915e6f9f6 144 return 0;
andrewboyson 0:09f915e6f9f6 145
andrewboyson 0:09f915e6f9f6 146 default:
andrewboyson 0:09f915e6f9f6 147 LogF("Unknown wait_for %d\r\n", wait_for);
andrewboyson 0:09f915e6f9f6 148 return -1;
andrewboyson 0:09f915e6f9f6 149 }
andrewboyson 0:09f915e6f9f6 150 }
andrewboyson 0:09f915e6f9f6 151 int AtMain()
andrewboyson 0:09f915e6f9f6 152 {
andrewboyson 0:09f915e6f9f6 153
andrewboyson 0:09f915e6f9f6 154 //Monitor time taken
andrewboyson 0:09f915e6f9f6 155 static Timer receiveTimer;
andrewboyson 0:09f915e6f9f6 156 if (wait_for)
andrewboyson 0:09f915e6f9f6 157 {
andrewboyson 0:09f915e6f9f6 158 receiveTimer.start();
andrewboyson 0:09f915e6f9f6 159 }
andrewboyson 0:09f915e6f9f6 160 else
andrewboyson 0:09f915e6f9f6 161 {
andrewboyson 0:09f915e6f9f6 162 receiveTimer.stop();
andrewboyson 0:09f915e6f9f6 163 receiveTimer.reset();
andrewboyson 0:09f915e6f9f6 164 }
andrewboyson 0:09f915e6f9f6 165
andrewboyson 0:09f915e6f9f6 166 //Check for problems; feedback status and reset
andrewboyson 0:09f915e6f9f6 167 if (receiveTimer.read() > TIMEOUT || (wait_for == WAIT_FOR_OK && receiveTimer.read() > TIMEOUT_OK))
andrewboyson 0:09f915e6f9f6 168 {
andrewboyson 0:09f915e6f9f6 169 finishAndReset(AT_RESPONCE_TIMEOUT);
andrewboyson 0:09f915e6f9f6 170 LogCrLf("Command timed out");
andrewboyson 0:09f915e6f9f6 171 return 0;
andrewboyson 0:09f915e6f9f6 172 }
andrewboyson 0:09f915e6f9f6 173
andrewboyson 0:09f915e6f9f6 174
andrewboyson 0:09f915e6f9f6 175 //Depending on what the Esp has returned: do nothing; treat the line or finish and reset
andrewboyson 0:09f915e6f9f6 176 switch (EspLineAvailable)
andrewboyson 0:09f915e6f9f6 177 {
andrewboyson 0:09f915e6f9f6 178 case ESP_IDLE:
andrewboyson 0:09f915e6f9f6 179 break;
andrewboyson 0:09f915e6f9f6 180 case ESP_AVAILABLE:
andrewboyson 0:09f915e6f9f6 181 if (handleLine()) return -1;
andrewboyson 0:09f915e6f9f6 182 break;
andrewboyson 0:09f915e6f9f6 183 case ESP_TIMEOUT:
andrewboyson 0:09f915e6f9f6 184 finishAndReset(AT_LINE_TIMEOUT);
andrewboyson 0:09f915e6f9f6 185 LogCrLf("Esp timed out");
andrewboyson 0:09f915e6f9f6 186 break;
andrewboyson 0:09f915e6f9f6 187 case ESP_OVERFLOW:
andrewboyson 1:94282484baae 188 if (wait_for == WAIT_FOR_ESP_READY) break; //Ignore overflows from the esp's 450 byte boot message
andrewboyson 0:09f915e6f9f6 189 finishAndReset(AT_LINE_OVERFLOW);
andrewboyson 0:09f915e6f9f6 190 LogCrLf("Esp buffer overflow");
andrewboyson 0:09f915e6f9f6 191 break;
andrewboyson 0:09f915e6f9f6 192 default:
andrewboyson 0:09f915e6f9f6 193 LogF("Unknown EsplineAvailable %d\r\n");
andrewboyson 0:09f915e6f9f6 194 return -1;
andrewboyson 0:09f915e6f9f6 195 }
andrewboyson 0:09f915e6f9f6 196
andrewboyson 0:09f915e6f9f6 197 return 0;
andrewboyson 0:09f915e6f9f6 198 }