@@ -290,6 +290,8 @@ uint32_t ESP8266::recv(uint8_t *coming_mux_id, uint8_t *buffer, uint32_t buffer_
290
290
}
291
291
292
292
/* ----------------------------------------------------------------------------*/
293
+ /* +IPD,<id>,<len>:<data> */
294
+ /* +IPD,<len>:<data> */
293
295
294
296
uint32_t ESP8266::recvPkg (uint8_t *buffer, uint32_t buffer_size, uint32_t *data_len, uint32_t timeout, uint8_t *coming_mux_id)
295
297
{
@@ -301,85 +303,69 @@ uint32_t ESP8266::recvPkg(uint8_t *buffer, uint32_t buffer_size, uint32_t *data_
301
303
int32_t len = -1 ;
302
304
int8_t id = -1 ;
303
305
bool has_data = false ;
304
- // logDebug("start recv pkg");
306
+ uint32_t ret;
307
+ unsigned long start;
308
+ uint32_t i;
305
309
306
- unsigned long start = millis ();
310
+ if (buffer == NULL ) {
311
+ return 0 ;
312
+ }
313
+
314
+ start = millis ();
307
315
while (millis () - start < timeout) {
308
- while (m_puart->available () > 0 ) {
316
+ if (m_puart->available () > 0 ) {
309
317
a = m_puart->read ();
310
318
data += a;
311
319
}
312
320
313
321
index_PIPDcomma = data.indexOf (" +IPD," );
314
322
if (index_PIPDcomma != -1 ) {
315
- // logDebug("index_PIPDcomma found = %d", index_PIPDcomma);
316
323
index_colon = data.indexOf (' :' , index_PIPDcomma + 5 );
317
324
if (index_colon != -1 ) {
318
- // logDebug("data1 = %s\r\n", data.c_str());
319
- // logDebug("index_colon found = %d", index_colon);
320
-
321
325
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) {
326
328
id = data.substring (index_PIPDcomma + 5 , index_comma).toInt ();
327
- // logDebug("id = %d", id);
328
329
if (id < 0 || id > 4 ) {
329
330
return 0 ;
330
331
}
331
- // logDebug("len = %d", len);
332
332
len = data.substring (index_comma + 1 , index_colon).toInt ();
333
- // logDebug("len = %d", len);
334
333
if (len <= 0 ) {
335
334
return 0 ;
336
335
}
337
- // logDebug("has id");
338
336
} else { /* +IPD,len:data */
339
337
len = data.substring (index_PIPDcomma + 5 , index_colon).toInt ();
340
- // logDebug("len = %d", len);
341
338
if (len <= 0 ) {
342
339
return 0 ;
343
340
}
344
- // logDebug("no id");
345
341
}
346
342
has_data = true ;
347
- // logDebug("has_data true");
348
343
break ;
349
344
}
350
345
}
351
346
}
352
- // logDebug("has_data = %u\r\n", has_data);
353
- // logDebug("data2 = %s\r\n", data.c_str());
354
347
355
348
if (has_data) {
349
+ i = 0 ;
350
+ ret = len > buffer_size ? buffer_size : len;
356
351
start = millis ();
357
352
while (millis () - start < 3000 ) {
358
- while (m_puart->available () > 0 ) {
353
+ while (m_puart->available () > 0 && i < ret ) {
359
354
a = m_puart->read ();
360
- data + = a;
355
+ buffer[i++] = a;
361
356
}
362
- // logDebug("data3 = %s\r\n", data.c_str());
363
- if (data. length () >= index_colon + 1 + len) {
357
+ if (i == ret) {
358
+ rx_empty ();
364
359
if (data_len) {
365
360
*data_len = len;
366
361
}
367
362
if (index_comma != -1 && coming_mux_id) {
368
363
*coming_mux_id = id;
369
364
}
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);
378
365
return ret;
379
366
}
380
367
}
381
368
}
382
- // logDebug("end recv pkg");
383
369
return 0 ;
384
370
}
385
371
0 commit comments