Index: wct1xxp.c =================================================================== RCS file: /usr/cvsroot/zaptel/wct1xxp.c,v retrieving revision 1.23 diff -u -r1.23 wct1xxp.c --- wct1xxp.c 15 Jan 2005 22:59:18 -0000 1.23 +++ wct1xxp.c 17 Feb 2005 02:29:01 -0000 @@ -790,8 +790,8 @@ for (x=0;xspan.channels;x++) { sprintf(wc->chans[x].name, "WCT1/%d/%d", wc->num, x + 1); wc->chans[x].sigcap = ZT_SIG_EM | ZT_SIG_CLEAR | ZT_SIG_EM_E1 | - ZT_SIG_FXSLS | ZT_SIG_FXSGS | - ZT_SIG_FXSKS | ZT_SIG_FXOLS | + ZT_SIG_FXSLS | ZT_SIG_FXSGS | ZT_SIG_FXOTR08 | + ZT_SIG_FXSKS | ZT_SIG_FXOLS | ZT_SIG_FXSTR08 | ZT_SIG_FXOGS | ZT_SIG_FXOKS | ZT_SIG_CAS | ZT_SIG_SF; wc->chans[x].pvt = wc; wc->chans[x].chanpos = x + 1; Index: wct4xxp.c =================================================================== RCS file: /usr/cvsroot/zaptel/wct4xxp.c,v retrieving revision 1.56 diff -u -r1.56 wct4xxp.c --- wct4xxp.c 15 Jan 2005 22:59:18 -0000 1.56 +++ wct4xxp.c 17 Feb 2005 02:29:03 -0000 @@ -589,7 +589,8 @@ struct zt_chan *mychans = wc->chans[x] + y; sprintf(mychans->name, "TE4/%d/%d/%d", wc->num, x + 1, y + 1); mychans->sigcap = ZT_SIG_EM | ZT_SIG_CLEAR | ZT_SIG_FXSLS | ZT_SIG_FXSGS | ZT_SIG_FXSKS | - ZT_SIG_FXOLS | ZT_SIG_FXOGS | ZT_SIG_FXOKS | ZT_SIG_CAS | ZT_SIG_EM_E1 | ZT_SIG_DACS_RBS; + ZT_SIG_FXOLS | ZT_SIG_FXOGS | ZT_SIG_FXOKS | ZT_SIG_CAS | ZT_SIG_EM_E1 | + ZT_SIG_DACS_RBS | ZT_SIG_FXOTR08 | ZT_SIG_FXSTR08; c = (x * wc->spans[x].channels) + y; mychans->pvt = wc; mychans->chanpos = y + 1; Index: zaptel.c =================================================================== RCS file: /usr/cvsroot/zaptel/zaptel.c,v retrieving revision 1.103 diff -u -r1.103 zaptel.c --- zaptel.c 15 Jan 2005 22:59:18 -0000 1.103 +++ zaptel.c 17 Feb 2005 02:29:12 -0000 @@ -36,7 +36,6 @@ * $Id: zaptel.c,v 1.103 2005/01/15 22:59:18 markster Exp $ */ - #include "zconfig.h" #include @@ -360,7 +359,7 @@ static struct zt_zone *tone_zones[ZT_TONE_ZONE_MAX]; -#define NUM_SIGS 10 +#define NUM_SIGS 12 static inline void rotate_sums(void) @@ -390,6 +389,8 @@ { ZT_SIG_FXOKS,0 | (ZT_ABIT << 8)}, { ZT_SIG_SF, 0}, { ZT_SIG_EM_E1, ZT_DBIT | ((ZT_ABIT | ZT_DBIT) << 8) }, + { ZT_SIG_FXOTR08,0 | (ZT_ABIT << 8)}, + { ZT_SIG_FXSTR08,0 | (ZT_ABIT << 8)}, } ; /* must have span to begin with */ @@ -447,6 +448,10 @@ return "DACS+RBS"; case ZT_SIG_SF: return "SF (ToneOnly)"; + case ZT_SIG_FXOTR08: + return "FXO TR-08"; + case ZT_SIG_FXSTR08: + return "FXS TR-08"; case ZT_SIG_NONE: default: return "Unconfigured"; @@ -1831,6 +1836,8 @@ ZT_BBIT | ZT_CBIT | ZT_DBIT }, /* no signalling */ { ZT_SIG_EM_E1, ZT_DBIT, ZT_ABIT | ZT_BBIT | ZT_DBIT, ZT_ABIT | ZT_BBIT | ZT_DBIT, ZT_DBIT }, /* E and M E1 */ + { ZT_SIG_FXOTR08, ZT_BBIT | ZT_DBIT, ZT_BBIT | ZT_DBIT, ZT_ABIT | ZT_CBIT | ZT_DBIT , ZT_ABIT | ZT_BBIT | ZT_DBIT }, /* FXO TR08 */ + { ZT_SIG_FXSTR08, ZT_BBIT | ZT_DBIT, ZT_BBIT | ZT_DBIT, ZT_ABIT | ZT_CBIT | ZT_DBIT , ZT_ABIT | ZT_BBIT | ZT_DBIT }, /* FXS TR08 */ } ; int x; @@ -4906,6 +4913,7 @@ case ZT_SIG_FXOLS: /* if FXO, its definitely on hook */ case ZT_SIG_FXOGS: case ZT_SIG_FXOKS: + case ZT_SIG_FXOTR08: __qevent(chan,ZT_EVENT_ONHOOK); chan->gotgs = 0; break; @@ -4952,7 +4960,11 @@ len = chan->curzone->ringcadence[chan->cadencepos]; } - zt_rbs_sethook(chan, ZT_TXSIG_OFFHOOK, ZT_TXSTATE_RINGOFF, len); + /* FXO TR08 makes use of TXSIG_KEWL for the RING_OFF state, everything else seems to use OFFHOOK */ + if (chan->sig == ZT_SIG_FXOTR08) + zt_rbs_sethook(chan, ZT_TXSIG_KEWL, ZT_TXSTATE_RINGOFF, len); + else + zt_rbs_sethook(chan, ZT_TXSIG_OFFHOOK, ZT_TXSTATE_RINGOFF, len); __qevent(chan, ZT_EVENT_RINGEROFF); break; @@ -5108,6 +5120,7 @@ /* fall through intentionally */ case ZT_SIG_FXOLS: /* FXO Loopstart */ case ZT_SIG_FXOKS: /* FXO Kewlstart */ + case ZT_SIG_FXOTR08: /* TR08 FXO Signaling */ switch(rxsig) { case ZT_RXSIG_OFFHOOK: /* went off hook */ /* if asserti ng ring, stop it */ @@ -5191,6 +5204,7 @@ case ZT_SIG_EM_E1: case ZT_SIG_FXOLS: /* FXO Loopstart */ case ZT_SIG_FXOKS: /* FXO Kewlstart */ + case ZT_SIG_FXOTR08: /* TR08 FXO */ if (cursig & ZT_ABIT) /* off hook */ __zt_hooksig_pvt(chan,ZT_RXSIG_OFFHOOK); else /* on hook */ Index: zaptel.conf.sample =================================================================== RCS file: /usr/cvsroot/zaptel/zaptel.conf.sample,v retrieving revision 1.17 diff -u -r1.17 zaptel.conf.sample --- zaptel.conf.sample 11 Dec 2004 04:30:25 -0000 1.17 +++ zaptel.conf.sample 17 Feb 2005 02:29:13 -0000 @@ -63,6 +63,8 @@ # "fxols" : Channel(s) are signalled using FXO Loopstart protocol. # "fxogs" : Channel(s) are signalled using FXO Groundstart protocol. # "fxoks" : Channel(s) are signalled using FXO Koolstart protocol. +# "fxotr08" : Channel(s) are signalled using FXO TR-08 protocol. +# "fxstr08" : Channel(s) are signalled using FXS TR-08 protocol (?? never heard of) # "sf" : Channel(s) are signalled using in-band single freq tone. # Syntax as follows: # channel# => sf:,,,,, Index: zaptel.h =================================================================== RCS file: /usr/cvsroot/zaptel/zaptel.h,v retrieving revision 1.41 diff -u -r1.41 zaptel.h --- zaptel.h 21 Jan 2005 01:46:41 -0000 1.41 +++ zaptel.h 17 Feb 2005 02:29:15 -0000 @@ -110,6 +110,9 @@ #define ZT_SIG_EM_E1 (1 << 17) /* E1 E&M Variation */ #define ZT_SIG_DACS_RBS ((1 << 18) | __ZT_SIG_DACS) /* Cross connect w/ RBS */ +#define ZT_SIG_FXOTR08 ((1 << 19) | __ZT_SIG_FXO) /* TR08 FXO */ +#define ZT_SIG_FXSTR08 ((1 << 20) | __ZT_SIG_FXS) /* TR08 FXS (currently unsupported) */ + /* tone flag values */ #define ZT_REVERSE_RXTONE 1 /* reverse polarity rx tone logic */ #define ZT_REVERSE_TXTONE 2 /* reverse polarity tx tone logic */ Index: ztcfg.c =================================================================== RCS file: /usr/cvsroot/zaptel/ztcfg.c,v retrieving revision 1.20 diff -u -r1.20 ztcfg.c --- ztcfg.c 10 Jan 2005 04:06:49 -0000 1.20 +++ ztcfg.c 17 Feb 2005 02:29:16 -0000 @@ -457,6 +457,12 @@ } else if (!strcasecmp(keyword, "fxoks")) { sig[x] = "FXO Kewlstart"; cc[x].sigtype = ZT_SIG_FXOKS; + } else if (!strcasecmp(keyword, "fxotr08")) { + sig[x] = "FXO TR08"; + cc[x].sigtype = ZT_SIG_FXOTR08; + } else if (!strcasecmp(keyword, "fxstr08")) { + sig[x] = "FXS TR08"; + cc[x].sigtype = ZT_SIG_FXSTR08; } else if (!strcasecmp(keyword, "cas") || !strcasecmp(keyword, "user")) { if (parse_idle(&cc[x].idlebits, idle)) return -1; @@ -1049,6 +1055,8 @@ { "dacs", chanconfig }, { "dacsrbs", chanconfig }, { "user", chanconfig }, + { "fxotr08", chanconfig }, + { "fxstr08", chanconfig }, { "alaw", setlaw }, { "mulaw", setlaw }, { "deflaw", setlaw }, Index: ztdynamic.c =================================================================== RCS file: /usr/cvsroot/zaptel/ztdynamic.c,v retrieving revision 1.11 diff -u -r1.11 ztdynamic.c --- ztdynamic.c 15 Jan 2005 22:59:18 -0000 1.11 +++ ztdynamic.c 17 Feb 2005 02:29:17 -0000 @@ -597,7 +597,8 @@ sprintf(z->chans[x].name, "ZTD/%s/%s/%d", zds->driver, zds->addr, x+1); z->chans[x].sigcap = ZT_SIG_EM | ZT_SIG_CLEAR | ZT_SIG_FXSLS | ZT_SIG_FXSKS | ZT_SIG_FXSGS | ZT_SIG_FXOLS | - ZT_SIG_FXOKS | ZT_SIG_FXOGS | ZT_SIG_SF; + ZT_SIG_FXOKS | ZT_SIG_FXOGS | ZT_SIG_SF | + ZT_SIG_FXSTR08 | ZT_SIG_FXOTR08; z->chans[x].chanpos = x + 1; z->chans[x].pvt = z; }