? x ? channels/chan_zap-tr08.diff Index: channels/chan_zap.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_zap.c,v retrieving revision 1.397 diff -u -r1.397 chan_zap.c --- channels/chan_zap.c 7 Jan 2005 21:18:00 -0000 1.397 +++ channels/chan_zap.c 9 Jan 2005 03:15:38 -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) @@ -644,7 +646,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) */) @@ -1036,6 +1038,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: @@ -1543,6 +1549,7 @@ case SIG_FXOLS: case SIG_FXOGS: case SIG_FXOKS: + case SIG_FXOTR08: if (p->owner == ast) { /* Normal ring, on hook */ @@ -1637,6 +1644,7 @@ case SIG_FXSLS: case SIG_FXSGS: case SIG_FXSKS: + case SIG_FXSTR08: case SIG_EMWINK: case SIG_EM: case SIG_EM_E1: @@ -2182,6 +2190,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 @@ -2197,6 +2206,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) { @@ -2297,6 +2307,7 @@ case SIG_FXSLS: case SIG_FXSGS: case SIG_FXSKS: + case SIG_FXSTR08: p->ringt = 0; /* Fall through */ case SIG_EM: @@ -2314,6 +2325,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) { @@ -3227,6 +3239,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 */ @@ -3359,6 +3372,7 @@ case SIG_FXOLS: case SIG_FXOGS: case SIG_FXOKS: + case SIG_FXOTR08: switch(ast->_state) { case AST_STATE_RINGING: zt_enable_ec(p); @@ -3425,6 +3439,7 @@ case SIG_FXSLS: case SIG_FXSGS: case SIG_FXSKS: + case SIG_FXSTR08: if (ast->_state == AST_STATE_RING) { p->ringt = RINGT; } @@ -3501,6 +3516,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; @@ -3657,6 +3673,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 @@ -3689,6 +3706,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: @@ -4344,7 +4362,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; @@ -4569,7 +4588,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; @@ -4954,6 +4974,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 @@ -5221,6 +5242,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... */ @@ -5696,6 +5718,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 */ @@ -5740,6 +5763,7 @@ case SIG_FXSLS: case SIG_FXSGS: case SIG_FXSKS: + case SIG_FXSTR08: i->ringt = RINGT; /* Fall through */ case SIG_EMWINK: @@ -5792,6 +5816,7 @@ switch(i->sig) { case SIG_FXOLS: case SIG_FXOGS: + case SIG_FXOTR08: case SIG_FEATD: case SIG_FEATDMF: case SIG_E911: @@ -5807,6 +5832,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); @@ -5838,6 +5864,7 @@ case SIG_FXSLS: case SIG_FXSKS: case SIG_FXSGS: + case SIG_FXSTR08: if (i->cid_start == CID_START_POLARITY) { ast_verbose(VERBOSE_PREFIX_2 "Starting post polarity " "CID detection on channel %d\n", @@ -6325,8 +6352,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; } @@ -6481,7 +6508,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) || @@ -6548,7 +6575,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; @@ -6702,7 +6730,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; } @@ -6771,7 +6800,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) { @@ -9564,6 +9594,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.36 diff -u -r1.36 zapata.conf.sample --- configs/zapata.conf.sample 28 Dec 2004 21:32:25 -0000 1.36 +++ configs/zapata.conf.sample 9 Jan 2005 03:15:38 -0000 @@ -107,9 +107,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