Revision
17230
Author
moy
Date
2010-04-06 13:41:30 -0500 (Tue, 06 Apr 2010)

Log Message

import fix for OPENZAP-76 from openzap and other minor fixes

Modified Paths

Diff

Modified: freeswitch/trunk/libs/freetdm/mod_freetdm/mod_freetdm.c (17229 => 17230)


--- freeswitch/trunk/libs/freetdm/mod_freetdm/mod_freetdm.c	2010-04-06 17:39:03 UTC (rev 17229)
+++ freeswitch/trunk/libs/freetdm/mod_freetdm/mod_freetdm.c	2010-04-06 18:41:30 UTC (rev 17230)
@@ -2852,7 +2852,7 @@
 						   );
 }
 
-#define FT_SYNTAX "list || dump <span_id> [<chan_id>] || q931_pcap <span_id> on|off [pcapfilename without suffix] || gains <span> <txgain> <rxgain>" 
+#define FT_SYNTAX "list || dump <span_id> [<chan_id>] || q931_pcap <span_id> on|off [pcapfilename without suffix] || gains <txgain> <rxgain> <span_id> [<chan_id>]" 
 SWITCH_STANDARD_API(ft_function)
 {
 	char *mycmd = NULL, *argv[10] = { 0 };

Modified: freeswitch/trunk/libs/freetdm/src/ftdm_io.c (17229 => 17230)


--- freeswitch/trunk/libs/freetdm/src/ftdm_io.c	2010-04-06 17:39:03 UTC (rev 17229)
+++ freeswitch/trunk/libs/freetdm/src/ftdm_io.c	2010-04-06 18:41:30 UTC (rev 17230)
@@ -660,10 +660,10 @@
 
 #define FTDM_SLINEAR_MAX_VALUE 32767
 #define FTDM_SLINEAR_MIN_VALUE -32767
-static void reset_gain_table(unsigned char *gain_table, float new_gain, ftdm_codec_t codec_gain)
+static void reset_gain_table(uint8_t *gain_table, float new_gain, ftdm_codec_t codec_gain)
 {
 	/* sample value */
-	unsigned char sv = 0;
+	uint8_t sv = 0;
 	/* linear gain factor */
 	float lingain = 0;
 	/* linear value for each table sample */
@@ -2043,11 +2043,13 @@
 			} else {
 				ftdm_set_flag(ftdmchan, FTDM_CHANNEL_USE_RX_GAIN);
 			}
+			GOTO_STATUS(done, FTDM_SUCCESS);
 		}
 		break;
 	case FTDM_COMMAND_GET_RX_GAIN:
 		{
 			FTDM_COMMAND_OBJ_FLOAT = ftdmchan->rxgain;
+			GOTO_STATUS(done, FTDM_SUCCESS);
 		}
 		break;
 	case FTDM_COMMAND_SET_TX_GAIN:
@@ -2059,11 +2061,13 @@
 			} else {
 				ftdm_set_flag(ftdmchan, FTDM_CHANNEL_USE_TX_GAIN);
 			}
+			GOTO_STATUS(done, FTDM_SUCCESS);
 		}
 		break;
 	case FTDM_COMMAND_GET_TX_GAIN:
 		{
 			FTDM_COMMAND_OBJ_FLOAT = ftdmchan->txgain;
+			GOTO_STATUS(done, FTDM_SUCCESS);
 		}
 		break;
 	default:
@@ -2076,7 +2080,7 @@
 		GOTO_STATUS(done, FTDM_FAIL);
 	}
 
-    status = ftdmchan->fio->command(ftdmchan, command, obj);
+    	status = ftdmchan->fio->command(ftdmchan, command, obj);
 
 	if (status == FTDM_NOTIMPL) {
 		snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "I/O command %d not implemented in backend", command);

Modified: freeswitch/trunk/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c (17229 => 17230)


