You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
5.0 KiB
C
124 lines
5.0 KiB
C
/*
|
|
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
|
|
|
|
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.
|
|
*/
|
|
|
|
/**
|
|
* @file osal_vt.h
|
|
* @brief OSAL Virtual Timers module header.
|
|
*
|
|
* @addtogroup OSAL_VT
|
|
* @{
|
|
*/
|
|
|
|
#ifndef _OSAL_VT_H_
|
|
#define _OSAL_VT_H_
|
|
|
|
/*===========================================================================*/
|
|
/* Module constants. */
|
|
/*===========================================================================*/
|
|
|
|
/*===========================================================================*/
|
|
/* Module pre-compile time settings. */
|
|
/*===========================================================================*/
|
|
|
|
/*===========================================================================*/
|
|
/* Derived constants and error checks. */
|
|
/*===========================================================================*/
|
|
|
|
/*===========================================================================*/
|
|
/* Module data structures and types. */
|
|
/*===========================================================================*/
|
|
|
|
/**
|
|
* @brief Type of a Virtual Timer callback function.
|
|
*/
|
|
typedef void (*vtfunc_t)(void *);
|
|
|
|
/**
|
|
* @brief Type of a Virtual Timer structure.
|
|
*/
|
|
typedef struct virtual_timer virtual_timer_t;
|
|
|
|
/**
|
|
* @brief Virtual timers list header.
|
|
* @note The content of this structure is not part of the API and should
|
|
* not be relied upon. Implementers may define this structure in
|
|
* an entirely different way.
|
|
* @note The delta list is implemented as a double link bidirectional list
|
|
* in order to make the unlink time constant, the reset of a virtual
|
|
* timer is often used in the code.
|
|
*/
|
|
typedef struct {
|
|
virtual_timer_t *vt_next; /**< @brief Next timer in the timers
|
|
list. */
|
|
virtual_timer_t *vt_prev; /**< @brief Last timer in the timers
|
|
list. */
|
|
sysinterval_t vt_delta; /**< @brief Must be initialized to -1. */
|
|
volatile systime_t vt_systime; /**< @brief System Time counter. */
|
|
} virtual_timers_list_t;
|
|
|
|
/**
|
|
* @extends virtual_timers_list_t
|
|
*
|
|
* @brief Virtual Timer descriptor structure.
|
|
* @note The content of this structure is not part of the API and should
|
|
* not be relied upon. Implementers may define this structure in
|
|
* an entirely different way.
|
|
*/
|
|
struct virtual_timer {
|
|
virtual_timer_t *vt_next; /**< @brief Next timer in the timers
|
|
list. */
|
|
virtual_timer_t *vt_prev; /**< @brief Previous timer in the timers
|
|
list. */
|
|
sysinterval_t vt_delta; /**< @brief Time delta before timeout. */
|
|
vtfunc_t vt_func; /**< @brief Timer callback function
|
|
pointer. */
|
|
void *vt_par; /**< @brief Timer callback function
|
|
parameter. */
|
|
};
|
|
|
|
/*===========================================================================*/
|
|
/* Module macros. */
|
|
/*===========================================================================*/
|
|
|
|
/*===========================================================================*/
|
|
/* External declarations. */
|
|
/*===========================================================================*/
|
|
|
|
#if !defined(__DOXYGEN__)
|
|
extern virtual_timers_list_t vtlist;
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
void vtInit(void);
|
|
bool vtIsArmedI(virtual_timer_t *vtp);
|
|
void vtDoTickI(void);
|
|
void vtSetI(virtual_timer_t *vtp, sysinterval_t timeout,
|
|
vtfunc_t vtfunc, void *par);
|
|
void vtResetI(virtual_timer_t *vtp);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/*===========================================================================*/
|
|
/* Module inline functions. */
|
|
/*===========================================================================*/
|
|
|
|
#endif /* _OSAL_VT_H_ */
|
|
|
|
/** @} */
|