| | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | | * \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 |
| | | |
| | |
| | | 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 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 */ |
| | |
| | | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | | * \brief Start a timer in units of seconds. Before this function is called parameter |
| | | * \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 sec Seconds until expiration. |
| | | * \param ticks 32768Hz ticks until expiration. |
| | | * \param mode Timer work mode. |
| | | */ |
| | | /*************************************************************************************************/ |
| | | void WsfTimerStartSec(wsfTimer_t *pTimer, wsfTimerTicks_t sec, uint8_t mode); |
| | | void WsfTimerStartTick(wsfTimer_t *pTimer, uint32_t ticks, uint8_t mode); |
| | | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | |
| | | * \param mode Timer work mode. |
| | | */ |
| | | /*************************************************************************************************/ |
| | | void WsfTimerStartMs(wsfTimer_t *pTimer, wsfTimerTicks_t ms, uint8_t mode); |
| | | void WsfTimerStartMs(wsfTimer_t *pTimer, uint32_t ms, uint8_t mode); |
| | | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | |
| | | * \param ticks Number of ticks since last update. |
| | | */ |
| | | /*************************************************************************************************/ |
| | | void WsfTimerUpdate(wsfTimerTicks_t ticks); |
| | | void WsfTimerUpdate(uint32_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); |
| | | wsfTimer_t *WsfTimerServiceExpired(void); |
| | | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | | * \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 */ |
| | | uint32_t WsfTimerNextExpiration(void); |
| | | |
| | | #ifdef __cplusplus |
| | | }; |