[asterisk-commits] jdixon: branch jdixon/chan_usbradio-1.4 r116696 - /team/jdixon/chan_usbradio-...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu May 15 17:45:06 CDT 2008


Author: jdixon
Date: Thu May 15 17:45:06 2008
New Revision: 116696

URL: http://svn.digium.com/view/asterisk?view=rev&rev=116696
Log:
Many fixes and works now with 1.6

Modified:
    team/jdixon/chan_usbradio-1.4/channels/chan_usbradio.c

Modified: team/jdixon/chan_usbradio-1.4/channels/chan_usbradio.c
URL: http://svn.digium.com/view/asterisk/team/jdixon/chan_usbradio-1.4/channels/chan_usbradio.c?view=diff&rev=116696&r1=116695&r2=116696
==============================================================================
--- team/jdixon/chan_usbradio-1.4/channels/chan_usbradio.c (original)
+++ team/jdixon/chan_usbradio-1.4/channels/chan_usbradio.c Thu May 15 17:45:06 2008
@@ -1,3 +1,4 @@
+/* #define	NEW_ASTERISK */
 /*
  * Asterisk -- An open source telephony toolkit.
  *
@@ -34,13 +35,6 @@
 
 /*** MODULEINFO
 	<depend>ossaudio</depend>
-	<depend>usb</depend>
-        <member name="RADIO_RTX" displayname="Build RTX/DTX Radio Programming">
-        <defaultenabled>no</defaultenabled>
-	</member>
-        <member name="RADIO_XPMRX" displayname="Build Experimental Radio Protocols">
-        <defaultenabled>no</defaultenabled>
-	</member>
  ***/
 
 // 20070918 1600 EDT sph at xelatec.com changing to rx driven streams
@@ -140,11 +134,15 @@
 #include "asterisk/musiconhold.h"
 #include "asterisk/dsp.h"
 
+#ifndef	NEW_ASTERISK
+
 /* ringtones we use */
 #include "busy.h"
 #include "ringtone.h"
 #include "ring10.h"
 #include "answer.h"
+
+#endif
 
 #define C108_VENDOR_ID		0x0d8c
 #define C108_PRODUCT_ID  	0x000c
@@ -381,6 +379,8 @@
 	int repeat;
 };
 
+#ifndef	NEW_ASTERISK
+
 static struct sound sounds[] = {
 	{ AST_CONTROL_RINGING, "RINGING", ringtone, sizeof(ringtone)/2, 16000, 32000, 1 },
 	{ AST_CONTROL_BUSY, "BUSY", busy, sizeof(busy)/2, 4000, 4000, 1 },
@@ -390,6 +390,7 @@
 	{ -1, NULL, 0, 0, 0, 0 },	/* end marker */
 };
 
+#endif
 
 /*
  * descriptor for one of our channels.
@@ -402,6 +403,7 @@
 	struct chan_usbradio_pvt *next;
 
 	char *name;
+#ifndef	NEW_ASTERISK
 	/*
 	 * cursound indicates which in struct sound we play. -1 means nothing,
 	 * any other value is a valid sound, in which case sampsent indicates
@@ -413,6 +415,7 @@
 	int cursound;				/* index of sound to send */
 	int sampsent;				/* # of sound samples sent  */
 	int nosound;				/* set to block audio from the PBX */
+#endif
 
 	int pttkick[2];
 	int total_blocks;			/* total blocks in the output device */
@@ -446,7 +449,9 @@
 	int spkrmax;
 	int micmax;
 
+#ifndef	NEW_ASTERISK
 	pthread_t sthread;
+#endif
 	pthread_t hidthread;
 
 	int stophid;
@@ -515,6 +520,7 @@
 	char 	rxcdtype;
 	char 	rxsdtype;
 	int		rxsquelchadj;   /* this copy needs to be here for initialization */
+	int     rxsqvoxadj;
 	char	txtoctype;
 
 	char    txprelim;