--- freeswitch/trunk/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c	2010-04-06 17:39:03 UTC (rev 17229)
+++ freeswitch/trunk/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c	2010-04-06 18:41:30 UTC (rev 17230)
@@ -542,29 +542,39 @@
 		} else if (!strcasecmp(var, "echo_cancel_level")) {
 			num = atoi(val);
 			if (num < 0 || num > 256) {
-                ftdm_log(FTDM_LOG_WARNING, "invalid echo can val at line %d\n", lineno);
-            } else {
-                zt_globals.eclevel = num;
-            }
-			
+				ftdm_log(FTDM_LOG_WARNING, "invalid echo can val at line %d\n", lineno);
+			} else {
+				zt_globals.eclevel = num;
+			}
+		} else if (!strcasecmp(var, "echo_train_level")) {
+			if (zt_globals.eclevel <  1) {
+				ftdm_log(FTDM_LOG_WARNING, "can't set echo train level without setting echo cancel level first at line %d\n", lineno);
+			} else {
+				num = atoi(val);
+				if (num < 0 || num > 256) {
+					ftdm_log(FTDM_LOG_WARNING, "invalid echo train val at line %d\n", lineno);
+				} else {
+					zt_globals.etlevel = num;
+				}
+			}
 		} else if (!strcasecmp(var, "rxgain")) {
 			fnum = (float)atof(val);
 			if (fnum < -100.0 || fnum > 100.0) {
-                ftdm_log(FTDM_LOG_WARNING, "invalid rxgain val at line %d\n", lineno);
-            } else {
-                zt_globals.rxgain = fnum;
-                ftdm_log(FTDM_LOG_INFO, "Setting rxgain val to %f\n", fnum);
-            }
-			
+				ftdm_log(FTDM_LOG_WARNING, "invalid rxgain val at line %d\n", lineno);
+			} else {
+				zt_globals.rxgain = fnum;
+				ftdm_log(FTDM_LOG_INFO, "Setting rxgain val to %f\n", fnum);
+			}
 		} else if (!strcasecmp(var, "txgain")) {
 			fnum = (float)atof(val);
 			if (fnum < -100.0 || fnum > 100.0) {
-                ftdm_log(FTDM_LOG_WARNING, "invalid txgain val at line %d\n", lineno);
-            } else {
-                zt_globals.txgain = fnum;
-                ftdm_log(FTDM_LOG_INFO, "Setting txgain val to %f\n", fnum);
-            }
-			
+				ftdm_log(FTDM_LOG_WARNING, "invalid txgain val at line %d\n", lineno);
+			} else {
+				zt_globals.txgain = fnum;
+				ftdm_log(FTDM_LOG_INFO, "Setting txgain val to %f\n", fnum);
+			}
+		} else {
+				ftdm_log(FTDM_LOG_WARNING, "Ignoring unknown setting '%s'\n", var);
 		}
 	}
 
@@ -601,52 +611,42 @@
 				ftdm_log(FTDM_LOG_ERROR, "%s\n", ftdmchan->last_error);
 				return FTDM_FAIL;
 			}
