diff spandsp-0.0.6pre17/src/spandsp/private/sig_tone.h @ 4:26cd8f1ef0b1

import spandsp-0.0.6pre17
author Peter Meerwald <pmeerw@cosy.sbg.ac.at>
date Fri, 25 Jun 2010 15:50:58 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spandsp-0.0.6pre17/src/spandsp/private/sig_tone.h	Fri Jun 25 15:50:58 2010 +0200
@@ -0,0 +1,219 @@
+/*
+ * SpanDSP - a series of DSP components for telephony
+ *
+ * private/sig_tone.h - Signalling tone processing for the 2280Hz, 2400Hz, 2600Hz
+ *                      and similar signalling tone used in older protocols.
+ *
+ * Written by Steve Underwood <steveu@coppice.org>
+ *
+ * Copyright (C) 2004 Steve Underwood
+ *
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id: sig_tone.h,v 1.4 2009/09/04 14:38:47 steveu Exp $
+ */
+
+#if !defined(_SPANDSP_PRIVATE_SIG_TONE_H_)
+#define _SPANDSP_PRIVATE_SIG_TONE_H_
+
+/*!
+    Signaling tone descriptor. This defines the working state for a
+    single instance of the transmit and receive sides of a signaling
+    tone processor.
+*/
+struct sig_tone_descriptor_s
+{
+    /*! \brief The tones used. */
+    int tone_freq[2];
+    /*! \brief The high and low tone amplitudes for each of the tones. */
+    int tone_amp[2][2];
+
+    /*! \brief The delay, in audio samples, before the high level tone drops
+               to a low level tone. */
+    int high_low_timeout;
+
+    /*! \brief Some signaling tone detectors use a sharp initial filter,
+               changing to a broader band filter after some delay. This
+               parameter defines the delay. 0 means it never changes. */
+    int sharp_flat_timeout;
+
+    /*! \brief Parameters to control the behaviour of the notch filter, used
+               to remove the tone from the voice path in some protocols. */
+    int notch_lag_time;
+    /*! \brief TRUE if the notch may be used in the media flow. */
+    int notch_allowed;
+
+    /*! \brief The tone on persistence check, in audio samples. */
+    int tone_on_check_time;
+    /*! \brief The tone off persistence check, in audio samples. */
+    int tone_off_check_time;
+
+    /*! \brief ??? */
+    int tones;
+    /*! \brief The coefficients for the cascaded bi-quads notch filter. */
+    struct
+    {
+#if defined(SPANDSP_USE_FIXED_POINT)
+        int32_t notch_a1[3];
+        int32_t notch_b1[3];
+        int32_t notch_a2[3];
+        int32_t notch_b2[3];
+        int notch_postscale;
+#else
+        float notch_a1[3];
+        float notch_b1[3];
+        float notch_a2[3];
+        float notch_b2[3];
+#endif
+    } tone[2];
+
+#if defined(SPANDSP_USE_FIXED_POINT)
+    /*! \brief Flat mode bandpass bi-quad parameters */
+    int32_t broad_a[3];
+    /*! \brief Flat mode bandpass bi-quad parameters */
+    int32_t broad_b[3];
+    /*! \brief Post filter scaling */
+    int broad_postscale;
+#else
+    /*! \brief Flat mode bandpass bi-quad parameters */
+    float broad_a[3];
+    /*! \brief Flat mode bandpass bi-quad parameters */
+    float broad_b[3];
+#endif
+    /*! \brief The coefficients for the post notch leaky integrator. */
+    int32_t notch_slugi;
+    /*! \brief ??? */
+    int32_t notch_slugp;
+
+    /*! \brief The coefficients for the post modulus leaky integrator in the
+               unfiltered data path.  The prescale value incorporates the
+               detection ratio. This is called the guard ratio in some
+               protocols. */
+    int32_t unfiltered_slugi;
+    /*! \brief ??? */
+    int32_t unfiltered_slugp;
+
+    /*! \brief The coefficients for the post modulus leaky integrator in the
+               bandpass filter data path. */
+    int32_t broad_slugi;
+    /*! \brief ??? */
+    int32_t broad_slugp;
+
+    /*! \brief Masks which effectively threshold the notched, weighted and
+               bandpassed data. */
+    int32_t notch_threshold;
+    /*! \brief ??? */
+    int32_t unfiltered_threshold;
+    /*! \brief ??? */
+    int32_t broad_threshold;
+};
+
+/*!
+    Signaling tone transmit state
+ */
+struct sig_tone_tx_state_s
+{
+    /*! \brief The callback function used to handle signaling changes. */
+    tone_report_func_t sig_update;
+    /*! \brief A user specified opaque pointer passed to the callback function. */
+    void *user_data;
+
+    /*! \brief Tone descriptor */
+    sig_tone_descriptor_t *desc;
+
+    /*! The phase rates for the one or two tones */
+    int32_t phase_rate[2];
+    /*! The phase accumulators for the one or two tones */
+    uint32_t phase_acc[2];
+
+    /*! The scaling values for the one or two tones, and the high and low level of each tone */
+    int16_t tone_scaling[2][2];
+    /*! The sample timer, used to switch between the high and low level tones. */
+    int high_low_timer;
+
+    /*! \brief Current transmit tone */
+    int current_tx_tone;
+    /*! \brief Current transmit timeout */
+    int current_tx_timeout;
+    /*! \brief Time in current signaling state, in samples. */
+    int signaling_state_duration;
+};
+
+/*!
+    Signaling tone receive state
+ */
+struct sig_tone_rx_state_s
+{
+    /*! \brief The callback function used to handle signaling changes. */
+    tone_report_func_t sig_update;
+    /*! \brief A user specified opaque pointer passed to the callback function. */
+    void *user_data;
+
+    /*! \brief Tone descriptor */
+    sig_tone_descriptor_t *desc;
+
+    /*! \brief The current receive tone */
+    int current_rx_tone;
+    /*! \brief The timeout for switching from the high level to low level tone detector. */
+    int high_low_timer;
+
+    struct
+    {
+#if defined(SPANDSP_USE_FIXED_POINT)
+        /*! \brief The z's for the notch filter */
+        int32_t notch_z1[3];
+        /*! \brief The z's for the notch filter */
+        int32_t notch_z2[3];
+#else
+        /*! \brief The z's for the notch filter */
+        float notch_z1[3];
+        /*! \brief The z's for the notch filter */
+        float notch_z2[3];
+#endif
+
+        /*! \brief The z's for the notch integrators. */
+        int32_t notch_zl;
+    } tone[2];
+
+#if defined(SPANDSP_USE_FIXED_POINT)
+    /*! \brief The z's for the weighting/bandpass filter. */
+    int32_t broad_z[3];
+#else
+    /*! \brief The z's for the weighting/bandpass filter. */
+    float broad_z[3];
+#endif
+    /*! \brief The z for the broadband integrator. */
+    int32_t broad_zl;
+
+    /*! \brief ??? */
+    int flat_mode;
+    /*! \brief ??? */
+    int tone_present;
+    /*! \brief ??? */
+    int notch_enabled;
+    /*! \brief ??? */
+    int flat_mode_timeout;
+    /*! \brief ??? */
+    int notch_insertion_timeout;
+    /*! \brief ??? */
+    int tone_persistence_timeout;
+    
+    /*! \brief ??? */
+    int signaling_state_duration;
+};
+
+#endif
+/*- End of file ------------------------------------------------------------*/

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.