]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
import fix for OPENZAP-76 from openzap and other minor fixes
authorMoises Silva <moy@sangoma.com>
Tue, 6 Apr 2010 18:41:30 +0000 (14:41 -0400)
committerMoises Silva <moy@sangoma.com>
Tue, 6 Apr 2010 18:41:30 +0000 (14:41 -0400)
libs/freetdm/mod_freetdm/mod_freetdm.c
libs/freetdm/src/ftdm_io.c
libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c

index 4b4c11926db1ac9ccb61c21e0c0ce6f2150b59f9..42793c964afcc12ff88a2152aa885f8c05028e86 100644 (file)
@@ -2852,7 +2852,7 @@ void dump_chan_xml(ftdm_span_t *span, uint32_t chan_id, switch_stream_handle_t *
                                                   );
 }
 
-#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 };
index ef58eba7db6d39cdbd553ce6a0464c11ed77a701..033a25d6753394a9a28be195e1984edad1f9bc06 100644 (file)
@@ -2043,11 +2043,13 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_command(ftdm_channel_t *ftdmchan, ftdm_co
                        } 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 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_command(ftdm_channel_t *ftdmchan, ftdm_co
                        } 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 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_command(ftdm_channel_t *ftdmchan, ftdm_co
                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);
index 0ab9553307dc150fc4940c221727a5bef42e8cd3..1394a9f91fa88d9ac32ee969981737ebcc8057e3 100644 (file)
@@ -542,29 +542,39 @@ static FIO_CONFIGURE_FUNCTION(zt_configure)
                } 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,51 +611,41 @@ static FIO_OPEN_FUNCTION(zt_open)
                                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 @@ static FIO_IO_LOAD_FUNCTION(zt_init)
        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";