marian-craciunescu / ESP32Ping

Ping library for ESP32 Arduino core

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

PingClass::ping() return value - beautify the code

adynis opened this issue · comments

Right now the function PingClass::ping() from ESP32Ping.cpp returns true if ping_start(...) is true, but also computes a _success in order to return a value. I consider this strange.

My proposal:
Since we decide in the callback function when it is "success" and when not, My proposal is to ignore what "ping_start" returns ("true if at least 1 ping had a response", accordingly to issue #8 ) and just return true if _success > 0 (It's the same, but differently written)

Below you can find some examples of results for pinging a valid host and an invalid host, BEFORE issue #8 and issue #9 and AFTER resolving them by merging pr #15 .


Ping a valid host:


bool ret;
void loop() 
{
   
    ret = Ping.ping("www.google.ro",5);
    Serial.printf("\nping was: %s and time was: %f\n", ret?"ok":"false", Ping.averageTime());
    Serial.println("");
    delay(5000);

}

Results BEFORE

Connected to the WiFi network
[I][ping.cpp:316] ping_start(): PING 172.217.16.99: 32 data bytes
[D][ping.cpp:214] ping_recv(): 60 bytes from 236.151.249.63: icmp_seq=1 time=26.576 ms
[D][ping.cpp:214] ping_recv(): 60 bytes from 236.151.249.63: icmp_seq=2 time=21.030 ms
[D][ping.cpp:214] ping_recv(): 60 bytes from 236.151.249.63: icmp_seq=3 time=24.753 ms
[D][ping.cpp:214] ping_recv(): 60 bytes from 236.151.249.63: icmp_seq=4 time=20.817 ms
[D][ping.cpp:214] ping_recv(): 60 bytes from 236.151.249.63: icmp_seq=5 time=20.580 ms
[I][ping.cpp:333] ping_start(): 5 packets transmitted, 5 packets received, 0.0% packet loss  
[I][ping.cpp:337] ping_start(): round-trip min/avg/max/stddev = 20.580/22.751/26.576/2.452 ms

DEBUG: ping reply
        total_count = 10
        resp_time = 0.000000
        seqno = 98735
        timeout_count = 10
        bytes = 1073791734
        total_bytes = 1
        total_time = 22.751202
        ping_err = 0

ping was: ok and time was: 0.000000

Results AFTER

[I][ping.cpp:316] ping_start(): PING 172.217.19.99: 32 data bytes
[D][ping.cpp:214] ping_recv(): 60 bytes from 172.217.19.99: icmp_seq=1 time=20.324 ms
[D][ping.cpp:214] ping_recv(): 60 bytes from 172.217.19.99: icmp_seq=2 time=23.946 ms
[D][ping.cpp:214] ping_recv(): 60 bytes from 172.217.19.99: icmp_seq=3 time=21.437 ms
[D][ping.cpp:214] ping_recv(): 60 bytes from 172.217.19.99: icmp_seq=4 time=20.796 ms
[D][ping.cpp:214] ping_recv(): 60 bytes from 172.217.19.99: icmp_seq=5 time=20.459 ms
[I][ping.cpp:334] ping_start(): 5 packets transmitted, 5 packets received, 0.0% packet loss
[I][ping.cpp:339] ping_start(): round-trip min/avg/max/stddev = 20.324/21.392/23.946/1.334 ms

DEBUG: ping reply
        total_count = 5
        resp_time = 21.392401
        seqno = 0
        timeout_count = 0
        bytes = 32
        total_bytes = 160
        total_time = 5.131000
        ping_err = 0
Avg resp time 21.392401 ms

ping was: ok and time was: 21.392401

Ping an invalid host:


IPAddress ip (192, 168, 99, 99); // The remote ip to ping
bool ret;
void loop() 
{
   
    ret = Ping.ping(ip,10);
    Serial.printf("\nping was: %s and time was: %f\n", ret?"ok":"false", Ping.averageTime());
    Serial.println("");
    delay(5000);

}

Results BEFORE

[I][ping.cpp:316] ping_start(): PING 192.168.99.99: 32 data bytes
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 1
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 2
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 3
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 4
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 5
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 6
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 7
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 8
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 9
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 10
[I][ping.cpp:333] ping_start(): 10 packets transmitted, 0 packets received, 100.0% packet loss
[I][ping.cpp:337] ping_start(): round-trip min/avg/max/stddev = 1000000000.000/0.000/0.000/nan ms

DEBUG: ping reply
        total_count = 10
        resp_time = 2.129214
        seqno = 1074307378
        timeout_count = 10
        bytes = -2146620848
        total_bytes = 1
        total_time = 0.000000
        ping_err = 0

ping was: ok and time was: 2.129214

Results AFTER

Connected to the WiFi network
[I][ping.cpp:316] ping_start(): PING 192.168.99.99: 32 data bytes
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 1
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 2
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 3
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 4
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 5
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 6
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 7
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 8
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 9
[D][ping.cpp:225] ping_recv(): Request timeout for icmp_seq 10
[I][ping.cpp:334] ping_start(): 10 packets transmitted, 0 packets received, 100.0% packet loss
[I][ping.cpp:339] ping_start(): round-trip min/avg/max/stddev = 1000000000.000/0.000/0.000/nan ms

DEBUG: ping reply
        total_count = 10
        resp_time = 0.000000
        seqno = 0
        timeout_count = 10
        bytes = 32
        total_bytes = 320
        total_time = 20.038000
        ping_err = 10
Avg resp time 0.000000 ms

ping was: false and time was: 0.000000

Issue is resolved after merging pr #15