dtmf.c File Reference

#include <inttypes.h>
#include <stdlib.h>
#include "floating_fudge.h"
#include <string.h>
#include <stdio.h>
#include <time.h>
#include <fcntl.h>
#include "spandsp/telephony.h"
#include "spandsp/fast_convert.h"
#include "spandsp/queue.h"
#include "spandsp/complex.h"
#include "spandsp/dds.h"
#include "spandsp/tone_detect.h"
#include "spandsp/tone_generate.h"
#include "spandsp/super_tone_rx.h"
#include "spandsp/dtmf.h"
#include "spandsp/private/queue.h"
#include "spandsp/private/tone_generate.h"
#include "spandsp/private/dtmf.h"

Defines

#define DEFAULT_DTMF_TX_LEVEL   -10
#define DEFAULT_DTMF_TX_ON_TIME   50
#define DEFAULT_DTMF_TX_OFF_TIME   55
#define DTMF_THRESHOLD   171032462.0f
#define DTMF_NORMAL_TWIST   6.309f
#define DTMF_REVERSE_TWIST   2.512f
#define DTMF_RELATIVE_PEAK_ROW   6.309f
#define DTMF_RELATIVE_PEAK_COL   6.309f
#define DTMF_TO_TOTAL_ENERGY   83.868f
#define DTMF_POWER_OFFSET   110.395f
#define DTMF_SAMPLES_PER_BLOCK   102

Functions

int dtmf_rx (dtmf_rx_state_t *s, const int16_t amp[], int samples)
 Process a block of received DTMF audio samples.
int dtmf_rx_status (dtmf_rx_state_t *s)
 Get the status of DTMF detection during processing of the last audio chunk.
size_t dtmf_rx_get (dtmf_rx_state_t *s, char *buf, int max)
 Get a string of digits from a DTMF receiver's output buffer.
void dtmf_rx_set_realtime_callback (dtmf_rx_state_t *s, tone_report_func_t callback, void *user_data)
 Set a realtime callback for a DTMF receiver context.
void dtmf_rx_parms (dtmf_rx_state_t *s, int filter_dialtone, int twist, int reverse_twist, int threshold)
 Adjust a DTMF receiver context.
dtmf_rx_state_tdtmf_rx_init (dtmf_rx_state_t *s, digits_rx_callback_t callback, void *user_data)
 Initialise a DTMF receiver context.
int dtmf_rx_release (dtmf_rx_state_t *s)
 Release a DTMF receiver context.
int dtmf_rx_free (dtmf_rx_state_t *s)
 Free a DTMF receiver context.
int dtmf_tx (dtmf_tx_state_t *s, int16_t amp[], int max_samples)
 Generate a buffer of DTMF tones.
int dtmf_tx_put (dtmf_tx_state_t *s, const char *digits, int len)
 Put a string of digits in a DTMF generator's input buffer.
void dtmf_tx_set_level (dtmf_tx_state_t *s, int level, int twist)
 Change the transmit level for a DTMF tone generator context.
void dtmf_tx_set_timing (dtmf_tx_state_t *s, int on_time, int off_time)
 Change the transmit on and off time for a DTMF tone generator context.
dtmf_tx_state_tdtmf_tx_init (dtmf_tx_state_t *s)
 Initialise a DTMF tone generator context.
int dtmf_tx_release (dtmf_tx_state_t *s)
 Release a DTMF tone generator context.
int dtmf_tx_free (dtmf_tx_state_t *s)
 Free a DTMF tone generator context.

Detailed Description


Function Documentation

int dtmf_rx ( dtmf_rx_state_t s,
const int16_t  amp[],
int  samples 
)

Process a block of received DTMF audio samples.

Process a block of received DTMF audio samples.

Parameters:
s The DTMF receiver context.
amp The audio sample buffer.
samples The number of samples in the buffer.
Returns:
The number of samples unprocessed.

References goertzel_result().

Referenced by adsi_rx(), and v18_rx().

int dtmf_rx_free ( dtmf_rx_state_t s  ) 

Free a DTMF receiver context.

Parameters:
s The DTMF receiver context.
Returns:
0 for OK, else -1.

size_t dtmf_rx_get ( dtmf_rx_state_t s,
char *  digits,
int  max 
)

Get a string of digits from a DTMF receiver's output buffer.

Parameters:
s The DTMF receiver context.
digits The buffer for the received digits.
max The maximum number of digits to be returned,
Returns:
The number of digits actually returned.

dtmf_rx_state_t* dtmf_rx_init ( dtmf_rx_state_t s,
digits_rx_callback_t  callback,
void *  user_data 
)

