/*************************************************************************************************/
|
/*!
|
* \file wsf_timer.h
|
*
|
* \brief Timer service.
|
*
|
* Copyright (c) 2009-2019 Arm Ltd. All Rights Reserved.
|
*
|
* Copyright (c) 2019-2020 Packetcraft, Inc.
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
/*************************************************************************************************/
|
#ifndef WSF_TIMER_H
|
#define WSF_TIMER_H
|
|
#include "wsf_os.h"
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
/*! \addtogroup WSF_TIMER_API
|
* \{ */
|
|
/**************************************************************************************************
|
Macros
|
**************************************************************************************************/
|
|
#ifndef WSF_MS_PER_TICK
|
/*! \brief Default milliseconds per tick rate */
|
#define WSF_MS_PER_TICK 10
|
#endif
|
|
#define WSF_TIMER_ONE_SHOT 0
|
#define WSF_TIMER_PERIODIC 1
|
|
/**************************************************************************************************
|
Data Types
|
**************************************************************************************************/
|
|
/*! \brief Timer ticks data type */
|
typedef uint32_t wsfTimerTicks_t;
|
|
/*! \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 */
|
wsfTimerTicks_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 seconds. 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 sec Seconds until expiration.
|
* \param mode Timer work mode.
|
*/
|
/*************************************************************************************************/
|
void WsfTimerStartSec(wsfTimer_t *pTimer, wsfTimerTicks_t sec, 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, wsfTimerTicks_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(wsfTimerTicks_t ticks);
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Service expired timers for the given task. This function is typically called only
|
* WSF OS porting code.
|
*
|
* \param taskId OS Task ID of task servicing timers.
|
*
|
* \return Pointer to next expired timer or NULL if there are no expired timers.
|
*/
|
/*************************************************************************************************/
|
wsfTimer_t *WsfTimerServiceExpired(wsfTaskId_t taskId);
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Check if there is an active timer and if there is enough time to
|
* go to sleep.
|
*/
|
/*************************************************************************************************/
|
uint8_t WsfTimerSleepCheck(uint32_t *sleep_ms);
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Function for checking if there is an active timer and if there is enough time to
|
* go to sleep and going to sleep.
|
*/
|
/*************************************************************************************************/
|
void WsfTimerUpdateTicks(void);
|
|
/*! \} */ /* WSF_TIMER_API */
|
|
#ifdef __cplusplus
|
};
|
#endif
|
|
#endif /* WSF_TIMER_H */
|