[asterisk-commits] file: trunk r39349 - in /trunk: channels/chan_phone.c configs/phone.conf.sample

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Tue Aug 8 10:02:46 MST 2006


Author: file
Date: Tue Aug  8 12:02:45 2006
New Revision: 39349

URL: http://svn.digium.com/view/asterisk?rev=39349&view=rev
Log:
Add support for Sigma Designs cards. These basically allow you to offload dialtone generation to the board. If you're using a quicknet board where this might work, give it a try as well. (issue #6092 reported by ywalther - minor mods by moi)

Modified:
    trunk/channels/chan_phone.c
    trunk/configs/phone.conf.sample

Modified: trunk/channels/chan_phone.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_phone.c?rev=39349&r1=39348&r2=39349&view=diff
==============================================================================
--- trunk/channels/chan_phone.c (original)
+++ trunk/channels/chan_phone.c Tue Aug  8 12:02:45 2006
@@ -128,8 +128,9 @@
    
 #define MODE_DIALTONE 	1
 #define MODE_IMMEDIATE	2
-#define MODE_FXO		3
+#define MODE_FXO	3
 #define MODE_FXS        4
+#define MODE_SIGMA      5
 
 static struct phone_pvt {
 	int fd;							/* Raw file descriptor for this device */
@@ -915,7 +916,7 @@
 	phonee.bytes = ioctl(i->fd, PHONE_EXCEPTION);
 	if (phonee.bits.dtmf_ready)  {
 		digit[0] = ioctl(i->fd, PHONE_GET_DTMF_ASCII);
-		if (i->mode == MODE_DIALTONE || i->mode == MODE_FXS) {
+		if (i->mode == MODE_DIALTONE || i->mode == MODE_FXS || i->mode == MODE_SIGMA) {
 			ioctl(i->fd, PHONE_PLAY_STOP);
 			ioctl(i->fd, PHONE_REC_STOP);
 			ioctl(i->fd, PHONE_CPT_STOP);
@@ -967,6 +968,16 @@
 				ioctl(i->fd, PHONE_PLAY_CODEC, ULAW);
 				ioctl(i->fd, PHONE_PLAY_START);
 				i->lastformat = -1;
+			} else if (i->mode == MODE_SIGMA) {
+				ast_mutex_lock(&usecnt_lock);
+				usecnt++;
+				ast_mutex_unlock(&usecnt_lock);
+				ast_update_use_count();
+				/* Reset the extension */
+				i->ext[0] = '\0';
+				/* Play the dialtone */
+				i->dialtone++;
+				ioctl(i->fd, PHONE_DIALTONE);
 			}
 		} else {
 			if (i->dialtone) {
@@ -1032,7 +1043,7 @@
 				FD_SET(i->fd, &efds);
 				if (i->fd > n)
 					n = i->fd;
-				if (i->dialtone) {
+				if (i->dialtone && i->mode != MODE_SIGMA) {
 					/* Remember we're going to have to come back and play
 					   more dialtones */
 					if (ast_tvzero(tv)) {
@@ -1050,7 +1061,7 @@
 		ast_mutex_unlock(&iflock);
 
 		/* Wait indefinitely for something to happen */
-		if (dotone) {
+		if (dotone && i->mode != MODE_SIGMA) {
 			/* If we're ready to recycle the time, set it to 30 ms */
 			tonepos += 240;
 			if (tonepos >= sizeof(DialTone))
@@ -1366,6 +1377,8 @@
 		} else if (!strcasecmp(v->name, "mode")) {
 			if (!strncasecmp(v->value, "di", 2)) 
 				mode = MODE_DIALTONE;
+			else if (!strncasecmp(v->value, "sig", 3))
+				mode = MODE_SIGMA;
 			else if (!strncasecmp(v->value, "im", 2))
 				mode = MODE_IMMEDIATE;
 			else if (!strncasecmp(v->value, "fxs", 3)) {

Modified: trunk/configs/phone.conf.sample
URL: http://svn.digium.com/view/asterisk/trunk/configs/phone.conf.sample?rev=39349&r1=39348&r2=39349&view=diff
==============================================================================
--- trunk/configs/phone.conf.sample (original)
+++ trunk/configs/phone.conf.sample Tue Aug  8 12:02:45 2006
@@ -10,11 +10,13 @@
 ; immediately provides the PBX without reading any digits or providing 
 ; any dialtone (this is the immediate mode, the default).  Also, you
 ; can set the mode to "fxo" if you have a linejack to make it operate
-; properly.
+; properly. If you are using a Sigma Designs board you may set this to
+; "sig".
 ;
 mode=immediate
 ;mode=dialtone
 ;mode=fxo
+;mode=sig
 ;
 ; You can decide which format to use by default, "g723.1" or "slinear".
 ; XXX Be careful, sometimes the card causes kernel panics when running



More information about the asterisk-commits mailing list