@@ -605,7 +611,9 @@
 
 // maw add additional defaults !!!
 static struct chan_usbradio_pvt usbradio_default = {
+#ifndef	NEW_ASTERISK
 	.cursound = -1,
+#endif
 	.sounddev = -1,
 	.duplex = M_UNSET,			/* XXX check this */
 	.autoanswer = 1,
@@ -1356,6 +1364,8 @@
 	return write(o->sounddev, ((void *) data), FRAME_SIZE * 2 * 12);
 }
 
+#ifndef	NEW_ASTERISK
+
 /*
  * Handler for 'sound writable' events from the sound thread.
  * Builds a frame from the high level description of the sounds,
@@ -1481,6 +1491,8 @@
 	}
 	return NULL;				/* Never reached */
 }
+
+#endif
 
 /*
  * reset and close the device if opened,
@@ -1658,7 +1670,9 @@
 /* Play ringtone 'x' on device 'o' */
 static void ring(struct chan_usbradio_pvt *o, int x)
 {
+#ifndef	NEW_ASTERISK
 	write(o->sndcmd[1], &x, sizeof(x));
+#endif
 }
 
 /*
@@ -1680,11 +1694,15 @@
  */
 static int usbradio_answer(struct ast_channel *c)
 {
+#ifndef	NEW_ASTERISK
 	struct chan_usbradio_pvt *o = c->tech_pvt;
+#endif
 
 	ast_setstate(c, AST_STATE_UP);
+#ifndef	NEW_ASTERISK
 	o->cursound = -1;
 	o->nosound = 0;
+#endif
 	return 0;
 }
 
@@ -1693,8 +1711,10 @@
 	struct chan_usbradio_pvt *o = c->tech_pvt;
 
 	//ast_log(LOG_NOTICE, "usbradio_hangup()\n");
+#ifndef	NEW_ASTERISK
 	o->cursound = -1;
 	o->nosound = 0;
+#endif
 	c->tech_pvt = NULL;
 	o->owner = NULL;
 	ast_module_unref(ast_module_info->self);
@@ -1721,11 +1741,13 @@
 
 	traceusb2(("usbradio_write() o->nosound= %i\n",o->nosound));
 
+#ifndef	NEW_ASTERISK
 	/* Immediately return if no sound is enabled */
 	if (o->nosound)
 		return 0;
 	/* Stop any currently playing sound */
 	o->cursound = -1;
+#endif
 	/*
 	 * we could receive a block which is not a multiple of our
 	 * FRAME_SIZE, so buffer it locally and write to the device
@@ -1787,15 +1809,15 @@
 		if (errno != EAGAIN) return NULL;
 		if (o->readerrs++ > READERR_THRESHOLD)
 		{
-			ast_log(LOG_ERROR,"Stuck USB read channel [%s], un-sticking it!!\n",o->name);
+			ast_log(LOG_ERROR,"Stuck USB read channel [%s], un-sticking it!\n",o->name);
 			o->readerrs = 0;
 			return NULL;
 		}
 		if (o->readerrs == 1) 
-			ast_log(LOG_ERROR,"Possibly stuck USB read channel??? [%s]\n",o->name);
+			ast_log(LOG_WARNING,"Possibly stuck USB read channel. [%s]\n",o->name);
 		return f;
 	}
-	if (o->readerrs) ast_log(LOG_ERROR,"Nope, USB read channel [%s] wasn't stuck after all\n",o->name);
+	if (o->readerrs) ast_log(LOG_WARNING,"Nope, USB read channel [%s] wasn't stuck after all.\n",o->name);
 	o->readerrs = 0;
 	o->readpos += res;
 	if (o->readpos < sizeof(o->usbradio_read_buf))	/* not enough samples */
@@ -2088,8 +2110,10 @@
 			break;
 
 		case -1:
+#ifndef	NEW_ASTERISK
 			o->cursound = -1;
 			o->nosound = 0;		/* when cursound is -1 nosound must be 0 */
+#endif
 			return 0;
 
 		case AST_CONTROL_VIDUPDATE:
