spandsp
0.0.6
Main Page
Related Pages
Classes
Files
File List
File Members
private/t31.h
1
/*
2
* SpanDSP - a series of DSP components for telephony
3
*
4
* private/t31.h - A T.31 compatible class 1 FAX modem interface.
5
*
6
* Written by Steve Underwood <steveu@coppice.org>
7
*
8
* Copyright (C) 2004 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
#if !defined(_SPANDSP_PRIVATE_T31_H_)
27
#define _SPANDSP_PRIVATE_T31_H_
28
29
/*!
30
Analogue FAX front end channel descriptor. This defines the state of a single working
31
instance of an analogue line FAX front end.
32
*/
33
typedef
struct
34
{
35
fax_modems_state_t
modems;
36
//v8_state_t v8;
37
38
/*! The transmit signal handler to be used when the current one has finished sending. */
39
span_tx_handler_t *
next_tx_handler
;
40
void
*next_tx_user_data;
41
42
/*! \brief No of data bits in current_byte. */
43
int
bit_no
;
44
/*! \brief The current data byte in progress. */
45
int
current_byte
;
46
47
/*! \brief Rx power meter, used to detect silence. */
48
power_meter_t
rx_power
;
49
/*! \brief Last sample, used for an elementary HPF for the power meter. */
50
int16_t
last_sample
;
51
/*! \brief The current silence threshold. */
52
int32_t
silence_threshold_power
;
53
54
/*! \brief Samples of silence heard */
55
int
silence_heard
;
56
}
t31_audio_front_end_state_t
;
57
58
/*!
59
Analogue FAX front end channel descriptor. This defines the state of a single working
60
instance of an analogue line FAX front end.
61
*/
62
typedef
struct
63
{
64
/*! \brief Internet Aware FAX mode bit mask. */
65
int
iaf
;
66
/*! \brief Required time between T.38 transmissions, in ms. */
67
int
ms_per_tx_chunk
;
68
/*! \brief Bit fields controlling the way data is packed into chunked for transmission. */
69
int
chunking_modes
;
70
71
/*! \brief Core T.38 IFP support */
72
t38_core_state_t
t38
;
73
74
/*! \brief The current transmit step being timed */
75
int
timed_step
;
76
77
/*! \brief TRUE is there has been some T.38 data missed */
78
int
rx_data_missing
;
79
80
/*! \brief The number of octets to send in each image packet (non-ECM or ECM) at the current
81
rate and the current specified packet interval. */
82
int
octets_per_data_packet
;
83
84
/*! \brief An HDLC context used when sending HDLC messages to the terminal port
85
(ECM mode support). */
86
hdlc_tx_state_t
hdlc_tx_term
;
87
/*! \brief An HDLC context used when receiving HDLC messages from the terminal port.
88
(ECM mode support). */
89
hdlc_rx_state_t
hdlc_rx_term
;
90
91
struct
92
{
93
uint8_t buf[T31_T38_MAX_HDLC_LEN];
94
int
len;
95
} hdlc_rx;
96
97
struct
98
{
99
/*! \brief The number of extra bits in a fully stuffed version of the
100
contents of the HDLC transmit buffer. This is needed to accurately
101
estimate the playout time for this frame, through an analogue modem. */
102
int
extra_bits
;
103
} hdlc_tx;
104
105
/*! \brief TRUE if we are using ECM mode. This is used to select HDLC faking, necessary
106
with clunky class 1 modems. */
107
int
ecm_mode
;
108
109
/*! \brief Counter for trailing non-ECM bytes, used to flush out the far end's modem. */
110
int
non_ecm_trailer_bytes
;
111
112
/*! \brief The next queued tramsit indicator */
113
int
next_tx_indicator
;
114
/*! \brief The current T.38 data type being transmitted */
115
int
current_tx_data_type
;
116
117
/*! \brief The current operating mode of the receiver. */
118
int
current_rx_type
;
119
/*! \brief The current operating mode of the transmitter. */
120
int
current_tx_type
;
121
122
/*! \brief Current transmission bit rate. */
123
int
tx_bit_rate
;
124
/*! \brief A "sample" count, used to time events. */
125
int32_t
samples
;
126
/*! \brief The value for samples at the next transmission point. */
127
int32_t
next_tx_samples
;
128
/*! \brief The current receive timeout. */
129
int32_t
timeout_rx_samples
;
130
}
t31_t38_front_end_state_t
;
131
132
/*!
133
T.31 descriptor. This defines the working state for a single instance of
134
a T.31 FAX modem.
135
*/
136
struct
t31_state_s
137
{
138
at_state_t
at_state;
139
t31_modem_control_handler_t *modem_control_handler;
140
void
*modem_control_user_data;
141
142
t31_audio_front_end_state_t
audio;
143
t31_t38_front_end_state_t
t38_fe;
144
/*! TRUE if working in T.38 mode. */
145
int
t38_mode
;
146
147
/*! HDLC buffer, for composing an HDLC frame from the computer to the channel. */
148
struct
149
{
150
uint8_t buf[T31_MAX_HDLC_LEN];
151
int
len;
152
int
ptr;
153
/*! \brief TRUE when the end of HDLC data from the computer has been detected. */
154
int
final
;
155
}
hdlc_tx
;
156
/*! Buffer for data from the computer to the channel. */
157
struct
158
{
159
uint8_t data[T31_TX_BUF_LEN];
160
/*! \brief The number of bytes stored in transmit buffer. */
161
int
in_bytes
;
162
/*! \brief The number of bytes sent from the transmit buffer. */
163
int
out_bytes
;
164
/*! \brief TRUE if the flow of real data has started. */
165
int
data_started
;
166
/*! \brief TRUE if holding up further data into the buffer, for flow control. */
167
int
holding
;
168
/*! \brief TRUE when the end of non-ECM data from the computer has been detected. */
169
int
final
;
170
}
tx
;
171
172
/*! TRUE if DLE prefix just used */
173
int
dled
;
174
175
/*! \brief Samples of silence awaited, as specified in a "wait for silence" command */
176
int
silence_awaited
;
177
178
/*! \brief The current bit rate for the FAX fast message transfer modem. */
179
int
bit_rate
;
180
/*! \brief TRUE if a valid HDLC frame has been received in the current reception period. */
181
int
rx_frame_received
;
182
183
/*! \brief Samples elapsed in the current call */
184
int64_t
call_samples
;
185
int64_t dte_data_timeout;
186
187
/*! \brief The currently queued modem type. */
188
int
modem
;
189
/*! \brief TRUE when short training mode has been selected by the computer. */
190
int
short_train
;
191
queue_state_t
*rx_queue;
192
193
/*! \brief Error and flow logging control */
194
logging_state_t
logging
;
195
};
196
197
#endif
198
/*- End of file ------------------------------------------------------------*/
src
spandsp
private
t31.h
Generated on Mon Sep 10 2012 11:04:49 for spandsp by
1.8.1.2