[asterisk-commits] alecdavis: trunk r374493 - in /trunk: ./ configs/ main/
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Oct 4 15:21:40 CDT 2012
Author: alecdavis
Date: Thu Oct 4 15:21:36 2012
New Revision: 374493
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=374493
Log:
dsp.c User Configurable DTMF_HITS_TO_BEGIN and DTMF_MISSES_TO_END
Instead of a recompile, allow values to be adjusted in dsp.conf
For binary distributions allows easy adjustment for wobbly GSM calls, and other reasons.
Defaults to DTMF_HITS_TO_BEGIN=2 and DTMF_MISSES_TO_END=3
(closes issue ASTERISK-17493)
Tested by: alecdavis
alecdavis (license 585)
Review https://reviewboard.asterisk.org/r/2144/
........
Merged revisions 374479 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 374481 from http://svn.asterisk.org/svn/asterisk/branches/10
........
Merged revisions 374485 from http://svn.asterisk.org/svn/asterisk/branches/11
Modified:
trunk/ (props changed)
trunk/CHANGES
trunk/configs/dsp.conf.sample
trunk/main/dsp.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-11-merged' - no diff available.
Modified: trunk/CHANGES
URL: http://svnview.digium.com/svn/asterisk/trunk/CHANGES?view=diff&rev=374493&r1=374492&r2=374493
==============================================================================
--- trunk/CHANGES (original)
+++ trunk/CHANGES Thu Oct 4 15:21:36 2012
@@ -1551,8 +1551,9 @@
rate changes during translation are now avoided unless absolutely necessary.
* The addition of the res_stun_monitor module for monitoring and reacting to network
changes while behind a NAT.
- * The DTMF Normal and Reverse Twist acceptance values can be set in dsp.conf.
- This allows support for any Administration. Default is AT&T values.
+ * DTMF: Normal and Reverse Twist acceptance values can be set in dsp.conf.
+ DTMF Valid/Invalid number of hits/misses can be set in dsp.conf.
+ These allow support for any Administration. Default is AT&T values.
CLI Changes
-----------
Modified: trunk/configs/dsp.conf.sample
URL: http://svnview.digium.com/svn/asterisk/trunk/configs/dsp.conf.sample?view=diff&rev=374493&r1=374492&r2=374493
==============================================================================
--- trunk/configs/dsp.conf.sample (original)
+++ trunk/configs/dsp.conf.sample Thu Oct 4 15:21:36 2012
@@ -36,3 +36,8 @@
;dtmf_reverse_twist=2.51
;relax_dtmf_normal_twist=6.31
;relax_dtmf_reverse_twist=3.98
+
+;successive number hits/misses of 12.75ms before a digit/nodigit is considered valid
+;dtmf_hits_to_begin=2
+;dtmf_misses_to_end=3
+
Modified: trunk/main/dsp.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/dsp.c?view=diff&rev=374493&r1=374492&r2=374493
==============================================================================
--- trunk/main/dsp.c (original)
+++ trunk/main/dsp.c Thu Oct 4 15:21:36 2012
@@ -210,10 +210,15 @@
/* DTMF goertzel size */
#define DTMF_GSIZE 102
-/* How many successive hits needed to consider begin of a digit */
-#define DTMF_HITS_TO_BEGIN 2
-/* How many successive misses needed to consider end of a digit */
-#define DTMF_MISSES_TO_END 3
+/* How many successive hits needed to consider begin of a digit
+ * IE. Override with dtmf_hits_to_begin=4 in dsp.conf
+ */
+#define DEF_DTMF_HITS_TO_BEGIN 2
+
+/* How many successive misses needed to consider end of a digit
+ * IE. Override with dtmf_misses_to_end=4 in dsp.conf
+ */
+#define DEF_DTMF_MISSES_TO_END 3
/*!
* \brief The default silence threshold we will use if an alternate
@@ -257,8 +262,6 @@
{
goertzel_state_t row_out[4];
goertzel_state_t col_out[4];
- int hits_to_begin; /* How many successive hits needed to consider begin of a digit */
- int misses_to_end; /* How many successive misses needed to consider end of a digit */
int hits; /* How many successive hits we have seen already */
int misses; /* How many successive misses we have seen already */
int lasthit;
@@ -307,6 +310,8 @@
static float dtmf_reverse_twist; /* AT&T = 4dB */
static float relax_dtmf_normal_twist; /* AT&T = 8dB */
static float relax_dtmf_reverse_twist; /* AT&T = 6dB */
+static int dtmf_hits_to_begin; /* How many successive hits needed to consider begin of a digit */
+static int dtmf_misses_to_end; /* How many successive misses needed to consider end of a digit */
static inline void goertzel_sample(goertzel_state_t *s, short sample)
{
@@ -500,9 +505,6 @@
s->current_sample = 0;
s->hits = 0;
s->misses = 0;
-
- s->hits_to_begin = DTMF_HITS_TO_BEGIN;
- s->misses_to_end = DTMF_MISSES_TO_END;
}
static void ast_mf_detect_init(mf_detect_state_t *s, unsigned int sample_rate)
@@ -793,7 +795,7 @@
/* We are in the middle of a digit already */
if (hit != s->td.dtmf.current_hit) {
s->td.dtmf.misses++;
- if (s->td.dtmf.misses == s->td.dtmf.misses_to_end) {
+ if (s->td.dtmf.misses == dtmf_misses_to_end) {
/* There were enough misses to consider digit ended */
s->td.dtmf.current_hit = 0;
}
@@ -814,9 +816,9 @@
}
if (hit && hit != s->td.dtmf.current_hit) {
s->td.dtmf.hits++;
- if (s->td.dtmf.hits == s->td.dtmf.hits_to_begin) {
+ if (s->td.dtmf.hits == dtmf_hits_to_begin) {
store_digit(s, hit);
- s->digitlen[s->current_digits - 1] = s->td.dtmf.hits_to_begin * DTMF_GSIZE;
+ s->digitlen[s->current_digits - 1] = dtmf_hits_to_begin * DTMF_GSIZE;
s->td.dtmf.current_hit = hit;
s->td.dtmf.misses = 0;
}
@@ -1850,6 +1852,8 @@
dtmf_reverse_twist = DEF_DTMF_REVERSE_TWIST;
relax_dtmf_normal_twist = DEF_RELAX_DTMF_NORMAL_TWIST;
relax_dtmf_reverse_twist = DEF_RELAX_DTMF_REVERSE_TWIST;
+ dtmf_hits_to_begin = DEF_DTMF_HITS_TO_BEGIN;
+ dtmf_misses_to_end = DEF_DTMF_MISSES_TO_END;
if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEINVALID) {
return 0;
@@ -1896,6 +1900,22 @@
} else {
relax_dtmf_reverse_twist = cfg_twist;
}
+ } else if (!strcasecmp(v->name, "dtmf_hits_to_begin")) {
+ if (sscanf(v->value, "%30d", &cfg_threshold) < 1) {
+ ast_log(LOG_WARNING, "Unable to convert '%s' to a numeric value.\n", v->value);
+ } else if (cfg_threshold < 1) { /* must be 1 or greater */
+ ast_log(LOG_WARNING, "Invalid dtmf_hits_to_begin value '%d' specified, using default of %d\n", cfg_threshold, dtmf_hits_to_begin);
+ } else {
+ dtmf_hits_to_begin = cfg_threshold;
+ }
+ } else if (!strcasecmp(v->name, "dtmf_misses_to_end")) {
+ if (sscanf(v->value, "%30d", &cfg_threshold) < 1) {
+ ast_log(LOG_WARNING, "Unable to convert '%s' to a numeric value.\n", v->value);
+ } else if (cfg_threshold < 1) { /* must be 1 or greater */
+ ast_log(LOG_WARNING, "Invalid dtmf_misses_to_end value '%d' specified, using default of %d\n", cfg_threshold, dtmf_misses_to_end);
+ } else {
+ dtmf_misses_to_end = cfg_threshold;
+ }
}
}
ast_config_destroy(cfg);
More information about the asterisk-commits
mailing list