#ifndef WSF_TIMER_H #define WSF_TIMER_H #include "wsf_os.h" #ifdef __cplusplus extern "C" { #endif /************************************************************************************************** Macros **************************************************************************************************/ #define WSF_TIMER_ONE_SHOT 0 #define WSF_TIMER_PERIODIC 1 /************************************************************************************************** Data Types **************************************************************************************************/ /*! \brief Timer structure */ typedef struct wsfTimer_tag { struct wsfTimer_tag *pNext; /*!< \brief pointer to next timer in queue */ wsfMsgHdr_t msg; /*!< \brief application-defined timer event parameters */ uint32_t ticks; /*!< \brief number of ticks until expiration */ uint32_t count; uint8_t mode; /*!< \brief one shot or periodic */ wsfHandlerId_t handlerId; /*!< \brief event handler for this timer */ bool_t isStarted; /*!< \brief TRUE if timer has been started */ } wsfTimer_t; /************************************************************************************************** Function Declarations **************************************************************************************************/ /*************************************************************************************************/ /*! * \brief Initialize the timer service. This function should only be called once * upon system initialization. */ /*************************************************************************************************/ void WsfTimerInit(void); /*************************************************************************************************/ /*! * \brief Start a timer in units of 32768Hz ticks. Before this function is called parameter * pTimer->handlerId must be set to the event handler for this timer and parameter * pTimer->msg must be set to any application-defined timer event parameters. * * \param pTimer Pointer to timer. * \param ticks 32768Hz ticks until expiration. * \param mode Timer work mode. */ /*************************************************************************************************/ void WsfTimerStartTick(wsfTimer_t *pTimer, uint32_t ticks, uint8_t mode); /*************************************************************************************************/ /*! * \brief Start a timer in units of milliseconds. * * \param pTimer Pointer to timer. * \param ms Milliseconds until expiration. * \param mode Timer work mode. */ /*************************************************************************************************/ void WsfTimerStartMs(wsfTimer_t *pTimer, uint32_t ms, uint8_t mode); /*************************************************************************************************/ /*! * \brief Stop a timer. * * \param pTimer Pointer to timer. */ /*************************************************************************************************/ void WsfTimerStop(wsfTimer_t *pTimer); /*************************************************************************************************/ /*! * \brief Update the timer service with the number of elapsed ticks. This function is * typically called only from timer porting code. * * \param ticks Number of ticks since last update. */ /*************************************************************************************************/ void WsfTimerUpdate(uint32_t ticks); /*************************************************************************************************/ /*! * \brief Service expired timers for the given task. This function is typically called only * WSF OS porting code. * * \return Pointer to next expired timer or NULL if there are no expired timers. */ /*************************************************************************************************/ wsfTimer_t *WsfTimerServiceExpired(void); uint32_t WsfTimerNextExpiration(void); #ifdef __cplusplus }; #endif #endif /* WSF_TIMER_H */