[asterisk-commits] russell: branch 1.4 r118956 - /branches/1.4/apps/app_milliwatt.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu May 29 12:38:39 CDT 2008


Author: russell
Date: Thu May 29 12:38:38 2008
New Revision: 118956

URL: http://svn.digium.com/view/asterisk?view=rev&rev=118956
Log:
Change milliwatt to use the proper tone by default (1004 Hz) instead of 1000 Hz.
An option is there to use 1000 Hz for anyone that might want it.

Modified:
    branches/1.4/apps/app_milliwatt.c

Modified: branches/1.4/apps/app_milliwatt.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/apps/app_milliwatt.c?view=diff&rev=118956&r1=118955&r2=118956
==============================================================================
--- branches/1.4/apps/app_milliwatt.c (original)
+++ branches/1.4/apps/app_milliwatt.c Thu May 29 12:38:38 2008
@@ -45,10 +45,14 @@
 
 static char *app = "Milliwatt";
 
-static char *synopsis = "Generate a Constant 1000Hz tone at 0dbm (mu-law)";
+static char *synopsis = "Generate a Constant 1004Hz tone at 0dbm (mu-law)";
 
 static char *descrip = 
-"Milliwatt(): Generate a Constant 1000Hz tone at 0dbm (mu-law)\n";
+"   Milliwatt([options]): Generate a Constant 1004Hz tone at 0dbm.\n"
+"Previous versions of this application generated the tone at 1000Hz.  If for\n"
+"some reason you would prefer that behavior, supply the 'o' option to get the\n"
+"old behavior.\n"
+"";
 
 
 static char digital_milliwatt[] = {0x1e,0x0b,0x0b,0x1e,0x9e,0x8b,0x8b,0x9e} ;
@@ -87,51 +91,89 @@
 		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++)
-	{
+	for (i = 0; i < len; i++) {
 		buf[AST_FRIENDLY_OFFSET + i] = digital_milliwatt[(*indexp)++];
 		*indexp &= 7;
 	}
-	if (ast_write(chan,&wf) < 0)
-	{
+
+	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 struct ast_generator milliwattgen = 
-{
+static struct ast_generator milliwattgen = {
 	alloc: milliwatt_alloc,
 	release: milliwatt_release,
 	generate: milliwatt_generate,
-} ;
+};
+
+static int old_milliwatt_exec(struct ast_channel *chan)
+{
+	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 milliwatt_exec(struct ast_channel *chan, void *data)
 {
+	const char *options = data;
+	struct ast_app *playtones_app, *wait_app;
+	struct ast_module_user *u;
+	int res = -1;
 
-	struct ast_module_user *u;
 	u = ast_module_user_add(chan);
-	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_strlen_zero(options) && strchr(options, 'o')) {
+		res = old_milliwatt_exec(chan);
+		goto exit_app;
 	}
-	if (ast_activate_generator(chan,&milliwattgen,"milliwatt") < 0)
-	{
-		ast_log(LOG_WARNING,"Failed to activate generator on '%s'\n",chan->name);
-		ast_module_user_remove(u);
-		return -1;
+
+	if (!(playtones_app = pbx_findapp("Playtones"))) {
+		ast_log(LOG_ERROR, "The Playtones application is required to run Milliwatt()\n");
+		goto exit_app;
 	}
-	while(!ast_safe_sleep(chan, 10000));
-	ast_deactivate_generator(chan);
+
+	if (!(wait_app = pbx_findapp("Wait"))) {
+		ast_log(LOG_ERROR, "The Playtones application is required to run Milliwatt()\n");
+		goto exit_app;
+	}
+
+	res = pbx_exec(chan, playtones_app, "1004,1000");
+
+	while (!res) {
+		res = pbx_exec(chan, wait_app, "3600");
+	}
+
+	res = 0;
+
+exit_app:
 	ast_module_user_remove(u);
-	return -1;
+
+	return res;
 }
 
 static int unload_module(void)




More information about the asterisk-commits mailing list