#include "asterisk.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <limits.h>
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/utils.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, void *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_DEFAULT | AST_MODFLAG_BUILDSUM, .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 = "361d7bb937402d51e4658efb5b4d76e4" , .load = load_module, .unload = unload_module, } |
static char * | app = "Milliwatt" |
static const struct ast_module_info * | ast_module_info = &__mod_info |
static char * | descrip |
static char | digital_milliwatt [] = {0x1e,0x0b,0x0b,0x1e,0x9e,0x8b,0x8b,0x9e} |
static struct ast_generator | milliwattgen |
static char * | synopsis = "Generate a Constant 1004Hz tone at 0dbm (mu-law)" |
Definition in file app_milliwatt.c.
static void __reg_module | ( | void | ) | [static] |
Definition at line 190 of file app_milliwatt.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 190 of file app_milliwatt.c.
static int load_module | ( | void | ) | [static] |
Definition at line 185 of file app_milliwatt.c.
References ast_register_application(), and milliwatt_exec().
00186 { 00187 return ast_register_application(app, milliwatt_exec, synopsis, descrip); 00188 }
static void* milliwatt_alloc | ( | struct ast_channel * | chan, | |
void * | params | |||
) | [static] |
Definition at line 66 of file app_milliwatt.c.
References ast_calloc.
00067 { 00068 return ast_calloc(1, sizeof(int)); 00069 }
static int milliwatt_exec | ( | struct ast_channel * | chan, | |
void * | data | |||
) | [static] |
Definition at line 147 of file app_milliwatt.c.
References ast_module_user_add, ast_module_user_remove, ast_playtones_start(), ast_safe_sleep(), ast_strlen_zero(), ast_module_user::chan, exit_app, and old_milliwatt_exec().
Referenced by load_module().
00148 { 00149 const char *options = data; 00150 struct ast_module_user *u; 00151 int res = -1; 00152 00153 u = ast_module_user_add(chan); 00154 00155 if (!ast_strlen_zero(options) && strchr(options, 'o')) { 00156 res = old_milliwatt_exec(chan); 00157 goto exit_app; 00158 } 00159 00160 res = ast_playtones_start(chan, 23255, "1004/1000", 0); 00161 00162 while (!res) { 00163 res = ast_safe_sleep(chan, 10000); 00164 } 00165 00166 res = 0; 00167 00168 exit_app: 00169 ast_module_user_remove(u); 00170 00171 return res; 00172 }
static int milliwatt_generate | ( | struct ast_channel * | chan, | |
void * | data, | |||
int | len, | |||
int | samples | |||
) | [static] |
Definition at line 77 of file app_milliwatt.c.
References AST_FORMAT_ULAW, AST_FRAME_VOICE, AST_FRIENDLY_OFFSET, ast_log(), ast_write(), ast_frame::datalen, errno, ast_frame::frametype, LOG_WARNING, ast_channel::name, and ast_frame::samples.
00078 { 00079 unsigned char buf[AST_FRIENDLY_OFFSET + 640]; 00080 const int maxsamples = sizeof (buf) / sizeof (buf[0]); 00081 int i, *indexp = (int *) data; 00082 struct ast_frame wf = { 00083 .frametype = AST_FRAME_VOICE, 00084 .subclass = AST_FORMAT_ULAW, 00085 .offset = AST_FRIENDLY_OFFSET, 00086 .data = buf + AST_FRIENDLY_OFFSET, 00087 .src = __FUNCTION__, 00088 }; 00089 00090 /* Instead of len, use samples, because channel.c generator_force 00091 * generate(chan, tmp, 0, 160) ignores len. In any case, len is 00092 * a multiple of samples, given by number of samples times bytes per 00093 * sample. In the case of ulaw, len = samples. for signed linear 00094 * len = 2 * samples */ 00095 00096 if (samples > maxsamples) { 00097 ast_log(LOG_WARNING, "Only doing %d samples (%d requested)\n", maxsamples, samples); 00098 samples = maxsamples; 00099 } 00100 00101 len = samples * sizeof (buf[0]); 00102 wf.datalen = len; 00103 wf.samples = samples; 00104 00105 /* create a buffer containing the digital milliwatt pattern */ 00106 for (i = 0; i < len; i++) { 00107 buf[AST_FRIENDLY_OFFSET + i] = digital_milliwatt[(*indexp)++]; 00108 *indexp &= 7; 00109 } 00110 00111 if (ast_write(chan,&wf) < 0) { 00112 ast_log(LOG_WARNING,"Failed to write frame to '%s': %s\n",chan->name,strerror(errno)); 00113 return -1; 00114 } 00115 00116 return 0; 00117 }
static void milliwatt_release | ( | struct ast_channel * | chan, | |
void * | data | |||
) | [static] |
static int old_milliwatt_exec | ( | struct ast_channel * | chan | ) | [static] |
Definition at line 125 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().
00126 { 00127 ast_set_write_format(chan, AST_FORMAT_ULAW); 00128 ast_set_read_format(chan, AST_FORMAT_ULAW); 00129 00130 if (chan->_state != AST_STATE_UP) { 00131 ast_answer(chan); 00132 } 00133 00134 if (ast_activate_generator(chan,&milliwattgen,"milliwatt") < 0) { 00135 ast_log(LOG_WARNING,"Failed to activate generator on '%s'\n",chan->name); 00136 return -1; 00137 } 00138 00139 while (!ast_safe_sleep(chan, 10000)) 00140 ; 00141 00142 ast_deactivate_generator(chan); 00143 00144 return -1; 00145 }
static int unload_module | ( | void | ) | [static] |
Definition at line 174 of file app_milliwatt.c.
References ast_module_user_hangup_all, and ast_unregister_application().
00175 { 00176 int res; 00177 00178 res = ast_unregister_application(app); 00179 00180 ast_module_user_hangup_all(); 00181 00182 return res; 00183 }
struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT | AST_MODFLAG_BUILDSUM, .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 = "361d7bb937402d51e4658efb5b4d76e4" , .load = load_module, .unload = unload_module, } [static] |
Definition at line 190 of file app_milliwatt.c.
char* app = "Milliwatt" [static] |
Definition at line 52 of file app_milliwatt.c.
const struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 190 of file app_milliwatt.c.
char* descrip [static] |
Definition at line 56 of file app_milliwatt.c.
char digital_milliwatt[] = {0x1e,0x0b,0x0b,0x1e,0x9e,0x8b,0x8b,0x9e} [static] |
Definition at line 64 of file app_milliwatt.c.
struct ast_generator milliwattgen [static] |
Initial value:
{ alloc: milliwatt_alloc, release: milliwatt_release, generate: milliwatt_generate, }
Definition at line 119 of file app_milliwatt.c.
Referenced by old_milliwatt_exec().
char* synopsis = "Generate a Constant 1004Hz tone at 0dbm (mu-law)" [static] |
Definition at line 54 of file app_milliwatt.c.