Dopasowany do naszego firmware'u

Dependencies:   ArduinoAPI

Fork of WeeESP8266 by ITEAD STUDIO

Revision:
6:18eb2d9fb2ac
Parent:
5:5fa655d7212c
Child:
7:d54995c9e1d4
--- a/ESP8266.cpp	Fri Feb 06 09:26:37 2015 +0000
+++ b/ESP8266.cpp	Fri Feb 06 12:25:40 2015 +0000
@@ -54,7 +54,9 @@
 
 String ESP8266::getVersion(void)
 {
-    return eATGMR();
+    String version;
+    eATGMR(version);
+    return version;
 }
 
 bool ESP8266::setOprToStation(void)
@@ -207,7 +209,7 @@
 }
 
 
-String ESP8266::recvFind(String target, uint32_t timeout)
+String ESP8266::recvString(String target, uint32_t timeout)
 {
     String data;
     char a;
@@ -224,8 +226,7 @@
     return data;
 }
 
-
-String ESP8266::recvFind(String target1, String target2, uint32_t timeout)
+String ESP8266::recvString(String target1, String target2, uint32_t timeout)
 {
     String data;
     char a;
@@ -244,7 +245,7 @@
     return data;
 }
 
-String ESP8266::recvFind(String target1, String target2, String target3, uint32_t timeout)
+String ESP8266::recvString(String target1, String target2, String target3, uint32_t timeout)
 {
     String data;
     char a;
@@ -265,46 +266,52 @@
     return data;
 }
 
+bool ESP8266::recvFind(String target, uint32_t timeout)
+{
+    String data_tmp;
+    data_tmp = recvString(target, timeout);
+    if (data_tmp.indexOf(target) != -1) {
+        return true;
+    }
+    return false;
+}
+
+bool ESP8266::recvFindAndFilter(String target, String begin, String end, String &data, uint32_t timeout)
+{
+    String data_tmp;
+    data_tmp = recvString(target, timeout);
+    if (data_tmp.indexOf(target) != -1) {
+        int32_t index1 = data_tmp.indexOf(begin);
+        int32_t index2 = data_tmp.indexOf(end);
+        if (index1 != -1 && index2 != -1) {
+            index1 += begin.length();
+            data = data_tmp.substring(index1, index2);
+            return true;
+        }
+    }
+    data = "";
+    return false;
+}
 
 bool ESP8266::eAT(void)
 {
-    m_puart->setTimeout(100);
     m_puart->flush();
     m_puart->println("AT");
-    if (m_puart->find("OK")) {
-        return true;
-    } else {
-        return false;
-    }
+    return recvFind("OK");
 }
 
 bool ESP8266::eATRST(void) 
 {
-    m_puart->setTimeout(100);
     m_puart->flush();
     m_puart->println("AT+RST");
-    if (m_puart->find("OK")) {
-        return true;
-    } else {
-        return false;
-    }
+    return recvFind("OK");
 }
 
-String ESP8266::eATGMR(void)
+bool ESP8266::eATGMR(String &version)
 {
-    String data;
     m_puart->flush();
     m_puart->println("AT+GMR");
-    data = recvFind("OK", "ERROR");
-    if (data.indexOf("OK") != -1) {
-        int32_t index1 = data.indexOf("\r\r\n");
-        int32_t index2 = data.indexOf("\r\n\r\nOK");
-        if (index1 != -1 && index2 != -1) {
-            index1 += strlen("\r\r\n");
-            return data.substring(index1, index2);
-        }
-    }
-    return "";
+    return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", version); 
 }
 
 
@@ -314,10 +321,141 @@
     m_puart->flush();
     m_puart->print("AT+CWMODE=");
     m_puart->println(mode);
-    data = recvFind("OK");
+    return recvFind("OK");
+}
+
+bool ESP8266::sATCWJAP(String ssid, String pwd)
+{
+    String data;
+    m_puart->flush();
+    m_puart->print("AT+CWJAP=\"");
+    m_puart->print(ssid);
+    m_puart->print("\",\"");
+    m_puart->print(pwd);
+    m_puart->println("\"");
+    
+    data = recvString("OK", "FAIL", 10000);
+    if (data.indexOf("OK") != -1) {
+        return true;
+    }
+    return false;
+}
+
+bool ESP8266::eATCWLAP(String &list)
+{
+    String data;
+    m_puart->flush();
+    m_puart->println("AT+CWLAP");
+    return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list, 10000);
+}
+
+bool ESP8266::eATCWQAP(void)
+{
+    String data;
+    m_puart->flush();
+    m_puart->println("AT+CWQAP");
+    return recvFind("OK");
+}
+
+bool ESP8266::sATCWSAP(String ssid, String pwd, uint8_t chl, uint8_t ecn)
+{
+    String data;
+    m_puart->flush();
+    m_puart->print("AT+CWSAP=\"");
+    m_puart->print(ssid);
+    m_puart->print("\",\"");
+    m_puart->print(pwd);
+    m_puart->print("\",");
+    m_puart->print(chl);
+    m_puart->print(",");
+    m_puart->println(ecn);
+    
+    data = recvString("OK", "ERROR", 5000);
     if (data.indexOf("OK") != -1) {
         return true;
     }
     return false;
 }
 
+bool ESP8266::eATCWLIF(String &list)
+{
+    String data;
+    m_puart->flush();
+    m_puart->println("AT+CWLIF");
+    return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list);
+}
+bool ESP8266::eATCIPSTATUS(String &list)
+{
+    String data;
+    m_puart->flush();
+    m_puart->println("AT+CIPSTATUS");
+    return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list);
+}
+bool ESP8266::sATCIPSTARTSingle(String type, String addr, uint32_t port)
+{
+    String data;
+    m_puart->flush();
+    m_puart->print("AT+CIPSTART=\"");
+    m_puart->print(type);
+    m_puart->print("\",\"");
+    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;
+    }
+    return false;
+}
+bool ESP8266::sATCIPSTARTMultiple(uint8_t mux_id, String type, String addr, uint32_t port)
+{
+    String data;
+    m_puart->flush();
+    m_puart->print("AT+CIPSTART=");
+    m_puart->print(mux_id);
+    m_puart->print(",\"");
+    m_puart->print(type);
+    m_puart->print("\",\"");
+    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;
+    }
+    return false;
+}
+bool ESP8266::sATCIPSENDSingle(uint8_t *buffer, uint32_t len)
+{
+    return false;
+}
+bool ESP8266::sATCIPSENDMultiple(uint8_t mux_id, uint8_t *buffer, uint32_t len)
+{
+    return false;
+}
+bool ESP8266::sATCIPCLOSEMulitple(uint8_t mux_id)
+{
+    return false;
+}
+bool ESP8266::eATCIPCLOSESingle(void)
+{
+    return false;
+}
+bool ESP8266::eATCIFSR(String &list)
+{
+    return false;
+}
+bool ESP8266::sATCIPMUX(uint8_t mode)
+{
+    return false;
+}
+bool ESP8266::sATCIPSERVER(uint8_t mode, uint32_t port)
+{
+    return false;
+}
+bool ESP8266::sATCIPSTO(uint32_t timeout)
+{
+    return false;
+}