spandsp  0.0.6
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. */
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. */
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. */
64  /*! \brief The modem has trained, and is ready for data exchange. */
66  /*! \brief The modem has failed to train. */
68  /*! \brief Packet framing (e.g. HDLC framing) is OK. */
70  /*! \brief The data stream has ended. */
72  /*! \brief An abort signal (e.g. an HDLC abort) has been received. */
74  /*! \brief A break signal (e.g. an async break) has been received. */
76  /*! \brief A modem has completed its task, and shut down. */
78  /*! \brief Regular octet report for things like HDLC to the MTP standards. */
80  /*! \brief Notification that a modem has detected signal quality degradation. */
82  /*! \brief Notification that a modem retrain has occurred. */
84  /*! \brief The link protocol (e.g. V.42) has connected. */
86  /*! \brief The link protocol (e.g. V.42) has disconnected. */
88  /*! \brief An error has occurred in the link protocol (e.g. V.42). */
90  /*! \brief Keep the link in an idle state, as there is nothing to send. */
92 };
93 
94 /*! Message put function for data pumps */
95 typedef void (*put_msg_func_t)(void *user_data, const uint8_t *msg, int len);
96 
97 /*! Message get function for data pumps */
98 typedef int (*get_msg_func_t)(void *user_data, uint8_t *msg, int max_len);
99 
100 /*! Byte put function for data pumps */
101 typedef void (*put_byte_func_t)(void *user_data, int byte);
102 
103 /*! Byte get function for data pumps */
104 typedef int (*get_byte_func_t)(void *user_data);
105 
106 /*! Bit put function for data pumps */
107 typedef void (*put_bit_func_t)(void *user_data, int bit);
108 
109 /*! Bit get function for data pumps */
110 typedef int (*get_bit_func_t)(void *user_data);
111 
112 #define modem_rx_status_func_t modem_status_func_t
113 #define modem_tx_status_func_t modem_status_func_t
114 
115 /*! Status change callback function for data pumps */
116 typedef void (*modem_status_func_t)(void *user_data, int status);
117 
118 /*!
119  Asynchronous data transmit descriptor. This defines the state of a single
120  working instance of a byte to asynchronous serial converter, for use
121  in FSK modems.
122 */
124 
125 /*!
126  Asynchronous data receive descriptor. This defines the state of a single
127  working instance of an asynchronous serial to byte converter, for use
128  in FSK modems.
129 */
131 
132 enum
133 {
134  /*! No parity bit should be used */
136  /*! An even parity bit will exist, after the data bits */
138  /*! An odd parity bit will exist, after the data bits */
140 };
141 
142 #if defined(__cplusplus)
143 extern "C"
144 {
145 #endif
146 
147 /*! Convert a signal status to a short text description.
148  \brief Convert a signal status to a short text description.
149  \param status The modem signal status.
150  \return A pointer to the description. */
151 SPAN_DECLARE(const char *) signal_status_to_str(int status);
152 
153 /*! Accept a bit from a received serial bit stream
154  \brief Accept a bit from a received serial bit stream
155  \param user_data An opaque point which must point to a receiver context.
156  \param bit The new bit. Some special values are supported for this field.
157  - SIG_STATUS_CARRIER_UP
158  - SIG_STATUS_CARRIER_DOWN
159  - SIG_STATUS_TRAINING_SUCCEEDED
160  - SIG_STATUS_TRAINING_FAILED
161  - SIG_STATUS_END_OF_DATA */
162 SPAN_DECLARE_NONSTD(void) async_rx_put_bit(void *user_data, int bit);
163 
164 /*! Initialise an asynchronous data receiver context.
165  \brief Initialise an asynchronous data receiver context.
166  \param s The receiver context.
167  \param data_bits The number of data bits.
168  \param parity_bits The type of parity.
169  \param stop_bits The number of stop bits.
170  \param use_v14 True if V.14 rate adaption processing should be used.
171  \param put_byte The callback routine used to put the received data.
172  \param user_data An opaque pointer.
173  \return A pointer to the initialised context, or NULL if there was a problem. */
175  int data_bits,
176  int parity_bits,
177  int stop_bits,
178  int use_v14,
180  void *user_data);
181 
182 SPAN_DECLARE(int) async_rx_release(async_rx_state_t *s);
183 
184 SPAN_DECLARE(int) async_rx_free(async_rx_state_t *s);
185 
186 /*! Get the next bit of a transmitted serial bit stream.
187  \brief Get the next bit of a transmitted serial bit stream.
188  \param user_data An opaque point which must point to a transmitter context.
189  \return the next bit, or PUTBIT_END_OF_DATA to indicate the data stream has ended. */
190 SPAN_DECLARE_NONSTD(int) async_tx_get_bit(void *user_data);
191 
192 /*! Initialise an asynchronous data transmit context.
193  \brief Initialise an asynchronous data transmit context.
194  \param s The transmitter context.
195  \param data_bits The number of data bit.
196  \param parity_bits The type of parity.
197  \param stop_bits The number of stop bits.
198  \param use_v14 True if V.14 rate adaption processing should be used.
199  \param get_byte The callback routine used to get the data to be transmitted.
200  \param user_data An opaque pointer.
201  \return A pointer to the initialised context, or NULL if there was a problem. */
203  int data_bits,
204  int parity_bits,
205  int stop_bits,
206  int use_v14,
207  get_byte_func_t get_byte,
208  void *user_data);
209 
210 SPAN_DECLARE(int) async_tx_release(async_tx_state_t *s);
211 
212 SPAN_DECLARE(int) async_tx_free(async_tx_state_t *s);
213 
214 #if defined(__cplusplus)
215 }
216 #endif
217 
218 #endif
219 /*- End of file ------------------------------------------------------------*/
int(* get_byte_func_t)(void *user_data)
Definition: async.h:104
void(* put_msg_func_t)(void *user_data, const uint8_t *msg, int len)
Definition: async.h:95
Definition: async.h:135
void(* modem_status_func_t)(void *user_data, int status)
Definition: async.h:116
void * user_data
An opaque pointer passed when calling put_byte.
Definition: private/async.h:73
The link protocol (e.g. V.42) has disconnected.
Definition: async.h:87
Notification that a modem has detected signal quality degradation.
Definition: async.h:81
An abort signal (e.g. an HDLC abort) has been received.
Definition: async.h:73
Regular octet report for things like HDLC to the MTP standards.
Definition: async.h:79
Notification that a modem retrain has occurred.
Definition: async.h:83
The modem is training. This is an early indication that the signal seems to be of the right type...
Definition: async.h:63
int use_v14
True if V.14 rate adaption processing should be performed.
Definition: private/async.h:69
int stop_bits
The number of stop bits per character.
Definition: private/async.h:67
The carrier signal is up. This merely indicates that carrier energy has been seen. It is not an indication that the carrier is either valid, or of the expected type.
Definition: async.h:58
An error has occurred in the link protocol (e.g. V.42).
Definition: async.h:89
SPAN_DECLARE_NONSTD(void) async_rx_put_bit(void *user_data
Accept a bit from a received serial bit stream.
void(* put_byte_func_t)(void *user_data, int byte)
Definition: async.h:101
void(* put_bit_func_t)(void *user_data, int bit)
Definition: async.h:107
A modem has completed its task, and shut down.
Definition: async.h:77
int data_bits
The number of data bits per character.
Definition: private/async.h:63
int(* get_bit_func_t)(void *user_data)
Definition: async.h:110
The data stream has ended.
Definition: async.h:71
int(* get_msg_func_t)(void *user_data, uint8_t *msg, int max_len)
Definition: async.h:98
async_rx_state_t * async_rx_init(async_rx_state_t *s, int data_bits, int parity, int stop_bits, int use_v14, put_byte_func_t put_byte, void *user_data)
Initialise an asynchronous data receiver context.
Definition: async.c:173
The link protocol (e.g. V.42) has connected.
Definition: async.h:85
Definition: private/async.h:60
The modem has trained, and is ready for data exchange.
Definition: async.h:65
put_byte_func_t put_byte
A pointer to the callback routine used to handle received characters.
Definition: private/async.h:71
Definition: private/async.h:34
A break signal (e.g. an async break) has been received.
Definition: async.h:75
const char * signal_status_to_str(int status)
Convert a signal status to a short text description.
Definition: async.c:48
Definition: async.h:137
The carrier signal has dropped.
Definition: async.h:54
Definition: async.h:139
Packet framing (e.g. HDLC framing) is OK.
Definition: async.h:69
Keep the link in an idle state, as there is nothing to send.
Definition: async.h:91
async_tx_state_t * async_tx_init(async_tx_state_t *s, int data_bits, int parity, int stop_bits, int use_v14, get_byte_func_t get_byte, void *user_data)
Initialise an asynchronous data transmit context.
Definition: async.c:263
The modem has failed to train.
Definition: async.h:67