Mon Jun 27 16:50:58 2011

Asterisk developer's documentation


app_milliwatt.c File Reference

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, 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_infoast_module_info = &__mod_info
static const char digital_milliwatt [] = {0x1e,0x0b,0x0b,0x1e,0x9e,0x8b,0x8b,0x9e}
static struct ast_generator milliwattgen


Detailed Description

Digital Milliwatt Test.

Author:
Mark Spencer <markster@digium.com>

Definition in file app_milliwatt.c.


Function Documentation

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]

Definition at line 68 of file app_milliwatt.c.

References ast_free.

00069 {
00070    ast_free(data);
00071    return;
00072 }

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 }


Variable Documentation

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().


Generated on Mon Jun 27 16:50:58 2011 for Asterisk - The Open Source Telephony Project by  doxygen 1.4.7