pingResult callback is called one too many

ThorstenS
Posts: 5
Joined: Sun Sep 17, 2017 11:52 am

pingResult callback is called one too many

Postby ThorstenS » Sat Apr 27, 2019 11:02 am

I am using esp_ping_set_target() and ping_init(), and found that the callback pingResult() is called 5 times, when I set PING_TARGET_IP_ADDRESS_COUNT to 4. Is this a bug?

ThorstenS
Posts: 5
Joined: Sun Sep 17, 2017 11:52 am

Re: pingResult callback is called one too many

Postby ThorstenS » Sun Apr 28, 2019 6:26 am

By reading the source code of esp_ping.c, I noticed that for the last call of the callback, ping_err is set to PING_RES_FINISH. So the behaviour is intentional. Problem solved.

axellin
Posts: 31
Joined: Mon Sep 17, 2018 9:09 am

Re: pingResult callback is called one too many

Postby axellin » Thu Oct 31, 2019 12:40 am

I think it would be helpful if pingResult callback got a different msgType
in latest call (for PING_RES_FINISH case).
The benefit:
1. Can avoid print a duplicate print in latest pingResult callback
2. The application can easily know the ping is done

And the change is pretty simple:

diff --git a/components/lwip/apps/ping/esp_ping.c b/components/lwip/apps/ping/esp_ping.c
index 75b669412d7a..54703f812cfa 100644
--- a/components/lwip/apps/ping/esp_ping.c
+++ b/components/lwip/apps/ping/esp_ping.c
@@ -158,9 +158,11 @@ esp_err_t esp_ping_result(uint8_t res_val, uint16_t ping_len, uint32_t ping_time
}

if (ping_option_info->ping_res_fn) {
- ping_option_info->ping_res_fn(PING_TARGET_RES_FN, &ping_option_info->ping_res);
if (res_val == PING_RES_FINISH) {
+ ping_option_info->ping_res_fn(PING_TARGET_RES_FN_END, &ping_option_info->ping_res);
memset(&ping_option_info->ping_res, 0, sizeof(esp_ping_found));
+ } else {
+ ping_option_info->ping_res_fn(PING_TARGET_RES_FN, &ping_option_info->ping_res);
}
}

diff --git a/components/lwip/include/apps/esp_ping.h b/components/lwip/include/apps/esp_ping.h
index 238679528342..ae13e9878432 100644
--- a/components/lwip/include/apps/esp_ping.h
+++ b/components/lwip/include/apps/esp_ping.h
@@ -54,7 +54,8 @@ typedef enum {
PING_TARGET_RES_FN = 55, /**< ping result callback function */
PING_TARGET_RES_RESET = 56, /**< ping result statistic reset */
PING_TARGET_DATA_LEN = 57, /**< ping data length*/
- PING_TARGET_IP_TOS = 58 /**< ping QOS*/
+ PING_TARGET_IP_TOS = 58, /**< ping QOS*/
+ PING_TARGET_RES_FN_END = 59 /**< the latest ping result callback function */
} ping_target_id_t;

typedef enum {

Who is online

Users browsing this forum: No registered users and 2 guests