@@ -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
294296uint32_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 (' :' 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 (' ,' 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