spandsp
0.0.6
Main Page
Related Pages
Classes
Files
File List
File Members
async.h
Go to the documentation of this file.
1
/*
2
* SpanDSP - a series of DSP components for telephony
3
*
4
* async.h - Asynchronous serial bit stream encoding and decoding
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
/*! \page async_page Asynchronous bit stream processing
29
\section async_page_sec_1 What does it do?
30
The asynchronous serial bit stream processing module provides
31
generation and decoding facilities for most asynchronous data
32
formats. It supports:
33
- 1 or 2 stop bits.
34
- Odd, even or no parity.
35
- 5, 6, 7, or 8 bit characters.
36
- V.14 rate adaption.
37
The input to this module is a bit stream. This means any symbol synchronisation
38
and decoding must occur before data is fed to this module.
39
40
\section async_page_sec_2 The transmitter
41
???.
42
43
\section async_page_sec_3 The receiver
44
???.
45
*/
46
47
#if !defined(_SPANDSP_ASYNC_H_)
48
#define _SPANDSP_ASYNC_H_
49
50
/*! Special "bit" values for the bitstream put and get functions, and the signal status functions. */
51
enum
52
{
53
/*! \brief The carrier signal has dropped. */
54
SIG_STATUS_CARRIER_DOWN
= -1,
55
/*! \brief The carrier signal is up. This merely indicates that carrier
56
energy has been seen. It is not an indication that the carrier is either
57
valid, or of the expected type. */
58
SIG_STATUS_CARRIER_UP
= -2,
59
/*! \brief The modem is training. This is an early indication that the
60
signal seems to be of the right type. This may be needed in time critical
61
applications, like T.38, to forward an early indication of what is happening
62
on the wire. */
63
SIG_STATUS_TRAINING_IN_PROGRESS
= -3,
64
/*! \brief The modem has trained, and is ready for data exchange. */
65
SIG_STATUS_TRAINING_SUCCEEDED
= -4,
66
/*! \brief The modem has failed to train. */
67
SIG_STATUS_TRAINING_FAILED
= -5,
68
/*! \brief Packet framing (e.g. HDLC framing) is OK. */
69
SIG_STATUS_FRAMING_OK
= -6,
70
/*! \brief The data stream has ended. */
71
SIG_STATUS_END_OF_DATA
= -7,
72
/*! \brief An abort signal (e.g. an HDLC abort) has been received. */
73
SIG_STATUS_ABORT
= -8,
74
/*! \brief A break signal (e.g. an async break) has been received. */
75
SIG_STATUS_BREAK
= -9,
76
/*! \brief A modem has completed its task, and shut down. */
77
SIG_STATUS_SHUTDOWN_COMPLETE
= -10,
78
/*! \brief Regular octet report for things like HDLC to the MTP standards. */
79
SIG_STATUS_OCTET_REPORT
= -11,
80
/*! \brief Notification that a modem has detected signal quality degradation. */
81
SIG_STATUS_POOR_SIGNAL_QUALITY
= -12,
82
/*! \brief Notification that a modem retrain has occurred. */
83
SIG_STATUS_MODEM_RETRAIN_OCCURRED
= -13
84
};
85
86
/*! Message put function for data pumps */
87
typedef
void (*
put_msg_func_t
)(
void
*user_data,
const
uint8_t *msg,
int
len);
88
89
/*! Message get function for data pumps */
90
typedef
int (*
get_msg_func_t
)(
void
*user_data, uint8_t *msg,
int
max_len);
91
92
/*! Byte put function for data pumps */
93
typedef
void (*
put_byte_func_t
)(
void
*user_data,
int
byte);
94
95
/*! Byte get function for data pumps */
96
typedef
int (*
get_byte_func_t
)(
void
*user_data);
97
98
/*! Bit put function for data pumps */
99
typedef
void (*
put_bit_func_t
)(
void
*user_data,
int
bit);
100
101
/*! Bit get function for data pumps */
102
typedef
int (*
get_bit_func_t
)(
void
*user_data);
103
104
/*! Completion callback function for tx data pumps */
105
typedef
void (*
modem_tx_status_func_t
)(
void
*user_data,
int
status);
106
107
/*! Completion callback function for rx data pumps */
108
typedef
void (*
modem_rx_status_func_t
)(
void
*user_data,
int
status);
109
110
enum
111
{
112
/*! No parity bit should be used */
113
ASYNC_PARITY_NONE
= 0,
114
/*! An even parity bit will exist, after the data bits */
115
ASYNC_PARITY_EVEN
,
116
/*! An odd parity bit will exist, after the data bits */
117
ASYNC_PARITY_ODD
118
};
119
120
/*!
121
Asynchronous data transmit descriptor. This defines the state of a single
122
working instance of a byte to asynchronous serial converter, for use
123
in FSK modems.
124
*/
125
typedef
struct
async_tx_state_s
async_tx_state_t
;
126
127
/*!
128
Asynchronous data receive descriptor. This defines the state of a single
129
working instance of an asynchronous serial to byte converter, for use
130
in FSK modems.
131
*/
132
typedef
struct
async_rx_state_s
async_rx_state_t
;
133
134
#if defined(__cplusplus)
135
extern
"C"
136
{
137
#endif
138
139
/*! Convert a signal status to a short text description.
140
\brief Convert a signal status to a short text description.
141
\param status The modem signal status.
142
\return A pointer to the description. */
143
SPAN_DECLARE(
const
char
*)
signal_status_to_str
(
int
status);
144
145
/*! Initialise an asynchronous data transmit context.
146
\brief Initialise an asynchronous data transmit context.
147
\param s The transmitter context.
148
\param data_bits The number of data bit.
149
\param parity_bits The type of parity.
150
\param stop_bits The number of stop bits.
151
\param use_v14 TRUE if V.14 rate adaption processing should be used.
152
\param get_byte The callback routine used to get the data to be transmitted.
153
\param user_data An opaque pointer.
154
\return A pointer to the initialised context, or NULL if there was a problem. */
155
SPAN_DECLARE(
async_tx_state_t
*)
async_tx_init
(
async_tx_state_t
*s,
156
int
data_bits
,
157
int
parity_bits,
158
int
stop_bits
,
159
int
use_v14
,
160
get_byte_func_t
get_byte,
161
void
*
user_data
);
162
163
SPAN_DECLARE(
int
) async_tx_release(
async_tx_state_t
*s);
164
165
SPAN_DECLARE(
int
) async_tx_free(
async_tx_state_t
*s);
166
167
/*! Get the next bit of a transmitted serial bit stream.
168
\brief Get the next bit of a transmitted serial bit stream.
169
\param user_data An opaque point which must point to a transmitter context.
170
\return the next bit, or PUTBIT_END_OF_DATA to indicate the data stream has ended. */
171
SPAN_DECLARE_NONSTD
(
int
) async_tx_get_bit(
void
*user_data);
172
173
/*! Initialise an asynchronous data receiver context.
174
\brief Initialise an asynchronous data receiver context.
175
\param s The receiver context.
176
\param data_bits The number of data bits.
177
\param parity_bits The type of parity.
178
\param stop_bits The number of stop bits.
179
\param use_v14 TRUE if V.14 rate adaption processing should be used.
180
\param put_byte The callback routine used to put the received data.
181
\param user_data An opaque pointer.
182
\return A pointer to the initialised context, or NULL if there was a problem. */
183
SPAN_DECLARE(
async_rx_state_t
*)
async_rx_init
(
async_rx_state_t
*s,
184
int
data_bits,
185
int
parity_bits,
186
int
stop_bits,
187
int
use_v14,
188
put_byte_func_t
put_byte
,
189
void
*user_data);
190
191
SPAN_DECLARE(
int
) async_rx_release(
async_rx_state_t
*s);
192
193
SPAN_DECLARE(
int
) async_rx_free(
async_rx_state_t
*s);
194
195
/*! Accept a bit from a received serial bit stream
196
\brief Accept a bit from a received serial bit stream
197
\param user_data An opaque point which must point to a receiver context.
198
\param bit The new bit. Some special values are supported for this field.
199
- SIG_STATUS_CARRIER_UP
200
- SIG_STATUS_CARRIER_DOWN
201
- SIG_STATUS_TRAINING_SUCCEEDED
202
- SIG_STATUS_TRAINING_FAILED
203
- SIG_STATUS_END_OF_DATA */
204
SPAN_DECLARE_NONSTD
(
void
) async_rx_put_bit(
void
*user_data,
int
bit);
205
206
#if defined(__cplusplus)
207
}
208
#endif
209
210
#endif
211
/*- End of file ------------------------------------------------------------*/
src
spandsp
async.h
Generated on Mon Sep 10 2012 11:04:48 for spandsp by
1.8.1.2