@@ -2603,6 +2627,8 @@
 	"       load (tuning settings from EEPROM)\n"
 	"\n       All [newsetting]'s are values 0-999\n\n";
 					  
+#ifndef	NEW_ASTERISK
+
 static struct ast_cli_entry cli_usbradio[] = {
 	{ { "radio", "key", NULL },
 	console_key, "Simulate Rx Signal Present",
@@ -2633,6 +2659,7 @@
 	active_usage, NULL, NULL },
 
 };
+#endif
 
 /*
  * store the callerid components
@@ -2845,7 +2872,7 @@
 		setamixer(o->devicenum,MIXER_PARAM_MIC_BOOST,o->rxboostset,0);
        
 		usleep(100000);
-		if(o->rxcdtype==CD_XPMR_VOX || o->rxdemod==RX_AUDIO_SPEAKER)
+		if(o->rxcdtype!=CD_XPMR_NOISE || o->rxdemod==RX_AUDIO_SPEAKER) 
 		{
 			// printf("Measure Direct Input\n");
 			o->pmrChan->spsMeasure->source = o->pmrChan->spsRx->source;
@@ -3360,7 +3387,9 @@
 	struct ast_config *cfg1;
 	int i;
 	char fname[200];
-
+#ifdef	NEW_ASTERISK
+	struct ast_flags zeroflag = {0};
+#endif
 	if (ctg == NULL) {
 		traceusb1((" store_config() ctg == NULL\n"));
 		o = &usbradio_default;
@@ -3383,7 +3412,7 @@
 	strcpy(o->mohinterpret, "default");
 	/* fill other fields from configuration */
 	for (v = ast_variable_browse(cfg, ctg); v; v = v->next) {
-		M_START(v->name, v->value);
+		M_START((char *)v->name, (char *)v->value);
 
 		/* handle jb conf */
 		if (!ast_jb_read_conf(&global_jbconf, v->name, v->value))
@@ -3408,21 +3437,22 @@
 			M_BOOL("rxcpusaver",o->rxcpusaver)
 			M_BOOL("txcpusaver",o->txcpusaver)
 			M_BOOL("invertptt",o->invertptt)
-			M_F("rxdemod",store_rxdemod(o,v->value))
+			M_F("rxdemod",store_rxdemod(o,(char *)v->value))
 			M_BOOL("txprelim",o->txprelim);
-			M_F("txmixa",store_txmixa(o,v->value))
-			M_F("txmixb",store_txmixb(o,v->value))
-			M_F("carrierfrom",store_rxcdtype(o,v->value))
-			M_F("rxsdtype",store_rxsdtype(o,v->value))
+			M_F("txmixa",store_txmixa(o,(char *)v->value))
+			M_F("txmixb",store_txmixb(o,(char *)v->value))
+			M_F("carrierfrom",store_rxcdtype(o,(char *)v->value))
+			M_F("rxsdtype",store_rxsdtype(o,(char *)v->value))
+		    M_UINT("rxsqvox",o->rxsqvoxadj)
 			M_STR("txctcssdefault",o->txctcssdefault)
 			M_STR("rxctcssfreqs",o->rxctcssfreqs)
 			M_STR("txctcssfreqs",o->txctcssfreqs)
 			M_UINT("rxfreq",o->rxfreq)
 			M_UINT("txfreq",o->txfreq)
-			M_F("rxgain",store_rxgain(o,v->value))
+			M_F("rxgain",store_rxgain(o,(char *)v->value))
  			M_BOOL("rxboost",o->rxboostset)
 			M_UINT("rxctcssrelax",o->rxctcssrelax)
-			M_F("txtoctype",store_txtoctype(o,v->value))
+			M_F("txtoctype",store_txtoctype(o,(char *)v->value))
 			M_UINT("hdwtype",o->hdwtype)
 			M_UINT("eeprom",o->wanteeprom)
 			M_UINT("duplex",o->radioduplex)
@@ -3452,7 +3482,11 @@
 		return NULL;
 
 	snprintf(fname,sizeof(fname) - 1,config1,o->name);
+#ifdef	NEW_ASTERISK
+	cfg1 = ast_config_load(fname,zeroflag);
+#else
 	cfg1 = ast_config_load(fname);
+#endif
 	o->rxmixerset = 500;
 	o->txmixaset = 500;
 	o->txmixbset = 500;
@@ -3464,12 +3498,12 @@
 	if (cfg1) {
 		for (v = ast_variable_browse(cfg1, o->name); v; v = v->next) {
 	
-			M_START(v->name, v->value);
+			M_START((char *)v->name, (char *)v->value);
 			M_UINT("rxmixerset", o->rxmixerset)
 			M_UINT("txmixaset", o->txmixaset)
 			M_UINT("txmixbset", o->txmixbset)
-			M_F("rxvoiceadj",store_rxvoiceadj(o,v->value))
-			M_F("rxctcssadj",store_rxctcssadj(o,v->value))
+			M_F("rxvoiceadj",store_rxvoiceadj(o,(char *)v->value))
+			M_F("rxctcssadj",store_rxctcssadj(o,(char *)v->value))
 			M_UINT("txctcssadj",o->txctcssadj);
 			M_UINT("rxsquelchadj", o->rxsquelchadj)
 			M_STR("devstr", o->devstr)
@@ -3540,6 +3574,7 @@
 
 		tChan.rxDemod=o->rxdemod;
 		tChan.rxCdType=o->rxcdtype;
+		tChan.rxSqVoxAdj=o->rxsqvoxadj;
 
 		if (o->txprelim) 
 			tChan.txMod = 2;
@@ -3633,12 +3668,14 @@
 
 	TRACEO(1,("store_config() 200\n"));
 
+#ifndef	NEW_ASTERISK
 	if (pipe(o->sndcmd) != 0) {
 		ast_log(LOG_ERROR, "Unable to create pipe\n");
 		goto error;
 	}
 
 	ast_pthread_create_background(&o->sthread, NULL, sound_thread, o);
+#endif
 
 	/* link into list of devices */
 	if (o != &usbradio_default) {
@@ -3729,6 +3766,133 @@
 }
 #endif
 
+#ifdef	NEW_ASTERISK
+
+static char *res2cli(int r)
+
+{
+	switch (r)
+	{
+	    case RESULT_SUCCESS:
+		return(CLI_SUCCESS);
+	    case RESULT_SHOWUSAGE:
+		return(CLI_SHOWUSAGE);
+	    default:
+		return(CLI_FAILURE);
+	}
+}
+
+static char *handle_console_key(struct ast_cli_entry *e,
+	int cmd, struct ast_cli_args *a)
+{
+        switch (cmd) {
+        case CLI_INIT:
+                e->command = "radio key";
+                e->usage = key_usage;
+                return NULL;
+        case CLI_GENERATE:
+                return NULL;
+	}
+	return res2cli(console_key(a->fd,a->argc,a->argv));
+}
+
+static char *handle_console_unkey(struct ast_cli_entry *e,
+	int cmd, struct ast_cli_args *a)
+{
+        switch (cmd) {
+        case CLI_INIT:
+                e->command = "radio unkey";
+                e->usage = unkey_usage;
+                return NULL;
+        case CLI_GENERATE:
+                return NULL;
+	}
+	return res2cli(console_unkey(a->fd,a->argc,a->argv));
+}
+
+static char *handle_radio_tune(struct ast_cli_entry *e,
+	int cmd, struct ast_cli_args *a)
+{
+        switch (cmd) {
+        case CLI_INIT:
+                e->command = "radio tune";
+                e->usage = radio_tune_usage;
+                return NULL;
+        case CLI_GENERATE:
+                return NULL;
+	}
+	return res2cli(radio_tune(a->fd,a->argc,a->argv));
+}
+
+static char *handle_radio_debug(struct ast_cli_entry *e,
+	int cmd, struct ast_cli_args *a)
+{
+        switch (cmd) {
+        case CLI_INIT:
+                e->command = "radio debug";
+                e->usage = radio_tune_usage;
+                return NULL;
+        case CLI_GENERATE:
+                return NULL;
+	}
+	return res2cli(radio_set_debug(a->fd,a->argc,a->argv));
+}
+
+static char *handle_radio_debug_off(struct ast_cli_entry *e,
+	int cmd, struct ast_cli_args *a)
+{
+        switch (cmd) {
+        case CLI_INIT:
+                e->command = "radio debug off";
+                e->usage = radio_tune_usage;
+                return NULL;
+        case CLI_GENERATE:
+                return NULL;
+	}
+	return res2cli(radio_set_debug_off(a->fd,a->argc,a->argv));
+}
+
+static char *handle_radio_active(struct ast_cli_entry *e,
+	int cmd, struct ast_cli_args *a)
+{
+        switch (cmd) {
+        case CLI_INIT:
+                e->command = "radio active";
+                e->usage = active_usage;
+                return NULL;
+        case CLI_GENERATE:
+                return NULL;
+	}
+	return res2cli(radio_active(a->fd,a->argc,a->argv));
+}
+
+static char *handle_set_xdebug(struct ast_cli_entry *e,
+	int cmd, struct ast_cli_args *a)
+{
+        switch (cmd) {
+        case CLI_INIT:
+                e->command = "radio set xdebug";
+                e->usage = active_usage;
+                return NULL;
+        case CLI_GENERATE:
+                return NULL;
+	}
+	return res2cli(radio_set_xpmr_debug(a->fd,a->argc,a->argv));
+}
+
+
+static struct ast_cli_entry cli_usbradio[] = {
+	AST_CLI_DEFINE(handle_console_key,"Simulate Rx Signal Present"),
+	AST_CLI_DEFINE(handle_console_unkey,"Simulate Rx Signal Loss"),
+	AST_CLI_DEFINE(handle_radio_tune,"Radio Tune"),
+	AST_CLI_DEFINE(handle_radio_debug,"Radio Debug On"),
+	AST_CLI_DEFINE(handle_radio_debug_off,"Radio Debug Off"),
+	AST_CLI_DEFINE(handle_radio_active,"Change commanded device"),
+	AST_CLI_DEFINE(handle_set_xdebug,"Radio set xpmr debug level")
+};
+
+#endif
+
 #include "./xpmr/xpmr.c"
 #ifdef HAVE_XPMRX
 #include "./xpmrx/xpmrx.c"
@@ -3740,6 +3904,9 @@
 {
 	struct ast_config *cfg = NULL;
 	char *ctg = NULL;
+#ifdef	NEW_ASTERISK
+	struct ast_flags zeroflag = {0};
+#endif
 
 	if (hid_device_mklist()) {
 		ast_log(LOG_NOTICE, "Unable to make hid list\n");
@@ -3754,7 +3921,11 @@
 	memcpy(&global_jbconf, &default_jbconf, sizeof(struct ast_jb_conf));
 
 	/* load config file */
+#ifdef	NEW_ASTERISK
+	if (!(cfg = ast_config_load(config,zeroflag))) {
+#else
 	if (!(cfg = ast_config_load(config))) {
+#endif
 		ast_log(LOG_NOTICE, "Unable to load config %s\n", config);
 		return AST_MODULE_LOAD_DECLINE;
 	}
@@ -3807,10 +3978,12 @@
 		#endif
 
 		close(o->sounddev);
+#ifndef	NEW_ASTERISK
 		if (o->sndcmd[0] > 0) {
 			close(o->sndcmd[0]);
 			close(o->sndcmd[1]);
 		}
+#endif
 		if (o->dsp) ast_dsp_free(o->dsp);
 		if (o->owner)
 			ast_softhangup(o->owner, AST_SOFTHANGUP_APPUNLOAD);




More information about the asterisk-commits mailing list