Initialise a DTMF receiver context.

Parameters:
s The DTMF receiver context.
callback An optional callback routine, used to report received digits. If no callback routine is set, digits may be collected, using the dtmf_rx_get() function.
user_data An opaque pointer which is associated with the context, and supplied in callbacks.
Returns:
A pointer to the DTMF receiver context.

References goertzel_init(), and make_goertzel_descriptor().

Referenced by adsi_rx_init(), and v18_init().

void dtmf_rx_parms ( dtmf_rx_state_t s,
int  filter_dialtone,
int  twist,
int  reverse_twist,
int  threshold 
)

Adjust a DTMF receiver context.

Parameters:
s The DTMF receiver context.
filter_dialtone TRUE to enable filtering of dialtone, FALSE to disable, < 0 to leave unchanged.
twist Acceptable twist, in dB. < 0 to leave unchanged.
reverse_twist Acceptable reverse twist, in dB. < 0 to leave unchanged.
threshold The minimum acceptable tone level for detection, in dBm0. <= -99 to leave unchanged.

int dtmf_rx_release ( dtmf_rx_state_t s  ) 

Release a DTMF receiver context.

Parameters:
s The DTMF receiver context.
Returns:
0 for OK, else -1.

void dtmf_rx_set_realtime_callback ( dtmf_rx_state_t s,
tone_report_func_t  callback,
void *  user_data 
)

Set a realtime callback for a DTMF receiver context.

Set a optional realtime callback for a DTMF receiver context. This function is called immediately a confirmed state change occurs in the received DTMF. It is called with the ASCII value for a DTMF tone pair, or zero to indicate no tone is being received.

Parameters:
s The DTMF receiver context.
callback Callback routine used to report the start and end of digits.
user_data An opaque pointer which is associated with the context, and supplied in callbacks.

int dtmf_rx_status ( dtmf_rx_state_t s  ) 

Get the status of DTMF detection during processing of the last audio chunk.

Get the status of DTMF detection during processing of the last audio chunk.

Parameters:
s The DTMF receiver context.
Returns:
The current digit status. Either 'x' for a "maybe" condition, or the digit being detected.

int dtmf_tx ( dtmf_tx_state_t s,
int16_t  amp[],
int  max_samples 
)

Generate a buffer of DTMF tones.

Parameters:
s The DTMF generator context.
amp The buffer for the generated signal.
max_samples The required number of generated samples.
Returns:
The number of samples actually generated. This may be less than max_samples if the input buffer empties.

References queue_read_byte().

Referenced by adsi_tx().

int dtmf_tx_free ( dtmf_tx_state_t s  ) 

Free a DTMF tone generator context.

Parameters:
s The DTMF tone generator context.
Returns:
0 for OK, else -1.

dtmf_tx_state_t* dtmf_tx_init ( dtmf_tx_state_t s  ) 

Initialise a DTMF tone generator context.

Parameters:
s The DTMF generator context.
Returns:
A pointer to the DTMF generator context.

References dtmf_tx_set_level(), dtmf_tx_set_timing(), queue_init(), QUEUE_READ_ATOMIC, and QUEUE_WRITE_ATOMIC.

Referenced by v18_init().

int dtmf_tx_put ( dtmf_tx_state_t s,
const char *  digits,
int  len 
)

Put a string of digits in a DTMF generator's input buffer.

Parameters:
s The DTMF generator context.
digits The string of digits to be added.
len The length of the string of digits. If negative, the string is assumed to be a NULL terminated string.
Returns:
The number of digits actually added. This may be less than the length of the digit string, if the buffer fills up.

References queue_free_space(), and queue_write().

Referenced by adsi_tx_put_message().

int dtmf_tx_release ( dtmf_tx_state_t s  ) 

Release a DTMF tone generator context.

Parameters:
s The DTMF tone generator context.
Returns:
0 for OK, else -1.

void dtmf_tx_set_level ( dtmf_tx_state_t s,
int  level,
int  twist 
)

Change the transmit level for a DTMF tone generator context.

Parameters:
s The DTMF generator context.
level The level of the low tone, in dBm0.
twist The twist, in dB.

References dds_scaling_dbm0f().

Referenced by dtmf_tx_init().

void dtmf_tx_set_timing ( dtmf_tx_state_t s,
int  on_time,
int  off_time 
)

Change the transmit on and off time for a DTMF tone generator context.

Parameters:
s The DTMF generator context.
on-time The on time, in ms.
off_time The off time, in ms.

Referenced by dtmf_tx_init().


Generated on Tue Aug 4 03:36:18 2009 for spandsp by  doxygen 1.5.9