Sat Aug 6 00:39:35 2011

Asterisk developer's documentation


app_milliwatt.c File Reference

Digital Milliwatt Test. More...

#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_infoast_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)"


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 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]

Definition at line 71 of file app_milliwatt.c.

References free.

00072 {
00073    free(data);
00074    return;
00075 }

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 }


Variable Documentation

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.


Generated on Sat Aug 6 00:39:35 2011 for Asterisk - the Open Source PBX by  doxygen 1.4.7