#include "asterisk.h"
#include "asterisk/module.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/indications.h"
Go to the source code of this file.
Functions | |
static void | __reg_module (void) |
static void | __unreg_module (void) |
static int | load_module (void) |
static void * | milliwatt_alloc (struct ast_channel *chan, void *params) |
static int | milliwatt_exec (struct ast_channel *chan, const char *data) |
static int | milliwatt_generate (struct ast_channel *chan, void *data, int len, int samples) |
static void | milliwatt_release (struct ast_channel *chan, void *data) |
static int | old_milliwatt_exec (struct ast_channel *chan) |
static int | unload_module (void) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Digital Milliwatt (mu-law) Test Application" , .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 = "8586c2a7d357cb591cc3a6607a8f62d1" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } |
static const char | app [] = "Milliwatt" |
static struct ast_module_info * | ast_module_info = &__mod_info |
static const char | digital_milliwatt [] = {0x1e,0x0b,0x0b,0x1e,0x9e,0x8b,0x8b,0x9e} |
static struct ast_generator | milliwattgen |
Definition in file app_milliwatt.c.
static void __reg_module | ( | void | ) | [static] |
Definition at line 171 of file app_milliwatt.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 171 of file app_milliwatt.c.
static int load_module | ( | void | ) | [static] |
Definition at line 166 of file app_milliwatt.c.
References ast_register_application_xml, and milliwatt_exec().
00167 { 00168 return ast_register_application_xml(app, milliwatt_exec); 00169 }
static void* milliwatt_alloc | ( | struct ast_channel * | chan, | |
void * | params | |||
) | [static] |
Definition at line 63 of file app_milliwatt.c.
References ast_calloc.
00064 { 00065 return ast_calloc(1, sizeof(int)); 00066 }
static int milliwatt_exec | ( | struct ast_channel * | chan, | |
const char * | data | |||
) | [static] |
Definition at line 143 of file app_milliwatt.c.
References ast_playtones_start(), ast_safe_sleep(), ast_strlen_zero(), and old_milliwatt_exec().
Referenced by load_module().
00144 { 00145 const char *options = data; 00146 int res = -1; 00147 00148 if (!ast_strlen_zero(options) && strchr(options, 'o')) { 00149 return old_milliwatt_exec(chan); 00150 } 00151 00152 res = ast_playtones_start(chan, 23255, "1004/1000", 0); 00153 00154 while (!res) { 00155 res = ast_safe_sleep(chan, 10000); 00156 } 00157 00158 return res; 00159 }
static int milliwatt_generate | ( | struct ast_channel * | chan, | |
void * | data, | |||
int | len, | |||
int | samples | |||
) | [static] |
Definition at line 74 of file app_milliwatt.c.
References ARRAY_LEN, AST_FORMAT_ULAW, AST_FRAME_VOICE, AST_FRIENDLY_OFFSET, ast_log(), ast_write(), ast_frame::data, ast_frame::datalen, errno, ast_frame::frametype, LOG_WARNING, ast_channel::name, ast_frame::ptr, and ast_frame::samples.
00075 { 00076 unsigned char buf[AST_FRIENDLY_OFFSET + 640]; 00077 const int maxsamples = ARRAY_LEN(buf); 00078 int i, *indexp = (int *) data; 00079 struct ast_frame wf = { 00080 .frametype = AST_FRAME_VOICE, 00081 .subclass.codec = AST_FORMAT_ULAW, 00082 .offset = AST_FRIENDLY_OFFSET, 00083 .src = __FUNCTION__, 00084 }; 00085 wf.data.ptr = buf + AST_FRIENDLY_OFFSET; 00086 00087 /* Instead of len, use samples, because channel.c generator_force 00088 * generate(chan, tmp, 0, 160) ignores len. In any case, len is 00089 * a multiple of samples, given by number of samples times bytes per 00090 * sample. In the case of ulaw, len = samples. for signed linear 00091 * len = 2 * samples */ 00092 if (samples > maxsamples) { 00093 ast_log(LOG_WARNING, "Only doing %d samples (%d requested)\n", maxsamples, samples); 00094 samples = maxsamples; 00095 } 00096 00097 len = samples * sizeof (buf[0]); 00098 wf.datalen = len; 00099 wf.samples = samples; 00100 00101 /* create a buffer containing the digital milliwatt pattern */ 00102 for (i = 0; i < len; i++) { 00103 buf[AST_FRIENDLY_OFFSET + i] = digital_milliwatt[(*indexp)++]; 00104 *indexp &= 7; 00105 } 00106 00107 if (ast_write(chan,&wf) < 0) { 00108 ast_log(LOG_WARNING,"Failed to write frame to '%s': %s\n",chan->name,strerror(errno)); 00109 return -1; 00110 } 00111 00112 return 0; 00113 }
static void milliwatt_release | ( | struct ast_channel * | chan, | |
void * | data | |||
) | [static] |
static int old_milliwatt_exec | ( | struct ast_channel * | chan | ) | [static] |
Definition at line 121 of file app_milliwatt.c.
References ast_channel::_state, ast_activate_generator(), ast_answer(), ast_deactivate_generator(), AST_FORMAT_ULAW, ast_log(), ast_safe_sleep(), ast_set_read_format(), ast_set_write_format(), AST_STATE_UP, LOG_WARNING, milliwattgen, and ast_channel::name.
Referenced by milliwatt_exec().
00122 { 00123 ast_set_write_format(chan, AST_FORMAT_ULAW); 00124 ast_set_read_format(chan, AST_FORMAT_ULAW); 00125 00126 if (chan->_state != AST_STATE_UP) { 00127 ast_answer(chan); 00128 } 00129 00130 if (ast_activate_generator(chan,&milliwattgen,"milliwatt") < 0) { 00131 ast_log(LOG_WARNING,"Failed to activate generator on '%s'\n",chan->name); 00132 return -1; 00133 } 00134 00135 while (!ast_safe_sleep(chan, 10000)) 00136 ; 00137 00138 ast_deactivate_generator(chan); 00139 00140 return -1; 00141 }
static int unload_module | ( | void | ) | [static] |
Definition at line 161 of file app_milliwatt.c.
References ast_unregister_application().
00162 { 00163 return ast_unregister_application(app); 00164 }
struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Digital Milliwatt (mu-law) Test Application" , .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 = "8586c2a7d357cb591cc3a6607a8f62d1" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } [static] |
Definition at line 171 of file app_milliwatt.c.
const char app[] = "Milliwatt" [static] |
Definition at line 59 of file app_milliwatt.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 171 of file app_milliwatt.c.
const char digital_milliwatt[] = {0x1e,0x0b,0x0b,0x1e,0x9e,0x8b,0x8b,0x9e} [static] |
Definition at line 61 of file app_milliwatt.c.
struct ast_generator milliwattgen [static] |
Initial value:
{ alloc: milliwatt_alloc, release: milliwatt_release, generate: milliwatt_generate, }
Definition at line 115 of file app_milliwatt.c.
Referenced by old_milliwatt_exec().