diff options
author | Kevin P. Fleming <kpfleming@digium.com> | 2008-06-12 14:21:32 +0000 |
---|---|---|
committer | Kevin P. Fleming <kpfleming@digium.com> | 2008-06-12 14:21:32 +0000 |
commit | 191081e45fd7275f14f6736d58da63e96dd1dd75 (patch) | |
tree | 795bb158b580397298b7ce425e048bd0925bd0e1 /include/asterisk/timing.h | |
parent | db960fc83088080ab5177dc020a0b3230ca614e3 (diff) |
add infrastructure so that timing source can be a loadable module... next steps are to convert channel.c and chan_iax2.c to use this new API, and to move all the DAHDI-specific timing source code into a new res_timing_dahdi module
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@122062 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'include/asterisk/timing.h')
-rw-r--r-- | include/asterisk/timing.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/include/asterisk/timing.h b/include/asterisk/timing.h new file mode 100644 index 000000000..426eb8dbd --- /dev/null +++ b/include/asterisk/timing.h @@ -0,0 +1,112 @@ +/* + * Asterisk -- An open source telephony toolkit. + * + * Copyright (C) 2008, Digium, Inc. + * + * Kevin P. Fleming <kpfleming@digium.com> + * + * See http://www.asterisk.org for more information about + * the Asterisk project. Please do not directly contact + * any of the maintainers of this project for assistance; + * the project provides a web site, mailing lists and IRC + * channels for your use. + * + * This program is free software, distributed under the terms of + * the GNU General Public License Version 2. See the LICENSE file + * at the top of the source tree. + */ + +/*! + \file timing.h + \brief Timing source management + \author Kevin P. Fleming <kpfleming@digium.com> + + Portions of Asterisk require a timing source, a periodic trigger + for media handling activities. The functions in this file allow + a loadable module to provide a timing source for Asterisk and its + modules, so that those modules can request a 'timing handle' when + they require one. These handles are file descriptors, which can be + used with select() or poll(). + + The timing source used by Asterisk must provide the following + features: + + 1) Periodic triggers, with a configurable interval (specified in + millisconds). + + 2) Multiple outstanding triggers, each of which must be 'acked' + to clear it. Triggers must also be 'ackable' in quantity. + + 3) Continuous trigger mode, which when enabled causes every call + to poll() on the timer handle to immediately return. + + 4) Multiple 'event types', so that the code using the timer can + know whether the wakeup it received was due to a periodic trigger + or a continuous trigger. + */ + +#ifndef _ASTERISK_TIMING_H +#define _ASTERISK_TIMING_H + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +enum ast_timing_event { + AST_TIMING_EVENT_EXPIRED = 1, + AST_TIMING_EVENT_CONTINUOUS = 2, +}; + +struct ast_timing_functions { + int (*timer_open)(unsigned int rate); + void (*timer_close)(int handle); + void (*timer_ack)(int handle, unsigned int quantity); + int (*timer_enable_continuous)(int handle); + int (*timer_disable_continuous)(int handle); + enum ast_timing_event (*timer_get_event)(int handle); +}; + +/*! + \brief Install a set of timing functions. + \param funcs An instance of the \c ast_timing_functions structure with pointers + to the functions provided by the timing implementation. + \retval NULL on failure, or a handle to be passed to + ast_uninstall_timing_functions() on success + */ +void *ast_install_timing_functions(struct ast_timing_functions *funcs); + +/*! + \brief Uninstall a previously-installed set of timing functions. + \param handle The handle returned from a prior successful call to + ast_install_timing_functions(). + \retval none + */ +void ast_uninstall_timing_functions(void *handle); + +/*! + \brief Open a timer handle. + \param rate The rate at which the timer should trigger. + \retval -1 on failure, or a positive integer on success + */ +int ast_timer_open(unsigned int rate); + +/*! + \brief Close a previously-opened timer handle. + \param handle The timer handle to close. + \retval none + */ +void ast_timer_close(int handle); + +void ast_timer_ack(int handle, unsigned int quantity); + +int ast_timer_enable_continuous(int handle); + +int ast_timer_disable_continous(int handle); + +enum ast_timing_event ast_timer_get_event(int handle); + +#if defined(__cplusplus) || defined(c_plusplus) +} +#endif + +#endif /* _ASTERISK_TIMING_H */ |