11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* $Id: isdn_audio.h,v 1.1.2.2 2004/01/12 22:37:18 keil Exp $
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Linux ISDN subsystem, audio conversion and compression (linklevel).
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright 1994-1999 by Fritz Elfert (fritz@isdn4linux.de)
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This software may be used and distributed according to the terms
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * of the GNU General Public License, incorporated herein by reference.
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DTMF_NPOINTS 205        /* Number of samples for DTMF recognition */
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct adpcm_state {
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int a;
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int d;
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int word;
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int nleft;
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int nbits;
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} adpcm_state;
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct dtmf_state {
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char last;
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char llast;
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int idx;
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int buf[DTMF_NPOINTS];
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} dtmf_state;
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct silence_state {
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int state;
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int idx;
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} silence_state;
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void isdn_audio_ulaw2alaw(unsigned char *, unsigned long);
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void isdn_audio_alaw2ulaw(unsigned char *, unsigned long);
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern adpcm_state *isdn_audio_adpcm_init(adpcm_state *, int);
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int isdn_audio_adpcm2xlaw(adpcm_state *, int, unsigned char *, unsigned char *, int);
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int isdn_audio_xlaw2adpcm(adpcm_state *, int, unsigned char *, unsigned char *, int);
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void isdn_audio_calc_dtmf(modem_info *, unsigned char *, int, int);
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void isdn_audio_eval_dtmf(modem_info *);
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsdtmf_state *isdn_audio_dtmf_init(dtmf_state *);
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void isdn_audio_calc_silence(modem_info *, unsigned char *, int, int);
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void isdn_audio_eval_silence(modem_info *);
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldssilence_state *isdn_audio_silence_init(silence_state *);
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void isdn_audio_put_dle_code(modem_info *, u_char);
45