spandsp 3.0.0
private/fax_modems.h
Go to the documentation of this file.
1/*
2 * SpanDSP - a series of DSP components for telephony
3 *
4 * private/fax_modems.h - definitions for the analogue modem set for fax processing
5 *
6 * Written by Steve Underwood <steveu@coppice.org>
7 *
8 * Copyright (C) 2008 Steve Underwood
9 *
10 * All rights reserved.
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU Lesser General Public License version 2.1,
14 * as published by the Free Software Foundation.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU Lesser General Public License for more details.
20 *
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with this program; if not, write to the Free Software
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 */
25
26/*! \file */
27
28#if !defined(_SPANDSP_PRIVATE_FAX_MODEMS_H_)
29#define _SPANDSP_PRIVATE_FAX_MODEMS_H_
30
31/*!
32 The set of modems needed for FAX, plus the auxilliary stuff, like tone generation.
33*/
35{
36 /*! True is talker echo protection should be sent for the image modems */
37 bool use_tep;
38 /*! \brief The callback function used to report detected tones. */
39 tone_report_func_t tone_callback;
40 /*! \brief A user specified opaque pointer passed to the tone_callback function. */
42
43 /*! If true, transmit silence when there is nothing else to transmit. If false return only
44 the actual generated audio. Note that this only affects untimed silences. Timed silences
45 (e.g. the 75ms silence between V.21 and a high speed modem) will alway be transmitted as
46 silent audio. */
48
49 /*! \brief An HDLC context used when transmitting HDLC messages. */
51 /*! \brief An HDLC context used when receiving HDLC messages. */
53 /*! \brief A V.21 FSK modem context used when transmitting HDLC over V.21
54 messages. */
56 /*! \brief A V.21 FSK modem context used when receiving HDLC over V.21
57 messages. */
59 union
60 {
61 /*! \brief A V.17 modem context used when sending FAXes at 7200bps, 9600bps
62 12000bps or 14400bps */
64 /*! \brief A V.29 modem context used when receiving FAXes at 7200bps, 9600bps
65 12000bps or 14400bps */
67 /*! \brief A V.27ter modem context used when sending FAXes at 2400bps or
68 4800bps */
70 /*! \brief A V.27ter modem context used when receiving FAXes at 2400bps or
71 4800bps */
73 /*! \brief A V.29 modem context used when sending FAXes at 7200bps or
74 9600bps */
76 /*! \brief A V.29 modem context used when receiving FAXes at 7200bps or
77 9600bps */
79#if defined(SPANDSP_SUPPORT_V34)
80 /*! \brief A V.34 modem context used when sending or receiving Super-G3 FAXes */
81 v34_state_t v34;
82#endif
83 } fast_modems;
84 /*! \brief Used to insert timed silences. */
85 silence_gen_state_t silence_gen;
86 /*! \brief CED or CNG generator */
88 /*! \brief CED or CNG detector */
90 /*! \brief */
91 dc_restore_state_t dc_restore;
92
93 /*! \brief The fast modem type currently in use */
95
96 /*! \brief The currently selected receiver type */
98 /*! \brief The currently selected transmitter type */
100
101 int bit_rate;
102 int short_train;
103
104 /*! \brief The callback function used to put each bit received. */
106 /*! \brief A user specified opaque pointer passed to the put_bit routine. */
108
109 /*! \brief The callback function used to get the next bit to be transmitted. */
111 /*! \brief A user specified opaque pointer passed to the get_bit function. */
113
114 hdlc_frame_handler_t hdlc_accept;
115 void *hdlc_accept_user_data;
116
117 /*! \brief True if a carrier is present. Otherwise false. */
119 /*! \brief True if a modem has trained correctly. */
121 /*! \brief True if an HDLC frame has been received correctly. */
123
124 int deferred_rx_handler_updates;
125 /*! \brief The current receive signal handler */
126 span_rx_handler_t rx_handler;
127 /*! \brief The current receive signal handler. Actual receiving hops between this
128 and a dummy receive routine. */
129 span_rx_handler_t base_rx_handler;
130 void *rx_user_data;
131 /*! \brief The current receive missing signal fill-in handler */
132 span_rx_fillin_handler_t rx_fillin_handler;
133 /*! \brief The current receive signal fillin handler. Actual receiving hops between this
134 and a dummy receive routine. */
135 span_rx_fillin_handler_t base_rx_fillin_handler;
136 void *rx_fillin_user_data;
137
138 /*! \brief The current transmit signal handler */
139 span_tx_handler_t tx_handler;
140 void *tx_user_data;
141
142 /*! \brief The next transmit signal handler, for two stage transmit operations.
143 E.g. a short silence followed by a modem signal. */
144 span_tx_handler_t next_tx_handler;
145 void *next_tx_user_data;
146
147 /*! \brief The current bit rate of the transmitter. */
149 /*! \brief The current bit rate of the receiver. */
151
152 /*! \brief If True, transmission is in progress */
154 /*! \brief Audio logging file handle for received audio. */
156 /*! \brief Audio logging file handle for transmitted audio. */
158 /*! \brief Error and flow logging control */
160};
161
162#endif
163/*- End of file ------------------------------------------------------------*/
void(* put_bit_func_t)(void *user_data, int bit)
Definition async.h:107
int(* get_bit_func_t)(void *user_data)
Definition async.h:110
struct fsk_rx_state_s fsk_rx_state_t
Definition fsk.h:143
struct fsk_tx_state_s fsk_tx_state_t
Definition fsk.h:134
struct hdlc_rx_state_s hdlc_rx_state_t
Definition hdlc.h:54
struct hdlc_tx_state_s hdlc_tx_state_t
Definition hdlc.h:77
struct logging_state_s logging_state_t
Definition logging.h:72
struct modem_connect_tones_tx_state_s modem_connect_tones_tx_state_t
Definition modem_connect_tones.h:93
struct modem_connect_tones_rx_state_s modem_connect_tones_rx_state_t
Definition modem_connect_tones.h:99
Definition dc_restore.h:58
Definition private/fax_modems.h:35
span_rx_handler_t rx_handler
The current receive signal handler.
Definition private/fax_modems.h:126
bool transmit
If True, transmission is in progress.
Definition private/fax_modems.h:153
span_rx_fillin_handler_t base_rx_fillin_handler
The current receive signal fillin handler. Actual receiving hops between this and a dummy receive rou...
Definition private/fax_modems.h:135
span_tx_handler_t tx_handler
The current transmit signal handler.
Definition private/fax_modems.h:139
put_bit_func_t put_bit
The callback function used to put each bit received.
Definition private/fax_modems.h:105
span_rx_fillin_handler_t rx_fillin_handler
The current receive missing signal fill-in handler.
Definition private/fax_modems.h:132
v29_rx_state_t v29_rx
A V.29 modem context used when receiving FAXes at 7200bps or 9600bps.
Definition private/fax_modems.h:78
int current_rx_type
The currently selected receiver type.
Definition private/fax_modems.h:97
v27ter_rx_state_t v27ter_rx
A V.27ter modem context used when receiving FAXes at 2400bps or 4800bps.
Definition private/fax_modems.h:72
hdlc_tx_state_t hdlc_tx
An HDLC context used when transmitting HDLC messages.
Definition private/fax_modems.h:50
bool use_tep
Definition private/fax_modems.h:37
v27ter_tx_state_t v27ter_tx
A V.27ter modem context used when sending FAXes at 2400bps or 4800bps.
Definition private/fax_modems.h:69
bool rx_frame_received
True if an HDLC frame has been received correctly.
Definition private/fax_modems.h:122
int audio_tx_log
Audio logging file handle for transmitted audio.
Definition private/fax_modems.h:157
void * tone_callback_user_data
A user specified opaque pointer passed to the tone_callback function.
Definition private/fax_modems.h:41
silence_gen_state_t silence_gen
Used to insert timed silences.
Definition private/fax_modems.h:85
int fast_modem
The fast modem type currently in use.
Definition private/fax_modems.h:94
int tx_bit_rate
The current bit rate of the transmitter.
Definition private/fax_modems.h:148
v17_rx_state_t v17_rx
A V.29 modem context used when receiving FAXes at 7200bps, 9600bps 12000bps or 14400bps.
Definition private/fax_modems.h:66
get_bit_func_t get_bit
The callback function used to get the next bit to be transmitted.
Definition private/fax_modems.h:110
v17_tx_state_t v17_tx
A V.17 modem context used when sending FAXes at 7200bps, 9600bps 12000bps or 14400bps.
Definition private/fax_modems.h:63
modem_connect_tones_rx_state_t connect_rx
CED or CNG detector.
Definition private/fax_modems.h:89
void * get_bit_user_data
A user specified opaque pointer passed to the get_bit function.
Definition private/fax_modems.h:112
hdlc_rx_state_t hdlc_rx
An HDLC context used when receiving HDLC messages.
Definition private/fax_modems.h:52
int transmit_on_idle
Definition private/fax_modems.h:47
v29_tx_state_t v29_tx
A V.29 modem context used when sending FAXes at 7200bps or 9600bps.
Definition private/fax_modems.h:75
tone_report_func_t tone_callback
The callback function used to report detected tones.
Definition private/fax_modems.h:39
fsk_tx_state_t v21_tx
A V.21 FSK modem context used when transmitting HDLC over V.21 messages.
Definition private/fax_modems.h:55
void * put_bit_user_data
A user specified opaque pointer passed to the put_bit routine.
Definition private/fax_modems.h:107
span_tx_handler_t next_tx_handler
The next transmit signal handler, for two stage transmit operations. E.g. a short silence followed by...
Definition private/fax_modems.h:144
logging_state_t logging
Error and flow logging control.
Definition private/fax_modems.h:159
int rx_bit_rate
The current bit rate of the receiver.
Definition private/fax_modems.h:150
span_rx_handler_t base_rx_handler
The current receive signal handler. Actual receiving hops between this and a dummy receive routine.
Definition private/fax_modems.h:129
int current_tx_type
The currently selected transmitter type.
Definition private/fax_modems.h:99
bool rx_trained
True if a modem has trained correctly.
Definition private/fax_modems.h:120
int audio_rx_log
Audio logging file handle for received audio.
Definition private/fax_modems.h:155
fsk_rx_state_t v21_rx
A V.21 FSK modem context used when receiving HDLC over V.21 messages.
Definition private/fax_modems.h:58
bool rx_signal_present
True if a carrier is present. Otherwise false.
Definition private/fax_modems.h:118
modem_connect_tones_tx_state_t connect_tx
CED or CNG generator.
Definition private/fax_modems.h:87
struct v17_rx_state_s v17_rx_state_t
Definition v17rx.h:222
struct v17_tx_state_s v17_tx_state_t
Definition v17tx.h:86
struct v27ter_rx_state_s v27ter_rx_state_t
Definition v27ter_rx.h:57
struct v27ter_tx_state_s v27ter_tx_state_t
Definition v27ter_tx.h:69
struct v29_rx_state_s v29_rx_state_t
Definition v29rx.h:137
struct v29_tx_state_s v29_tx_state_t
Definition v29tx.h:99