diff --git a/include/dap_common.h b/include/dap_common.h index cea9c2fa35461f3bf6966ceb4c1f6843d90c738c..c858ac97cad8015356e75934906b52f54cb41fe6 100755 --- a/include/dap_common.h +++ b/include/dap_common.h @@ -235,10 +235,11 @@ typedef struct dap_log_history_str_s { #define DAP_INTERVAL_TIMERS_MAX 15 -typedef void (*dap_timer_callback_t)(void); +typedef void (*dap_timer_callback_t)(void *param); typedef struct dap_timer_interface { void *timer; dap_timer_callback_t callback; + void *param; } dap_timer_interface_t; #ifdef __cplusplus @@ -385,7 +386,7 @@ size_t dap_bin2hex(char *a_out, const void *a_in, size_t a_len); void dap_digit_from_string(const char *num_str, void *raw, size_t raw_len); void dap_digit_from_string2(const char *num_str, void *raw, size_t raw_len); -void *dap_interval_timer_create(unsigned int a_msec, dap_timer_callback_t a_callback); +void *dap_interval_timer_create(unsigned int a_msec, dap_timer_callback_t a_callback, void *a_param); int dap_interval_timer_delete(void *a_timer); #ifdef __MINGW32__ diff --git a/src/dap_common.c b/src/dap_common.c index 1e27d944c2054888655dee9721d625dbcac5f2ba..cfbd52714978753e5f265e919c3f617aa5a9c1fd 100755 --- a/src/dap_common.c +++ b/src/dap_common.c @@ -827,12 +827,12 @@ static int s_timer_find(void *a_timer) static void CALLBACK s_win_callback(PVOID a_arg, BOOLEAN a_always_true) { UNUSED(a_always_true); - s_timers[(int)a_arg].callback(); + s_timers[(int)a_arg].callback(s_timers[(int)a_arg].param); } #else static void s_posix_callback(union sigval a_arg) { - s_timers[a_arg.sival_int].callback(); + s_timers[a_arg.sival_int].callback(s_timers[a_arg.sival_int].param); } #endif @@ -842,7 +842,7 @@ static void s_posix_callback(union sigval a_arg) * \param a_callback Function to be called with timer period * \return pointer to timer object if success, otherwise return NULL */ -void *dap_interval_timer_create(unsigned int a_msec, dap_timer_callback_t a_callback) +void *dap_interval_timer_create(unsigned int a_msec, dap_timer_callback_t a_callback, void *a_param) { if (s_timers_count == DAP_INTERVAL_TIMERS_MAX) { return NULL; @@ -876,6 +876,7 @@ void *dap_interval_timer_create(unsigned int a_msec, dap_timer_callback_t a_call #endif s_timers[s_timers_count].timer = (void *)l_timer; s_timers[s_timers_count].callback = a_callback; + s_timers[s_timers_count].param = a_param; s_timers_count++; #ifdef _WIN32 LeaveCriticalSection(&s_timers_lock);