Provide an easy-to-use way to manipulate ESP8266.
Fork of WeeESP8266 by
Diff: ESP8266.cpp
- Revision:
- 23:b888991fd6fd
- Parent:
- 22:9b876a9b2f80
- Child:
- 24:f33be52d0265
--- a/ESP8266.cpp Sat Mar 14 10:16:33 2015 +0000 +++ b/ESP8266.cpp Sat Mar 28 14:49:05 2015 +0000 @@ -1,9 +1,9 @@ /** * @file ESP8266.cpp - * @brief The implementation of class ESP8266. - * @author Wu Pengfei<pengfei.wu@itead.cc> + * @brief The implementation of class ESP8266. + * @author Wu Pengfei<pengfei.wu@itead.cc> * @date 2015.02 - * + * * @par Copyright: * Copyright (c) 2015 ITEAD Intelligent Systems Co., Ltd. \n\n * This program is free software; you can redistribute it and/or @@ -137,10 +137,10 @@ return list; } -String ESP8266::getIPStatus(void) +String ESP8266::getIPStatus(int *pStatus) { String list; - eATCIPSTATUS(list); + eATCIPSTATUS(list, pStatus); return list; } @@ -265,14 +265,14 @@ int8_t id = -1; bool has_data = false; logDebug("start recv pkg"); - + unsigned long start = millis(); while (millis() - start < timeout) { while(m_puart->available() > 0) { a = m_puart->readChr(); data += a; } - + index_PIPDcomma = data.indexOf("+IPD,"); if (index_PIPDcomma != -1) { logDebug("index_PIPDcomma found = %d", index_PIPDcomma); @@ -280,10 +280,10 @@ if (index_colon != -1) { logDebug("data1 = %s\r\n", data.c_str()); logDebug("index_colon found = %d", index_colon); - + index_comma = data.indexOf(',', index_PIPDcomma + 5); logDebug("index_comma found = %d", index_comma); - + if (index_comma != -1 && index_comma < index_colon) { /* +IPD,id,len:data */ logDebug("id = %d", id); id = data.substring(index_PIPDcomma + 5, index_comma).toInt(); @@ -314,7 +314,7 @@ } //logDebug("has_data = %u\r\n", has_data); //logDebug("data2 = %s\r\n", data.c_str()); - + if (has_data) { start = millis(); while (millis() - start < 3000) { @@ -325,7 +325,7 @@ //logDebug("data3 = %s\r\n", data.c_str()); if (data.length() >= index_colon + 1 + len) { if (data_len) { - *data_len = len; + *data_len = len; } if (index_comma != -1 && coming_mux_id) { *coming_mux_id = id; @@ -333,10 +333,10 @@ //logDebug("len = %d", len); //logDebug("buffer_size = %d", buffer_size); uint32_t ret = len > buffer_size ? buffer_size : len; - - memcpy(buffer, - data.substring(index_colon + 1, index_colon + 1 + len).c_str(), - ret); + + memcpy(buffer, + data.substring(index_colon + 1, index_colon + 1 + len).c_str(), + ret); logDebug("ret = %u\r\n", ret); return ret; } @@ -358,7 +358,7 @@ } if (data.indexOf(target) != -1) { break; - } + } } return data; } @@ -437,7 +437,7 @@ return recvFind("OK"); } -bool ESP8266::eATRST(void) +bool ESP8266::eATRST(void) { m_puart->flush(); m_puart->println("AT+RST"); @@ -448,10 +448,10 @@ { m_puart->flush(); m_puart->println("AT+GMR"); - return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", version); + return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", version); } -bool ESP8266::qATCWMODE(uint8_t *mode) +bool ESP8266::qATCWMODE(uint8_t *mode) { String str_mode; bool ret; @@ -460,7 +460,7 @@ } m_puart->flush(); m_puart->println("AT+CWMODE?"); - ret = recvFindAndFilter("OK", "+CWMODE:", "\r\n\r\nOK", str_mode); + ret = recvFindAndFilter("OK", "+CWMODE:", "\r\n\r\nOK", str_mode); if (ret) { *mode = (uint8_t)str_mode.toInt(); return true; @@ -475,7 +475,7 @@ m_puart->flush(); m_puart->print("AT+CWMODE="); m_puart->println(mode); - + data = recvString("OK", "no change"); if (data.indexOf("OK") != -1 || data.indexOf("no change") != -1) { return true; @@ -492,7 +492,7 @@ m_puart->print("\",\""); m_puart->print(pwd); m_puart->println("\""); - + data = recvString("OK", "FAIL", 10000); if (data.indexOf("OK") != -1) { return true; @@ -528,7 +528,7 @@ m_puart->print(chl); m_puart->print(","); m_puart->println(ecn); - + data = recvString("OK", "ERROR", 5000); if (data.indexOf("OK") != -1) { return true; @@ -543,14 +543,23 @@ m_puart->println("AT+CWLIF"); return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list); } -bool ESP8266::eATCIPSTATUS(String &list) + +bool ESP8266::eATCIPSTATUS(String &list, int *pStatus) { String data; - delay(100); m_puart->flush(); m_puart->println("AT+CIPSTATUS"); - return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list); + bool ok = recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list); + if (ok && pStatus) { + int index_colon = list.indexOf(':'); + if (index_colon != -1) + *pStatus = list[index_colon+1] - '0'; + else + *pStatus = -1; + } + return ok; } + bool ESP8266::sATCIPSTARTSingle(String type, String addr, uint32_t port) { String data; @@ -561,7 +570,7 @@ m_puart->print(addr); m_puart->print("\","); m_puart->println(port); - + data = recvString("OK", "ERROR", "ALREADY CONNECT", 10000); if (data.indexOf("OK") != -1 || data.indexOf("ALREADY CONNECT") != -1) { return true; @@ -580,7 +589,7 @@ m_puart->print(addr); m_puart->print("\","); m_puart->println(port); - + data = recvString("OK", "ERROR", "ALREADY CONNECT", 10000); if (data.indexOf("OK") != -1 || data.indexOf("ALREADY CONNECT") != -1) { return true; @@ -623,7 +632,7 @@ m_puart->flush(); m_puart->print("AT+CIPCLOSE="); m_puart->println(mux_id); - + data = recvString("OK", "Link is not", 5000); if (data.indexOf("OK") != -1 || data.indexOf("Link is not") != -1) { return true; @@ -648,7 +657,7 @@ m_puart->flush(); m_puart->print("AT+CIPMUX="); m_puart->println(mode); - + data = recvString("OK", "Link is builded"); if (data.indexOf("OK") != -1) { return true; @@ -662,7 +671,7 @@ m_puart->flush(); m_puart->print("AT+CIPSERVER=1,"); m_puart->println(port); - + data = recvString("OK", "no change"); if (data.indexOf("OK") != -1 || data.indexOf("no change") != -1) { return true;