spandsp
0.0.6
Main Page
Related Pages
Classes
Files
File List
File Members
private/t30.h
Go to the documentation of this file.
1
/*
2
* SpanDSP - a series of DSP components for telephony
3
*
4
* private/t30.h - definitions for T.30 fax processing
5
*
6
* Written by Steve Underwood <steveu@coppice.org>
7
*
8
* Copyright (C) 2003 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_T30_H_)
29
#define _SPANDSP_PRIVATE_T30_H_
30
31
/*!
32
T.30 FAX channel descriptor. This defines the state of a single working
33
instance of a T.30 FAX channel.
34
*/
35
struct
t30_state_s
36
{
37
/*! \brief T.4 context for reading or writing image data. */
38
union
39
{
40
t4_state_t
rx;
41
t4_state_t
tx;
42
}
t4
;
43
/*! \brief The type of FAX operation currently in progress */
44
int
operation_in_progress
;
45
46
/*! \brief TRUE if behaving as the calling party */
47
int
calling_party
;
48
49
/*! \brief Internet aware FAX mode bit mask. */
50
int
iaf
;
51
/*! \brief A bit mask of the currently supported modem types. */
52
int
supported_modems
;
53
/*! \brief A bit mask of the currently supported image compression modes. */
54
int
supported_compressions
;
55
/*! \brief A bit mask of the currently supported image resolutions. */
56
int
supported_resolutions
;
57
/*! \brief A bit mask of the currently supported image sizes. */
58
int
supported_image_sizes
;
59
/*! \brief A bit mask of the currently supported T.30 special features. */
60
int
supported_t30_features
;
61
/*! \brief TRUE is ECM mode handling is enabled. */
62
int
ecm_allowed
;
63
/*! \brief TRUE if we are capable of retransmitting pages */
64
int
retransmit_capable
;
65
66
/*! \brief The received DCS, formatted as an ASCII string, for inclusion
67
in the TIFF file. */
68
char
rx_dcs_string
[
T30_MAX_DIS_DTC_DCS_LEN
*3 + 1];
69
/*! \brief The text which will be used in FAX page header. No text results
70
in no header line. */
71
char
header_info
[
T30_MAX_PAGE_HEADER_INFO
+ 1];
72
/*! \brief TRUE for FAX page headers to overlay (i.e. replace) the beginning of the
73
page image. FALSE for FAX page headers to add to the overall length of
74
the page. */
75
int
header_overlays_image
;
76
/*! \brief TRUE if remote T.30 procedural interrupts are allowed. */
77
int
remote_interrupts_allowed
;
78
79
/*! \brief The information fields received. */
80
t30_exchanged_info_t
rx_info
;
81
/*! \brief The information fields to be transmitted. */
82
t30_exchanged_info_t
tx_info
;
83
/*! \brief The country of origin of the remote machine, if known, else NULL. */
84
const
char
*
country
;
85
/*! \brief The vendor of the remote machine, if known, else NULL. */
86
const
char
*
vendor
;
87
/*! \brief The model of the remote machine, if known, else NULL. */
88
const
char
*
model
;
89
90
/*! \brief A pointer to a callback routine to be called when phase B events
91
occur. */
92
t30_phase_b_handler_t
*
phase_b_handler
;
93
/*! \brief An opaque pointer supplied in event B callbacks. */
94
void
*
phase_b_user_data
;
95
/*! \brief A pointer to a callback routine to be called when phase D events
96
occur. */
97
t30_phase_d_handler_t
*
phase_d_handler
;
98
/*! \brief An opaque pointer supplied in event D callbacks. */
99
void
*
phase_d_user_data
;
100
/*! \brief A pointer to a callback routine to be called when phase E events
101
occur. */
102
t30_phase_e_handler_t
*
phase_e_handler
;
103
/*! \brief An opaque pointer supplied in event E callbacks. */
104
void
*
phase_e_user_data
;
105
/*! \brief A pointer to a callback routine to be called when frames are
106
exchanged. */
107
t30_real_time_frame_handler_t
*
real_time_frame_handler
;
108
/*! \brief An opaque pointer supplied in real time frame callbacks. */
109
void
*
real_time_frame_user_data
;
110
111
/*! \brief A pointer to a callback routine to be called when document events
112
(e.g. end of transmitted document) occur. */
113
t30_document_handler_t
*
document_handler
;
114
/*! \brief An opaque pointer supplied in document callbacks. */
115
void
*
document_user_data
;
116
117
/*! \brief The handler for changes to the receive mode */
118
t30_set_handler_t
*
set_rx_type_handler
;
119
/*! \brief An opaque pointer passed to the handler for changes to the receive mode */
120
void
*
set_rx_type_user_data
;
121
/*! \brief The handler for changes to the transmit mode */
122
t30_set_handler_t
*
set_tx_type_handler
;
123
/*! \brief An opaque pointer passed to the handler for changes to the transmit mode */
124
void
*
set_tx_type_user_data
;
125
126
/*! \brief The transmitted HDLC frame handler. */
127
t30_send_hdlc_handler_t
*
send_hdlc_handler
;
128
/*! \brief An opaque pointer passed to the transmitted HDLC frame handler. */
129
void
*
send_hdlc_user_data
;
130
131
/*! \brief The DIS code for the minimum scan row time we require. This is usually 0ms,
132
but if we are trying to simulate another type of FAX machine, we may need a non-zero
133
value here. */
134
uint8_t
local_min_scan_time_code
;
135
136
/*! \brief The current T.30 phase. */
137
int
phase
;
138
/*! \brief The T.30 phase to change to when the current phase ends. */
139
int
next_phase
;
140
/*! \brief The current state of the T.30 state machine. */
141
int
state
;
142
/*! \brief The step in sending a sequence of HDLC frames. */
143
int
step
;
144
145
/*! \brief The preparation buffer for the DCS message to be transmitted. */
146
uint8_t
dcs_frame
[
T30_MAX_DIS_DTC_DCS_LEN
];
147
/*! \brief The length of the DCS message to be transmitted. */
148
int
dcs_len
;
149
/*! \brief The preparation buffer for DIS or DTC message to be transmitted. */
150
uint8_t
local_dis_dtc_frame
[
T30_MAX_DIS_DTC_DCS_LEN
];
151
/*! \brief The length of the DIS or DTC message to be transmitted. */
152
int
local_dis_dtc_len
;
153
/*! \brief The last DIS or DTC message received form the far end. */
154
uint8_t
far_dis_dtc_frame
[
T30_MAX_DIS_DTC_DCS_LEN
];
155
/*! \brief The length of the last DIS or DTC message received form the far end. */
156
int
far_dis_dtc_len
;
157
/*! \brief TRUE if a valid DIS has been received from the far end. */
158
int
dis_received
;
159
160
/*! \brief TRUE if the short training sequence should be used. */
161
int
short_train
;
162
163
/*! \brief A count of the number of bits in the trainability test. This counts down to zero when
164
sending TCF, and counts up when receiving it. */
165
int
tcf_test_bits
;
166
/*! \brief The current count of consecutive received zero bits, during the trainability test. */
167
int
tcf_current_zeros
;
168
/*! \brief The maximum consecutive received zero bits seen to date, during the trainability test. */
169
int
tcf_most_zeros
;
170
171
/*! \brief The current fallback step for the fast message transfer modem. */
172
int
current_fallback
;
173
/*! \brief The subset of supported modems allowed at the current time, allowing for negotiation. */
174
int
current_permitted_modems
;
175
/*! \brief TRUE if a carrier is present. Otherwise FALSE. */
176
int
rx_signal_present
;
177
/*! \brief TRUE if a modem has trained correctly. */
178
int
rx_trained
;
179
/*! \brief TRUE if a valid HDLC frame has been received in the current reception period. */
180
int
rx_frame_received
;
181
182
/*! \brief Current reception mode. */
183
int
current_rx_type
;
184
/*! \brief Current transmission mode. */
185
int
current_tx_type
;
186
187
/*! \brief T0 is the answer timeout when calling another FAX machine.
188
Placing calls is handled outside the FAX processing, but this timeout keeps
189
running until V.21 modulation is sent or received.
190
T1 is the remote terminal identification timeout (in audio samples). */
191
int
timer_t0_t1
;
192
/*! \brief T2, T2A and T2B are the HDLC command timeouts.
193
T4, T4A and T4B are the HDLC response timeouts (in audio samples). */
194
int
timer_t2_t4
;
195
/*! \brief A value specifying which of the possible timers is currently running in timer_t2_t4 */
196
int
timer_t2_t4_is
;
197
/*! \brief Procedural interrupt timeout (in audio samples). */
198
int
timer_t3
;
199
/*! \brief This is only used in error correcting mode. */
200
int
timer_t5
;
201
/*! \brief This is only used in full duplex (e.g. ISDN) modes. */
202
int
timer_t6
;
203
/*! \brief This is only used in full duplex (e.g. ISDN) modes. */
204
int
timer_t7
;
205
/*! \brief This is only used in full duplex (e.g. ISDN) modes. */
206
int
timer_t8
;
207
208
/*! \brief TRUE once the far end FAX entity has been detected. */
209
int
far_end_detected
;
210
211
/*! \brief TRUE if a local T.30 interrupt is pending. */
212
int
local_interrupt_pending
;
213
/*! \brief The image coding being used on the line. */
214
int
line_encoding
;
215
/*! \brief The image coding being used for output files. */
216
int
output_encoding
;
217
/*! \brief The current DCS message minimum scan time code. */
218
uint8_t
min_scan_time_code
;
219
/*! \brief The X direction resolution of the current image, in pixels per metre. */
220
int
x_resolution
;
221
/*! \brief The Y direction resolution of the current image, in pixels per metre. */
222
int
y_resolution
;
223
/*! \brief The width of the current image, in pixels. */
224
t4_image_width_t
image_width
;
225
/*! \brief Current number of retries of the action in progress. */
226
int
retries
;
227
/*! \brief TRUE if error correcting mode is used. */
228
int
error_correcting_mode
;
229
/*! \brief The number of HDLC frame retries, if error correcting mode is used. */
230
int
error_correcting_mode_retries
;
231
/*! \brief The current count of consecutive T30_PPR messages. */
232
int
ppr_count
;
233
/*! \brief The current count of consecutive T30_RNR messages. */
234
int
receiver_not_ready_count
;
235
/*! \brief The number of octets to be used per ECM frame. */
236
int
octets_per_ecm_frame
;
237
/*! \brief The ECM partial page buffer. */
238
uint8_t
ecm_data
[256][260];
239
/*! \brief The lengths of the frames in the ECM partial page buffer. */
240
int16_t
ecm_len
[256];
241
/*! \brief A bit map of the OK ECM frames, constructed as a PPR frame. */
242
uint8_t
ecm_frame_map
[3 + 32];
243
244
/*! \brief The current page number for receiving, in ECM or non-ECM mode. This is reset at the start of a call. */
245
int
rx_page_number
;
246
/*! \brief The current page number for sending, in ECM or non-ECM mode. This is reset at the start of a call. */
247
int
tx_page_number
;
248
/*! \brief The current block number, in ECM mode */
249
int
ecm_block
;
250
/*! \brief The number of frames in the current block number, in ECM mode */
251
int
ecm_frames
;
252
/*! \brief The number of frames sent in the current burst of image transmission, in ECM mode */
253
int
ecm_frames_this_tx_burst
;
254
/*! \brief The current ECM frame, during ECM transmission. */
255
int
ecm_current_tx_frame
;
256
/*! \brief TRUE if we are at the end of an ECM page to se sent - i.e. there are no more
257
partial pages still to come. */
258
int
ecm_at_page_end
;
259
260
/*! \brief The transmission step queued to follow the one in progress. */
261
int
next_tx_step
;
262
/*! \brief The FCF for the next receive step. */
263
uint8_t
next_rx_step
;
264
/*! \brief Image file name for image reception. */
265
char
rx_file
[256];
266
/*! \brief The last page we are prepared accept for a received image file. -1 means no restriction. */
267
int
rx_stop_page
;
268
/*! \brief Image file name to be sent. */
269
char
tx_file
[256];
270
/*! \brief The first page to be sent from the image file. -1 means no restriction. */
271
int
tx_start_page
;
272
/*! \brief The last page to be sent from the image file. -1 means no restriction. */
273
int
tx_stop_page
;
274
/*! \brief The current completion status. */
275
int
current_status
;
276
277
/*! \brief The number of RTP events */
278
int
rtp_events
;
279
/*! \brief The number of RTN events */
280
int
rtn_events
;
281
282
/*! \brief the FCF2 field of the last PPS message we received. */
283
uint8_t
last_pps_fcf2
;
284
/*! \brief TRUE if all frames of the current received ECM block are now OK */
285
int
rx_ecm_block_ok
;
286
/*! \brief A count of successfully received ECM frames, to assess progress as a basis for
287
deciding whether to continue error correction when PPRs keep repeating. */
288
int
ecm_progress
;
289
290
/*! \brief Error and flow logging control */
291
logging_state_t
logging
;
292
};
293
294
#endif
295
/*- End of file ------------------------------------------------------------*/
src
spandsp
private
t30.h
Generated by
1.8.1.2