diff -Nru zaptel-1.4.12.1/kernel/fxo_modes.h zaptel-cnet-1.4.12.1/kernel/fxo_modes.h --- zaptel-1.4.12.1/kernel/fxo_modes.h 2008-08-13 18:22:33.000000000 -0500 +++ zaptel-cnet-1.4.12.1/kernel/fxo_modes.h 2009-07-15 14:24:45.080212495 -0500 @@ -51,6 +51,97 @@ .battalarm = 1000, .battthresh = 3, }, + /* (CNET) Special "FCC" zones for frequency-selective ringers */ + { .name = "FCC17", + .rt = 1, + .dcv = 0x3, + .battdebounce = 64, + .battalarm = 1000, + .battthresh = 3, + .acim = 0x2, + .ring_osc = 0x7f4c, /* 16.67 Hz */ + }, + { .name = "FCC25", + .rt = 1, + .dcv = 0x3, + .battdebounce = 64, + .battalarm = 1000, + .battthresh = 3, + .acim = 0x2, + .ring_osc = 0x7e6c, + }, + { .name = "FCC30", + .rt = 1, + .dcv = 0x3, + .battdebounce = 64, + .battalarm = 1000, + .battthresh = 3, + .acim = 0x2, + .ring_osc = 0x7dbb, + }, + { .name = "FCC33", + .rt = 1, + .dcv = 0x3, + .battdebounce = 64, + .battalarm = 1000, + .battthresh = 3, + .acim = 0x2, + .ring_osc = 0x7d34, /* 33.33 Hz */ + }, + { .name = "FCC40", + .rt = 1, + .dcv = 0x3, + .battdebounce = 64, + .battalarm = 1000, + .battthresh = 3, + .acim = 0x2, + .ring_osc = 0x7bfa, + }, + { .name = "FCC42", + .rt = 1, + .dcv = 0x3, + .battdebounce = 64, + .battalarm = 1000, + .battthresh = 3, + .acim = 0x2, + .ring_osc = 0x7b91, + }, + { .name = "FCC50", + .rt = 1, + .dcv = 0x3, + .battdebounce = 64, + .battalarm = 1000, + .battthresh = 3, + .acim = 0x2, + .ring_osc = 0x79bc, + }, + { .name = "FCC54", + .rt = 1, + .dcv = 0x3, + .battdebounce = 64, + .battalarm = 1000, + .battthresh = 3, + .acim = 0x2, + .ring_osc = 0x78b3, + }, + { .name = "FCC60", + .rt = 1, + .dcv = 0x3, + .battdebounce = 64, + .battalarm = 1000, + .battthresh = 3, + .acim = 0x2, + .ring_osc = 0x7702, + }, + { .name = "FCC67", + .rt = 1, + .dcv = 0x3, + .battdebounce = 64, + .battalarm = 1000, + .battthresh = 3, + .acim = 0x2, + .ring_osc = 0x74ef, /* 66.66 Hz */ + }, /* Austria, Belgium, Denmark, Finland, France, Germany, Greece, Iceland, Ireland, Italy, Luxembourg, Netherlands, Norway, Portugal, Spain, Sweden, Switzerland, and UK */ diff -Nru zaptel-1.4.12.1/kernel/wctdm.c zaptel-cnet-1.4.12.1/kernel/wctdm.c --- zaptel-1.4.12.1/kernel/wctdm.c 2008-08-20 16:30:49.000000000 -0500 +++ zaptel-cnet-1.4.12.1/kernel/wctdm.c 2009-07-15 14:24:45.080212495 -0500 @@ -959,7 +959,10 @@ hook = (res & 1); if (hook != wc->mod[card].fxs.lastrxhook) { /* Reset the debounce (must be multiple of 4ms) */ - wc->mod[card].fxs.debounce = 8 * (4 * 8); +/* (CNET) PULSE DIALING FIX! SEE: + http://www.voip-info.org/wiki/index.php?page=Asterisk+zaptel+pulse+dialing */ + /* wc->mod[card].fxs.debounce = 8 * (4 * 8); */ + wc->mod[card].fxs.debounce = 4 * (4 * 8); #if 0 printk("Resetting debounce card %d hook %d, %d\n", card, hook, wc->mod[card].fxs.debounce); #endif diff -Nru zaptel-1.4.12.1/kernel/zaptel-base.c zaptel-cnet-1.4.12.1/kernel/zaptel-base.c --- zaptel-1.4.12.1/kernel/zaptel-base.c 2008-09-03 13:52:46.000000000 -0500 +++ zaptel-cnet-1.4.12.1/kernel/zaptel-base.c 2009-07-15 14:24:45.080212495 -0500 @@ -3093,7 +3093,18 @@ default: if ((c != 'W') && (chan->digitmode == DIGIT_MODE_PULSE)) { if ((c >= '0') && (c <= '9') && (chan->txhooksig == ZT_TXSIG_OFFHOOK)) { - chan->pdialcount = (c == '0') ? 10 : c - '0'; + /* (CNET) Dial pulse mappings for FXO ports */ + switch(chan->map_pulse) + { + case MAP_PULSE_NZ_OSLO: /* 0=10 pulses, 1=9 pulses, ... 9=1 pulse */ + chan->pdialcount = 10 - (c - '0'); + break; + case MAP_PULSE_SWEDEN: /* 0=1 pulse, 1=2 pulses, 9=10 pulses */ + chan->pdialcount = (c - '0') + 1; + break; + default: + chan->pdialcount = (c == '0') ? 10 : c - '0'; + } zt_rbs_sethook(chan, ZT_TXSIG_ONHOOK, ZT_TXSTATE_PULSEBREAK, chan->pulsebreaktime); return; @@ -3891,6 +3902,12 @@ !(chans[ch.chan]->flags & ZT_FLAG_NETDEV)) printk("Unable to register HDLC device for channel %s\n", chans[ch.chan]->name); if (!res) { + /* (CNET) Ignore remote hookflash? */ + chans[ch.chan]->ignoreflash = ch.ignoreflash; + /* (CNET) Use Oslo/NZ or Swedish pulse mapping? */ + chans[ch.chan]->map_pulse = ch.map_pulse; + /* (CNET) Make outpulsing audible */ + chans[ch.chan]->hearpulsing = ch.hearpulsing; /* Setup default law */ chans[ch.chan]->deflaw = ch.deflaw; /* Copy back any modified settings */ @@ -5058,6 +5075,7 @@ if (rv) return rv; break; case ZT_FLASH: + if(chan->ignoreflash) break; /* (CNET) Ignore remote hookflash */ spin_lock_irqsave(&chan->lock, flags); if (chan->txstate != ZT_TXSTATE_OFFHOOK) { spin_unlock_irqrestore(&chan->lock, flags); @@ -6442,13 +6460,17 @@ short putlin[ZT_CHUNKSIZE],k[ZT_CHUNKSIZE]; int x,r; - if (ms->dialing) ms->afterdialingtimer = 50; - else if (ms->afterdialingtimer) ms->afterdialingtimer--; - if (ms->afterdialingtimer && (!(ms->flags & ZT_FLAG_PSEUDO))) { - /* Be careful since memset is likely a macro */ - rxb[0] = ZT_LIN2X(0, ms); - memset(&rxb[1], rxb[0], ZT_CHUNKSIZE - 1); /* receive as silence if dialing */ - } + /* (CNET) Allow caller to hear outpulsing if hearpulsing is true. + NOTE: This also requires a patched chan_zap with its own hearpulsing option! */ + if(!ms->hearpulsing) { + if (ms->dialing) ms->afterdialingtimer = 50; + else if (ms->afterdialingtimer) ms->afterdialingtimer--; + if (ms->afterdialingtimer && (!(ms->flags & ZT_FLAG_PSEUDO))) { + /* Be careful since memset is likely a macro */ + rxb[0] = ZT_LIN2X(0, ms); + memset(&rxb[1], rxb[0], ZT_CHUNKSIZE - 1); /* receive as silence if dialing */ + } + } for (x=0;xrxgain[rxb[x]]; putlin[x] = ZT_XLAW(rxb[x], ms); @@ -7511,6 +7533,14 @@ __qevent(&span->chans[x], ZT_EVENT_PULSEDIGIT | '#'); } else if (span->chans[x].pulsecount > 10) { __qevent(&span->chans[x], ZT_EVENT_PULSEDIGIT | '*'); + } else if (span->chans[x].map_pulse == MAP_PULSE_NZ_OSLO) { + /* (CNET) NZ/Oslo pluse mapping */ + __qevent(&span->chans[x], ZT_EVENT_PULSEDIGIT | ('0' + + (10 - span->chans[x].pulsecount))); + } else if (span->chans[x].map_pulse == MAP_PULSE_SWEDEN) { + /* (CNET) Swedish pulse mapping */ + __qevent(&span->chans[x], ZT_EVENT_PULSEDIGIT | ('0' + + (span->chans[x].pulsecount - 1))); } else if (span->chans[x].pulsecount > 9) { __qevent(&span->chans[x], ZT_EVENT_PULSEDIGIT | '0'); } else { diff -Nru zaptel-1.4.12.1/kernel/zaptel.h zaptel-cnet-1.4.12.1/kernel/zaptel.h --- zaptel-1.4.12.1/kernel/zaptel.h 2008-08-19 15:14:25.000000000 -0500 +++ zaptel-cnet-1.4.12.1/kernel/zaptel.h 2009-07-15 14:24:45.080212495 -0500 @@ -33,6 +33,13 @@ */ #ifndef _LINUX_ZAPTEL_H + +/* Activate CNET-specific features in Asterisk-CNET. */ +/* Since 1.4 uses chan_dahdi, this is the define to use. */ +#ifndef DAHDI_CNET +#define DAHDI_CNET +#endif + #define _LINUX_ZAPTEL_H #ifdef __KERNEL__ @@ -344,6 +351,10 @@ int sync; /* what level of sync source we are */ } ZT_LINECONFIG; +#define MAP_PULSE_NONE 0 +#define MAP_PULSE_NZ_OSLO 1 +#define MAP_PULSE_SWEDEN 2 + typedef struct zt_chanconfig { int chan; /* Channel we're applying this to (0 to use name) */ @@ -353,6 +364,9 @@ int master; /* Master channel if sigtype is ZT_SLAVE */ int idlebits; /* Idle bits (if this is a CAS channel) or channel to monitor (if this is DACS channel) */ +int ignoreflash; /* (CNET) Force FXO to ignore flash signals */ +int map_pulse; /* (CNET) Use Oslo/NZ or Swedish pulse dial mappings */ +int hearpulsing; /* (CNET) Make outpulsing audible to caller */ char netdev_name[16]; /*name for the hdlc network device*/ } ZT_CHANCONFIG; @@ -829,6 +843,7 @@ #define ZT_TONE_CUST1 8 #define ZT_TONE_CUST2 9 #define ZT_TONE_STUTTER 10 +#define ZT_TONE_SECONDDIALTONE 11 /* (CNET) Secondary dialtone */ #define ZT_TONE_MAX 16 #define ZT_TONE_DTMF_BASE 64 @@ -1490,6 +1505,9 @@ devfs_handle_t fhandle; /* File handle in devfs for the channel */ devfs_handle_t fhandle_symlink; #endif /* CONFIG_DEVFS_FS */ + short ignoreflash; /* (CNET) Force FXO channel to ignore flash signals */ + short map_pulse; /* (CNET) Use Oslo/NZ or Swedish pulse dial mappings */ + short hearpulsing; /* (CNET) Make outpulsing audible to caller */ }; /* defines for transmit signalling */ diff -Nru zaptel-1.4.12.1/kernel/ztdummy.c zaptel-cnet-1.4.12.1/kernel/ztdummy.c --- zaptel-1.4.12.1/kernel/ztdummy.c 2008-08-13 19:58:36.000000000 -0500 +++ zaptel-cnet-1.4.12.1/kernel/ztdummy.c 2009-07-15 14:25:01.270272747 -0500 @@ -90,6 +90,18 @@ #endif #include "ztdummy.h" +#if defined(USE_HIGHRESTIMER) && ( LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28) ) +/* compatibility with new hrtimer interface */ +static inline ktime_t hrtimer_get_expires(const struct hrtimer *timer) +{ + return timer->expires; +} + +static inline void hrtimer_set_expires(struct hrtimer *timer, ktime_t time) +{ + timer->expires = time; +} +#endif static struct ztdummy *ztd; @@ -199,7 +211,7 @@ * expired. * We should worry if overrun is 2 or more; then we really missed * a tick */ - overrun = hrtimer_forward(&zaptimer, htmr->expires, + overrun = hrtimer_forward(&zaptimer, hrtimer_get_expires(htmr), ktime_set(0, ZAPTEL_TIME_NS)); if(overrun > 1) { if(printk_ratelimit()) @@ -222,7 +234,7 @@ /* use kernel system tick timer if PC architecture RTC is not available */ static void ztdummy_timer(unsigned long param) { - timer.expires = jiffies + 1; + hrtimer_set_expires(timer, jiffies + 1); add_timer(&timer); ztd->counter += ZAPTEL_TIME; diff -Nru zaptel-1.4.12.1/Makefile zaptel-cnet-1.4.12.1/Makefile --- zaptel-1.4.12.1/Makefile 2008-09-08 18:32:08.000000000 -0500 +++ zaptel-cnet-1.4.12.1/Makefile 2009-07-15 14:24:45.080212495 -0500 @@ -249,6 +249,9 @@ endif endif +# (CNET) Mark this version as CNET +ZAPTELVERSION:="${ZAPTELVERSION}-cnet" + LTZ_A:=libtonezone.a LTZ_A_OBJS:=zonedata.o tonezone.o LTZ_SO:=libtonezone.so diff -Nru zaptel-1.4.12.1/READMEFIRST.cnet zaptel-cnet-1.4.12.1/READMEFIRST.cnet --- zaptel-1.4.12.1/READMEFIRST.cnet 1969-12-31 18:00:00.000000000 -0600 +++ zaptel-cnet-1.4.12.1/READMEFIRST.cnet 2009-07-15 14:24:45.080212495 -0500 @@ -0,0 +1,128 @@ +zaptel-cnet: Zaptel with adaptations for antique telephony, especially +intended for use with CNET, the Telephone Collector's Network. + +This driver is intended as a companion to asterisk-cnet, a modified +version of Asterisk. It MAY be used with standard Asterisk, but +asterisk-cnet MUST be used with zaptel-cnet. + +Modifications done by Russ Price , with audible +pulsing code by Max Parke. + +Latest changes: +2009-07-15: 1.4 version (1.4.12.1) based on older 1.2 patch set. + Note that DAHDI drivers are also available and + preferred for 1.4 installations. + +This is a modified version of Digium's Zaptel device drivers for +telephony interfaces; especially, the wctdm driver for the TDM400P +analog telephone interface card. It provides the following features: + + * the ability to force the TDM400P FXS ports to provide ring current + at a specific frequency, intended for US phones with frequency- + selective party line ringers + * improved pulse dialing on TDM400P FXS ports + * three additional call progress tone sets, usable on any FXS port + * an ignoreflash keyword that may be used in your /etc/zaptel.conf + file to cause FXO ports to ignore a remote hookflash + * dial pulse mappings for New Zealand (or Oslo, Norway), and Sweden + * FXO pulse dial pause fix - "W" in dial strings will pause even if + the FXO is set for pulse dialing + * audible pulsing option; requires the CNET-modified Asterisk in + addition to the modified Zaptel + +Quick Install: + + cd /usr/src/zaptel-1.2.26-cnet + + make + + make install + + +Making use of the features: + + * Ignore hookflash: If your TDM400P has FXO ports on channels 1 and + 2, and FXS ports on 3 and 4, you could tell the FXOs to ignore a + remote hookflash as follows: + + fxsks=1-2 + ignoreflash=1-2 + fxoks=3-4 + # use my PBX tones instead of standard tones on the FXS ports + loadzone=xp + defaultzone=xp + + * Dial pulse mapping: If you have rotary-dial phones with NZ/Oslo or + Swedish dial arrangements, you can set FXS channels like so: + + pulse_nz_oslo=8 + pulse_sweden=17-18 + + Note that dial pulse mapping will work on T1/E1 channels as well + as on TDM400P cards. The ignoreflash keyword will also work. + +UPDATE 2-27-07: Dial pulse mapping now works for FXO ports as well as +FXS. Use the same syntax above. + +(3-31-07) WARNING: Pulse dialing on T1 channel bank FXO ports may or may +not work for you! I've noticed that the pulses from an FXO on an Adtran +750 channel bank are rather irregular-sounding, and also sound like they +have an improper break/make ratio. If you need to pulse dial into a step +switch, I suggest using either a TDM400P or X100P card! + + * Pause fix for FXO pulse dialing: Just use a "w" in the dial + string, just like you would for DTMF. + + * Audible pulsing: If you want callers to hear your Asterisk box + pulsing into your step switch, you will need to use the modified + Asterisk as well as the modified Zaptel. You will then need to + activate audible pulsing on the channels where you want it in both + /etc/zaptel.conf and /etc/asterisk/zapata.conf for this to work. + + /etc/zaptel.conf: + + hearpulsing=2-3 + + /etc/asterisk/zapata.conf: + + ; be sure to apply other settings to these channels + hearpulsing=yes + channel => 2 + channel => 3 + + * FXS port ring frequency: set when loading the wctdm module. The + command line passed to modprobe would take the form: + + modprobe wctdm opermode=FCC30 fxshonormode=1 boostringer=1 + + Modes available are: + + * FCC17 (16.67 Hz) + * FCC25 (25 Hz) + * FCC30 (30 Hz) + * FCC33 (33.33 Hz) + * FCC40 (40 Hz) + * FCC42 (42 Hz) + * FCC50 (50 Hz) + * FCC54 (54 Hz) + * FCC60 (60 Hz) + * FCC67 (66.66 Hz) + + The standard FCC mode is 20 Hz. + + NOTE: Changing the opermode parameter affects all FXS ports on the + card. This may change in a future release. + + * Extra call progress tone zones: these require changes in + /etc/asterisk/zapata.conf and /etc/zaptel.conf. + + /etc/zaptel.conf: + + loadzone=xm # Re-creation of the 1960 Bell Labs experimental + # ESS in Morris, Illinois + loadzone=xp # North America (PBX tones) + loadzone=xu # Old-style UK tones + + /etc/asterisk/zapata.conf + + # Use tonezone=100 for xm, 101 for xp, 102 for xu diff -Nru zaptel-1.4.12.1/tonezone.c zaptel-cnet-1.4.12.1/tonezone.c --- zaptel-1.4.12.1/tonezone.c 2008-08-13 19:58:36.000000000 -0500 +++ zaptel-cnet-1.4.12.1/tonezone.c 2009-07-15 14:24:45.080212495 -0500 @@ -204,6 +204,8 @@ return "Special Information"; case ZT_TONE_STUTTER: return "Stutter Dialtone"; + case ZT_TONE_SECONDDIALTONE: /* (CNET) */ + return "Secondary Dialtone"; default: snprintf(tmp, sizeof(tmp), "Unknown tone %d", id); return tmp; diff -Nru zaptel-1.4.12.1/zonedata.c zaptel-cnet-1.4.12.1/zonedata.c --- zaptel-1.4.12.1/zonedata.c 2008-08-13 19:58:36.000000000 -0500 +++ zaptel-cnet-1.4.12.1/zonedata.c 2009-07-15 14:24:45.080212495 -0500 @@ -48,6 +48,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,0" }, { ZT_TONE_STUTTER, "!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440" }, + { ZT_TONE_SECONDDIALTONE, "350+440" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -69,6 +70,7 @@ { ZT_TONE_RECORDTONE, "!425/1000,!0/15000,425/360,0/15000" }, { ZT_TONE_INFO, "425/2500,0/500" }, { ZT_TONE_STUTTER, "413+438/100,0/40" }, + { ZT_TONE_SECONDDIALTONE, "413+438" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -94,6 +96,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,0" }, { ZT_TONE_STUTTER, "!440/100,!0/100,!440/100,!0/100,!440/100,!0/100,!440/100,!0/100,!440/100,!0/100,!440/100,!0/100,440" }, + { ZT_TONE_SECONDDIALTONE, "440" }, }, .dtmf_high_level = -11, .dtmf_low_level = -9, @@ -118,6 +121,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, { ZT_TONE_INFO, "950/330,1400/330,1800/330,0/1000" }, { ZT_TONE_STUTTER, "425/500,0/50" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -11, .dtmf_low_level = -9, @@ -139,6 +143,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/60000" }, { ZT_TONE_INFO, "950/330,0/15,1400/330,0/15,1800/330,0/1000" }, { ZT_TONE_STUTTER, "350+440/750,440/750" }, + { ZT_TONE_SECONDDIALTONE, "350+440" }, }, .dtmf_high_level = -11, .dtmf_low_level = -13, @@ -159,6 +164,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, { ZT_TONE_INFO, "950/650,0/325,950/325,0/30,1400/1300,0/2600" }, { ZT_TONE_STUTTER, "425/650,0/25" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -11, .dtmf_low_level = -9, @@ -179,6 +185,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, { ZT_TONE_INFO, "950/330,0/1000" }, { ZT_TONE_STUTTER, "425/500,0/50" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -11, .dtmf_low_level = -13, @@ -199,6 +206,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,0" }, { ZT_TONE_STUTTER, "!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,400" }, + { ZT_TONE_SECONDDIALTONE, "400" }, }, .dtmf_high_level = -7, .dtmf_low_level = -7, @@ -219,6 +227,7 @@ { ZT_TONE_RECORDTONE, "1400/400,0/15000" }, { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0" }, { ZT_TONE_STUTTER, "470/400,425/400" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -241,6 +250,7 @@ { ZT_TONE_RECORDTONE, "1400/80,0/14920" }, { ZT_TONE_INFO, "950/330,1450/330,1850/330,0/1000" }, { ZT_TONE_STUTTER, "380+420" }, + { ZT_TONE_SECONDDIALTONE, "420" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -261,6 +271,7 @@ { ZT_TONE_RECORDTONE, "1400/425,0/15000" }, { ZT_TONE_INFO, "400/750,0/100,400/750,0/100,400/750,0/100,400/750,0/400" }, { ZT_TONE_STUTTER, "!400/100!0/100,!400/100,!0/100,!400/100,!0/100,!400/100!0/100,!400/100,!0/100,!400/100,!0/100,400" }, + { ZT_TONE_SECONDDIALTONE, "400" }, }, .dtmf_high_level = -11, .dtmf_low_level = -9, @@ -282,6 +293,7 @@ { ZT_TONE_RECORDTONE, "1400/400,0/15000" }, { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0" }, { ZT_TONE_STUTTER, "470/400,425/400" }, + { ZT_TONE_SECONDDIALTONE, "425/200,0/200,425/600,0/1000" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -302,6 +314,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,0" }, { ZT_TONE_STUTTER, "!600*120/100,!0/100,!600*120/100,!0/100,!600*120/100,!0/100,!600*120/100,!0/100,!600*120/100,!0/100,!600*120/100,!0/100,600*120" }, + { ZT_TONE_SECONDDIALTONE, "600*120" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -322,6 +335,7 @@ { ZT_TONE_RECORDTONE, "1400/400,0/15000" }, { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0" }, { ZT_TONE_STUTTER, "425/650,0/25" }, + { ZT_TONE_SECONDDIALTONE, "425/200,0/300,425/700,0/800" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -342,6 +356,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,0" }, { ZT_TONE_STUTTER, "!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440" }, + { ZT_TONE_SECONDDIALTONE, "350+440" }, }, .dtmf_high_level = -11, .dtmf_low_level = -9, @@ -362,6 +377,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, { ZT_TONE_INFO, "!950/333,!1400/333,!1800/333,0" }, { ZT_TONE_STUTTER, "!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,400" }, + { ZT_TONE_SECONDDIALTONE, "400" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -387,6 +403,7 @@ "!950/332,!0/24,!1400/332,!0/24,!1800/332,0" }, /*{ ZT_TONE_STUTTER, "425/320,0/20" }, Real swedish standard, not used for now */ { ZT_TONE_STUTTER, "!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -9, .dtmf_low_level = -10, @@ -410,6 +427,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, { ZT_TONE_INFO, "900/330,1400/330,1800/330,0/1000" }, { ZT_TONE_STUTTER, "425/1000,0/250" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -433,6 +451,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, { ZT_TONE_INFO, "950/330,1400/330,1800/330,0/1000" }, { ZT_TONE_STUTTER, "!425/200,!0/200,!425/600,!0/200,!425/200,!0/200,!425/600,!0/200,!425/200,!0/200,!425/600,!0/200,!425/200,!0/200,!425/600,!0/200,425" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -11, .dtmf_low_level = -9, @@ -453,6 +472,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, { ZT_TONE_INFO, "1000/330,1400/330,1800/330,0/1000" }, { ZT_TONE_STUTTER, "!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,414" }, + { ZT_TONE_SECONDDIALTONE, "414" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -472,7 +492,9 @@ { ZT_TONE_DIALRECALL, "350+440" }, { ZT_TONE_RECORDTONE, "425/250,0/250" }, { ZT_TONE_INFO, "950/330,1400/330,1800/330" }, - { ZT_TONE_STUTTER, "350+440" } }, + { ZT_TONE_STUTTER, "350+440" }, + { ZT_TONE_SECONDDIALTONE, "425" }, + }, .dtmf_high_level = -10, .dtmf_low_level = -12, .mfr1_level = -10, @@ -494,6 +516,7 @@ { ZT_TONE_RECORDTONE, "1400/400,0/15000" }, { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0" }, { ZT_TONE_STUTTER, "350+375+400" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -518,6 +541,7 @@ { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0" }, /* STUTTER not specified */ { ZT_TONE_STUTTER, "!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -542,6 +566,7 @@ { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,0" }, /* STUTTER not specified */ { ZT_TONE_STUTTER, "!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -565,6 +590,7 @@ { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0" }, /* STUTTER not specified */ { ZT_TONE_STUTTER, "!400*33/100,!0/100,!400*33/100,!0/100,!400*33/100,!0/100,!400*33/100,!0/100,!400*33/100,!0/100,!400*33/100,!0/100,400*33" }, + { ZT_TONE_SECONDDIALTONE, "400*33" }, }, .dtmf_high_level = -11, .dtmf_low_level = -13, @@ -588,6 +614,7 @@ { ZT_TONE_INFO, "950/330,1400/330,1800/330,0/1000" }, /* STUTTER not specified */ { ZT_TONE_STUTTER, "!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -612,6 +639,7 @@ { ZT_TONE_INFO, "950/0,0/325,950/325,0/30,1400/1300,0/2600" }, /* STUTTER not specified */ { ZT_TONE_STUTTER, "!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -632,6 +660,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, { ZT_TONE_INFO, "950/330,0/30,1400/330,0/30,1800/330,0/1000" }, { ZT_TONE_STUTTER, "!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -8, .dtmf_low_level = -6, @@ -657,6 +686,7 @@ { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,0/1000" }, /* STUTTER - not specified */ { ZT_TONE_STUTTER, "!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440" }, + { ZT_TONE_SECONDDIALTONE, "400*25" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -680,6 +710,7 @@ { ZT_TONE_RECORDTONE, "1400/80,0/15000" }, { ZT_TONE_INFO, "950/330,1400/330,1800/330,0/1000" }, { ZT_TONE_STUTTER, "425+400" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -11, .dtmf_low_level = -9, @@ -703,6 +734,7 @@ { ZT_TONE_RECORDTONE, "1400/80,0/15000" }, { ZT_TONE_INFO, "950/330,1400/330,1800/330,0/1000" }, { ZT_TONE_STUTTER, "425+340/1100,0/1100" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -727,6 +759,7 @@ { ZT_TONE_INFO, "950/330,1400/330,1800/330,0/1000" }, /* STUTTER - not specified */ { ZT_TONE_STUTTER, "425/450,0/50" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -751,6 +784,7 @@ { ZT_TONE_INFO, "950/330,0/30,1400/330,0/30,1800/330,0/1000" }, /* STUTTER - not specified */ { ZT_TONE_STUTTER, "425/450,0/50" }, + { ZT_TONE_SECONDDIALTONE, "425/330,0/330,425/660,0/660" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -773,6 +807,7 @@ { ZT_TONE_INFO, "450/100,0/100,450/100,0/100,450/100,0/100,450/400,0/400" }, /* STUTTER - not specified */ { ZT_TONE_STUTTER, "450+425" }, + { ZT_TONE_SECONDDIALTONE, "450" }, }, .dtmf_high_level = -11, .dtmf_low_level = -9, @@ -793,6 +828,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/14000" }, { ZT_TONE_INFO, "425/100,0/100" }, { ZT_TONE_STUTTER, "425/450,0/50" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -11, .dtmf_low_level = -9, @@ -813,6 +849,7 @@ { ZT_TONE_RECORDTONE, "1400/500,0/60000" }, { ZT_TONE_INFO, "950/330,0/15,1400/330,0/15,1800/330,0/1000" }, { ZT_TONE_STUTTER, "450+425" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -838,6 +875,7 @@ { ZT_TONE_INFO, "950/330,1400/330,1800/330" }, /* STUTTER - not specified */ { ZT_TONE_STUTTER, "!400/200,!0/200,!400/600,!0/200,!400/200,!0/200,!400/600,!0/200,!400/200,!0/200,!400/600,!0/200,!400/200,!0/200,!400/600,!0/200,400" }, + { ZT_TONE_SECONDDIALTONE, "400*50" }, }, .dtmf_high_level = -11, .dtmf_low_level = -9, @@ -859,6 +897,7 @@ { ZT_TONE_RECORDTONE, "1400/425,0/15000" }, { ZT_TONE_INFO, "950/330,1400/330,1800/330,0/1000" }, { ZT_TONE_STUTTER, "425/1500,0/100" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -881,6 +920,7 @@ { ZT_TONE_INFO, "!950/330,!1440/330,!1800/330,0/1000" }, /* STUTTER - not specified */ { ZT_TONE_STUTTER, "!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -7, .dtmf_low_level = -9, @@ -906,6 +946,7 @@ { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,0" }, /* STUTTER TONE - not specified */ { ZT_TONE_STUTTER, "!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440" }, + { ZT_TONE_SECONDDIALTONE, "425" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, @@ -928,6 +969,94 @@ { ZT_TONE_RECORDTONE, "1400/400,0/15000" }, { ZT_TONE_INFO, "950/330,1440/330,1800/330,0/1000" }, { ZT_TONE_STUTTER, "!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425" }, + { ZT_TONE_SECONDDIALTONE, "425" }, + }, + .dtmf_high_level = -10, + .dtmf_low_level = -10, + .mfr1_level = -10, + .mfr2_level = -8, + }, + { + .zone = 100, + .country = "xm", + .description = "Morris, IL experimental ESS (ca. 1960)", + .ringcadence = { 2000, 2000 }, + .tones = { + { ZT_TONE_DIALTONE, "560+690" }, + { ZT_TONE_BUSY, "560+690/500,0/500" }, + { ZT_TONE_RINGTONE, "430+454/2000,0/2000" }, + { ZT_TONE_CONGESTION, "560+690/300,0/200" }, + { ZT_TONE_CALLWAIT, "591/300,0/10000" }, + { ZT_TONE_DIALRECALL, "!560+690/100,!0/100,!560+690/100,!0/100,!560+690/100,!0/100,560+690" }, + { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, + { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,0" }, + { ZT_TONE_STUTTER, "!560+690/100,!0/100,!560+690/100,!0/100,!560+690/100,!0/100,!560+690/100,!0/100,!560+690/100,!0/100,!560+690/100,!0/100,560+690" }, + { ZT_TONE_SECONDDIALTONE, "350+440" }, + }, + .dtmf_high_level = -10, + .dtmf_low_level = -10, + .mfr1_level = -10, + .mfr2_level = -8, + }, + { + .zone = 101, + .country = "xp", + .description = "North America (PBX)", + .ringcadence = { 2000, 4000 }, + .tones = { + { ZT_TONE_DIALTONE, "500+640" }, + { ZT_TONE_BUSY, "480+620/500,0/500" }, + { ZT_TONE_RINGTONE, "440+480/2000,0/4000" }, + { ZT_TONE_CONGESTION, "480+620/250,0/250" }, + { ZT_TONE_CALLWAIT, "440/300,0/10000" }, + { ZT_TONE_DIALRECALL, "!500+640/100,!0/100,!500+640/100,!0/100,!500+640/100,!0/100,500+640" }, + { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, + { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,0" }, + { ZT_TONE_STUTTER, "!500+640/100,!0/100,!500+640/100,!0/100,!500+640/100,!0/100,!500+640/100,!0/100,!500+640/100,!0/100,!500+640/100,!0/100,500+640" }, + { ZT_TONE_SECONDDIALTONE, "350+440" }, + }, + .dtmf_high_level = -10, + .dtmf_low_level = -10, + .mfr1_level = -10, + .mfr2_level = -8, + }, + { + .zone = 102, + .country = "xu", + .description = "United Kingdom (old-style tones)", + .ringcadence = { 400, 200, 400, 2000 }, + .tones = { + { ZT_TONE_DIALTONE, "33/16,0/16" }, + { ZT_TONE_BUSY, "400/375,0/375" }, + { ZT_TONE_RINGTONE, "388+413/400,0/200,388+413/400,0/2000" }, + { ZT_TONE_CONGESTION, "400/400,0/350,400/225,0/525" }, + { ZT_TONE_CALLWAIT, "400/100,0/4000" }, + { ZT_TONE_DIALRECALL, "!400/100,!0/100,!400/100,!0/100,!400/100,0/100,33/16,0/16" }, + { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, + { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,0" }, + { ZT_TONE_STUTTER, "!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,33/16,0/16" }, + { ZT_TONE_SECONDDIALTONE, "350+440" }, + }, + .dtmf_high_level = -9, + .dtmf_low_level = -11, + .mfr1_level = -7, + .mfr2_level = -8, + }, + { .zone = 103, + .country = "x1", + .description = "US / N. America with secondary dialtone", + .ringcadence = { 2000, 4000 }, + .tones = { + { ZT_TONE_DIALTONE, "350+440" }, + { ZT_TONE_BUSY, "480+620/500,0/500" }, + { ZT_TONE_RINGTONE, "440+480/2000,0/4000" }, + { ZT_TONE_CONGESTION, "480+620/250,0/250" }, + { ZT_TONE_CALLWAIT, "440/300,0/10000" }, + { ZT_TONE_DIALRECALL, "!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440" }, + { ZT_TONE_RECORDTONE, "1400/500,0/15000" }, + { ZT_TONE_INFO, "!950/330,!1400/330,!1800/330,0" }, + { ZT_TONE_STUTTER, "!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440" }, + { ZT_TONE_SECONDDIALTONE, "500+640" }, }, .dtmf_high_level = -10, .dtmf_low_level = -10, diff -Nru zaptel-1.4.12.1/ztcfg.c zaptel-cnet-1.4.12.1/ztcfg.c --- zaptel-1.4.12.1/ztcfg.c 2008-08-13 19:58:36.000000000 -0500 +++ zaptel-cnet-1.4.12.1/ztcfg.c 2009-07-15 14:24:45.080212495 -0500 @@ -628,6 +628,118 @@ return 0; } +/* (CNET) Handle the "ignoreflash" keyword to tell an + FXO to ignore a remote flash command */ +static int setflash(char *keyword, char *args) +{ + int res; + short setting; + int x; + int chans[ZT_MAX_CHANNELS]; + + bzero(chans, sizeof(chans)); + res = apply_channels(chans, args); + if (res <= 0) + return -1; + if (!strcasecmp(keyword, "ignoreflash")) { + setting = 1; + } else { + fprintf(stderr, "Huh??? Don't know about '%s' flash setting\n", keyword); + return -1; + } + for (x=0;x= ZT_TONE_ZONE_MAX) { @@ -1232,6 +1344,10 @@ { "preemp", pre_emp }, { "channel", rad_chanconfig }, { "channels", rad_chanconfig }, + { "ignoreflash", setflash }, /* (CNET) Make FXOs ignore flash */ + { "pulse_nz_oslo", setnz_oslo }, /* (CNET) Use Oslo/NZ pulse dial mapping */ + { "pulse_sweden", setsweden }, /* (CNET) Use Swedish pulse mapping */ + { "hearpulsing", sethearpulsing }, /* (CNET) Make outpulsing audible to caller */ }; static char *readline()