summaryrefslogtreecommitdiff
path: root/drivers/dahdi/ecdis.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/dahdi/ecdis.h')
-rw-r--r--drivers/dahdi/ecdis.h66
1 files changed, 32 insertions, 34 deletions
diff --git a/drivers/dahdi/ecdis.h b/drivers/dahdi/ecdis.h
index 205b2e3..e8083fe 100644
--- a/drivers/dahdi/ecdis.h
+++ b/drivers/dahdi/ecdis.h
@@ -53,10 +53,10 @@ static inline void echo_can_disable_detector_init (echo_can_disable_detector_sta
/*- End of function --------------------------------------------------------*/
static inline int echo_can_disable_detector_update (echo_can_disable_detector_state_t *det,
- int16_t amp)
+ int16_t amp)
{
- int16_t notched;
-
+ int16_t notched;
+
notched = biquad2 (&det->notch, amp);
/* Estimate the overall energy in the channel, and the energy in
the notch (i.e. overall channel energy - tone energy => noise).
@@ -66,40 +66,38 @@ static inline int echo_can_disable_detector_update (echo_can_disable_detector_st
blip every time the phase reverses */
det->channel_level += ((abs(amp) - det->channel_level) >> 5);
det->notch_level += ((abs(notched) - det->notch_level) >> 4);
- if (det->channel_level > 280)
- {
- /* There is adequate energy in the channel. Is it mostly at 2100Hz? */
- if (det->notch_level*6 < det->channel_level)
- {
- /* The notch says yes, so we have the tone. */
- if (!det->tone_present)
- {
- /* Do we get a kick every 450+-25ms? */
- if (det->tone_cycle_duration >= 425*8
- &&
- det->tone_cycle_duration <= 475*8)
- {
- det->good_cycles++;
- if (det->good_cycles > 2)
- det->hit = TRUE;
- }
- det->tone_cycle_duration = 0;
+ if (det->channel_level >= 70) {
+ /* There is adequate energy in the channel. Is it mostly at 2100Hz? */
+ if (det->notch_level*6 < det->channel_level) {
+ det->tone_cycle_duration++;
+ /* The notch says yes, so we have the tone. */
+ if (!det->tone_present) {
+ /* Do we get a kick every 450+-25ms? */
+ if ((det->tone_cycle_duration >= (425 * 8)) &&
+ (det->tone_cycle_duration <= (475 * 8))) {
+ /* It's ANS/PR (CED with polarity reversals), so wait
+ for at least three cycles before returning a hit. */
+ det->good_cycles++;
+ if (det->good_cycles > 2)
+ det->hit = TRUE;
+ }
+ det->tone_cycle_duration = 0;
+ det->tone_present = TRUE;
+ } else if (det->tone_cycle_duration >= 600 * 8) {
+ /* It's ANS (CED without polarity reversals)
+ so return a hit. */
+ det->hit = TRUE;
+ }
+ } else {
+ det->tone_present = FALSE;
}
- det->tone_present = TRUE;
- }
- else
- {
+ } else {
det->tone_present = FALSE;
- }
- det->tone_cycle_duration++;
- }
- else
- {
- det->tone_present = FALSE;
- det->tone_cycle_duration = 0;
- det->good_cycles = 0;
+ det->tone_cycle_duration = 0;
+ det->good_cycles = 0;
}
- return det->hit;
+
+ return det->hit;
}
/*- End of function --------------------------------------------------------*/
/*- End of file ------------------------------------------------------------*/