spandsp  0.0.6
fax_modems.h
Go to the documentation of this file.
1 /*
2  * SpanDSP - a series of DSP components for telephony
3  *
4  * 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_FAX_MODEMS_H_)
29 #define _SPANDSP_FAX_MODEMS_H_
30 
31 enum
32 {
33  FAX_MODEM_NONE = -1,
34  FAX_MODEM_FLUSH = 0,
35  FAX_MODEM_SILENCE_TX,
36  FAX_MODEM_SILENCE_RX,
37  FAX_MODEM_CED_TONE,
38  FAX_MODEM_CNG_TONE,
39  FAX_MODEM_NOCNG_TONE,
40  FAX_MODEM_V21_TX,
41  FAX_MODEM_V17_TX,
42  FAX_MODEM_V27TER_TX,
43  FAX_MODEM_V29_TX,
44  FAX_MODEM_V21_RX,
45  FAX_MODEM_V17_RX,
46  FAX_MODEM_V27TER_RX,
47  FAX_MODEM_V29_RX
48 };
49 
50 /*!
51  The set of modems needed for FAX, plus the auxilliary stuff, like tone generation.
52 */
54 
55 #if defined(__cplusplus)
56 extern "C"
57 {
58 #endif
59 
60 /*! Convert a FAX modem type to a short text description.
61  \brief Convert a FAX modem type to a short text description.
62  \param modem The modem code.
63  \return A pointer to the description. */
64 SPAN_DECLARE(const char *) fax_modem_to_str(int modem);
65 
66 /* N.B. the following are currently a work in progress */
67 SPAN_DECLARE_NONSTD(int) fax_modems_v17_v21_rx(void *user_data, const int16_t amp[], int len);
68 SPAN_DECLARE_NONSTD(int) fax_modems_v27ter_v21_rx(void *user_data, const int16_t amp[], int len);
69 SPAN_DECLARE_NONSTD(int) fax_modems_v29_v21_rx(void *user_data, const int16_t amp[], int len);
70 SPAN_DECLARE_NONSTD(int) fax_modems_v17_v21_rx_fillin(void *user_data, int len);
71 SPAN_DECLARE_NONSTD(int) fax_modems_v27ter_v21_rx_fillin(void *user_data, int len);
72 SPAN_DECLARE_NONSTD(int) fax_modems_v29_v21_rx_fillin(void *user_data, int len);
73 
74 SPAN_DECLARE_NONSTD(void) fax_modems_hdlc_tx_frame(void *user_data, const uint8_t *msg, int len);
75 
76 SPAN_DECLARE(void) fax_modems_start_rx_modem(fax_modems_state_t *s, int which);
77 
78 SPAN_DECLARE(void) fax_modems_set_tep_mode(fax_modems_state_t *s, int use_tep);
79 
80 SPAN_DECLARE(int) fax_modems_restart(fax_modems_state_t *s);
81 
82 /*! Get a pointer to the logging context associated with a FAX modems context.
83  \brief Get a pointer to the logging context associated with a FAX modems context.
84  \param s The FAX modems context.
85  \return A pointer to the logging context, or NULL.
86 */
88 
89 SPAN_DECLARE(fax_modems_state_t *) fax_modems_init(fax_modems_state_t *s,
90  int use_tep,
91  hdlc_frame_handler_t hdlc_accept,
92  hdlc_underflow_handler_t hdlc_tx_underflow,
93  put_bit_func_t non_ecm_put_bit,
94  get_bit_func_t non_ecm_get_bit,
95  tone_report_func_t tone_callback,
96  void *user_data);
97 
98 SPAN_DECLARE(int) fax_modems_release(fax_modems_state_t *s);
99 
100 SPAN_DECLARE(int) fax_modems_free(fax_modems_state_t *s);
101 
102 #if defined(__cplusplus)
103 }
104 #endif
105 
106 #endif
107 /*- End of file ------------------------------------------------------------*/
v27ter_tx_init
v27ter_tx_state_t * v27ter_tx_init(v27ter_tx_state_t *s, int bit_rate, int tep, get_bit_func_t get_bit, void *user_data)
Initialise a V.27ter modem transmit context.
Definition: v27ter_tx.c:413
t4_stats_t
Definition: t4_rx.h:212
T30_TSI
@ T30_TSI
Definition: t30_fcf.h:55
v29_rx_signal_power
float v29_rx_signal_power(v29_rx_state_t *s)
Definition: v29rx.c:165
T30_DCS
@ T30_DCS
Definition: t30_fcf.h:54
T30_CSI
@ T30_CSI
Definition: t30_fcf.h:36
tone_generate.h
MODEM_CONNECT_TONES_FAX_CNG
@ MODEM_CONNECT_TONES_FAX_CNG
CNG tone is a pure 1100Hz tone, in 0.5s bursts, with 3s silences in between. The bursts repeat for as...
Definition: modem_connect_tones.h:62
T4_FCD
@ T4_FCD
Definition: t30_fcf.h:116
v29_rx_init
v29_rx_state_t * v29_rx_init(v29_rx_state_t *s, int bit_rate, put_bit_func_t put_bit, void *user_data)
Initialise a V.29 modem receive context.
Definition: v29rx.c:1171
modem_connect_tones.h
T30_PWD
@ T30_PWD
Definition: t30_fcf.h:45
v27ter_rx_set_modem_status_handler
void v27ter_rx_set_modem_status_handler(v27ter_rx_state_t *s, modem_status_func_t handler, void *user_data)
Change the modem status report function associated with a V.27ter modem receive context.
Definition: v27ter_rx.c:1023
fax_modems_state_s::rx_frame_received
int rx_frame_received
TRUE if an HDLC frame has been received correctly.
Definition: private/fax_modems.h:95
hdlc_tx_restart
int hdlc_tx_restart(hdlc_tx_state_t *s)
Re-initialise an HDLC transmitter context.
Definition: hdlc.c:605
hdlc_tx_init
hdlc_tx_state_t * hdlc_tx_init(hdlc_tx_state_t *s, int crc32, int inter_frame_flags, int progressive, hdlc_underflow_handler_t handler, void *user_data)
Initialise an HDLC transmitter context.
Definition: hdlc.c:626
t30_decode_dis_dtc_dcs
void t30_decode_dis_dtc_dcs(t30_state_t *s, const uint8_t *dis, int len)
Decode a DIS, DTC or DCS frame, and log the contents.
Definition: t30_logging.c:506
fax_modems_state_s::logging
logging_state_t logging
Error and flow logging control.
Definition: private/fax_modems.h:124
t4_stats_t::bad_rows
int bad_rows
The number of bad pixel rows in the most recent page.
Definition: t4_rx.h:223
t4_rx_get_transfer_statistics
void t4_rx_get_transfer_statistics(t4_rx_state_t *s, t4_stats_t *t)
Get the current transfer statistics.
Definition: t4_rx.c:1133
fsk_rx_signal_power
float fsk_rx_signal_power(fsk_rx_state_t *s)
Definition: fsk.c:246
async.h
hdlc.h
v27ter_rx_get_logging_state
logging_state_t * v27ter_rx_get_logging_state(v27ter_rx_state_t *s)
Get the logging context associated with a V.27ter modem receive context.
Definition: v27ter_rx.c:1030
fax_modems_state_s::v27ter_rx
v27ter_rx_state_t v27ter_rx
A V.27ter modem context used when receiving FAXes at 2400bps or 4800bps.
Definition: private/fax_modems.h:74
v29_rx_signal_cutoff
void v29_rx_signal_cutoff(v29_rx_state_t *s, float cutoff)
Definition: v29rx.c:171
crc.h
t35_decode
int t35_decode(const uint8_t *msg, int len, const char **country, const char **vendor, const char **model)
Decode an NSF field.
Definition: t35.c:909
T30_SUB
@ T30_SUB
Definition: t30_fcf.h:57
T4_COMPRESSION_ITU_T4_2D
@ T4_COMPRESSION_ITU_T4_2D
Definition: t4_rx.h:56
put_bit_func_t
void(* put_bit_func_t)(void *user_data, int bit)
Definition: async.h:105
t30_frametype
const char * t30_frametype(uint8_t x)
Return a text name for a T.30 frame type.
Definition: t30_logging.c:241
v27ter_tx.h
fax_modems_state_s::rx_fillin_handler
span_rx_fillin_handler_t * rx_fillin_handler
The current receive missing signal fill-in handler.
Definition: private/fax_modems.h:100
T30_NSS
@ T30_NSS
Definition: t30_fcf.h:56
fax_modems_state_s::v29_tx
v29_tx_state_t v29_tx
A V.29 modem context used when sending FAXes at 7200bps or 9600bps.
Definition: private/fax_modems.h:65
t4_rx_start_page
int t4_rx_start_page(t4_rx_state_t *s)
Prepare to receive the next page of the current document.
Definition: t4_rx.c:1010
t4_rx_set_x_resolution
void t4_rx_set_x_resolution(t4_rx_state_t *s, int resolution)
Set the column-to-column (x) resolution to expect for a received image.
Definition: t4_rx.c:1097
fax_modems_state_s::rx_signal_present
int rx_signal_present
TRUE if a carrier is present. Otherwise FALSE.
Definition: private/fax_modems.h:91
fax_modems_state_s::v27ter_tx
v27ter_tx_state_t v27ter_tx
A V.27ter modem context used when sending FAXes at 2400bps or 4800bps.
Definition: private/fax_modems.h:71
signal_status_to_str
const char * signal_status_to_str(int status)
Convert a signal status to a short text description.
Definition: async.c:42
v17_rx_signal_cutoff
void v17_rx_signal_cutoff(v17_rx_state_t *s, float cutoff)
Definition: v17rx.c:188
SPAN_DECLARE_NONSTD
SPAN_DECLARE_NONSTD(int) async_tx_get_bit(void *user_data)
Get the next bit of a transmitted serial bit stream.
fax_modems_state_s::v17_tx
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:59
t4_stats_t::pages_transferred
int pages_transferred
The number of pages transferred so far.
Definition: t4_rx.h:215
v17rx.h
complex.h
T30_DTC
@ T30_DTC
Definition: t30_fcf.h:42
fax_modems_state_s::silence_gen
silence_gen_state_t silence_gen
Used to insert timed silences.
Definition: private/fax_modems.h:77
t4_stats_t::length
int length
The number of vertical pixels in the most recent page.
Definition: t4_rx.h:221
fax_modems_get_logging_state
logging_state_t * fax_modems_get_logging_state(fax_modems_state_t *s)
Get a pointer to the logging context associated with a FAX modems context.
Definition: fax_modems.c:323
v29_rx_get_logging_state
logging_state_t * v29_rx_get_logging_state(v29_rx_state_t *s)
Get the logging context associated with a V.29 modem receive context.
Definition: v29rx.c:1066
v29_rx_set_modem_status_handler
void v29_rx_set_modem_status_handler(v29_rx_state_t *s, modem_status_func_t handler, void *user_data)
Change the modem status report function associated with a V.29 modem receive context.
Definition: v29rx.c:1059
t4_stats_t::width
int width
The number of horizontal pixels in the most recent page.
Definition: t4_rx.h:219
fax_modems_state_s::v29_rx
v29_rx_state_t v29_rx
A V.29 modem context used when receiving FAXes at 7200bps or 9600bps.
Definition: private/fax_modems.h:68
t4_state_s
Definition: private/t4_tx.h:35
fsk_rx_set_modem_status_handler
void fsk_rx_set_modem_status_handler(fsk_rx_state_t *s, modem_status_func_t handler, void *user_data)
Change the modem status report function associated with an FSK modem receive context.
Definition: fsk.c:259
fax_modems_state_s
Definition: private/fax_modems.h:34
v27ter_rx.h
get_bit_func_t
int(* get_bit_func_t)(void *user_data)
Definition: async.h:108
fax_modems_state_s::rx_handler
span_rx_handler_t * rx_handler
The current receive signal handler.
Definition: private/fax_modems.h:98
T30_SUPPORT_V29
@ T30_SUPPORT_V29
Definition: t30.h:344
SIG_STATUS_CARRIER_DOWN
@ SIG_STATUS_CARRIER_DOWN
The carrier signal has dropped.
Definition: async.h:54
t4_rx_put_bit
int t4_rx_put_bit(t4_rx_state_t *s, int bit)
Put a bit of the current document page.
Definition: t4_rx.c:975
v17tx.h
T30_SUPPORT_V27TER
@ T30_SUPPORT_V27TER
Definition: t30.h:342
bit_operations.h
T30_SEP
@ T30_SEP
Definition: t30_fcf.h:46
hdlc_rx_state_s
Definition: private/hdlc.h:32
queue.h
T30_MAX_DIS_DTC_DCS_LEN
#define T30_MAX_DIS_DTC_DCS_LEN
Definition: t30.h:142
t4_rx_end_page
int t4_rx_end_page(t4_rx_state_t *s)
Complete the reception of a page.
Definition: t4_rx.c:581
fax_modems_state_s::hdlc_rx
hdlc_rx_state_t hdlc_rx
An HDLC context used when receiving HDLC messages.
Definition: private/fax_modems.h:48
HDLC_FRAMING_OK_THRESHOLD
#define HDLC_FRAMING_OK_THRESHOLD
Definition: t38_gateway.c:175
span_log
int span_log(logging_state_t *s, int level, const char *format,...)
Generate a log entry.
Definition: logging.c:84
v27ter_rx_state_s
Definition: private/v27ter_rx.h:51
T4_COMPRESSION_ITU_T6
@ T4_COMPRESSION_ITU_T6
Definition: t4_rx.h:58
fax_modems_get_logging_state
logging_state_t * fax_modems_get_logging_state(fax_modems_state_t *s)
Get a pointer to the logging context associated with a FAX modems context.
Definition: fax_modems.c:323
v29rx.h
dc_restore.h
T30_MAX_IDENT_LEN
#define T30_MAX_IDENT_LEN
Definition: t30.h:144
modem_connect_tones_tx_init
modem_connect_tones_tx_state_t * modem_connect_tones_tx_init(modem_connect_tones_tx_state_t *s, int tone_type)
Initialise an instance of the modem connect tones generator.
Definition: modem_connect_tones.c:253
v27ter_rx_init
v27ter_rx_state_t * v27ter_rx_init(v27ter_rx_state_t *s, int bit_rate, put_bit_func_t put_bit, void *user_data)
Initialise a V.27ter modem receive context.
Definition: v27ter_rx.c:1104
t30_state_s::logging
logging_state_t logging
Error and flow logging control.
Definition: private/t30.h:306
t4_rx_init
t4_rx_state_t * t4_rx_init(t4_rx_state_t *s, const char *file, int output_encoding)
Prepare for reception of a document.
Definition: t4_rx.c:1177
hdlc_rx_init
hdlc_rx_state_t * hdlc_rx_init(hdlc_rx_state_t *s, int crc32, int report_bad_frames, int framing_ok_threshold, hdlc_frame_handler_t handler, void *user_data)
Initialise an HDLC receiver context.
Definition: hdlc.c:327
v17_rx_get_logging_state
logging_state_t * v17_rx_get_logging_state(v17_rx_state_t *s)
Get the logging context associated with a V.17 modem receive context.
Definition: v17rx.c:1374
v29_tx_init
v29_tx_state_t * v29_tx_init(v29_tx_state_t *s, int bit_rate, int tep, get_bit_func_t get_bit, void *user_data)
Initialise a V.29 modem transmit context.
Definition: v29tx.c:369
t30_state_s
Definition: private/t30.h:35
SPAN_DECLARE_NONSTD
SPAN_DECLARE_NONSTD(int) fax_modems_v17_v21_rx(void *user_data
Get the next bit of a transmitted serial bit stream.
fsk_rx_init
fsk_rx_state_t * fsk_rx_init(fsk_rx_state_t *s, const fsk_spec_t *spec, int framing_mode, put_bit_func_t put_bit, void *user_data)
Initialise an FSK modem receive context.
Definition: fsk.c:314
v17tx.h
t4_stats_t::longest_bad_row_run
int longest_bad_row_run
The largest number of bad pixel rows in a block in the most recent page.
Definition: t4_rx.h:225
T30_DIS
@ T30_DIS
Definition: t30_fcf.h:35
fsk_tx_init
fsk_tx_state_t * fsk_tx_init(fsk_tx_state_t *s, const fsk_spec_t *spec, get_bit_func_t get_bit, void *user_data)
Initialise an FSK modem transmit context.
Definition: fsk.c:153
fsk.h
t4_stats_t::x_resolution
int x_resolution
The horizontal resolution of the page in pixels per metre.
Definition: t4_rx.h:227
fsk_rx_signal_cutoff
void fsk_rx_signal_cutoff(fsk_rx_state_t *s, float cutoff)
Adjust an FSK modem receive context's carrier detect power threshold.
Definition: fsk.c:238
logging.h
fax_modems_state_s::connect_rx
modem_connect_tones_rx_state_t connect_rx
CED or CNG detector.
Definition: private/fax_modems.h:81
silence_gen_init
silence_gen_state_t * silence_gen_init(silence_gen_state_t *s, int silent_samples)
Initialise a timed silence generator context.
Definition: silence_gen.c:118
t4_rx_set_y_resolution
void t4_rx_set_y_resolution(t4_rx_state_t *s, int resolution)
Set the row-to-row (y) resolution to expect for a received image.
Definition: t4_rx.c:1091
fax_modem_to_str
const char * fax_modem_to_str(int modem)
Convert a FAX modem type to a short text description.
Definition: fax_modems.c:89
t4_rx_set_image_width
void t4_rx_set_image_width(t4_rx_state_t *s, int width)
Set the expected width of the received image, in pixel columns.
Definition: t4_rx.c:1085
v29tx.h
fax_modems_state_s::v21_rx
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:54
v29_rx_state_s
Definition: private/v29rx.h:43
t4_rx_put_chunk
int t4_rx_put_chunk(t4_rx_state_t *s, const uint8_t buf[], int len)
Put a byte of the current document page.
Definition: t4_rx.c:987
fax_modems_state_s::use_tep
int use_tep
Definition: private/fax_modems.h:37
fax_modems_state_s::tx_handler
span_tx_handler_t * tx_handler
The current transmit signal handler.
Definition: private/fax_modems.h:104
fax_modems.h
fax_modems_state_s::hdlc_tx
hdlc_tx_state_t hdlc_tx
An HDLC context used when transmitting HDLC messages.
Definition: private/fax_modems.h:46
t4_rx_set_rx_encoding
void t4_rx_set_rx_encoding(t4_rx_state_t *s, int encoding)
Set the encoding for the received data.
Definition: t4_rx.c:1079
fax_modems_state_s::v17_rx
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:62
modem_connect_tones_rx_init
modem_connect_tones_rx_state_t * modem_connect_tones_rx_init(modem_connect_tones_rx_state_t *s, int tone_type, tone_report_func_t tone_callback, void *user_data)
Initialise an instance of the modem connect tones detector.
Definition: modem_connect_tones.c:706
T30_NSF
@ T30_NSF
Definition: t30_fcf.h:37
T30_SUPPORT_V17
@ T30_SUPPORT_V17
Definition: t30.h:346
fax_modem_to_str
const char * fax_modem_to_str(int modem)
Convert a FAX modem type to a short text description.
Definition: fax_modems.c:89
t4_stats_t::y_resolution
int y_resolution
The vertical resolution of the page in pixels per metre.
Definition: t4_rx.h:229
v17_tx_init
v17_tx_state_t * v17_tx_init(v17_tx_state_t *s, int bit_rate, int tep, get_bit_func_t get_bit, void *user_data)
Initialise a V.17 modem transmit context.
Definition: v17tx.c:431
v17_rx_set_modem_status_handler
void v17_rx_set_modem_status_handler(v17_rx_state_t *s, modem_status_func_t handler, void *user_data)
Change the modem status report function associated with a V.17 modem receive context.
Definition: v17rx.c:1367
SIG_STATUS_TRAINING_SUCCEEDED
@ SIG_STATUS_TRAINING_SUCCEEDED
The modem has trained, and is ready for data exchange.
Definition: async.h:65
T4_COMPRESSION_ITU_T4_1D
@ T4_COMPRESSION_ITU_T4_1D
Definition: t4_rx.h:54
v27ter_rx_signal_power
float v27ter_rx_signal_power(v27ter_rx_state_t *s)
Definition: v27ter_rx.c:152
logging_state_s
Definition: private/logging.h:33
modem_connect_tones.h
t4_rx_release
int t4_rx_release(t4_rx_state_t *s)
End reception of a document. Tidy up and close the file. This should be used to end T....
Definition: t4_rx.c:1235
fsk_rx_state_s
Definition: private/fsk.h:58
hdlc_tx_frame
int hdlc_tx_frame(hdlc_tx_state_t *s, const uint8_t *frame, size_t len)
Transmit a frame.
Definition: hdlc.c:389
v17_rx_state_s
Definition: private/v17rx.h:54
T30_SID
@ T30_SID
Definition: t30_fcf.h:58
v27ter_rx_signal_cutoff
void v27ter_rx_signal_cutoff(v27ter_rx_state_t *s, float cutoff)
Definition: v27ter_rx.c:158
fax_modems_state_s::connect_tx
modem_connect_tones_tx_state_t connect_tx
CED or CNG generator.
Definition: private/fax_modems.h:79
fax_modems_state_s::v21_tx
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:51
v17_rx_init
v17_rx_state_t * v17_rx_init(v17_rx_state_t *s, int bit_rate, put_bit_func_t put_bit, void *user_data)
Initialise a V.17 modem receive context.
Definition: v17rx.c:1517
fax_modems.h
T30_NSC
@ T30_NSC
Definition: t30_fcf.h:44
v17_rx_signal_power
float v17_rx_signal_power(v17_rx_state_t *s)
Definition: v17rx.c:182