DAHDI timing interface. More...
#include "asterisk.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <math.h>
#include <dahdi/user.h>
#include "asterisk/module.h"
#include "asterisk/timing.h"
#include "asterisk/utils.h"
Go to the source code of this file.
Defines | |
#define | SEE_TIMING "For more information on Asterisk timing modules, including ways to potentially fix this problem, please see https://wiki.asterisk.org/wiki/display/AST/Timing+Interfaces\n" |
Functions | |
static void | __reg_module (void) |
static void | __unreg_module (void) |
ASTERISK_FILE_VERSION (__FILE__,"$Revision: 413586 $") | |
static int | dahdi_test_timer (void) |
static int | dahdi_timer_ack (int handle, unsigned int quantity) |
static void | dahdi_timer_close (int handle) |
static int | dahdi_timer_disable_continuous (int handle) |
static int | dahdi_timer_enable_continuous (int handle) |
static enum ast_timer_event | dahdi_timer_get_event (int handle) |
static unsigned int | dahdi_timer_get_max_rate (int handle) |
static int | dahdi_timer_open (void) |
static int | dahdi_timer_set_rate (int handle, unsigned int rate) |
static int | load_module (void) |
static int | unload_module (void) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "DAHDI Timing Interface" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "ac1f6a56484a8820659555499174e588" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_TIMING, } |
static struct ast_module_info * | ast_module_info = &__mod_info |
static struct ast_timing_interface | dahdi_timing |
static void * | timing_funcs_handle |
DAHDI timing interface.
Definition in file res_timing_dahdi.c.
#define SEE_TIMING "For more information on Asterisk timing modules, including ways to potentially fix this problem, please see https://wiki.asterisk.org/wiki/display/AST/Timing+Interfaces\n" |
Definition at line 139 of file res_timing_dahdi.c.
Referenced by dahdi_test_timer().
static void __reg_module | ( | void | ) | [static] |
Definition at line 205 of file res_timing_dahdi.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 205 of file res_timing_dahdi.c.
ASTERISK_FILE_VERSION | ( | __FILE__ | , | |
"$Revision: 413586 $" | ||||
) |
static int dahdi_test_timer | ( | void | ) | [static] |
Definition at line 141 of file res_timing_dahdi.c.
References ast_log(), ast_wait_for_input(), LOG_ERROR, and SEE_TIMING.
Referenced by load_module().
00142 { 00143 int fd; 00144 int x = 160; 00145 00146 fd = open("/dev/dahdi/timer", O_RDWR); 00147 00148 if (fd < 0) { 00149 return -1; 00150 } 00151 00152 if (ioctl(fd, DAHDI_TIMERCONFIG, &x)) { 00153 ast_log(LOG_ERROR, "You have DAHDI built and drivers loaded, but the DAHDI timer test failed to set DAHDI_TIMERCONFIG to %d.\n" SEE_TIMING, x); 00154 close(fd); 00155 return -1; 00156 } 00157 00158 if ((x = ast_wait_for_input(fd, 300)) < 0) { 00159 ast_log(LOG_ERROR, "You have DAHDI built and drivers loaded, but the DAHDI timer could not be polled during the DAHDI timer test.\n" SEE_TIMING); 00160 close(fd); 00161 return -1; 00162 } 00163 00164 if (!x) { 00165 const char dahdi_timer_error[] = { 00166 "Asterisk has detected a problem with your DAHDI configuration and will shutdown for your protection. You have options:" 00167 "\n\t1. You only have to compile DAHDI support into Asterisk if you need it. One option is to recompile without DAHDI support." 00168 "\n\t2. You only have to load DAHDI drivers if you want to take advantage of DAHDI services. One option is to unload DAHDI modules if you don't need them." 00169 "\n\t3. If you need DAHDI services, you must correctly configure DAHDI." 00170 }; 00171 ast_log(LOG_ERROR, "%s\n" SEE_TIMING, dahdi_timer_error); 00172 usleep(100); 00173 close(fd); 00174 return -1; 00175 } 00176 00177 close(fd); 00178 00179 return 0; 00180 }
static int dahdi_timer_ack | ( | int | handle, | |
unsigned int | quantity | |||
) | [static] |
Definition at line 95 of file res_timing_dahdi.c.
static void dahdi_timer_close | ( | int | handle | ) | [static] |
Definition at line 75 of file res_timing_dahdi.c.
static int dahdi_timer_disable_continuous | ( | int | handle | ) | [static] |
Definition at line 107 of file res_timing_dahdi.c.
static int dahdi_timer_enable_continuous | ( | int | handle | ) | [static] |
Definition at line 100 of file res_timing_dahdi.c.
static enum ast_timer_event dahdi_timer_get_event | ( | int | handle | ) | [static] |
Definition at line 114 of file res_timing_dahdi.c.
References AST_TIMING_EVENT_CONTINUOUS, and AST_TIMING_EVENT_EXPIRED.
00115 { 00116 int res; 00117 int event; 00118 00119 res = ioctl(handle, DAHDI_GETEVENT, &event); 00120 00121 if (res) { 00122 event = DAHDI_EVENT_TIMER_EXPIRED; 00123 } 00124 00125 switch (event) { 00126 case DAHDI_EVENT_TIMER_PING: 00127 return AST_TIMING_EVENT_CONTINUOUS; 00128 case DAHDI_EVENT_TIMER_EXPIRED: 00129 default: 00130 return AST_TIMING_EVENT_EXPIRED; 00131 } 00132 }
static unsigned int dahdi_timer_get_max_rate | ( | int | handle | ) | [static] |
Definition at line 134 of file res_timing_dahdi.c.
static int dahdi_timer_open | ( | void | ) | [static] |
Definition at line 70 of file res_timing_dahdi.c.
static int dahdi_timer_set_rate | ( | int | handle, | |
unsigned int | rate | |||
) | [static] |
Definition at line 80 of file res_timing_dahdi.c.
References ast_log(), and LOG_ERROR.
00081 { 00082 /* DAHDI timers are configured using a number of samples, 00083 * based on an 8 kHz sample rate. */ 00084 unsigned int samples = roundf((8000.0 / ((float) rate))); 00085 00086 if (ioctl(handle, DAHDI_TIMERCONFIG, &samples)) { 00087 ast_log(LOG_ERROR, "Failed to configure DAHDI timing fd for %u sample timer ticks\n", 00088 samples); 00089 return -1; 00090 } 00091 00092 return 0; 00093 }
static int load_module | ( | void | ) | [static] |
Definition at line 182 of file res_timing_dahdi.c.
References AST_MODULE_LOAD_DECLINE, AST_MODULE_LOAD_SUCCESS, ast_register_timing_interface, dahdi_test_timer(), and timing_funcs_handle.
00183 { 00184 if (dahdi_test_timer()) { 00185 return AST_MODULE_LOAD_DECLINE; 00186 } 00187 00188 return (timing_funcs_handle = ast_register_timing_interface(&dahdi_timing)) ? 00189 AST_MODULE_LOAD_SUCCESS : AST_MODULE_LOAD_DECLINE; 00190 }
static int unload_module | ( | void | ) | [static] |
Definition at line 192 of file res_timing_dahdi.c.
References ast_unregister_timing_interface(), and timing_funcs_handle.
00193 { 00194 if (timing_funcs_handle) { 00195 return ast_unregister_timing_interface(timing_funcs_handle); 00196 } 00197 00198 return 0; 00199 }
struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "DAHDI Timing Interface" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "ac1f6a56484a8820659555499174e588" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_TIMING, } [static] |
Definition at line 205 of file res_timing_dahdi.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 205 of file res_timing_dahdi.c.
struct ast_timing_interface dahdi_timing [static] |
Definition at line 57 of file res_timing_dahdi.c.
void* timing_funcs_handle [static] |
Definition at line 46 of file res_timing_dahdi.c.
Referenced by load_module(), and unload_module().