Răsfoiți Sursa

fix ping bug

MarcusXing 7 ani în urmă
părinte
comite
b81bbf4077
1 a modificat fișierele cu 21 adăugiri și 9 ștergeri
  1. 21 9
      at_socket_ec20.c

+ 21 - 9
at_socket_ec20.c

@@ -847,22 +847,34 @@ static void ec20_socket_set_event_cb(at_socket_evt_t event, at_evt_cb_t cb)
 static void urc_ping_func(const char *data, rt_size_t size)
 {
     static int icmp_seq = 0;
+    int i, j = 0;
     int result, recv_len, time, ttl;
+    int sent, rcvd, lost, min, max, avg;
     char dst_ip[16] = { 0 };
 
     RT_ASSERT(data);
 
-    sscanf(data, "+QPING: %d,%[^,],%d,%d,%d", &result, dst_ip, &recv_len, &time, &ttl);
-
-    switch(result)
+    for (i=0;i<size;i++)
+    {
+        if(*(data+i) == '.')
+            j++;
+    }
+    if (j != 0)
+    {
+        sscanf(data, "+QPING: %d,%[^,],%d,%d,%d", &result, dst_ip, &recv_len, &time, &ttl);
+        if (result == 0)
+            LOG_I("%d bytes from %s icmp_seq=%d ttl=%d time=%d ms", recv_len, dst_ip, icmp_seq++, ttl, time);
+    }
+    else
+    {
+        sscanf(data, "+QPING: %d,%d,%d,%d,%d,%d,%d", &result, &sent, &rcvd, &lost, &min, &max, &avg);
+        if (result == 0)
+            LOG_I("%d sent %d received %d lost, min=%dms max=%dms average=%dms", sent, rcvd, lost, min, max, avg);
+    }
+    if (result != 0)
     {
-    case 0:
-        rt_kprintf("%d bytes from %s icmp_seq=%d ttl=%d time=%d ms\n", recv_len, dst_ip, icmp_seq++, ttl, time);
-        break;
-    default:
-        rt_kprintf("ping: ");
+        LOG_E("ping: ");
         at_tcp_ip_errcode_parse(result);
-        break;
     }
 
 }