-		} else if (ftdmchan->type == FTDM_CHAN_TYPE_FXS || ftdmchan->type == FTDM_CHAN_TYPE_FXO || ftdmchan->type == FTDM_CHAN_TYPE_EM) {
+		}
+		if (zt_globals.rxgain || zt_globals.txgain) {
+			struct zt_gains gains;
+			memset(&gains, 0, sizeof(gains));
+
+			gains.chan_no = ftdmchan->physical_chan_id;
+			zt_build_gains(&gains, zt_globals.rxgain, zt_globals.txgain, ftdmchan->native_codec);
+
+			if (zt_globals.rxgain)
+				ftdm_log(FTDM_LOG_INFO, "Setting rxgain to %f on channel %d\n", zt_globals.rxgain, gains.chan_no);
+
+			if (zt_globals.txgain)
+				ftdm_log(FTDM_LOG_INFO, "Setting txgain to %f on channel %d\n", zt_globals.txgain, gains.chan_no);
+
+			if (ioctl(ftdmchan->sockfd, codes.SETGAINS, &gains) < 0) {
+				ftdm_log(FTDM_LOG_ERROR, "failure configuring device %s as FreeTDM device %d:%d fd:%d\n", chanpath, ftdmchan->span_id, ftdmchan->chan_id, ftdmchan->sockfd);
+			}
+		}
+
+		if (zt_globals.eclevel >= 0) {
 			int len = zt_globals.eclevel;
+			if (len) {
+				ftdm_log(FTDM_LOG_INFO, "Setting echo cancel to %d taps for %d:%d\n", len, ftdmchan->span_id, ftdmchan->chan_id);
+			} else {
+				ftdm_log(FTDM_LOG_INFO, "Disable echo cancel for %d:%d\n", ftdmchan->span_id, ftdmchan->chan_id);
+			}
 			if (ioctl(ftdmchan->sockfd, codes.ECHOCANCEL, &len)) {
 				ftdm_log(FTDM_LOG_WARNING, "Echo cancel not available for %d:%d\n", ftdmchan->span_id, ftdmchan->chan_id);
-				//snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "%s", strerror(errno));
-				//ftdm_log(FTDM_LOG_ERROR, "%s\n", ftdmchan->last_error);
-				//return FTDM_FAIL;
-			} else {
+			} else if (zt_globals.etlevel >= 0) {
 				len = zt_globals.etlevel;
 				if (ioctl(ftdmchan->sockfd, codes.ECHOTRAIN, &len)) {
 					ftdm_log(FTDM_LOG_WARNING, "Echo training not available for %d:%d\n", ftdmchan->span_id, ftdmchan->chan_id);
-					//snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "%s", strerror(errno));
-					//ftdm_log(FTDM_LOG_ERROR, "%s\n", ftdmchan->last_error);
-					//return FTDM_FAIL;
 				}
 			}
 		}
-        if(zt_globals.rxgain || zt_globals.txgain) {
-            struct zt_gains gains;
-            memset(&gains, 0, sizeof(gains));
 
-            gains.chan_no = ftdmchan->physical_chan_id;
-            zt_build_gains(&gains, zt_globals.rxgain, zt_globals.txgain, ftdmchan->native_codec);
-
-            if(zt_globals.rxgain)
-                ftdm_log(FTDM_LOG_INFO, "Setting rxgain to %f on channel %d\n", zt_globals.rxgain, gains.chan_no);
-
-            if(zt_globals.txgain)
-                ftdm_log(FTDM_LOG_INFO, "Setting txgain to %f on channel %d\n", zt_globals.txgain, gains.chan_no);
-
-			if (ioctl(ftdmchan->sockfd, codes.SETGAINS, &gains) < 0) {
-				ftdm_log(FTDM_LOG_ERROR, "failure configuring device %s as FreeTDM device %d:%d fd:%d\n", chanpath, ftdmchan->span_id, ftdmchan->chan_id, ftdmchan->sockfd);
-   			}
-        }
-
-        int len = zt_globals.eclevel;
-       	ftdm_log(FTDM_LOG_INFO, "Setting echo cancel to %d taps for %d:%d\n", len, ftdmchan->span_id, ftdmchan->chan_id);
-        if (ioctl(ftdmchan->sockfd, codes.ECHOCANCEL, &len)) {
-                ftdm_log(FTDM_LOG_WARNING, "Echo cancel not available for %d:%d\n", ftdmchan->span_id, ftdmchan->chan_id);
-        } else {
-                len = zt_globals.etlevel;
-               	if (ioctl(ftdmchan->sockfd, codes.ECHOTRAIN, &len)) {
-                        ftdm_log(FTDM_LOG_WARNING, "Echo training not available for %d:%d\n", ftdmchan->span_id, ftdmchan->chan_id);
-                }
-       	}
-
 	}
 	return FTDM_SUCCESS;
 }
@@ -1179,7 +1179,7 @@
 	zt_globals.codec_ms = 20;
 	zt_globals.wink_ms = 150;
 	zt_globals.flash_ms = 750;
-	zt_globals.eclevel = 64;
+	zt_globals.eclevel = 0;
 	zt_globals.etlevel = 0;
 	
 	zt_interface.name = "zt";