libamxp  1.4.0
Patterns C Implementation
amxp_timer.c File Reference
#include <stdlib.h>
#include <amxc/amxc.h>
#include <amxc/amxc_macros.h>
#include <amxp/amxp.h>

Go to the source code of this file.

Macros

#define _GNU_SOURCE
 

Functions

static void amxp_timer_free_it (amxc_llist_it_t *it)
 
static struct timeval amxp_timer_get_elapsed_time (void)
 
static void amxp_timer_update_current (struct timeval *elapsed)
 
static void amxp_timer_start_timer (amxp_timer_t *timer, struct timeval *smallest)
 
static bool amxp_timer_update (amxp_timer_t *timer, struct timeval *smallest, struct timeval *elapsed)
 
void amxp_timers_calculate (void)
 Caclulates the remaining time of all timers. More...
 
void amxp_timers_check (void)
 Check all timers and call the callback function when the timer is in Timer expired state. More...
 
void amxp_timers_enable (bool enable)
 Enable or disable all timers. More...
 
int amxp_timer_new (amxp_timer_t **timer, amxp_timer_cb_t cb, void *priv)
 Allocate and initializes a new timer. More...
 
void amxp_timer_delete (amxp_timer_t **timer)
 Deletes a timer. More...
 
int amxp_timer_set_interval (amxp_timer_t *timer, unsigned int msec)
 Sets the interval of a timer in milli seconds. More...
 
unsigned int amxp_timer_remaining_time (amxp_timer_t *timer)
 Get the remaining time of the timer. More...
 
int amxp_timer_start (amxp_timer_t *timer, unsigned int timeout_msec)
 Starts or resets a timer. More...
 
int amxp_timer_stop (amxp_timer_t *timer)
 Stops the timer. More...
 
amxp_timer_state_t amxp_timer_get_state (amxp_timer_t *timer)
 Get the timer's state. More...
 
 CONSTRUCTOR_LVL (101)
 
 DESTRUCTOR_LVL (101)
 

Variables

static amxc_llist_t timers
 
static struct timeval current
 
static bool timers_enabled = true
 

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 56 of file amxp_timer.c.

Function Documentation

◆ amxp_timer_free_it()

static void amxp_timer_free_it ( amxc_llist_it_t *  it)
static

Definition at line 69 of file amxp_timer.c.

69  {
70  amxp_timer_t* timer = amxc_llist_it_get_data(it, amxp_timer_t, it);
71  free(timer);
72 }
The timer type.
Definition: amxp_timer.h:163

◆ amxp_timer_get_elapsed_time()

static struct timeval amxp_timer_get_elapsed_time ( void  )
static

Definition at line 69 of file amxp_timer.c.

74  {
75  struct itimerval ti;
76  struct timeval elapsed = { 0, 0 };
77 
78  /* get the elapsed period */
79  if(!timerisset(&current)) {
80  return elapsed;
81  }
82 
83  getitimer(ITIMER_REAL, &ti);
84  if(timerisset(&ti.it_value)) {
85  timersub(&current, &ti.it_value, &elapsed);
86  } else {
87  elapsed = current;
88  }
89 
90  return elapsed;
91 }
static struct timeval current
Definition: amxp_timer.c:66

◆ amxp_timer_start_timer()

static void amxp_timer_start_timer ( amxp_timer_t timer,
struct timeval *  smallest 
)
static

Definition at line 101 of file amxp_timer.c.

101  {
102  timer->state = amxp_timer_running;
103  // *INDENT-OFF*
104  if(!timerisset(smallest) || timercmp(smallest, &timer->timer.it_value, >)) {
105  (*smallest) = timer->timer.it_value;
106  }
107  // *INDENT-ON*
108 }
@ amxp_timer_running
Definition: amxp_timer.h:151
struct itimerval timer
Definition: amxp_timer.h:165
amxp_timer_state_t state
Definition: amxp_timer.h:166

◆ amxp_timer_update()

static bool amxp_timer_update ( amxp_timer_t timer,
struct timeval *  smallest,
struct timeval *  elapsed 
)
static

Definition at line 110 of file amxp_timer.c.

112  {
113  timersub(&timer->timer.it_value, elapsed, &timer->timer.it_value);
114  if(!((timer->timer.it_value.tv_sec < 0) ||
115  !timerisset(&timer->timer.it_value))) {
116 
117  // *INDENT-OFF*
118  if(!timerisset(smallest) ||
119  timercmp(smallest, &timer->timer.it_value, >)) {
120  (*smallest) = timer->timer.it_value;
121  }
122  // *INDENT-ON*
123  return true;
124  }
125 
126  if(timer->state != amxp_timer_expired) {
127  timer->state = amxp_timer_expired;
128  }
129 
130  if(timerisset(&timer->timer.it_interval)) {
131  timer->timer.it_value = timer->timer.it_interval;
132  // *INDENT-OFF*
133  if(!timerisset(smallest) ||
134  timercmp(smallest, &timer->timer.it_value, >)) {
135  (*smallest) = timer->timer.it_value;
136  }
137  // *INDENT-ON*
138  return true;
139  }
140 
141  return false;
142 }
@ amxp_timer_expired
Definition: amxp_timer.h:152

◆ amxp_timer_update_current()

static void amxp_timer_update_current ( struct timeval *  elapsed)
static

Definition at line 93 of file amxp_timer.c.

93  {
94  timersub(&current, elapsed, &current);
95 
96  if(current.tv_sec < 0) {
97  timerclear(&current);
98  }
99 }

◆ CONSTRUCTOR_LVL()

CONSTRUCTOR_LVL ( 101  )

Definition at line 338 of file amxp_timer.c.

338  {
339  amxc_llist_init(&timers);
340 }
static amxc_llist_t timers
Definition: amxp_timer.c:65

◆ DESTRUCTOR_LVL()

DESTRUCTOR_LVL ( 101  )

Definition at line 342 of file amxp_timer.c.

342  {
343  amxc_llist_clean(&timers, amxp_timer_free_it);
344 }
static void amxp_timer_free_it(amxc_llist_it_t *it)
Definition: amxp_timer.c:69

Variable Documentation

◆ current

struct timeval current
static

Definition at line 65 of file amxp_timer.c.

◆ timers

amxc_llist_t timers
static

Definition at line 65 of file amxp_timer.c.

◆ timers_enabled

bool timers_enabled = true
static

Definition at line 67 of file amxp_timer.c.