[svn-commits] sruffell: branch 1.2 r4128 - in /branches/1.2: ./ wctdm24xxp/ wcte12xp/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Thu Apr 3 16:11:25 CDT 2008


Author: sruffell
Date: Thu Apr  3 16:11:24 2008
New Revision: 4128

URL: http://svn.digium.com/view/zaptel?view=rev&rev=4128
Log:
svn merge -c3012 https://origsvn.digium.com/svn/zaptel/branches/1.4 .
svn merge -c3701 https://origsvn.digium.com/svn/zaptel/branches/1.4 .
svn merge -c3703 https://origsvn.digium.com/svn/zaptel/branches/1.4 .
svn merge -c4050 https://origsvn.digium.com/svn/zaptel/branches/1.4/kernel .


Modified:
    branches/1.2/wctdm.c
    branches/1.2/wctdm24xxp/GpakApi.c
    branches/1.2/wctdm24xxp/base.c
    branches/1.2/wctdm24xxp/wctdm24xxp.h
    branches/1.2/wcte12xp/GpakApi.c
    branches/1.2/wcte12xp/base.c
    branches/1.2/zaptel-base.c

Modified: branches/1.2/wctdm.c
URL: http://svn.digium.com/view/zaptel/branches/1.2/wctdm.c?view=diff&rev=4128&r1=4127&r2=4128
==============================================================================
--- branches/1.2/wctdm.c (original)
+++ branches/1.2/wctdm.c Thu Apr  3 16:11:24 2008
@@ -311,6 +311,7 @@
 			int ring;
 #else			
 			int wasringing;
+			int lastrdtx;
 #endif			
 			int ringdebounce;
 			int offhook;
@@ -366,6 +367,7 @@
 static int battdebounce = DEFAULT_BATT_DEBOUNCE;
 static int battthresh = DEFAULT_BATT_THRESH;
 static int ringdebounce = DEFAULT_RING_DEBOUNCE;
+static int fwringdetect = 0;
 static int debug = 0;
 static int robust = 0;
 static int timingonly = 0;
