Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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;
