diff spandsp-0.0.3/spandsp-0.0.3/src/spandsp/async.h @ 5:f762bf195c4b

import spandsp-0.0.3
author Peter Meerwald <pmeerw@cosy.sbg.ac.at>
date Fri, 25 Jun 2010 16:00:21 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spandsp-0.0.3/spandsp-0.0.3/src/spandsp/async.h	Fri Jun 25 16:00:21 2010 +0200
@@ -0,0 +1,220 @@
+/*
+ * SpanDSP - a series of DSP components for telephony
+ *
+ * async.h - Asynchronous serial bit stream encoding and decoding
+ *
+ * Written by Steve Underwood <steveu@coppice.org>
+ *
+ * Copyright (C) 2003 Steve Underwood
+ *
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id: async.h,v 1.6 2006/10/24 13:22:01 steveu Exp $
+ */
+
+/*! \file */
+
+/*! \page async_page Asynchronous bit stream processing
+\section async_page_sec_1 What does it do?
+The asynchronous serial bit stream processing module provides
+generation and decoding facilities for most asynchronous data
+formats. It supports:
+ - 1 or 2 stop bits.
+ - Odd, even or no parity.
+ - 5, 6, 7, or 8 bit characters.
+ - V.14 rate adaption.
+The input to this module is a bit stream. This means any symbol synchronisation
+and decoding must occur before data is fed to this module.
+
+\section async_page_sec_2 The transmitter
+???.
+
+\section async_page_sec_3 The receiver
+???.
+*/
+
+#if !defined(_ASYNC_H_)
+#define _ASYNC_H_
+
+/* Special "bit" values for the put and get bit functions */
+enum
+{
+    /*! \brief The carrier signal has dropped. */
+    PUTBIT_CARRIER_DOWN = -1,
+    /*! \brief 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. */
+    PUTBIT_CARRIER_UP = -2,
+    /*! \brief The modem is training. This is an early indication that the
+        signal seems to be of the right type. This may be needed in time critical
+        applications, like T.38, to forward an early indication of what is happening
+        on the wire. */
+    PUTBIT_TRAINING_IN_PROGRESS = -3,
+    /*! \brief The modem has trained, and is ready for data exchange. */
+    PUTBIT_TRAINING_SUCCEEDED = -4,
+    /*! \brief The modem has failed to train. */
+    PUTBIT_TRAINING_FAILED = -5,
+    /*! \brief Packet framing (e.g. HDLC framing) is OK. */
+    PUTBIT_FRAMING_OK = -6,
+    /*! \brief The data stream has ended. */
+    PUTBIT_END_OF_DATA = -7,
+    /*! \brief An abort signal (e.g. an HDLC abort) has been received. */
+    PUTBIT_ABORT = -8,
+    /*! \brief A break signal (e.g. an async break) has been received. */
+    PUTBIT_BREAK = -9
+};
+
+/*! Message put function for data pumps */
+typedef void (*put_msg_func_t)(void *user_data, const uint8_t *msg, int len);
+
+/*! Message get function for data pumps */
+typedef int (*get_msg_func_t)(void *user_data, uint8_t *msg, int max_len);
+
+/*! Byte put function for data pumps */
+typedef void (*put_byte_func_t)(void *user_data, int byte);
+
+/*! Byte get function for data pumps */
+typedef int (*get_byte_func_t)(void *user_data);
+
+/*! Bit put function for data pumps */
+typedef void (*put_bit_func_t)(void *user_data, int bit);
+
+/*! Bit get function for data pumps */
+typedef int (*get_bit_func_t)(void *user_data);
+
+/*! No parity bit should be used */
+#define ASYNC_PARITY_NONE   0
+/*! An even parity bit will exist, after the data bits */
+#define ASYNC_PARITY_EVEN   1
+/*! An odd parity bit will exist, after the data bits */
+#define ASYNC_PARITY_ODD    2
+
+/*!
+    Asynchronous data transmit descriptor. This defines the state of a single
+    working instance of a byte to asynchronous serial converter, for use
+    in FSK modems.
+*/
+typedef struct
+{
+    /*! \brief The number of data bits per character. */
+    int data_bits;
+    /*! \brief The type of parity. */
+    int parity;
+    /*! \brief The number of stop bits per character. */
+    int stop_bits;
+    /*! \brief A pointer to the callback routine used to get characters to be transmitted. */
+    get_byte_func_t get_byte;
+    /*! \brief An opaque pointer passed when calling get_byte. */
+    void *user_data;
+
+    /*! \brief A current, partially transmitted, character. */
+    int byte_in_progress;
+    /*! \brief The current bit position within a partially transmitted character. */
+    int bitpos;
+    int parity_bit;
+} async_tx_state_t;
+
+/*!
+    Asynchronous data receive descriptor. This defines the state of a single
+    working instance of an asynchronous serial to byte converter, for use
+    in FSK modems.
+*/
+typedef struct
+{
+    /*! \brief The number of data bits per character. */
+    int data_bits;
+    /*! \brief The type of parity. */
+    int parity;
+    /*! \brief The number of stop bits per character. */
+    int stop_bits;
+    /*! \brief TRUE if V.14 rate adaption processing should be performed. */
+    int use_v14;
+    /*! \brief A pointer to the callback routine used to handle received characters. */
+    put_byte_func_t put_byte;
+    /*! \brief An opaque pointer passed when calling put_byte. */
+    void *user_data;
+
+    /*! \brief A current, partially complete, character. */
+    int byte_in_progress;
+    /*! \brief The current bit position within a partially complete character. */
+    int bitpos;
+    int parity_bit;
+
+    int parity_errors;
+    int framing_errors;
+} async_rx_state_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*! Initialise an asynchronous data transmit context.
+    \brief Initialise an asynchronous data transmit context.
+    \param s The transmitter context.
+    \param data_bits The number of data bit.
+    \param parity_bits The type of parity.
+    \param stop_bits The number of stop bits.
+    \param use_v14 TRUE if V.14 rate adaption processing should be used.
+    \param get_byte The callback routine used to get the data to be transmitted.
+    \param user_data An opaque pointer. */
+void async_tx_init(async_tx_state_t *s,
+                   int data_bits,
+                   int parity_bits,
+                   int stop_bits,
+                   int use_v14,
+                   get_byte_func_t get_byte,
+                   void *user_data);
+
+/*! Get the next bit of a transmitted serial bit stream.
+    \brief Get the next bit of a transmitted serial bit stream.
+    \param user_data An opaque point which must point to a transmitter context.
+    \return the next bit, or PUTBIT_END_OF_DATA to indicate the data stream has ended. */
+int async_tx_get_bit(void *user_data);
+
+/*! Initialise an asynchronous data receiver context.
+    \brief Initialise an asynchronous data receiver context.
+    \param s The receiver context.
+    \param data_bits The number of data bits.
+    \param parity_bits The type of parity.
+    \param stop_bits The number of stop bits.
+    \param use_v14 TRUE if V.14 rate adaption processing should be used.
+    \param put_byte The callback routine used to put the received data.
+    \param user_data An opaque pointer. */
+void async_rx_init(async_rx_state_t *s,
+                   int data_bits,
+                   int parity_bits,
+                   int stop_bits,
+                   int use_v14,
+                   put_byte_func_t put_byte,
+                   void *user_data);
+
+/*! Accept a bit from a received serial bit stream
+    \brief Accept a bit from a received serial bit stream
+    \param user_data An opaque point which must point to a receiver context.
+    \param bit The new bit. Some special values are supported for this field.
+        - PUTBIT_CARRIER_UP
+        - PUTBIT_CARRIER_DOWN
+        - PUTBIT_TRAINING_SUCCEEDED
+        - PUTBIT_TRAINING_FAILED
+        - PUTBIT_END_OF_DATA */
+void async_rx_put_bit(void *user_data, int bit);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/*- End of file ------------------------------------------------------------*/

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.