dect
/
asterisk
Archived
13
0
Fork 0

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)

git-svn-id: http://svn.digium.com/svn/asterisk/trunk@39349 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
file 2006-08-08 17:02:45 +00:00
parent 19338ec792
commit 20239ec3e7
2 changed files with 20 additions and 5 deletions

View File

@ -128,8 +128,9 @@ static int restart_monitor(void);
#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 @@ static void phone_check_exception(struct phone_pvt *i)
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 @@ static void phone_check_exception(struct phone_pvt *i)
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 @@ static void *do_monitor(void *data)
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 @@ static void *do_monitor(void *data)
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 @@ static int load_module(void *mod)
} 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)) {

View File

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