提交 d65716d8 authored 作者: Moises Silva's avatar Moises Silva

freetdm: Added dtmf_time_on and dtmf_time_off parameters to tweak DTMF duration in milliseconds

上级 b80cdd45
...@@ -3457,7 +3457,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_command(ftdm_channel_t *ftdmchan, ftdm_co ...@@ -3457,7 +3457,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_command(ftdm_channel_t *ftdmchan, ftdm_co
ftdmchan->dtmf_on = val; ftdmchan->dtmf_on = val;
GOTO_STATUS(done, FTDM_SUCCESS); GOTO_STATUS(done, FTDM_SUCCESS);
} else { } else {
snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "invalid value %d range 10-1000", val); ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "invalid value %d range 10-1000", val);
GOTO_STATUS(done, FTDM_FAIL); GOTO_STATUS(done, FTDM_FAIL);
} }
} }
...@@ -3471,7 +3471,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_command(ftdm_channel_t *ftdmchan, ftdm_co ...@@ -3471,7 +3471,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_command(ftdm_channel_t *ftdmchan, ftdm_co
ftdmchan->dtmf_off = val; ftdmchan->dtmf_off = val;
GOTO_STATUS(done, FTDM_SUCCESS); GOTO_STATUS(done, FTDM_SUCCESS);
} else { } else {
snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "invalid value %d range 10-1000", val); ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "invalid value %d range 10-1000", val);
GOTO_STATUS(done, FTDM_FAIL); GOTO_STATUS(done, FTDM_FAIL);
} }
} }
...@@ -5108,6 +5108,12 @@ FT_DECLARE(ftdm_status_t) ftdm_configure_span_channels(ftdm_span_t *span, const ...@@ -5108,6 +5108,12 @@ FT_DECLARE(ftdm_status_t) ftdm_configure_span_channels(ftdm_span_t *span, const
if (chan_config->dtmf_on_start) { if (chan_config->dtmf_on_start) {
span->channels[chan_index]->dtmfdetect.trigger_on_start = 1; span->channels[chan_index]->dtmfdetect.trigger_on_start = 1;
} }
if (chan_config->dtmf_time_on) {
ftdm_channel_command(span->channels[chan_index], FTDM_COMMAND_SET_DTMF_ON_PERIOD, &chan_config->dtmf_time_on);
}
if (chan_config->dtmf_time_off) {
ftdm_channel_command(span->channels[chan_index], FTDM_COMMAND_SET_DTMF_OFF_PERIOD, &chan_config->dtmf_time_off);
}
} }
return FTDM_SUCCESS; return FTDM_SUCCESS;
...@@ -5347,6 +5353,14 @@ static ftdm_status_t load_config(void) ...@@ -5347,6 +5353,14 @@ static ftdm_status_t load_config(void)
chan_config.dtmf_on_start = FTDM_FALSE; chan_config.dtmf_on_start = FTDM_FALSE;
} }
} }
} else if (!strcasecmp(var, "dtmf_time_on")) {
if (sscanf(val, "%u", &(chan_config.dtmf_time_on)) != 1) {
ftdm_log(FTDM_LOG_ERROR, "invalid dtmf_time_on: '%s'\n", val);
}
} else if (!strcasecmp(var, "dtmf_time_off")) {
if (sscanf(val, "%u", &(chan_config.dtmf_time_off)) != 1) {
ftdm_log(FTDM_LOG_ERROR, "invalid dtmf_time_off: '%s'\n", val);
}
} else if (!strncasecmp(var, "iostats", sizeof("iostats")-1)) { } else if (!strncasecmp(var, "iostats", sizeof("iostats")-1)) {
if (ftdm_true(val)) { if (ftdm_true(val)) {
chan_config.iostats = FTDM_TRUE; chan_config.iostats = FTDM_TRUE;
......
...@@ -521,6 +521,8 @@ typedef struct ftdm_channel_config { ...@@ -521,6 +521,8 @@ typedef struct ftdm_channel_config {
uint8_t debugdtmf; uint8_t debugdtmf;
uint8_t dtmf_on_start; uint8_t dtmf_on_start;
uint32_t dtmfdetect_ms; uint32_t dtmfdetect_ms;
uint32_t dtmf_time_on;
uint32_t dtmf_time_off;
uint8_t iostats; uint8_t iostats;
} ftdm_channel_config_t; } ftdm_channel_config_t;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论