spandsp  0.0.6
fax_tester.h
Go to the documentation of this file.
1 /*
2  * SpanDSP - a series of DSP components for telephony
3  *
4  * fax_tester.h
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 General Public License version 2, as
14  * 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 General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * 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_TESTER_H_)
29 #define _SPANDSP_FAX_TESTER_H_
30 
31 /*! \page fax_tester_page FAX over analogue modem handling
32 
33 \section fax_tester_page_sec_1 What does it do?
34 
35 \section fax_tester_page_sec_2 How does it work?
36 */
37 
39 
40 typedef void (*faxtester_flush_handler_t)(faxtester_state_t *s, void *user_data, int which);
41 
42 /*!
43  FAX tester real time frame handler.
44  \brief FAX tester real time frame handler.
45  \param s The FAX tester context.
46  \param user_data An opaque pointer.
47  \param direction TRUE for incoming, FALSE for outgoing.
48  \param msg The HDLC message.
49  \param len The length of the message.
50 */
52  void *user_data,
53  int direction,
54  const uint8_t *msg,
55  int len);
56 
57 typedef void (*faxtester_front_end_step_complete_handler_t)(faxtester_state_t *s, void *user_data);
58 
59 /*!
60  FAX tester descriptor.
61 */
63 {
64  /*! \brief Pointer to our current step in the test. */
65  xmlNodePtr cur;
66 
67  faxtester_flush_handler_t flush_handler;
68  void *flush_user_data;
69 
70  /*! \brief A pointer to a callback routine to be called when frames are
71  exchanged. */
73  /*! \brief An opaque pointer supplied in real time frame callbacks. */
75 
76  faxtester_front_end_step_complete_handler_t front_end_step_complete_handler;
77  void *front_end_step_complete_user_data;
78 
79  faxtester_front_end_step_complete_handler_t front_end_step_timeout_handler;
80  void *front_end_step_timeout_user_data;
81 
82  const uint8_t *image_buffer;
83  int image_len;
84  int image_ptr;
85  int image_bit_ptr;
86 
87  int ecm_frame_size;
88  int corrupt_crc;
89 
90  int final_delayed;
91 
92  fax_modems_state_t modems;
93 
94  /*! If TRUE, transmission is in progress */
95  int transmit;
96 
97  /*! \brief TRUE is the short training sequence should be used. */
99 
100  /*! \brief The currently select receiver type */
102  /*! \brief The currently select transmitter type */
104 
105  int wait_for_silence;
106 
107  int tone_state;
108  int64_t tone_on_time;
109 
110  int64_t timer;
111  int64_t timeout;
112 
113  /*! \brief Error and flow logging control */
115 };
116 
117 #if defined(__cplusplus)
118 extern "C"
119 {
120 #endif
121 
122 /*! Apply T.30 receive processing to a block of audio samples.
123  \brief Apply T.30 receive processing to a block of audio samples.
124  \param s The FAX tester context.
125  \param amp The audio sample buffer.
126  \param len The number of samples in the buffer.
127  \return The number of samples unprocessed. This should only be non-zero if
128  the software has reached the end of the FAX call.
129 */
130 int faxtester_rx(faxtester_state_t *s, int16_t *amp, int len);
131 
132 /*! Apply T.30 transmit processing to generate a block of audio samples.
133  \brief Apply T.30 transmit processing to generate a block of audio samples.
134  \param s The FAX tester context.
135  \param amp The audio sample buffer.
136  \param max_len The number of samples to be generated.
137  \return The number of samples actually generated. This will be zero when
138  there is nothing to send.
139 */
140 int faxtester_tx(faxtester_state_t *s, int16_t *amp, int max_len);
141 
142 void faxtester_set_tx_type(void *user_data, int type, int bit_rate, int short_train, int use_hdlc);
143 
144 void faxtester_set_rx_type(void *user_data, int type, int bit_rate, int short_train, int use_hdlc);
145 
146 void faxtest_set_rx_silence(faxtester_state_t *s);
147 
148 void faxtester_send_hdlc_flags(faxtester_state_t *s, int flags);
149 
150 void faxtester_send_hdlc_msg(faxtester_state_t *s, const uint8_t *msg, int len, int crc_ok);
151 
152 void faxtester_set_flush_handler(faxtester_state_t *s, faxtester_flush_handler_t handler, void *user_data);
153 
154 /*! Select whether silent audio will be sent when FAX transmit is idle.
155  \brief Select whether silent audio will be sent when FAX transmit is idle.
156  \param s The FAX tester context.
157  \param transmit_on_idle TRUE if silent audio should be output when the FAX transmitter is
158  idle. FALSE to transmit zero length audio when the FAX transmitter is idle. The default
159  behaviour is FALSE.
160 */
161 void faxtester_set_transmit_on_idle(faxtester_state_t *s, int transmit_on_idle);
162 
163 /*! Select whether talker echo protection tone will be sent for the image modems.
164  \brief Select whether TEP will be sent for the image modems.
165  \param s The FAX tester context.
166  \param use_tep TRUE if TEP should be sent.
167 */
168 void faxtester_set_tep_mode(faxtester_state_t *s, int use_tep);
169 
170 void faxtester_set_real_time_frame_handler(faxtester_state_t *s, faxtester_real_time_frame_handler_t handler, void *user_data);
171 
172 void faxtester_set_front_end_step_complete_handler(faxtester_state_t *s, faxtester_front_end_step_complete_handler_t handler, void *user_data);
173 
174 void faxtester_set_front_end_step_timeout_handler(faxtester_state_t *s, faxtester_front_end_step_complete_handler_t handler, void *user_data);
175 
176 void faxtester_set_timeout(faxtester_state_t *s, int timeout);
177 
178 void faxtester_set_non_ecm_image_buffer(faxtester_state_t *s, const uint8_t *buf, int len);
179 
180 void faxtester_set_ecm_image_buffer(faxtester_state_t *s, const uint8_t *buf, int len, int block, int frame_size, int crc_hit);
181 
182 /*! Initialise a FAX context.
183  \brief Initialise a FAX context.
184  \param s The FAX tester context.
185  \param calling_party TRUE if the context is for a calling party. FALSE if the
186  context is for an answering party.
187  \return A pointer to the FAX context, or NULL if there was a problem.
188 */
189 faxtester_state_t *faxtester_init(faxtester_state_t *s, int calling_party);
190 
191 /*! Release a FAX context.
192  \brief Release a FAX context.
193  \param s The FAX tester context.
194  \return 0 for OK, else -1. */
196 
197 /*! Free a FAX context.
198  \brief Free a FAX context.
199  \param s The FAX tester context.
200  \return 0 for OK, else -1. */
202 
203 #if defined(__cplusplus)
204 }
205 #endif
206 
207 #endif
208 /*- 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
faxtester_state_s::logging
logging_state_t logging
Error and flow logging control.
Definition: fax_tester.h:114
v29_rx_signal_power
float v29_rx_signal_power(v29_rx_state_t *s)
Definition: v29rx.c:165
faxtester_release
int faxtester_release(faxtester_state_t *s)
Release a FAX context.
Definition: fax_tester.c:715
faxtester_free
int faxtester_free(faxtester_state_t *s)
Free a FAX context.
Definition: fax_tester.c:721
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
v17_rx_set_put_bit
void v17_rx_set_put_bit(v17_rx_state_t *s, put_bit_func_t put_bit, void *user_data)
Change the put_bit function associated with a V.17 modem receive context.
Definition: v17rx.c:1360
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
faxtester_init
faxtester_state_t * faxtester_init(faxtester_state_t *s, int calling_party)
Initialise a FAX context.
Definition: fax_tester.c:696
v27ter_tx_set_get_bit
void v27ter_tx_set_get_bit(v27ter_tx_state_t *s, get_bit_func_t get_bit, void *user_data)
Change the get_bit function associated with a V.27ter modem transmit context.
Definition: v27ter_tx.c:368
faxtester_state_s
Definition: fax_tester.h:63
fsk_tx_set_modem_status_handler
void fsk_tx_set_modem_status_handler(fsk_tx_state_t *s, modem_status_func_t handler, void *user_data)
Change the modem status report function associated with an FSK modem transmit context.
Definition: fsk.c:231
faxtester_set_tep_mode
void faxtester_set_tep_mode(faxtester_state_t *s, int use_tep)
Select whether TEP will be sent for the image modems.
Definition: fax_tester.c:633
faxtester_set_tep_mode
void faxtester_set_tep_mode(faxtester_state_t *s, int use_tep)
Select whether TEP will be sent for the image modems.
Definition: fax_tester.c:633
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
faxtester_state_s::current_rx_type
int current_rx_type
The currently select receiver type.
Definition: fax_tester.h:101
SIG_STATUS_CARRIER_UP
@ SIG_STATUS_CARRIER_UP
The carrier signal is up. This merely indicates that carrier energy has been seen....
Definition: async.h:58
v27ter_tx_set_modem_status_handler
void v27ter_tx_set_modem_status_handler(v27ter_tx_state_t *s, modem_status_func_t handler, void *user_data)
Change the modem status report function associated with a V.27ter modem transmit context.
Definition: v27ter_tx.c:377
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
faxtester_tx
int faxtester_tx(faxtester_state_t *s, int16_t *amp, int max_len)
Apply T.30 transmit processing to generate a block of audio samples.
Definition: fax_tester.c:406
v17_tx_restart
int v17_tx_restart(v17_tx_state_t *s, int bit_rate, int tep, int short_train)
Reinitialise an existing V.17 modem transmit context.
Definition: v17tx.c:380
put_bit_func_t
void(* put_bit_func_t)(void *user_data, int bit)
Definition: async.h:105
v27ter_rx_set_put_bit
void v27ter_rx_set_put_bit(v27ter_rx_state_t *s, put_bit_func_t put_bit, void *user_data)
Change the put_bit function associated with a V.27ter modem receive context.
Definition: v27ter_rx.c:1016
MODEM_CONNECT_TONES_FAX_CED
#define MODEM_CONNECT_TONES_FAX_CED
FAX CED tone is the same as ANS tone.
Definition: modem_connect_tones.h:87
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
fax_modems_state_s::rx_trained
int rx_trained
TRUE if a modem has trained correctly.
Definition: private/fax_modems.h:93
fax_tester.h
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
v29_rx_set_put_bit
void v29_rx_set_put_bit(v29_rx_state_t *s, put_bit_func_t put_bit, void *user_data)
Change the put_bit function associated with a V.29 modem receive context.
Definition: v29rx.c:1052
faxtester_release
int faxtester_release(faxtester_state_t *s)
Release a FAX context.
Definition: fax_tester.c:715
faxtester_state_s::real_time_frame_handler
faxtester_real_time_frame_handler_t real_time_frame_handler
A pointer to a callback routine to be called when frames are exchanged.
Definition: fax_tester.h:72
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
v17_tx_set_modem_status_handler
void v17_tx_set_modem_status_handler(v17_tx_state_t *s, modem_status_func_t handler, void *user_data)
Change the modem status report function associated with a V.17 modem transmit context.
Definition: v17tx.c:367
v29_tx_set_modem_status_handler
void v29_tx_set_modem_status_handler(v29_tx_state_t *s, modem_status_func_t handler, void *user_data)
Change the modem status report function associated with a V.29 modem transmit context.
Definition: v29tx.c:319
v27ter_rx_restart
int v27ter_rx_restart(v27ter_rx_state_t *s, int bit_rate, int old_train)
Reinitialise an existing V.27ter modem receive context.
Definition: v27ter_rx.c:1036
fax_modems_state_s::silence_gen
silence_gen_state_t silence_gen
Used to insert timed silences.
Definition: private/fax_modems.h:77
fax_modems_state_s::transmit_on_idle
int transmit_on_idle
Definition: private/fax_modems.h:43
MODEM_CONNECT_TONES_NONE
@ MODEM_CONNECT_TONES_NONE
This is reported when a tone stops.
Definition: modem_connect_tones.h:59
faxtester_state_s::current_tx_type
int current_tx_type
The currently select transmitter type.
Definition: fax_tester.h:103
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
faxtester_real_time_frame_handler_t
void(* faxtester_real_time_frame_handler_t)(faxtester_state_t *s, void *user_data, int direction, const uint8_t *msg, int len)
FAX tester real time frame handler.
Definition: fax_tester.h:51
fax_modems_state_s
Definition: private/fax_modems.h:35
SIG_STATUS_SHUTDOWN_COMPLETE
@ SIG_STATUS_SHUTDOWN_COMPLETE
A modem has completed its task, and shut down.
Definition: async.h:77
SIG_STATUS_TRAINING_FAILED
@ SIG_STATUS_TRAINING_FAILED
The modem has failed to train.
Definition: async.h:67
get_bit_func_t
int(* get_bit_func_t)(void *user_data)
Definition: async.h:108
faxtester_rx
int faxtester_rx(faxtester_state_t *s, int16_t *amp, int len)
Apply T.30 receive processing to a block of audio samples.
Definition: fax_tester.c:386
fax_modems_state_s::rx_handler
span_rx_handler_t * rx_handler
The current receive signal handler.
Definition: private/fax_modems.h:98
SIG_STATUS_CARRIER_DOWN
@ SIG_STATUS_CARRIER_DOWN
The carrier signal has dropped.
Definition: async.h:54
faxtester_rx
int faxtester_rx(faxtester_state_t *s, int16_t *amp, int len)
Apply T.30 receive processing to a block of audio samples.
Definition: fax_tester.c:386
v29_tx_set_get_bit
void v29_tx_set_get_bit(v29_tx_state_t *s, get_bit_func_t get_bit, void *user_data)
Change the get_bit function associated with a V.29 modem transmit context.
Definition: v29tx.c:310
v17_rx_restart
int v17_rx_restart(v17_rx_state_t *s, int bit_rate, int short_train)
Reinitialise an existing V.17 modem receive context.
Definition: v17rx.c:1380
faxtester_set_transmit_on_idle
void faxtester_set_transmit_on_idle(faxtester_state_t *s, int transmit_on_idle)
Select whether silent audio will be sent when FAX transmit is idle.
Definition: fax_tester.c:627
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
faxtester_state_s::real_time_frame_user_data
void * real_time_frame_user_data
An opaque pointer supplied in real time frame callbacks.
Definition: fax_tester.h:74
faxtester_init
faxtester_state_t * faxtester_init(faxtester_state_t *s, int calling_party)
Initialise a FAX context.
Definition: fax_tester.c:696
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
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
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
silence_gen_alter
void silence_gen_alter(silence_gen_state_t *s, int silent_samples)
Alter the period of a silence generator context by a specified amount.
Definition: silence_gen.c:86
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
v29_rx_restart
int v29_rx_restart(v29_rx_state_t *s, int bit_rate, int old_train)
Reinitialise an existing V.29 modem receive context.
Definition: v29rx.c:1072
faxtester_set_transmit_on_idle
void faxtester_set_transmit_on_idle(faxtester_state_t *s, int transmit_on_idle)
Select whether silent audio will be sent when FAX transmit is idle.
Definition: fax_tester.c:627
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
v27ter_tx_restart
int v27ter_tx_restart(v27ter_tx_state_t *s, int bit_rate, int tep)
Reinitialise an existing V.27ter modem transmit context.
Definition: v27ter_tx.c:390
v17_tx_set_get_bit
void v17_tx_set_get_bit(v17_tx_state_t *s, get_bit_func_t get_bit, void *user_data)
Change the get_bit function associated with a V.17 modem transmit context.
Definition: v17tx.c:358
faxtester_state_s::short_train
int short_train
TRUE is the short training sequence should be used.
Definition: fax_tester.h:98
faxtester_tx
int faxtester_tx(faxtester_state_t *s, int16_t *amp, int max_len)
Apply T.30 transmit processing to generate a block of audio samples.
Definition: fax_tester.c:406
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
fax_modems_state_s::connect_rx
modem_connect_tones_rx_state_t connect_rx
CED or CNG detector.
Definition: private/fax_modems.h:81
hdlc_tx_corrupt_frame
int hdlc_tx_corrupt_frame(hdlc_tx_state_t *s)
Corrupt the frame currently being transmitted, by giving it the wrong CRC.
Definition: hdlc.c:450
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
faxtester_state_s::cur
xmlNodePtr cur
Pointer to our current step in the test.
Definition: fax_tester.h:65
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
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_state_s::hdlc_tx
hdlc_tx_state_t hdlc_tx
An HDLC context used when transmitting HDLC messages.
Definition: private/fax_modems.h:46
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
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
SIG_STATUS_TRAINING_SUCCEEDED
@ SIG_STATUS_TRAINING_SUCCEEDED
The modem has trained, and is ready for data exchange.
Definition: async.h:65
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:34
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
faxtester_free
int faxtester_free(faxtester_state_t *s)
Free a FAX context.
Definition: fax_tester.c:721
fax_modems_state_s::connect_tx
modem_connect_tones_tx_state_t connect_tx
CED or CNG generator.
Definition: private/fax_modems.h:79
faxtester_state_s::transmit
int transmit
Definition: fax_tester.h:95
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
SIG_STATUS_END_OF_DATA
@ SIG_STATUS_END_OF_DATA
The data stream has ended.
Definition: async.h:71
v29_tx_restart
int v29_tx_restart(v29_tx_state_t *s, int bit_rate, int tep)
Reinitialise an existing V.29 modem transmit context.
Definition: v29tx.c:332
hdlc_tx_flags
int hdlc_tx_flags(hdlc_tx_state_t *s, int len)
Transmit a specified quantity of flag octets, typically as a preamble.
Definition: hdlc.c:424
v17_rx_signal_power
float v17_rx_signal_power(v17_rx_state_t *s)
Definition: v17rx.c:182