Digital Milliwatt Test. More...
#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, 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 __MODULE_INFO_SECTION | __mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "Digital Milliwatt (mu-law) Test Application" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, } |
| static char * | app = "Milliwatt" |
| static struct ast_module_info * | ast_module_info = &__mod_info |
| static char | digital_milliwatt [] = {0x1e,0x0b,0x0b,0x1e,0x9e,0x8b,0x8b,0x9e} |
| static struct ast_generator | milliwattgen |
Digital Milliwatt Test.
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().
{
return ast_register_application_xml(app, milliwatt_exec);
}
| static void* milliwatt_alloc | ( | struct ast_channel * | chan, |
| void * | params | ||
| ) | [static] |
Definition at line 63 of file app_milliwatt.c.
References ast_calloc.
{
return ast_calloc(1, sizeof(int));
}
| static int milliwatt_exec | ( | struct ast_channel * | chan, |
| void * | 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().
{
const char *options = data;
int res = -1;
if (!ast_strlen_zero(options) && strchr(options, 'o')) {
return old_milliwatt_exec(chan);
}
res = ast_playtones_start(chan, 23255, "1004/1000", 0);
while (!res) {
res = ast_safe_sleep(chan, 10000);
}
return res;
}
| 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(), buf, ast_frame::data, ast_frame::datalen, errno, ast_frame::frametype, len(), LOG_WARNING, ast_channel::name, ast_frame::ptr, and ast_frame::samples.
{
unsigned char buf[AST_FRIENDLY_OFFSET + 640];
const int maxsamples = ARRAY_LEN(buf);
int i, *indexp = (int *) data;
struct ast_frame wf = {
.frametype = AST_FRAME_VOICE,
.subclass = AST_FORMAT_ULAW,
.offset = AST_FRIENDLY_OFFSET,
.src = __FUNCTION__,
};
wf.data.ptr = buf + AST_FRIENDLY_OFFSET;
/* Instead of len, use samples, because channel.c generator_force
* generate(chan, tmp, 0, 160) ignores len. In any case, len is
* a multiple of samples, given by number of samples times bytes per
* sample. In the case of ulaw, len = samples. for signed linear
* len = 2 * samples */
if (samples > maxsamples) {
ast_log(LOG_WARNING, "Only doing %d samples (%d requested)\n", maxsamples, samples);
samples = maxsamples;
}
len = samples * sizeof (buf[0]);
wf.datalen = len;
wf.samples = samples;
/* create a buffer containing the digital milliwatt pattern */
for (i = 0; i < len; i++) {
buf[AST_FRIENDLY_OFFSET + i] = digital_milliwatt[(*indexp)++];
*indexp &= 7;
}
if (ast_write(chan,&wf) < 0) {
ast_log(LOG_WARNING,"Failed to write frame to '%s': %s\n",chan->name,strerror(errno));
return -1;
}
return 0;
}
| 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, and ast_channel::name.
Referenced by milliwatt_exec().
{
ast_set_write_format(chan, AST_FORMAT_ULAW);
ast_set_read_format(chan, AST_FORMAT_ULAW);
if (chan->_state != AST_STATE_UP) {
ast_answer(chan);
}
if (ast_activate_generator(chan,&milliwattgen,"milliwatt") < 0) {
ast_log(LOG_WARNING,"Failed to activate generator on '%s'\n",chan->name);
return -1;
}
while (!ast_safe_sleep(chan, 10000))
;
ast_deactivate_generator(chan);
return -1;
}
| static int unload_module | ( | void | ) | [static] |
Definition at line 161 of file app_milliwatt.c.
References ast_unregister_application().
{
return ast_unregister_application(app);
}
struct ast_module_info __MODULE_INFO_SECTION __mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "Digital Milliwatt (mu-law) Test Application" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, } [static] |
Definition at line 171 of file app_milliwatt.c.
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.
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] |
{
alloc: milliwatt_alloc,
release: milliwatt_release,
generate: milliwatt_generate,
}
Definition at line 115 of file app_milliwatt.c.