Refer to the Online Manual For Up to Date Information
Description
- The netconfd-pro process supports timer callbacks.
- The minimum interval is 1 second.
- The interval units are seconds.
- One-time-only and periodic timers are supported
- The definitions for timer callbacks are in agt/agt_timer.h
- Timer APIs are
- agt_timer_create
- agt_timer_restart
- agt_timer_delete
Callback template
/* timer callback function * * Process the timer expired event * * INPUTS: * timer_id == timer identifier * cookie == context pointer, such as a session control block, * passed to agt_timer_set function (may be NULL) * * RETURNS: * 0 == normal exit * -1 == error exit, delete timer upon return */ typedef int (*agt_timer_fn_t) (uint32 timer_id, void *cookie);
Callback example
#include "procdefs.h" #include "agt_timer.h" static uint32 my_timer_id = 0; static int my_timer (uint32 timer_id, void *cookie) { (void)timer_id; // used if callback supports multiple timers my_struct_t *my_struct = (my_struct_t * )cookie; check_stuff(my_struct); return 0; } static status_t some_init_fn (void) { status_t res = agt_timer_create(10, // seconds (interval) true, // is_periodic my_timer, // callback fn my_context_struct, // example cookie &my_timer_id); // save timer ID for cleanup return res; } static void some_cleanup_fn (void) { agt_timer_delete(my_timer_id); }
API Definitions
/******************************************************************** * FUNCTION agt_timer_create * * Malloc and start a new timer control block * * INPUTS: * seconds == number of seconds to wait between polls * is_periodic == TRUE if periodic timer * FALSE if a 1-event timer * timer_fn == address of callback function to invoke when * the timer poll event occurs * cookie == address of user cookie to pass to the timer_fn * ret_timer_id == address of return timer ID * * OUTPUTS: * *ret_timer_id == timer ID for the allocated timer, * if the return value is NO_ERR * * RETURNS: * NO_ERR if all okay, the minimum spare requests will be malloced *********************************************************************/ extern status_t agt_timer_create (uint32 seconds, boolean is_periodic, agt_timer_fn_t timer_fn, void *cookie, uint32 *ret_timer_id); /******************************************************************** * FUNCTION agt_timer_restart * * Restart a timer with a new timeout value. * If this is a periodic timer, then the interval * will be changed to the new value. Otherwise * a 1-shot timer will just be reset to the new value * * INPUTS: * timer_id == timer ID to reset * seconds == new timeout value * * RETURNS: * status, NO_ERR if all okay, *********************************************************************/ extern status_t agt_timer_restart (uint32 timer_id, uint32 seconds); /******************************************************************** * FUNCTION agt_timer_delete * * Remove and delete a timer control block * periodic timers need to be deleted to be stopped * 1-shot timers will be deleted automatically after * they expire and the callback is invoked * * INPUTS: * timer_id == timer ID to destroy * *********************************************************************/ extern void agt_timer_delete (uint32 timer_id);