Added API to get the timer state - running or not.

This commit is contained in:
Abhishek Sagar
2020-10-27 04:43:13 -07:00
parent e2c26d2e35
commit 3af6b3c3e2
4 changed files with 67 additions and 1 deletions

View File

@@ -55,6 +55,15 @@ timer_callback_wrapper(union sigval arg){
Timer_t *timer = (Timer_t *)(arg.sival_ptr); Timer_t *timer = (Timer_t *)(arg.sival_ptr);
if((timer->timer_state) == TIMER_RESUMED){
if(timer->sec_exp_timer != 0){
timer->timer_state = TIMER_RUNNING;
}
}
/* invoke the user provided callback fn */ /* invoke the user provided callback fn */
(timer->cb)(timer, timer->user_arg); (timer->cb)(timer, timer->user_arg);
} }
@@ -120,3 +129,42 @@ start_timer(Timer_t *timer){
timer_set_state(timer, TIMER_RUNNING); timer_set_state(timer, TIMER_RUNNING);
} }
unsigned long
timer_get_time_remaining_in_mill_sec(Timer_t *timer){
struct itimerspec remaining_time;
memset(&remaining_time, 0, sizeof(struct itimerspec));
timer_gettime(timer->posix_timer, &remaining_time);
return timespec_to_millisec(&remaining_time.it_value);
}
void
pause_timer(Timer_t *timer){
timer->time_remaining =
timer_get_time_remaining_in_mill_sec(timer);
timer_fill_itimerspec(&timer->ts.it_value, 0);
timer_fill_itimerspec(&timer->ts.it_interval, 0);
resurrect_timer(timer);
timer_set_state(timer, TIMER_PAUSED);
}
void
resume_timer(Timer_t *timer){
assert(timer_get_current_state(timer) == TIMER_PAUSED);
timer_fill_itimerspec(&timer->ts.it_value, timer->time_remaining);
timer_fill_itimerspec(&timer->ts.it_interval, timer->sec_exp_timer);
timer->time_remaining = 0;
resurrect_timer(timer);
timer_set_state(timer, TIMER_RESUMED);
}

View File

@@ -58,7 +58,7 @@ main(int argc, char **argv){
case 8: case 8:
//print_timer(timer); //print_timer(timer);
break; break;
deafault: ; default: ;
} }
} }
pause(); pause();

View File

@@ -302,3 +302,17 @@ print_timer(Timer_t *timer){
timer_get_current_state(timer)); timer_get_current_state(timer));
} }
bool
is_timer_running(Timer_t *timer){
TIMER_STATE_T timer_state;
timer_state = timer_get_current_state(timer);
if(timer_state == TIMER_RUNNING ||
timer_state == TIMER_RESUMED) {
return true;
}
return false;
}

View File

@@ -137,4 +137,8 @@ timespec_to_millisec(
void void
timer_fill_itimerspec(struct timespec *ts, timer_fill_itimerspec(struct timespec *ts,
unsigned long msec); unsigned long msec);
bool
is_timer_running(Timer_t *timer);
#endif /* __TIMER_WRAP__ */ #endif /* __TIMER_WRAP__ */