Index: channels/chan_zap.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_zap.c,v retrieving revision 1.408 diff -u -r1.408 chan_zap.c --- channels/chan_zap.c 10 Feb 2005 17:40:06 -0000 1.408 +++ channels/chan_zap.c 17 Feb 2005 01:23:48 -0000 @@ -133,6 +133,8 @@ #define SIG_PRI ZT_SIG_CLEAR #define SIG_R2 ZT_SIG_CAS #define SIG_SF ZT_SIG_SF +#define SIG_FXOTR08 ZT_SIG_FXOTR08 +#define SIG_FXSTR08 ZT_SIG_FXSTR08 #define SIG_SFWINK (0x100000 | ZT_SIG_SF) #define SIG_SF_FEATD (0x200000 | ZT_SIG_SF) #define SIG_SF_FEATDMF (0x400000 | ZT_SIG_SF) @@ -666,7 +668,7 @@ 2, /* Second spell */ }; -#define ISTRUNK(p) ((p->sig == SIG_FXSLS) || (p->sig == SIG_FXSKS) || \ +#define ISTRUNK(p) ((p->sig == SIG_FXSLS) || (p->sig == SIG_FXSKS) || (p->sig == SIG_FXSTR08) || \ (p->sig == SIG_FXSGS) || (p->sig == SIG_PRI)) #define CANBUSYDETECT(p) (ISTRUNK(p) || (p->sig & (SIG_EM | SIG_EM_E1 | SIG_SF)) /* || (p->sig & __ZT_SIG_FXO) */) @@ -1059,6 +1061,10 @@ return "GR-303 Signalling with FXOKS"; case SIG_GR303FXSKS: return "GR-303 Signalling with FXSKS"; + case SIG_FXOTR08: + return "TR-08 Signalling (FXS Interfaces)"; + case SIG_FXSTR08: + return "TR-08 Signalling (FXO Interfaces)"; case 0: return "Pseudo Signalling"; default: @@ -1566,6 +1572,7 @@ case SIG_FXOLS: case SIG_FXOGS: case SIG_FXOKS: + case SIG_FXOTR08: if (p->owner == ast) { /* Normal ring, on hook */ @@ -1660,6 +1667,7 @@ case SIG_FXSLS: case SIG_FXSGS: case SIG_FXSKS: + case SIG_FXSTR08: case SIG_EMWINK: case SIG_EM: case SIG_EM_E1: @@ -2206,6 +2214,7 @@ case SIG_FXOGS: case SIG_FXOLS: case SIG_FXOKS: + case SIG_FXOTR08: res = ioctl(p->subs[SUB_REAL].zfd, ZT_GET_PARAMS, &par); if (!res) { #if 0 @@ -2221,6 +2230,7 @@ case SIG_FXSGS: case SIG_FXSLS: case SIG_FXSKS: + case SIG_FXSTR08: /* Make sure we're not made available for at least two seconds assuming we were actually used for an inbound or outbound call. */ if (ast->_state != AST_STATE_RESERVED) { @@ -2321,6 +2331,7 @@ case SIG_FXSLS: case SIG_FXSGS: case SIG_FXSKS: + case SIG_FXSTR08: p->ringt = 0; /* Fall through */ case SIG_EM: @@ -2338,6 +2349,7 @@ case SIG_FXOLS: case SIG_FXOGS: case SIG_FXOKS: + case SIG_FXOTR08: /* Pick up the line */ ast_log(LOG_DEBUG, "Took %s off hook\n", ast->name); if(p->hanguponpolarityswitch) { @@ -3252,6 +3264,7 @@ case SIG_FXOLS: case SIG_FXOGS: case SIG_FXOKS: + case SIG_FXOTR08: p->onhooktime = time(NULL); p->msgstate = -1; /* Check for some special conditions regarding call waiting */ @@ -3384,6 +3397,7 @@ case SIG_FXOLS: case SIG_FXOGS: case SIG_FXOKS: + case SIG_FXOTR08: switch(ast->_state) { case AST_STATE_RINGING: zt_enable_ec(p); @@ -3450,6 +3464,7 @@ case SIG_FXSLS: case SIG_FXSGS: case SIG_FXSKS: + case SIG_FXSTR08: if (ast->_state == AST_STATE_RING) { p->ringt = RINGT; } @@ -3534,6 +3549,7 @@ case SIG_FXOLS: case SIG_FXOGS: case SIG_FXOKS: + case SIG_FXOTR08: ast_log(LOG_DEBUG, "Winkflash, index: %d, normal: %d, callwait: %d, thirdcall: %d\n", index, p->subs[SUB_REAL].zfd, p->subs[SUB_CALLWAIT].zfd, p->subs[SUB_THREEWAY].zfd); p->callwaitcas = 0; @@ -3690,6 +3706,7 @@ case SIG_SF_FEATD: case SIG_FXSLS: case SIG_FXSGS: + case SIG_FXSTR08: if (p->dialing) ast_log(LOG_DEBUG, "Ignoring wink on channel %d\n", p->channel); else @@ -3722,6 +3739,7 @@ case SIG_FXSLS: /* only interesting for FXS */ case SIG_FXSGS: case SIG_FXSKS: + case SIG_FXSTR08: case SIG_EM: case SIG_EM_E1: case SIG_EMWINK: @@ -4392,7 +4410,8 @@ if ((chan->_state != AST_STATE_RING) || ((p->sig != SIG_FXSKS) && (p->sig != SIG_FXSLS) && - (p->sig != SIG_FXSGS))) + (p->sig != SIG_FXSGS) && + (p->sig != SIG_FXSTR08))) ast_setstate(chan, AST_STATE_RINGING); } break; @@ -4646,7 +4665,8 @@ tmp->pvt->indicate = zt_indicate; tmp->pvt->fixup = zt_fixup; tmp->pvt->setoption = zt_setoption; - if ((i->sig == SIG_FXOKS) || (i->sig == SIG_FXOGS) || (i->sig == SIG_FXOLS)) { + if ((i->sig == SIG_FXOKS) || (i->sig == SIG_FXOGS) || (i->sig == SIG_FXOLS) || + (i->sig == SIG_FXOTR08)) { /* Only FXO signalled stuff can be picked up */ tmp->callgroup = i->callgroup; tmp->pickupgroup = i->pickupgroup; @@ -5032,6 +5052,7 @@ case SIG_FXOLS: case SIG_FXOGS: case SIG_FXOKS: + case SIG_FXOTR08: /* Read the first digit */ timeout = firstdigittimeout; /* If starting a threeway call, never timeout on the first digit so someone @@ -5299,6 +5320,7 @@ case SIG_FXSLS: case SIG_FXSGS: case SIG_FXSKS: + case SIG_FXSTR08: #ifdef ZAPATA_PRI if (p->pri) { /* This is a GR-303 trunk actually. Wait for the first ring... */ @@ -5774,6 +5796,7 @@ case SIG_FXOLS: case SIG_FXOGS: case SIG_FXOKS: + case SIG_FXOTR08: zt_set_hook(i->subs[SUB_REAL].zfd, ZT_OFFHOOK); if (i->cidspill) { /* Cancel VMWI spill */ @@ -5818,6 +5841,7 @@ case SIG_FXSLS: case SIG_FXSGS: case SIG_FXSKS: + case SIG_FXSTR08: i->ringt = RINGT; /* Fall through */ case SIG_EMWINK: @@ -5870,6 +5894,7 @@ switch(i->sig) { case SIG_FXOLS: case SIG_FXOGS: + case SIG_FXOTR08: case SIG_FEATD: case SIG_FEATDMF: case SIG_E911: @@ -5885,6 +5910,7 @@ case SIG_FXSLS: case SIG_FXSGS: case SIG_FXSKS: + case SIG_FXSTR08: case SIG_GR303FXSKS: zt_disable_ec(i); res = tone_zone_play_tone(i->subs[SUB_REAL].zfd, -1); @@ -5916,6 +5942,7 @@ case SIG_FXSLS: case SIG_FXSKS: case SIG_FXSGS: + case SIG_FXSTR08: if (i->cid_start == CID_START_POLARITY) { i->polarity = POLARITY_REV; ast_verbose(VERBOSE_PREFIX_2 "Starting post polarity " @@ -6404,8 +6431,8 @@ destroy_zt_pvt(&tmp); return NULL; } - if (p.sigtype != (signalling & 0x3ffff)) { - ast_log(LOG_ERROR, "Signalling requested on channel %d is %s but line is in %s signalling\n", channel, sig2str(signalling), sig2str(p.sigtype)); + if (p.sigtype != (signalling & 0xfffff)) { + ast_log(LOG_ERROR, "Signaling requested on channel %d is %s but line is in %s signalling\n", channel, sig2str(signalling), sig2str(p.sigtype)); destroy_zt_pvt(&tmp); return tmp; } @@ -6566,7 +6593,7 @@ res = ioctl(tmp->subs[SUB_REAL].zfd, ZT_GET_PARAMS, &p); } /* Adjust starttime on loopstart and kewlstart trunks to reasonable values */ - if ((signalling == SIG_FXSKS) || (signalling == SIG_FXSLS) || + if ((signalling == SIG_FXSKS) || (signalling == SIG_FXSLS) || (signalling == SIG_FXSTR08) || (signalling == SIG_EM) || (signalling == SIG_EM_E1) || (signalling == SIG_EMWINK) || (signalling == SIG_FEATD) || (signalling == SIG_FEATDMF) || (signalling == SIG_FEATB) || (signalling == SIG_E911) || @@ -6633,7 +6660,8 @@ tmp->sig = signalling; tmp->radio = radio; tmp->firstradio = 0; - if ((signalling == SIG_FXOKS) || (signalling == SIG_FXOLS) || (signalling == SIG_FXOGS)) + if ((signalling == SIG_FXOKS) || (signalling == SIG_FXOLS) || + (signalling == SIG_FXOGS) || (signalling == SIG_FXOTR08)) tmp->permcallwaiting = callwaiting; else tmp->permcallwaiting = 0; @@ -6789,7 +6817,8 @@ if ((channelmatch > 0) && (p->channel != channelmatch)) return 0; /* We're at least busy at this point */ - if ((p->sig == SIG_FXOKS) || (p->sig == SIG_FXOLS) || (p->sig == SIG_FXOGS)) { + if ((p->sig == SIG_FXOKS) || (p->sig == SIG_FXOLS) || + (p->sig == SIG_FXOGS) || (p->sig == SIG_FXOTR08)) { if (busy) *busy = 1; } @@ -6858,7 +6887,8 @@ } /* If it's not an FXO, forget about call wait */ - if ((p->sig != SIG_FXOKS) && (p->sig != SIG_FXOLS) && (p->sig != SIG_FXOGS)) + if ((p->sig != SIG_FXOKS) && (p->sig != SIG_FXOLS) && + (p->sig != SIG_FXOGS) && (p->sig != SIG_FXOTR08)) return 0; if (!p->callwaiting) { @@ -9754,6 +9784,11 @@ } else if (!strcasecmp(v->value, "featb")) { cur_signalling = SIG_FEATB; cur_radio = 0; + } else if (!strcasecmp(v->value, "fxo_tr08")) { + cur_signalling = SIG_FXOTR08; + cur_radio = 0; + } else if (!strcasecmp(v->value, "fxs_tr08")) { + ast_log(LOG_WARNING, "FXO interfaces with TR08 signaling? Are you sure?"); #ifdef ZAPATA_PRI } else if (!strcasecmp(v->value, "pri_net")) { cur_radio = 0; Index: configs/zapata.conf.sample =================================================================== RCS file: /usr/cvsroot/asterisk/configs/zapata.conf.sample,v retrieving revision 1.40 diff -u -r1.40 zapata.conf.sample --- configs/zapata.conf.sample 8 Feb 2005 07:49:40 -0000 1.40 +++ configs/zapata.conf.sample 17 Feb 2005 01:23:49 -0000 @@ -130,9 +130,11 @@ ; fxs_ls: FXS (Loop Start) ; fxs_gs: FXS (Ground Start) ; fxs_ks: FXS (Kewl Start) +; fxstr08: FXS (TR-08) ?? Unheard of ; fxo_ls: FXO (Loop Start) ; fxo_gs: FXO (Ground Start) ; fxo_ks: FXO (Kewl Start) +; fxotr08: FXO (TR-08) ; pri_cpe: PRI signalling, CPE side ; pri_net: PRI signalling, Network side ; gr303fxoks_net: GR-303 Signalling, FXO Loopstart, Network side