target: Use proper data types for timer callback
Change-Id: I5ca6da767f9e96180c43b179b2c682b1b7c98563 Signed-off-by: Marc Schink <openocd-dev@marcschink.de> Reviewed-on: http://openocd.zylin.com/4920 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz>reverse-resume-order
parent
f21c12abec
commit
17a052d6fe
|
@ -1460,7 +1460,8 @@ int target_register_trace_callback(int (*callback)(struct target *target,
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int target_register_timer_callback(int (*callback)(void *priv), int time_ms, int periodic, void *priv)
|
int target_register_timer_callback(int (*callback)(void *priv),
|
||||||
|
unsigned int time_ms, enum target_timer_type type, void *priv)
|
||||||
{
|
{
|
||||||
struct target_timer_callback **callbacks_p = &target_timer_callbacks;
|
struct target_timer_callback **callbacks_p = &target_timer_callbacks;
|
||||||
|
|
||||||
|
@ -1475,7 +1476,7 @@ int target_register_timer_callback(int (*callback)(void *priv), int time_ms, int
|
||||||
|
|
||||||
(*callbacks_p) = malloc(sizeof(struct target_timer_callback));
|
(*callbacks_p) = malloc(sizeof(struct target_timer_callback));
|
||||||
(*callbacks_p)->callback = callback;
|
(*callbacks_p)->callback = callback;
|
||||||
(*callbacks_p)->periodic = periodic;
|
(*callbacks_p)->type = type;
|
||||||
(*callbacks_p)->time_ms = time_ms;
|
(*callbacks_p)->time_ms = time_ms;
|
||||||
(*callbacks_p)->removed = false;
|
(*callbacks_p)->removed = false;
|
||||||
|
|
||||||
|
@ -1625,7 +1626,7 @@ static int target_call_timer_callback(struct target_timer_callback *cb,
|
||||||
{
|
{
|
||||||
cb->callback(cb->priv);
|
cb->callback(cb->priv);
|
||||||
|
|
||||||
if (cb->periodic)
|
if (cb->type == TARGET_TIMER_TYPE_PERIODIC)
|
||||||
return target_timer_callback_periodic_restart(cb, now);
|
return target_timer_callback_periodic_restart(cb, now);
|
||||||
|
|
||||||
return target_unregister_timer_callback(cb->callback, cb->priv);
|
return target_unregister_timer_callback(cb->callback, cb->priv);
|
||||||
|
@ -1659,7 +1660,7 @@ static int target_call_timer_callbacks_check_time(int checktime)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool call_it = (*callback)->callback &&
|
bool call_it = (*callback)->callback &&
|
||||||
((!checktime && (*callback)->periodic) ||
|
((!checktime && (*callback)->type == TARGET_TIMER_TYPE_PERIODIC) ||
|
||||||
timeval_compare(&now, &(*callback)->when) >= 0);
|
timeval_compare(&now, &(*callback)->when) >= 0);
|
||||||
|
|
||||||
if (call_it)
|
if (call_it)
|
||||||
|
|
|
@ -314,10 +314,15 @@ struct target_trace_callback {
|
||||||
int (*callback)(struct target *target, size_t len, uint8_t *data, void *priv);
|
int (*callback)(struct target *target, size_t len, uint8_t *data, void *priv);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum target_timer_type {
|
||||||
|
TARGET_TIMER_TYPE_ONESHOT,
|
||||||
|
TARGET_TIMER_TYPE_PERIODIC
|
||||||
|
};
|
||||||
|
|
||||||
struct target_timer_callback {
|
struct target_timer_callback {
|
||||||
int (*callback)(void *priv);
|
int (*callback)(void *priv);
|
||||||
int time_ms;
|
unsigned int time_ms;
|
||||||
int periodic;
|
enum target_timer_type type;
|
||||||
bool removed;
|
bool removed;
|
||||||
struct timeval when;
|
struct timeval when;
|
||||||
void *priv;
|
void *priv;
|
||||||
|
@ -385,7 +390,7 @@ int target_call_trace_callbacks(struct target *target, size_t len, uint8_t *data
|
||||||
* or much more rarely than specified
|
* or much more rarely than specified
|
||||||
*/
|
*/
|
||||||
int target_register_timer_callback(int (*callback)(void *priv),
|
int target_register_timer_callback(int (*callback)(void *priv),
|
||||||
int time_ms, int periodic, void *priv);
|
unsigned int time_ms, enum target_timer_type type, void *priv);
|
||||||
int target_unregister_timer_callback(int (*callback)(void *priv), void *priv);
|
int target_unregister_timer_callback(int (*callback)(void *priv), void *priv);
|
||||||
int target_call_timer_callbacks(void);
|
int target_call_timer_callbacks(void);
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue