osmocom-analog/src/libdtmf/dtmf_decode.h

36 lines
1.6 KiB
C

#include "../libfm/fm.h"
typedef struct ftmf_meas {
double frequency_low;
double frequency_high;
double amplitude_low;
double amplitude_high;
int count;
} dtmf_meas_t;
typedef struct dtmf_dec {
void *priv;
void (*recv_digit)(void *priv, char digit, dtmf_meas_t *meas);
int samplerate; /* samplerate */
double freq_margin; /* +- limit of frequency deviation (percent) valid tone*/
double min_amplitude; /* minimum amplitude relative to 0 dBm */
double max_amplitude; /* maximum amplitude relative to 0 dBm */
double forward_twist; /* how much do higher frequencies are louder than lower frequencies */
double reverse_twist; /* how much do lower frequencies are louder than higher frequencies */
int time_detect;
int time_meas;
int time_pause;
fm_demod_t demod_low; /* demodulator for low frequencies */
fm_demod_t demod_high; /* demodulator for high frequencies */
iir_filter_t freq_lp[2]; /* low pass to filter the frequency result */
char detected; /* currently detected DTMF digit or 0 for no detection */
int count; /* counter to count detection or loss (pause) of signal */
dtmf_meas_t meas; /* measurements */
} dtmf_dec_t;
int dtmf_decode_init(dtmf_dec_t *dtmf, void *priv, void (*recv_digit)(void *priv, char digit, dtmf_meas_t *meas), int samplerate, double max_amplitude, double min_amplitude);
void dtmf_decode_exit(dtmf_dec_t *dtmf);
void dtmf_decode(dtmf_dec_t *dtmf, sample_t *samples, int length);
void dtmf_decode_filter(dtmf_dec_t *dtmf, sample_t *samples, int length, sample_t *frequency_low, sample_t *frequency_high, sample_t *amplitude_low, sample_t *amplitude_high);