Mercurial > hg > audiostuff
comparison spandsp-0.0.6pre17/src/spandsp/adsi.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 * adsi.h - Analogue display services interface and other call ID related handling. | |
| 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: adsi.h,v 1.40 2009/05/22 16:39:01 steveu Exp $ | |
| 26 */ | |
| 27 | |
| 28 /*! \file */ | |
| 29 | |
| 30 #if !defined(_SPANDSP_ADSI_H_) | |
| 31 #define _SPANDSP_ADSI_H_ | |
| 32 | |
| 33 /*! \page adsi_page ADSI transmission and reception | |
| 34 \section adsi_page_sec_1 What does it do? | |
| 35 Although ADSI has a specific meaning in some places, the term is used here to indicate | |
| 36 any form of Analogue Display Service Interface, which includes caller ID, SMS, and others. | |
| 37 | |
| 38 The ADSI module provides for the transmission and reception of ADSI messages | |
| 39 in various formats. Currently, the supported formats are: | |
| 40 | |
| 41 - Bellcore/Telcordia GR-30 CORE CLASS (Custom Local Area Signaling Services) standard | |
| 42 (North America, Australia, China, Taiwan, and Hong Kong). | |
| 43 | |
| 44 - ETSI ETS 300 648, ETS 300 659-1 CLIP (Calling Line Identity Presentation) FSK standard | |
| 45 (France, Germany, Norway, Italy, Spain, South Africa, Turkey, and the UK). | |
| 46 | |
| 47 - ETSI Caller-ID support for the UK, British Telecom SIN227 and SIN242. | |
| 48 | |
| 49 - ETSI ETS 300 648, ETS 300 659-1 CLIP (Calling Line Identity Presentation) DTMF standard | |
| 50 variant 1 (Belgium, Brazil, Denmark, Finland, Iceland, India, Netherlands, Saudi Arabia, | |
| 51 Sweden and Uruguay). | |
| 52 | |
| 53 - ETSI ETS 300 648, ETS 300 659-1 CLIP (Calling Line Identity Presentation) DTMF standard | |
| 54 variant 2 (Denmark and Holland). | |
| 55 | |
| 56 - ETSI ETS 300 648, ETS 300 659-1 CLIP (Calling Line Identity Presentation) DTMF standard | |
| 57 variant 3. | |
| 58 | |
| 59 - ETSI ETS 300 648, ETS 300 659-1 CLIP (Calling Line Identity Presentation) DTMF standard | |
| 60 variant 4. (Taiwan and Kuwait). | |
| 61 | |
| 62 - ETSI Caller-ID support in UK (British Telecom), British Telecomm SIN227, SIN242. | |
| 63 | |
| 64 - Nippon Telegraph & Telephone Corporation JCLIP (Japanese Calling Line Identity | |
| 65 Presentation) standard. | |
| 66 | |
| 67 - Telecommunications Authority of Singapore ACLIP (Analog Calling Line Identity | |
| 68 Presentation) standard. | |
| 69 | |
| 70 - TDD (Telecommunications Device for the Deaf). | |
| 71 | |
| 72 \section adsi_page_sec_2 How does it work? | |
| 73 | |
| 74 \section adsi_page_sec_2a The Bellcore CLASS specification | |
| 75 Most FSK based CLI formats are similar to the US CLASS one, which is as follows: | |
| 76 | |
| 77 The alert tone for CLI during a call is at least 100ms of silence, then | |
| 78 2130Hz + 2750Hz for 88ms to 110ms. When CLI is presented at ringing time, | |
| 79 this tone is not sent. In the US, CLI is usually sent between the first | |
| 80 two rings. This silence period is long in the US, so the message fits easily. | |
| 81 In other places, where the standard ring tone has much smaller silences, | |
| 82 a line voltage reversal is used to wake up a power saving receiver, then the | |
| 83 message is sent, then the phone begins to ring. | |
| 84 | |
| 85 The message is sent using a Bell 202 FSK modem. The data rate is 1200 bits | |
| 86 per second. The message protocol uses 8-bit data words (bytes), each bounded | |
| 87 by a start bit and a stop bit. | |
| 88 | |
| 89 Channel Carrier Message Message Data Checksum | |
| 90 Seizure Signal Type Length Word(s) Word | |
| 91 Signal Word Word | |
| 92 | |
| 93 \section adsi_page_sec_2a1 CHANNEL SEIZURE SIGNAL | |
| 94 The channel seizure is 30 continuous bytes of 55h (01010101), including | |
| 95 the start and stop bits (i.e. 300 bits of alternations in total). | |
| 96 This provides a detectable alternating function to the CPE (i.e. the | |
| 97 modem data pump). | |
| 98 | |
| 99 \section adsi_page_sec_2a2 CARRIER SIGNAL | |
| 100 The carrier signal consists of 180 bits of 1s. This may be reduced to 80 | |
| 101 bits of 1s for caller ID on call waiting. | |
| 102 | |
| 103 \section adsi_page_sec_2a3 MESSAGE TYPE WORD | |
| 104 Various message types are defined. The commonest ones for the US CLASS | |
| 105 standard are: | |
| 106 | |
| 107 - Type 0x04 (SDMF) - single data message. Simple caller ID (CND) | |
| 108 - Type 0x80 (MDMF) - multiple data message. A more flexible caller ID, | |
| 109 with extra information. | |
| 110 | |
| 111 Other messages support message waiting, for voice mail, and other display features. | |
| 112 | |
| 113 \section adsi_page_sec_2a4 MESSAGE LENGTH WORD | |
| 114 The message length word specifies the total number of data words | |
| 115 to follow. | |
| 116 | |
| 117 \section adsi_page_sec_2a5 DATA WORDS | |
| 118 The data words contain the actual message. | |
| 119 | |
| 120 \section adsi_page_sec_2a6 CHECKSUM WORD | |
| 121 The Checksum Word contains the twos complement of the modulo 256 | |
| 122 sum of the other words in the data message (i.e., message type, | |
| 123 message length, and data words). The receiving equipment may | |
| 124 calculate the modulo 256 sum of the received words and add this | |
| 125 sum to the received checksum word. A result of zero generally | |
| 126 indicates that the message was correctly received. Message | |
| 127 retransmission is not supported. The sumcheck word should be followed | |
| 128 by a minimum of two stop bits. | |
| 129 | |
| 130 \section adsi_page_sec_2b The ETSI CLIP specification | |
| 131 The ETSI CLIP specification uses similar messages to the Bellcore specification. | |
| 132 They are not, however, identical. First, ETSI use the V.23 modem standard, rather | |
| 133 than Bell 202. Second, different fields, and different message types are available. | |
| 134 | |
| 135 The wake up indication generally differs from the Bellcore specification, to | |
| 136 accomodate differences in European ring cadences. | |
| 137 | |
| 138 \section adsi_page_sec_2c The ETSI caller ID by DTMF specification | |
| 139 CLI by DTMF is usually sent in a very simple way. The exchange does not give | |
| 140 any prior warning (no reversal, or ring) to wake up the receiver. It just | |
| 141 sends a string of DTMF digits. Around the world several variants of this | |
| 142 basic scheme are used. | |
| 143 | |
| 144 One variant of the digit string is used in Belgium, Brazil, Denmark, Finland, Iceland, | |
| 145 India, Netherlands, Saudi Arabia, Sweden and Uruguay: | |
| 146 | |
| 147 - A<caller's phone number>D<redirected number>B<special information>C | |
| 148 | |
| 149 Each of these fields may be omitted. The following special information codes are defined | |
| 150 | |
| 151 - "00" indicates the calling party number is not available. | |
| 152 - "10" indicates that the presentation of the calling party number is restricted. | |
| 153 | |
| 154 A second variant of the digit string is one of the following: | |
| 155 | |
| 156 - A<caller's phone number># | |
| 157 - D1# Number not available because the caller has restricted it. | |
| 158 - D2# Number not available because the call is international. | |
| 159 - D3# Number not available due to technical reasons. | |
| 160 | |
| 161 A third variant of the digit string is used in Taiwan and Kuwait: | |
| 162 | |
| 163 - D<caller's phone number>C | |
| 164 | |
| 165 A forth variant of the digit string is used in Denmark and Holland: | |
| 166 | |
| 167 - <caller's phone number># | |
| 168 | |
| 169 There is no distinctive start marker in this format. | |
| 170 | |
| 171 \section adsi_page_sec_2d The Japanese specification from NTT | |
| 172 | |
| 173 The Japanese caller ID specification is considerably different from any of the others. It | |
| 174 uses V.23 modem signals, but the message structure is uniqeue. Also, the message is delivered | |
| 175 while off hook. This results in a sequence | |
| 176 | |
| 177 - The phone line rings | |
| 178 - CPE answers and waits for the caller ID message | |
| 179 - CPE hangs up on receipt of the caller ID message | |
| 180 - The phone line rings a second time | |
| 181 - The CPE answers a second time, connecting the called party with the caller. | |
| 182 | |
| 183 Timeouts are, obviously, required to ensure this system behaves well when the caller ID message | |
| 184 or the second ring are missing. | |
| 185 */ | |
| 186 | |
| 187 enum | |
| 188 { | |
| 189 ADSI_STANDARD_NONE = 0, | |
| 190 ADSI_STANDARD_CLASS = 1, | |
| 191 ADSI_STANDARD_CLIP = 2, | |
| 192 ADSI_STANDARD_ACLIP = 3, | |
| 193 ADSI_STANDARD_JCLIP = 4, | |
| 194 ADSI_STANDARD_CLIP_DTMF = 5, | |
| 195 ADSI_STANDARD_TDD = 6 | |
| 196 }; | |
| 197 | |
| 198 /* In some of the messages code characters are used, as follows: | |
| 199 'C' for public callbox | |
| 200 'L' for long distance | |
| 201 'O' for overseas | |
| 202 'P' for private | |
| 203 'S' for service conflict | |
| 204 | |
| 205 Taiwan and Kuwait change this pattern to: | |
| 206 'C' for coin/public callbox | |
| 207 'I' for international call | |
| 208 'O' for out of area call | |
| 209 'P' for private | |
| 210 */ | |
| 211 | |
| 212 /*! Definitions for CLASS (Custom Local Area Signaling Services) */ | |
| 213 enum | |
| 214 { | |
| 215 /*! Single data message caller ID */ | |
| 216 CLASS_SDMF_CALLERID = 0x04, | |
| 217 /*! Multiple data message caller ID */ | |
| 218 CLASS_MDMF_CALLERID = 0x80, | |
| 219 /*! Single data message message waiting */ | |
| 220 CLASS_SDMF_MSG_WAITING = 0x06, | |
| 221 /*! Multiple data message message waiting */ | |
| 222 CLASS_MDMF_MSG_WAITING = 0x82 | |
| 223 }; | |
| 224 | |
| 225 /*! CLASS MDMF message IDs */ | |
| 226 enum | |
| 227 { | |
| 228 /*! Date and time (MMDDHHMM) */ | |
| 229 MCLASS_DATETIME = 0x01, | |
| 230 /*! Caller number */ | |
| 231 MCLASS_CALLER_NUMBER = 0x02, | |
| 232 /*! Dialed number */ | |
| 233 MCLASS_DIALED_NUMBER = 0x03, | |
| 234 /*! Caller number absent: 'O' or 'P' */ | |
| 235 MCLASS_ABSENCE1 = 0x04, | |
| 236 /*! Call forward: universal ('0'), on busy ('1'), or on unanswered ('2') */ | |
| 237 MCLASS_REDIRECT = 0x05, | |
| 238 /*! Long distance: 'L' */ | |
| 239 MCLASS_QUALIFIER = 0x06, | |
| 240 /*! Caller's name */ | |
| 241 MCLASS_CALLER_NAME = 0x07, | |
| 242 /*! Caller's name absent: 'O' or 'P' */ | |
| 243 MCLASS_ABSENCE2 = 0x08, | |
| 244 /*! Alternate route */ | |
| 245 MCLASS_ALT_ROUTE = 0x09 | |
| 246 }; | |
| 247 | |
| 248 /*! CLASS MDMF message waiting message IDs */ | |
| 249 /*! Message waiting/not waiting */ | |
| 250 #define MCLASS_VISUAL_INDICATOR 0x0B | |
| 251 | |
| 252 /*! Definitions for CLIP (Calling Line Identity Presentation) (from ETS 300 659-1) */ | |
| 253 enum | |
| 254 { | |
| 255 /*! Multiple data message caller ID */ | |
| 256 CLIP_MDMF_CALLERID = 0x80, | |
| 257 /*! Multiple data message message waiting */ | |
| 258 CLIP_MDMF_MSG_WAITING = 0x82, | |
| 259 /*! Multiple data message charge information */ | |
| 260 CLIP_MDMF_CHARGE_INFO = 0x86, | |
| 261 /*! Multiple data message SMS */ | |
| 262 CLIP_MDMF_SMS = 0x89 | |
| 263 }; | |
| 264 | |
| 265 /*! CLIP message IDs (from ETS 300 659-1) */ | |
| 266 enum | |
| 267 { | |
| 268 /*! Date and time (MMDDHHMM) */ | |
| 269 CLIP_DATETIME = 0x01, | |
| 270 /*! Caller number (AKA calling line identity) */ | |
| 271 CLIP_CALLER_NUMBER = 0x02, | |
| 272 /*! Dialed number (AKA called line identity) */ | |
| 273 CLIP_DIALED_NUMBER = 0x03, | |
| 274 /*! Caller number absent: 'O' or 'P' (AKA reason for absence of calling line identity) */ | |
| 275 CLIP_ABSENCE1 = 0x04, | |
| 276 /*! Caller's name (AKA calling party name) */ | |
| 277 CLIP_CALLER_NAME = 0x07, | |
| 278 /*! Caller's name absent: 'O' or 'P' (AKA reason for absence of calling party name) */ | |
| 279 CLIP_ABSENCE2 = 0x08, | |
| 280 /*! Visual indicator */ | |
| 281 CLIP_VISUAL_INDICATOR = 0x0B, | |
| 282 /*! Message ID */ | |
| 283 CLIP_MESSAGE_ID = 0x0D, | |
| 284 /*! Complementary calling line identity */ | |
| 285 CLIP_COMPLEMENTARY_CALLER_NUMBER = 0x10, | |
| 286 /*! Call type - voice call (1), ring-back-when-free call (2), calling name delivery (3) or msg waiting call(0x81) */ | |
| 287 CLIP_CALLTYPE = 0x11, | |
| 288 /*! Number of messages */ | |
| 289 CLIP_NUM_MSG = 0x13, | |
| 290 /*! Type of forwarded call */ | |
| 291 CLIP_TYPE_OF_FORWARDED_CALL = 0x15, | |
| 292 /*! Type of calling user */ | |
| 293 CLIP_TYPE_OF_CALLING_USER = 0x16, | |
| 294 /*! Redirecting number */ | |
| 295 CLIP_REDIR_NUMBER = 0x1A, | |
| 296 /*! Charge */ | |
| 297 CLIP_CHARGE = 0x20, | |
| 298 /*! Duration of the call */ | |
| 299 CLIP_DURATION = 0x23, | |
| 300 /*! Additional charge */ | |
| 301 CLIP_ADD_CHARGE = 0x21, | |
| 302 /*! Display information */ | |
| 303 CLIP_DISPLAY_INFO = 0x50, | |
| 304 /*! Service information */ | |
| 305 CLIP_SERVICE_INFO = 0x55 | |
| 306 }; | |
| 307 | |
| 308 /*! Definitions for A-CLIP (Analog Calling Line Identity Presentation) */ | |
| 309 enum | |
| 310 { | |
| 311 /*! Single data message caller ID frame */ | |
| 312 ACLIP_SDMF_CALLERID = 0x04, | |
| 313 /*! Multiple data message caller ID frame */ | |
| 314 ACLIP_MDMF_CALLERID = 0x80 | |
| 315 }; | |
| 316 | |
| 317 /*! A-CLIP MDM message IDs */ | |
| 318 enum | |
| 319 { | |
| 320 /*! Date and time (MMDDHHMM) */ | |
| 321 ACLIP_DATETIME = 0x01, | |
| 322 /*! Caller number */ | |
| 323 ACLIP_CALLER_NUMBER = 0x02, | |
| 324 /*! Dialed number */ | |
| 325 ACLIP_DIALED_NUMBER = 0x03, | |
| 326 /*! Caller number absent: 'O' or 'P' */ | |
| 327 ACLIP_NUMBER_ABSENCE = 0x04, | |
| 328 /*! Call forward: universal, on busy, or on unanswered */ | |
| 329 ACLIP_REDIRECT = 0x05, | |
| 330 /*! Long distance call: 'L' */ | |
| 331 ACLIP_QUALIFIER = 0x06, | |
| 332 /*! Caller's name */ | |
| 333 ACLIP_CALLER_NAME = 0x07, | |
| 334 /*! Caller's name absent: 'O' or 'P' */ | |
| 335 ACLIP_NAME_ABSENCE = 0x08 | |
| 336 }; | |
| 337 | |
| 338 /*! Definitions for J-CLIP (Japan Calling Line Identity Presentation) */ | |
| 339 /*! Multiple data message caller ID frame */ | |
| 340 #define JCLIP_MDMF_CALLERID 0x40 | |
| 341 | |
| 342 /*! J-CLIP MDM message IDs */ | |
| 343 enum | |
| 344 { | |
| 345 /*! Caller number */ | |
| 346 JCLIP_CALLER_NUMBER = 0x02, | |
| 347 /*! Caller number data extension signal */ | |
| 348 JCLIP_CALLER_NUM_DES = 0x21, | |
| 349 /*! Dialed number */ | |
| 350 JCLIP_DIALED_NUMBER = 0x09, | |
| 351 /*! Dialed number data extension signal */ | |
| 352 JCLIP_DIALED_NUM_DES = 0x22, | |
| 353 /*! Caller number absent: 'C', 'O', 'P' or 'S' */ | |
| 354 JCLIP_ABSENCE = 0x04 | |
| 355 }; | |
| 356 | |
| 357 /* Definitions for CLIP-DTMF and its variants */ | |
| 358 | |
| 359 /*! Caller number is '#' terminated DTMF. */ | |
| 360 #define CLIP_DTMF_HASH_TERMINATED '#' | |
| 361 /*! Caller number is 'C' terminated DTMF. */ | |
| 362 #define CLIP_DTMF_C_TERMINATED 'C' | |
| 363 | |
| 364 /*! Caller number */ | |
| 365 #define CLIP_DTMF_HASH_CALLER_NUMBER 'A' | |
| 366 /*! Caller number absent: private (1), overseas (2) or not available (3) */ | |
| 367 #define CLIP_DTMF_HASH_ABSENCE 'D' | |
| 368 /*! Caller ID field with no explicit field type */ | |
| 369 #define CLIP_DTMF_HASH_UNSPECIFIED 0 | |
| 370 | |
| 371 /*! Caller number */ | |
| 372 #define CLIP_DTMF_C_CALLER_NUMBER 'A' | |
| 373 /*! Diverting number */ | |
| 374 #define CLIP_DTMF_C_REDIRECT_NUMBER 'D' | |
| 375 /*! Caller number absent: private/restricted (00) or not available (10) */ | |
| 376 #define CLIP_DTMF_C_ABSENCE 'B' | |
| 377 | |
| 378 /*! | |
| 379 ADSI transmitter descriptor. This contains all the state information for an ADSI | |
| 380 (caller ID, CLASS, CLIP, ACLIP) transmit channel. | |
| 381 */ | |
| 382 typedef struct adsi_tx_state_s adsi_tx_state_t; | |
| 383 | |
| 384 /*! | |
| 385 ADSI receiver descriptor. This contains all the state information for an ADSI | |
| 386 (caller ID, CLASS, CLIP, ACLIP, JCLIP) receive channel. | |
| 387 */ | |
| 388 typedef struct adsi_rx_state_s adsi_rx_state_t; | |
| 389 | |
| 390 #if defined(__cplusplus) | |
| 391 extern "C" | |
| 392 { | |
| 393 #endif | |
| 394 | |
| 395 /*! \brief Initialise an ADSI receive context. | |
| 396 \param s The ADSI receive context. | |
| 397 \param standard The code for the ADSI standard to be used. | |
| 398 \param put_msg A callback routine called to deliver the received messages | |
| 399 to the application. | |
| 400 \param user_data An opaque pointer for the callback routine. | |
| 401 \return A pointer to the initialised context, or NULL if there was a problem. | |
| 402 */ | |
| 403 SPAN_DECLARE(adsi_rx_state_t *) adsi_rx_init(adsi_rx_state_t *s, | |
| 404 int standard, | |
| 405 put_msg_func_t put_msg, | |
| 406 void *user_data); | |
| 407 | |
| 408 /*! \brief Release an ADSI receive context. | |
| 409 \param s The ADSI receive context. | |
| 410 \return 0 for OK. | |
| 411 */ | |
| 412 SPAN_DECLARE(int) adsi_rx_release(adsi_rx_state_t *s); | |
| 413 | |
| 414 /*! \brief Free the resources of an ADSI receive context. | |
| 415 \param s The ADSI receive context. | |
| 416 \return 0 for OK. | |
| 417 */ | |
| 418 SPAN_DECLARE(int) adsi_rx_free(adsi_rx_state_t *s); | |
| 419 | |
| 420 /*! \brief Receive a chunk of ADSI audio. | |
| 421 \param s The ADSI receive context. | |
| 422 \param amp The audio sample buffer. | |
| 423 \param len The number of samples in the buffer. | |
| 424 \return The number of samples unprocessed. | |
| 425 */ | |
| 426 SPAN_DECLARE(int) adsi_rx(adsi_rx_state_t *s, const int16_t amp[], int len); | |
| 427 | |
| 428 /*! \brief Initialise an ADSI transmit context. | |
| 429 \param s The ADSI transmit context. | |
| 430 \param standard The code for the ADSI standard to be used. | |
| 431 \return A pointer to the initialised context, or NULL if there was a problem. | |
| 432 */ | |
| 433 SPAN_DECLARE(adsi_tx_state_t *) adsi_tx_init(adsi_tx_state_t *s, int standard); | |
| 434 | |
| 435 /*! \brief Release an ADSI transmit context. | |
| 436 \param s The ADSI transmit context. | |
| 437 \return 0 for OK. | |
| 438 */ | |
| 439 SPAN_DECLARE(int) adsi_tx_release(adsi_tx_state_t *s); | |
| 440 | |
| 441 /*! \brief Free the resources of an ADSI transmit context. | |
| 442 \param s The ADSI transmit context. | |
| 443 \return 0 for OK. | |
| 444 */ | |
| 445 SPAN_DECLARE(int) adsi_tx_free(adsi_tx_state_t *s); | |
| 446 | |
| 447 /*! \brief Adjust the preamble associated with an ADSI transmit context. | |
| 448 \param s The ADSI transmit context. | |
| 449 \param preamble_len The number of bits of preamble. | |
| 450 \param preamble_ones_len The number of bits of continuous one before a message. | |
| 451 \param postamble_ones_len The number of bits of continuous one after a message. | |
| 452 \param stop_bits The number of stop bits per character. | |
| 453 */ | |
| 454 SPAN_DECLARE(void) adsi_tx_set_preamble(adsi_tx_state_t *s, | |
| 455 int preamble_len, | |
| 456 int preamble_ones_len, | |
| 457 int postamble_ones_len, | |
| 458 int stop_bits); | |
| 459 | |
| 460 /*! \brief Generate a block of ADSI audio samples. | |
| 461 \param s The ADSI transmit context. | |
| 462 \param amp The audio sample buffer. | |
| 463 \param max_len The number of samples to be generated. | |
| 464 \return The number of samples actually generated. | |
| 465 */ | |
| 466 SPAN_DECLARE(int) adsi_tx(adsi_tx_state_t *s, int16_t amp[], int max_len); | |
| 467 | |
| 468 /*! \brief Request generation of an ADSI alert tone. | |
| 469 \param s The ADSI transmit context. | |
| 470 */ | |
| 471 SPAN_DECLARE(void) adsi_tx_send_alert_tone(adsi_tx_state_t *s); | |
| 472 | |
| 473 /*! \brief Put a message into the input buffer of an ADSI transmit context. | |
| 474 \param s The ADSI transmit context. | |
| 475 \param msg The message. | |
| 476 \param len The length of the message. | |
| 477 \return The length actually added. If a message is already in progress | |
| 478 in the transmitter, this function will return zero, as it will | |
| 479 not successfully add the message to the buffer. If the message is | |
| 480 invalid (e.g. it is too long), this function will return -1. | |
| 481 */ | |
| 482 SPAN_DECLARE(int) adsi_tx_put_message(adsi_tx_state_t *s, const uint8_t *msg, int len); | |
| 483 | |
| 484 /*! \brief Get a field from an ADSI message. | |
| 485 \param s The ADSI receive context. | |
| 486 \param msg The message buffer. | |
| 487 \param msg_len The length of the message. | |
| 488 \param pos Current position within the message. Set to -1 when starting a message. | |
| 489 \param field_type The type code for the field. | |
| 490 \param field_body Pointer to the body of the field. | |
| 491 \param field_len The length of the field, or -1 for no more fields, or -2 for message structure corrupt. | |
| 492 */ | |
| 493 SPAN_DECLARE(int) adsi_next_field(adsi_rx_state_t *s, const uint8_t *msg, int msg_len, int pos, uint8_t *field_type, uint8_t const **field_body, int *field_len); | |
| 494 | |
| 495 /*! \brief Insert the header or a field into an ADSI message. | |
| 496 \param s The ADSI transmit context. | |
| 497 \param msg The message buffer. | |
| 498 \param len The current length of the message. | |
| 499 \param field_type The type code for the new field. | |
| 500 \param field_body Pointer to the body of the new field. | |
| 501 \param field_len The length of the new field. | |
| 502 */ | |
| 503 SPAN_DECLARE(int) adsi_add_field(adsi_tx_state_t *s, uint8_t *msg, int len, uint8_t field_type, uint8_t const *field_body, int field_len); | |
| 504 | |
| 505 /*! \brief Return a short name for an ADSI standard | |
| 506 \param standard The code for the standard. | |
| 507 \return A pointer to the name. | |
| 508 */ | |
| 509 SPAN_DECLARE(const char *) adsi_standard_to_str(int standard); | |
| 510 | |
| 511 #if defined(__cplusplus) | |
| 512 } | |
| 513 #endif | |
| 514 | |
| 515 #endif | |
| 516 /*- End of file ------------------------------------------------------------*/ |
