Provide an easy-to-use way to manipulate ESP8266.

Dependencies:   ArduinoAPI

Fork of WeeESP8266 by ITEAD STUDIO

Revision:
23:b888991fd6fd
Parent:
22:9b876a9b2f80
Child:
24:f33be52d0265
diff -r 9b876a9b2f80 -r b888991fd6fd ESP8266.cpp
--- 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;