@@ -852,30 +854,55 @@
 		return;
 #ifndef AUDIO_RINGCHECK
 	if (!wc->mod[card].fxo.offhook) {
-		res = wc->reg0shadow[card];
-		if ((res & 0x60) && wc->mod[card].fxo.battery) {
-			wc->mod[card].fxo.ringdebounce += (ZT_CHUNKSIZE * 16);
-			if (wc->mod[card].fxo.ringdebounce >= ZT_CHUNKSIZE * ringdebounce) {
-				if (!wc->mod[card].fxo.wasringing) {
-					wc->mod[card].fxo.wasringing = 1;
-					zt_hooksig(&wc->chans[card], ZT_RXSIG_RING);
-					if (debug)
-						printk("RING on %d/%d!\n", wc->span.spanno, card + 1);
+		if (fwringdetect) {
+			res = wc->reg0shadow[card] & 0x60;
+			if (wc->mod[card].fxo.ringdebounce--) {
+				if (res && (res != wc->mod[card].fxo.lastrdtx) && wc->mod[card].fxo.battery) {
+					if (!wc->mod[card].fxo.wasringing) {
+						wc->mod[card].fxo.wasringing = 1;
+						if (debug)
+							printk("RING on %d/%d!\n", wc->span.spanno, card + 1);
+						zt_hooksig(&wc->chans[card], ZT_RXSIG_RING);
+					}
+					wc->mod[card].fxo.lastrdtx = res;
+					wc->mod[card].fxo.ringdebounce = 10;
+				} else if (!res) {
+					if ((wc->mod[card].fxo.ringdebounce == 0) && wc->mod[card].fxo.wasringing) {
+						wc->mod[card].fxo.wasringing = 0;
+						if (debug)
+							printk("NO RING on %d/%d!\n", wc->span.spanno, card + 1);
+						zt_hooksig(&wc->chans[card], ZT_RXSIG_OFFHOOK);
+					}
 				}
-				wc->mod[card].fxo.ringdebounce = ZT_CHUNKSIZE * ringdebounce;
+			} else if (res && wc->mod[card].fxo.battery) {
+				wc->mod[card].fxo.lastrdtx = res;
+				wc->mod[card].fxo.ringdebounce = 10;
 			}
 		} else {
-			wc->mod[card].fxo.ringdebounce -= ZT_CHUNKSIZE * 4;
-			if (wc->mod[card].fxo.ringdebounce <= 0) {
-				if (wc->mod[card].fxo.wasringing) {
-					wc->mod[card].fxo.wasringing = 0;
-					zt_hooksig(&wc->chans[card], ZT_RXSIG_OFFHOOK);
-					if (debug)
-						printk("NO RING on %d/%d!\n", wc->span.spanno, card + 1);
+			res = wc->reg0shadow[card];
+			if ((res & 0x60) && wc->mod[card].fxo.battery) {
+				wc->mod[card].fxo.ringdebounce += (ZT_CHUNKSIZE * 16);
+				if (wc->mod[card].fxo.ringdebounce >= ZT_CHUNKSIZE * ringdebounce) {
+					if (!wc->mod[card].fxo.wasringing) {
+						wc->mod[card].fxo.wasringing = 1;
+						zt_hooksig(&wc->chans[card], ZT_RXSIG_RING);
+						if (debug)
+							printk("RING on %d/%d!\n", wc->span.spanno, card + 1);
+					}
+					wc->mod[card].fxo.ringdebounce = ZT_CHUNKSIZE * ringdebounce;
 				}
-				wc->mod[card].fxo.ringdebounce = 0;
+			} else {
+				wc->mod[card].fxo.ringdebounce -= ZT_CHUNKSIZE * 4;
+				if (wc->mod[card].fxo.ringdebounce <= 0) {
+					if (wc->mod[card].fxo.wasringing) {
+						wc->mod[card].fxo.wasringing = 0;
+						zt_hooksig(&wc->chans[card], ZT_RXSIG_OFFHOOK);
+						if (debug)
+							printk("NO RING on %d/%d!\n", wc->span.spanno, card + 1);
+					}
+					wc->mod[card].fxo.ringdebounce = 0;
+				}
 			}
-				
 		}
 	}
 #endif
@@ -1455,7 +1482,17 @@
 	reg16 |= (fxo_modes[_opermode].rz << 1);
 	reg16 |= (fxo_modes[_opermode].rt);
 	wctdm_setreg(wc, card, 16, reg16);
-	
+
+	if(fwringdetect) {
+		/* Enable ring detector full-wave rectifier mode */
+		wctdm_setreg(wc, card, 18, 2);
+		wctdm_setreg(wc, card, 24, 0);
+	} else { 
+		/* Set to the device defaults */
+		wctdm_setreg(wc, card, 18, 0);
+		wctdm_setreg(wc, card, 24, 0x19);
+	}
+
 	/* Set DC Termination:
 	   Tip/Ring voltage adjust, minimum operational current, current limitation */
 	reg26 |= (fxo_modes[_opermode].dcv << 6);
@@ -2406,6 +2443,7 @@
 module_param(battdebounce, int, 0600);
 module_param(battthresh, int, 0600);
 module_param(ringdebounce, int, 0600);
+module_param(fwringdetect, int, 0600);
 module_param(alawoverride, int, 0600);
 #else
 MODULE_PARM(debug, "i");
@@ -2422,6 +2460,7 @@
 MODULE_PARM(battdebounce, "i");
 MODULE_PARM(battthresh, "i");
 MODULE_PARM(ringdebounce, "i");
+MODULE_PARM(fwringdetect, "i");
 MODULE_PARM(alawoverride, "i");
 #endif
 MODULE_DESCRIPTION("Wildcard TDM400P Zaptel Driver");

Modified: branches/1.2/wctdm24xxp/GpakApi.c
URL: http://svn.digium.com/view/zaptel/branches/1.2/wctdm24xxp/GpakApi.c?view=diff&rev=4128&r1=4127&r2=4128
==============================================================================
--- branches/1.2/wctdm24xxp/GpakApi.c (original)
+++ branches/1.2/wctdm24xxp/GpakApi.c Thu Apr  3 16:11:24 2008
@@ -128,10 +128,12 @@
     DSP_ADDRESS IfBlockPntr; /* Interface Block pointer */
     DSP_WORD DspStatus;      /* DSP Status */
     DSP_WORD DspChannels;    /* number of DSP channels */
+    DSP_WORD  Temp[2];
+#if 0
     DSP_WORD DspConfs;       /* number of DSP conferences */
     DSP_ADDRESS PktBufrMem;  /* address of Packet Buffer */
-    DSP_WORD  Temp[2];
     unsigned short int i;    /* loop index / counter */
+#endif
 
     /* Read the pointer to the Interface Block. */
     gpakReadDspMemory(DspId, DSP_IFBLK_ADDRESS, 2, Temp);
@@ -897,7 +899,9 @@
     DSP_WORD TakeIndex;     /* event fifo take index */
     DSP_WORD WordsReady;    /* number words ready for read out of event fifo */
     DSP_WORD EventError;    /* flag indicating error with event fifo msg  */
+#if 0
     DSP_WORD *pDebugData;   /* debug data buffer pointer in event data struct */
+#endif
 
     /* Make sure the DSP Id is valid. */
     if (DspId >= MAX_DSP_CORES)

Modified: branches/1.2/wctdm24xxp/base.c
URL: http://svn.digium.com/view/zaptel/branches/1.2/wctdm24xxp/base.c?view=diff&rev=4128&r1=4127&r2=4128
==============================================================================
--- branches/1.2/wctdm24xxp/base.c (original)
+++ branches/1.2/wctdm24xxp/base.c Thu Apr  3 16:11:24 2008
@@ -264,6 +264,8 @@
 static int fxshonormode = 0;
 static int alawoverride = 0;
 static int fxo_addrs[4] = { 0x00, 0x08, 0x04, 0x0c };
+static int ringdebounce = DEFAULT_RING_DEBOUNCE;
+static int fwringdetect = 0;
 #ifdef VPM_SUPPORT
 static int vpmsupport = 1;
 static int vpmdtmfsupport = 0;
@@ -1216,30 +1218,56 @@
 			wctdm_setreg_intr(wc, card, 5, 0x8);
 	}
 	if (!wc->mods[card].fxo.offhook) {
-		res = wc->cmdq[card].isrshadow[0];	/* Hook/Ring state */
-		if ((res & 0x60) && wc->mods[card].fxo.battery) {
-			wc->mods[card].fxo.ringdebounce += (ZT_CHUNKSIZE * 4);
-			if (wc->mods[card].fxo.ringdebounce >= ZT_CHUNKSIZE * RING_DEBOUNCE) {
-				if (!wc->mods[card].fxo.wasringing) {
-					wc->mods[card].fxo.wasringing = 1;
-					zt_hooksig(&wc->chans[card], ZT_RXSIG_RING);
-					if (debug & DEBUG_CARD)
-						printk("RING on %d/%d!\n", wc->span.spanno, card + 1);
+		if (fwringdetect) {
+			res =  wc->cmdq[card].isrshadow[0] & 0x60;
+			if (wc->mods[card].fxo.ringdebounce--) {
+				if (res && (res != wc->mods[card].fxo.lastrdtx) && wc->mods[card].fxo.battery) {
+					if (!wc->mods[card].fxo.wasringing) {
+						wc->mods[card].fxo.wasringing = 1;
+						if (debug)
+							printk("RING on %d/%d!\n", wc->span.spanno, card + 1);
+						zt_hooksig(&wc->chans[card], ZT_RXSIG_RING);
+					}
+					wc->mods[card].fxo.lastrdtx = res;
+					wc->mods[card].fxo.ringdebounce = 10;
+				} else if (!res) {
+					if ((wc->mods[card].fxo.ringdebounce == 0) && wc->mods[card].fxo.wasringing) {
+						wc->mods[card].fxo.wasringing = 0;
+						if (debug)
+							printk("NO RING on %d/%d!\n", wc->span.spanno, card + 1);
+						zt_hooksig(&wc->chans[card], ZT_RXSIG_OFFHOOK);
+					}
 				}
-				wc->mods[card].fxo.ringdebounce = ZT_CHUNKSIZE * RING_DEBOUNCE;
+			} else if (res && wc->mods[card].fxo.battery) {
+				wc->mods[card].fxo.lastrdtx = res;
+				wc->mods[card].fxo.ringdebounce = 10;
 			}
 		} else {
-			wc->mods[card].fxo.ringdebounce -= ZT_CHUNKSIZE;
-			if (wc->mods[card].fxo.ringdebounce <= 0) {
-				if (wc->mods[card].fxo.wasringing) {
-					wc->mods[card].fxo.wasringing = 0;
-					zt_hooksig(&wc->chans[card], ZT_RXSIG_OFFHOOK);
-					if (debug & DEBUG_CARD)
-						printk("NO RING on %d/%d!\n", wc->span.spanno, card + 1);
+			res =  wc->cmdq[card].isrshadow[0];
+			if ((res & 0x60) && wc->mods[card].fxo.battery) {
+				wc->mods[card].fxo.ringdebounce += (ZT_CHUNKSIZE * 16);
+				if (wc->mods[card].fxo.ringdebounce >= ZT_CHUNKSIZE * ringdebounce) {
+					if (!wc->mods[card].fxo.wasringing) {
+						wc->mods[card].fxo.wasringing = 1;
+						zt_hooksig(&wc->chans[card], ZT_RXSIG_RING);
+						if (debug)
+							printk("RING on %d/%d!\n", wc->span.spanno, card + 1);
+					}
+					wc->mods[card].fxo.ringdebounce = ZT_CHUNKSIZE * ringdebounce;
 				}
-				wc->mods[card].fxo.ringdebounce = 0;
-			}
-				
+			} else {
+				wc->mods[card].fxo.ringdebounce -= ZT_CHUNKSIZE * 4;
+				if (wc->mods[card].fxo.ringdebounce <= 0) {
+					if (wc->mods[card].fxo.wasringing) {
+						wc->mods[card].fxo.wasringing = 0;
+						zt_hooksig(&wc->chans[card], ZT_RXSIG_OFFHOOK);
+						if (debug)
+							printk("NO RING on %d/%d!\n", wc->span.spanno, card + 1);
+					}
+					wc->mods[card].fxo.ringdebounce = 0;
+				}
+					
+			}
 		}
 	}
 	b = wc->cmdq[card].isrshadow[1]; /* Voltage */
@@ -1929,6 +1957,16 @@
 	reg16 |= (fxo_modes[_opermode].rz << 1);
 	reg16 |= (fxo_modes[_opermode].rt);
 	wctdm_setreg(wc, card, 16, reg16);
+
+	if(fwringdetect) {
+		/* Enable ring detector full-wave rectifier mode */
+		wctdm_setreg(wc, card, 18, 2);
+		wctdm_setreg(wc, card, 24, 0);
+	} else { 
+		/* Set to the device defaults */
+		wctdm_setreg(wc, card, 18, 0);
+		wctdm_setreg(wc, card, 24, 0x19);
+	}
 	
 	/* Set DC Termination:
 	   Tip/Ring voltage adjust, minimum operational current, current limitation */
@@ -3703,6 +3741,8 @@
 module_param(battdebounce, int, 0600);
 module_param(battthresh, int, 0600);
 module_param(alawoverride, int, 0600);
+module_param(ringdebounce, int, 0600);
+module_param(fwringdetect, int, 0600);
 #ifdef VPM_SUPPORT
 module_param(vpmsupport, int, 0600);
 module_param(vpmdtmfsupport, int, 0600);
@@ -3725,6 +3765,8 @@
 MODULE_PARM(battdebounce, "i");
 MODULE_PARM(battthresh, "i");
 MODULE_PARM(alawoverride, "i");
+MODULE_PARM(ringdebounce, "i");
+MODULE_PARM(fwringdetect, "i");
 #ifdef VPM_SUPPORT
 MODULE_PARM(vpmsupport, "i");
 MODULE_PARM(vpmdtmfsupport, "i");

Modified: branches/1.2/wctdm24xxp/wctdm24xxp.h
URL: http://svn.digium.com/view/zaptel/branches/1.2/wctdm24xxp/wctdm24xxp.h?view=diff&rev=4128&r1=4127&r2=4128
==============================================================================
--- branches/1.2/wctdm24xxp/wctdm24xxp.h (original)
+++ branches/1.2/wctdm24xxp/wctdm24xxp.h Thu Apr  3 16:11:24 2008
@@ -31,7 +31,13 @@
 
 #define WC_MAX_IFACES 128
 
-#define RING_DEBOUNCE	128		/* Ringer Debounce (in ms) */
+/*!
+ * \brief Default ringer debounce (in ms)
+ *
+ * \todo This value differs from that in wctdm.  In that module, it is 64 ms
+ *       instead of 128 ms.  Which one is more appropriate?
+ */
+#define DEFAULT_RING_DEBOUNCE	128
 #define DEFAULT_BATT_DEBOUNCE	64		/* Battery debounce (in ms) */
 #define POLARITY_DEBOUNCE 64           /* Polarity debounce (in ms) */
 #define DEFAULT_BATT_THRESH	3		/* Anything under this is "no battery" */
@@ -191,6 +197,7 @@
 	union {
 		struct {
 			int wasringing;
+			int lastrdtx;
 			int ringdebounce;
 			int offhook;
 			int battdebounce;

Modified: branches/1.2/wcte12xp/GpakApi.c
URL: http://svn.digium.com/view/zaptel/branches/1.2/wcte12xp/GpakApi.c?view=diff&rev=4128&r1=4127&r2=4128
==============================================================================
--- branches/1.2/wcte12xp/GpakApi.c (original)
+++ branches/1.2/wcte12xp/GpakApi.c Thu Apr  3 16:11:24 2008
@@ -128,10 +128,12 @@
     DSP_ADDRESS IfBlockPntr; /* Interface Block pointer */
     DSP_WORD DspStatus;      /* DSP Status */
     DSP_WORD DspChannels;    /* number of DSP channels */
+    DSP_WORD  Temp[2];
+#if 0
     DSP_WORD DspConfs;       /* number of DSP conferences */
     DSP_ADDRESS PktBufrMem;  /* address of Packet Buffer */
-    DSP_WORD  Temp[2];
     unsigned short int i;    /* loop index / counter */
+#endif
 
     /* Read the pointer to the Interface Block. */
     gpakReadDspMemory(DspId, DSP_IFBLK_ADDRESS, 2, Temp);
@@ -897,7 +899,9 @@
     DSP_WORD TakeIndex;     /* event fifo take index */
     DSP_WORD WordsReady;    /* number words ready for read out of event fifo */
     DSP_WORD EventError;    /* flag indicating error with event fifo msg  */
+#if 0
     DSP_WORD *pDebugData;   /* debug data buffer pointer in event data struct */
+#endif
 
     /* Make sure the DSP Id is valid. */
     if (DspId >= MAX_DSP_CORES)

Modified: branches/1.2/wcte12xp/base.c
URL: http://svn.digium.com/view/zaptel/branches/1.2/wcte12xp/base.c?view=diff&rev=4128&r1=4127&r2=4128
==============================================================================
--- branches/1.2/wcte12xp/base.c (original)
+++ branches/1.2/wcte12xp/base.c Thu Apr  3 16:11:24 2008
@@ -1724,7 +1724,6 @@
 static inline void cmd_retransmit(struct t1 *wc)
 {
 	unsigned int x;
-	unsigned long flags;
 
 	for (x = 0; x < sizeof(wc->cmdq.cmds) / sizeof(wc->cmdq.cmds[0]); x++) {
 		if (!(wc->cmdq.cmds[x].flags &  __CMD_FIN)) {

Modified: branches/1.2/zaptel-base.c
URL: http://svn.digium.com/view/zaptel/branches/1.2/zaptel-base.c?view=diff&rev=4128&r1=4127&r2=4128
==============================================================================
--- branches/1.2/zaptel-base.c (original)
+++ branches/1.2/zaptel-base.c Thu Apr  3 16:11:24 2008
@@ -180,43 +180,6 @@
 /* There is a table like this in the PPP driver, too */
 
 static int deftaps = 64;
-
-static 
-__u16 fcstab[256] =
-{
-	0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
-	0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
-	0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
-	0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
-	0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
-	0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
-	0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
-	0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
-	0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
-	0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
-	0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
-	0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
-	0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
-	0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
-	0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
-	0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
-	0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
-	0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
-	0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
-	0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
-	0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
-	0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
-	0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
-	0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
-	0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
-	0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
-	0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
-	0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
-	0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
-	0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
-	0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
-	0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
-};
 
 static int debug;
 




More information about the svn-commits mailing list