comparison spandsp-0.0.6pre17/src/spandsp/v42.h @ 4:26cd8f1ef0b1

import spandsp-0.0.6pre17
author Peter Meerwald <pmeerw@cosy.sbg.ac.at>
date Fri, 25 Jun 2010 15:50:58 +0200
parents
children
comparison
equal deleted inserted replaced
3:c6c5a16ce2f2 4:26cd8f1ef0b1
1 /*
2 * SpanDSP - a series of DSP components for telephony
3 *
4 * v42.h
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 * $Id: v42.h,v 1.31 2009/11/04 15:52:06 steveu Exp $
26 */
27
28 /*! \page v42_page V.42 modem error correction
29 \section v42_page_sec_1 What does it do?
30 The V.42 specification defines an error correcting protocol for PSTN modems, based on
31 HDLC and LAP. This makes it similar to an X.25 link. A special variant of LAP, known
32 as LAP-M, is defined in the V.42 specification. A means for modems to determine if the
33 far modem supports V.42 is also defined.
34
35 \section v42_page_sec_2 How does it work?
36 */
37
38 #if !defined(_SPANDSP_V42_H_)
39 #define _SPANDSP_V42_H_
40
41 enum
42 {
43 LAPM_DETECT = 0,
44 LAPM_ESTABLISH = 1,
45 LAPM_DATA = 2,
46 LAPM_RELEASE = 3,
47 LAPM_SIGNAL = 4,
48 LAPM_SETPARM = 5,
49 LAPM_TEST = 6,
50 LAPM_UNSUPPORTED = 7
51 };
52
53 typedef void (*v42_status_func_t)(void *user_data, int status);
54 typedef void (*v42_frame_handler_t)(void *user_data, const uint8_t *pkt, int len);
55
56 typedef struct lapm_frame_queue_s
57 {
58 struct lapm_frame_queue_s *next;
59 int len;
60 uint8_t frame[];
61 } lapm_frame_queue_t;
62
63 /*!
64 LAP-M descriptor. This defines the working state for a single instance of LAP-M.
65 */
66 typedef struct lapm_state_s lapm_state_t;
67
68 /*!
69 V.42 descriptor. This defines the working state for a single instance of V.42.
70 */
71 typedef struct v42_state_s v42_state_t;
72
73 /*! Log the raw HDLC frames */
74 #define LAPM_DEBUG_LAPM_RAW (1 << 0)
75 /*! Log the interpreted frames */
76 #define LAPM_DEBUG_LAPM_DUMP (1 << 1)
77 /*! Log state machine changes */
78 #define LAPM_DEBUG_LAPM_STATE (1 << 2)
79
80 #if defined(__cplusplus)
81 extern "C"
82 {
83 #endif
84
85 SPAN_DECLARE(const char *) lapm_status_to_str(int status);
86
87 /*! Dump LAP.M frames in a raw and/or decoded forms
88 \param frame The frame itself
89 \param len The length of the frame, in octets
90 \param showraw TRUE if the raw octets should be dumped
91 \param txrx TRUE if tx, FALSE if rx. Used to highlight the packet's direction.
92 */
93 SPAN_DECLARE(void) lapm_dump(lapm_state_t *s, const uint8_t *frame, int len, int showraw, int txrx);
94
95 /*! Accept an HDLC packet
96 */
97 SPAN_DECLARE_NONSTD(void) lapm_receive(void *user_data, const uint8_t *buf, int len, int ok);
98
99 /*! Transmit a LAP.M frame
100 */
101 SPAN_DECLARE(int) lapm_tx(lapm_state_t *s, const void *buf, int len);
102
103 /*! Transmit a LAP.M information frame
104 */
105 SPAN_DECLARE(int) lapm_tx_iframe(lapm_state_t *s, const void *buf, int len, int cr);
106
107 /*! Send a break over a LAP.M connection
108 */
109 SPAN_DECLARE(int) lapm_break(lapm_state_t *s, int enable);
110
111 /*! Initiate an orderly release of a LAP.M connection
112 */
113 SPAN_DECLARE(int) lapm_release(lapm_state_t *s);
114
115 /*! Enable or disable loopback of a LAP.M connection
116 */
117 SPAN_DECLARE(int) lapm_loopback(lapm_state_t *s, int enable);
118
119 /*! Assign or remove a callback routine used to deal with V.42 status changes.
120 */
121 SPAN_DECLARE(void) v42_set_status_callback(v42_state_t *s, v42_status_func_t callback, void *user_data);
122
123 /*! Process a newly received bit for a V.42 context.
124 */
125 SPAN_DECLARE(void) v42_rx_bit(void *user_data, int bit);
126
127 /*! Get the next transmit bit for a V.42 context.
128 */
129 SPAN_DECLARE(int) v42_tx_bit(void *user_data);
130
131 /*! Initialise a V.42 context.
132 \param s The V.42 context.
133 \param calling_party TRUE if caller mode, else answerer mode.
134 \param frame_handler A callback function to handle received frames of data.
135 \param user_data An opaque pointer passed to the frame handler routine.
136 \return ???
137 */
138 SPAN_DECLARE(v42_state_t *) v42_init(v42_state_t *s, int calling_party, int detect, v42_frame_handler_t frame_handler, void *user_data);
139
140 /*! Restart a V.42 context.
141 \param s The V.42 context.
142 */
143 SPAN_DECLARE(void) v42_restart(v42_state_t *s);
144
145 /*! Release a V.42 context.
146 \param s The V.42 context.
147 \return 0 if OK */
148 SPAN_DECLARE(int) v42_release(v42_state_t *s);
149
150 /*! Free a V.42 context.
151 \param s The V.42 context.
152 \return 0 if OK */
153 SPAN_DECLARE(int) v42_free(v42_state_t *s);
154
155 #if defined(__cplusplus)
156 }
157 #endif
158
159 #endif
160 /*- End of file ------------------------------------------------------------*/

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