Provide an easy-to-use way to manipulate ESP8266.
Fork of WeeESP8266 by
Diff: ESP8266.cpp
- Revision:
- 15:5c5a85e984a8
- Parent:
- 14:6a9414577daa
- Child:
- 17:60ab5d5686d3
diff -r 6a9414577daa -r 5c5a85e984a8 ESP8266.cpp --- a/ESP8266.cpp Sat Feb 07 06:52:18 2015 +0000 +++ b/ESP8266.cpp Sat Feb 07 08:12:23 2015 +0000 @@ -19,6 +19,7 @@ * THE SOFTWARE. */ #include "ESP8266.h" +#include "log.h" ESP8266::ESP8266(ArduinoSerial &uart): m_puart(&uart) { @@ -253,16 +254,17 @@ /*----------------------------------------------------------------------------*/ -uint32_t ESP8266::recvPkg(uint8_t *buffer, uint8_t buffer_size, uint32_t *data_len, uint32_t timeout, uint8_t *coming_mux_id) +uint32_t ESP8266::recvPkg(uint8_t *buffer, uint32_t buffer_size, uint32_t *data_len, uint32_t timeout, uint8_t *coming_mux_id) { String data; char a; int32_t index_PIPDcomma = -1; int32_t index_colon = -1; /* : */ int32_t index_comma = -1; /* , */ - int32_t len; - int8_t id; + int32_t len = -1; + int8_t id = -1; bool has_data = false; + logDebug("start recv pkg"); unsigned long start = millis(); while (millis() - start < timeout) { @@ -273,30 +275,45 @@ index_PIPDcomma = data.indexOf("+IPD,"); if (index_PIPDcomma != -1) { + logDebug("index_PIPDcomma found = %d", index_PIPDcomma); index_colon = data.indexOf(':', index_PIPDcomma + 5); 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); - if (index_comma != -1) { /* +IPD,id,len:data */ + 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(); + logDebug("id = %d", id); if (id < 0 || id > 4) { return 0; } + logDebug("len = %d", len); len = data.substring(index_comma + 1, index_colon).toInt(); + logDebug("len = %d", len); if (len <= 0) { return 0; } - + logDebug("has id"); } else { /* +IPD,len:data */ len = data.substring(index_PIPDcomma + 5, index_colon).toInt(); + logDebug("len = %d", len); if (len <= 0) { return 0; } + logDebug("no id"); } has_data = true; + logDebug("has_data true"); break; } } } + //logDebug("has_data = %u\r\n", has_data); + //logDebug("data2 = %s\r\n", data.c_str()); if (has_data) { start = millis(); @@ -305,6 +322,7 @@ a = m_puart->readChr(); data += a; } + //logDebug("data3 = %s\r\n", data.c_str()); if (data.length() >= index_colon + 1 + len) { if (data_len) { *data_len = len; @@ -312,15 +330,19 @@ if (index_comma != -1 && coming_mux_id) { *coming_mux_id = id; } + //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); + logDebug("ret = %u\r\n", ret); return ret; } } } - + logDebug("end recv pkg"); return 0; }