#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 */
|