![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Backing up an unused program in case of future need
at.cpp
- Committer:
- andrewboyson
- Date:
- 2016-04-15
- Revision:
- 1:94282484baae
- Parent:
- 0:09f915e6f9f6
- Child:
- 2:06fa34661f19
File content as of revision 1:94282484baae:
#include "mbed.h" #include "log.h" #include "esp.h" #include "io.h" #include "at.h" #include "wifi.h" #define TIMEOUT 10 #define TIMEOUT_OK 2 #define WAIT_FOR_COMMAND 0 #define WAIT_FOR_ESP_READY 1 #define WAIT_FOR_WIFI_CONNECTED 2 #define WAIT_FOR_WIFI_GOT_IP 3 #define WAIT_FOR_OK 4 #define WAIT_FOR_SEND_OK 5 static int wait_for; static int * pFeedback; static void startCommand(int* pStatus, int waitfor) { wait_for = waitfor; pFeedback = pStatus; if (pFeedback) *pFeedback = AT_NONE; } static void finishAndReset(int feedback) { if (pFeedback) { *pFeedback = feedback; pFeedback = NULL; } wait_for = WAIT_FOR_COMMAND; } void AtReleaseResetAndStart(int *pStatus) { startCommand(pStatus, WAIT_FOR_ESP_READY); EspReleaseFromReset(); } void AtConnect(const char *ssid, const char *password, int *pStatus) { startCommand(pStatus, WAIT_FOR_OK); EspSendStringF("AT+CWJAP=\"%s\",\"%s\"\r\n", ssid, password); } void AtAt(int *pStatus) { startCommand(pStatus, WAIT_FOR_OK); EspSendString("AT\r\n"); } void AtConnectId(int id, char * type, char * addr, int port, void * buffer, int bufferlength, int *pStatus) { startCommand(pStatus, WAIT_FOR_OK); EspIpdBuffer[id] = buffer; EspIpdBufferLen[id] = bufferlength; EspSendStringF("AT+CIPSTART=%d,\"%s\",\"%s\",%d\r\n", id, type, addr, port); } void AtStartServer(int port, int *pStatus) { startCommand(pStatus, WAIT_FOR_OK); EspSendStringF("AT+CIPSERVER=1,%d\r\n", port); } void AtClose(int id, int *pStatus) { startCommand(pStatus, WAIT_FOR_OK); EspSendStringF("AT+CIPCLOSE=%d\r\n", id); } void AtMux(int *pStatus) { startCommand(pStatus, WAIT_FOR_OK); EspSendString("AT+CIPMUX=1\r\n"); } void AtBaud(int baud, int *pStatus) { startCommand(pStatus, WAIT_FOR_OK); EspSendStringF("AT+CIOBAUD=%d\r\n", baud); } void AtSendData(int id, int length, const void * pdata, int *pStatus) { startCommand(pStatus, WAIT_FOR_SEND_OK); EspLengthToSend = length; EspDataToSend = pdata; EspSendStringF("AT+CIPSEND=%d,%d\r\n", id, length); } int AtBusy() { return wait_for; } void AtResetAndStop() { startCommand(NULL, WAIT_FOR_COMMAND); EspResetAndStop(); WifiStatus = WIFI_STOPPED; } void AtInit() { startCommand(NULL, WAIT_FOR_COMMAND); WifiStatus = WIFI_STOPPED; } int handleLine() { switch (wait_for) { //No command case WAIT_FOR_COMMAND: return 0; //Connect case WAIT_FOR_ESP_READY: if (strcmp(EspLine, "ready") == 0) { WifiStatus = WIFI_READY; wait_for = WAIT_FOR_WIFI_CONNECTED; } return 0; case WAIT_FOR_WIFI_CONNECTED: if (strcmp(EspLine, "WIFI CONNECTED") == 0) { WifiStatus = WIFI_CONNECTED; wait_for = WAIT_FOR_WIFI_GOT_IP; } return 0; case WAIT_FOR_WIFI_GOT_IP: if (strcmp(EspLine, "WIFI GOT IP") == 0) { WifiStatus = WIFI_GOT_IP; finishAndReset(AT_SUCCESS); } return 0; //Send command case WAIT_FOR_SEND_OK: if (strcmp(EspLine, "SEND OK") == 0) finishAndReset(AT_SUCCESS); return 0; //Most commands case WAIT_FOR_OK: if (strcmp(EspLine, "OK" ) == 0) finishAndReset(AT_SUCCESS); if (strcmp(EspLine, "ERROR" ) == 0) finishAndReset(AT_ERROR); return 0; default: LogF("Unknown wait_for %d\r\n", wait_for); return -1; } } int AtMain() { //Monitor time taken static Timer receiveTimer; if (wait_for) { receiveTimer.start(); } else { receiveTimer.stop(); receiveTimer.reset(); } //Check for problems; feedback status and reset if (receiveTimer.read() > TIMEOUT || (wait_for == WAIT_FOR_OK && receiveTimer.read() > TIMEOUT_OK)) { finishAndReset(AT_RESPONCE_TIMEOUT); LogCrLf("Command timed out"); return 0; } //Depending on what the Esp has returned: do nothing; treat the line or finish and reset switch (EspLineAvailable) { case ESP_IDLE: break; case ESP_AVAILABLE: if (handleLine()) return -1; break; case ESP_TIMEOUT: finishAndReset(AT_LINE_TIMEOUT); LogCrLf("Esp timed out"); break; case ESP_OVERFLOW: if (wait_for == WAIT_FOR_ESP_READY) break; //Ignore overflows from the esp's 450 byte boot message finishAndReset(AT_LINE_OVERFLOW); LogCrLf("Esp buffer overflow"); break; default: LogF("Unknown EsplineAvailable %d\r\n"); return -1; } return 0; }