Skip to content

Commit 75bcf8a

Browse files
author
shennongmin
committed
Fixed recvPkg bug: cannot receive 0x00. Now, raw data will be stored in buffer.
Signed-off-by: shennongmin <[email protected]>
1 parent 13cfd12 commit 75bcf8a

File tree

1 file changed

+19
-33
lines changed

1 file changed

+19
-33
lines changed

ESP8266.cpp

+19-33
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,8 @@ uint32_t ESP8266::recv(uint8_t *coming_mux_id, uint8_t *buffer, uint32_t buffer_
290290
}
291291

292292
/*----------------------------------------------------------------------------*/
293+
/* +IPD,<id>,<len>:<data> */
294+
/* +IPD,<len>:<data> */
293295

294296
uint32_t ESP8266::recvPkg(uint8_t *buffer, uint32_t buffer_size, uint32_t *data_len, uint32_t timeout, uint8_t *coming_mux_id)
295297
{
@@ -301,85 +303,69 @@ uint32_t ESP8266::recvPkg(uint8_t *buffer, uint32_t buffer_size, uint32_t *data_
301303
int32_t len = -1;
302304
int8_t id = -1;
303305
bool has_data = false;
304-
//logDebug("start recv pkg");
306+
uint32_t ret;
307+
unsigned long start;
308+
uint32_t i;
305309

306-
unsigned long start = millis();
310+
if (buffer == NULL) {
311+
return 0;
312+
}
313+
314+
start = millis();
307315
while (millis() - start < timeout) {
308-
while(m_puart->available() > 0) {
316+
if(m_puart->available() > 0) {
309317
a = m_puart->read();
310318
data += a;
311319
}
312320

313321
index_PIPDcomma = data.indexOf("+IPD,");
314322
if (index_PIPDcomma != -1) {
315-
//logDebug("index_PIPDcomma found = %d", index_PIPDcomma);
316323
index_colon = data.indexOf(':', index_PIPDcomma + 5);
317324
if (index_colon != -1) {
318-
//logDebug("data1 = %s\r\n", data.c_str());
319-
//logDebug("index_colon found = %d", index_colon);
320-
321325
index_comma = data.indexOf(',', index_PIPDcomma + 5);
322-
//logDebug("index_comma found = %d", index_comma);
323-
324-
if (index_comma != -1 && index_comma < index_colon) { /* +IPD,id,len:data */
325-
//logDebug("id = %d", id);
326+
/* +IPD,id,len:data */
327+
if (index_comma != -1 && index_comma < index_colon) {
326328
id = data.substring(index_PIPDcomma + 5, index_comma).toInt();
327-
//logDebug("id = %d", id);
328329
if (id < 0 || id > 4) {
329330
return 0;
330331
}
331-
//logDebug("len = %d", len);
332332
len = data.substring(index_comma + 1, index_colon).toInt();
333-
//logDebug("len = %d", len);
334333
if (len <= 0) {
335334
return 0;
336335
}
337-
//logDebug("has id");
338336
} else { /* +IPD,len:data */
339337
len = data.substring(index_PIPDcomma + 5, index_colon).toInt();
340-
//logDebug("len = %d", len);
341338
if (len <= 0) {
342339
return 0;
343340
}
344-
//logDebug("no id");
345341
}
346342
has_data = true;
347-
//logDebug("has_data true");
348343
break;
349344
}
350345
}
351346
}
352-
//logDebug("has_data = %u\r\n", has_data);
353-
//logDebug("data2 = %s\r\n", data.c_str());
354347

355348
if (has_data) {
349+
i = 0;
350+
ret = len > buffer_size ? buffer_size : len;
356351
start = millis();
357352
while (millis() - start < 3000) {
358-
while(m_puart->available() > 0) {
353+
while(m_puart->available() > 0 && i < ret) {
359354
a = m_puart->read();
360-
data += a;
355+
buffer[i++] = a;
361356
}
362-
//logDebug("data3 = %s\r\n", data.c_str());
363-
if (data.length() >= index_colon + 1 + len) {
357+
if (i == ret) {
358+
rx_empty();
364359
if (data_len) {
365360
*data_len = len;
366361
}
367362
if (index_comma != -1 && coming_mux_id) {
368363
*coming_mux_id = id;
369364
}
370-
//logDebug("len = %d", len);
371-
//logDebug("buffer_size = %d", buffer_size);
372-
uint32_t ret = len > buffer_size ? buffer_size : len;
373-
374-
memcpy(buffer,
375-
data.substring(index_colon + 1, index_colon + 1 + len).c_str(),
376-
ret);
377-
//logDebug("ret = %u\r\n", ret);
378365
return ret;
379366
}
380367
}
381368
}
382-
//logDebug("end recv pkg");
383369
return 0;
384370
}
385371

0 commit comments

Comments
 (0)