[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