/* * Header file for: * BSD Telephony Of Mexico "Zapata" Telecom Library, version 1.4 12/23/00 * * Part of the "Zapata" Computer Telephony Technology. * * See http://www.bsdtelephony.com.mx * * * The technologies, software, hardware, designs, drawings, scheumatics, board * layouts and/or artwork, concepts, methodologies (including the use of all * of these, and that which is derived from the use of all of these), all other * intellectual properties contained herein, and all intellectual property * rights have been and shall continue to be expressly for the benefit of all * mankind, and are perpetually placed in the public domain, and may be used, * copied, and/or modified by anyone, in any manner, for any legal purpose, * without restriction. * * TTY/TDD functionality heavily based upon 'rtty' program by Jesus Arias. */ #define FS 8000 #define NBW 2 #define BWLIST {75,800} #define NF 4 #define FLIST {1400,1800,1200,2200} #define NSBUF 1024 #define NCOLA 0x4000 /* used internally, but needs to be here so that ZAP structure will be valid */ typedef struct { float spb; /* Samples / Bit */ int nbit; /* Número de bits de datos (5,7,8) */ float nstop; /* Número de bits de stop 1,1.5,2 */ int paridad; /* Bit de paridad 0=nada 1=Par 2=Impar */ int hdlc; /* Modo Packet */ int bw; /* Ancho de Banda */ int f_mark_idx; /* Indice de frecuencia de marca (f_M-500)/5 */ int f_space_idx;/* Indice de frecuencia de espacio (f_S-500)/5 */ int pcola; /* Puntero de las colas de datos */ float cola_in[NCOLA]; /* Cola de muestras de entrada */ float cola_filtro[NCOLA]; /* Cola de muestras tras filtros */ float cola_demod[NCOLA]; /* Cola de muestras demoduladas */ } fsk_data; #define ZAP_MAXDTMF 64 #define ZAP_BLOCKSIZE 205 /* perfict for goertzel */ typedef struct zap /* channel context structure */ { int fd; /* channel Unix file descriptor */ char dtmfbuf[ZAP_MAXDTMF + 1]; /* DTMF buffer */ int dtmfn; /* number of chars in DTMF buffer */ char dtmf_heard; /* dtmf heard (when not in getdtmf) */ char goertzel_last; /* 'last' flag for goertzel */ int digit_mode; /* rx mode: 0 for DTMF, 1 for MF */ int dial_mode; /* tx mode: 0 for DTMF, 1 for MF */ fsk_data fskd; /* fsk data */ float ci; /* ci for fsk tone generation */ float cr; /* cr for fsk tone generation */ float myci; /* ci for local (non-fsk) tone generation */ float mycr; /* cr for local (non-fsk) tone generation */ float myci1; /* ci1 for local (non-fsk) tone generation */ float mycr1; /* cr1 for local (non-fsk) tone generation */ int bp; /* fsk read buffer pointer */ int ns; /* fsk read silly thingy */ float x0,cont; /* stuff for dpll */ int mode; /* fsk transmit mode */ int modo; /* fsk receive mode */ unsigned char audio_buf[ZAP_BLOCKSIZE]; /* fsk read audio buffer */ int p; /* fsk transmit buffer pointer */ unsigned char buf[ZAP_BLOCKSIZE]; /* fsk write audio buffer */ double fmxv[8],fmyv[8]; /* filter stuff for M filter */ int fmp; /* pointer for M filter */ double fsxv[8],fsyv[8]; /* filter stuff for S filter */ int fsp; /* pointer for S filter */ double flxv[8],flyv[8]; /* filter stuff for L filter */ int flp; /* pointer for L filter */ float lxv[13],lyv[13]; /* filter stuff for low group DTMF filter */ float hxv[9],hyv[9]; /* filter stuff for high group DTMF filter */ float rxgain; /* rx gain in db */ float txgain; /* tx gain in db */ int nxfer; /* number of bytes transfered last */ unsigned int nsilence; /* number of contiguous silence samples */ } ZAP ; typedef struct zapio /* I/O element */ { void *p; /* file pointer or memory location (0 for last entry) */ int length; /* length of entry (0 = play until EOF) */ int offset; /* offset into file (or -1 for memory location) */ } ZAPIO; ZAP *zap_open(char *devname); /* open a telecom channel */ int zap_close(ZAP *zap); /* close a telecom channel */ int zap_clrdtmf(ZAP *zap); /* clear DTMF buffer */ int zap_getdtmf(ZAP *zap, int max, char *term, char erase, int idtimeout, int timeout, int flags); /* get DTMF */ int zap_play(ZAP *zap, ZAPIO *ioblock, int flags); /* play an io block */ int zap_playf(ZAP *zap, char *fname, int flags); /* play a file */ int zap_rec(ZAP *zap, ZAPIO *ioblock, int flags); /* record into io block */ int zap_recf(ZAP *zap, char *fname, int maxlen, int flags); /* record into file */ int zap_sethook(ZAP *zap, int hookstate); /* set hookswitch state */ int zap_getevent(ZAP *zap); /* get event */ int zap_waitevent(ZAP *zap); /* wait for event */ int zap_flushevent(ZAP *zap); /* flush all events */ int zap_waitcall(ZAP *zap, int nrings, int hookstate, int timeout); /* wait for call, then ans. */ int zap_dial(ZAP *zap, char *dialstring, int length); /* dial a number */ int zap_wink(ZAP *zap); /* output a wink */ int zap_start(ZAP *zap); /* start the line */ int zap_flash(ZAP *zap); /* output a flash */ int zap_ring(ZAP *zap, int rings); /* ring a phone/station (FXO interface only) */ int zap_getparams(ZAP *zap, void *params); /* get channel parameters */ int zap_setparams(ZAP *zap, void *params); /* set channel parameters */ int zap_gettdd(ZAP *zap); /* get a TDD char */ int zap_sendtdd(ZAP *zap,char *string); /* send a string to TDD */ int zap_disatone(ZAP *zap); /* send 2100hz echo can disable tone */ int zap_conf(ZAP *zap, int chan, int confno, int confmode); /* set conference mode */ int zap_getconf(ZAP *zap, int chan, int *confnop, int *confmodep); /* get conf mode */ int zap_clearlinks(ZAP *zap); /* clear conf links */ int zap_makelink(ZAP *zap, int dstconfno, int srcconfno); /* make a conference link */ int zap_breaklink(ZAP *zap, int dstconfno, int srcconfno); /* break a conference link */ int zap_gains(ZAP *zap,float rxgain,float txgain); /* set gains in db */ int zap_channel(ZAP *zap); /* get channel number */ int zap_silence(ZAP *zap,int length); /* send silence, length in ms */ int zap_arbtone(ZAP *zap, float freq, int length); /* send arbitrary tone */ int zap_arbtones(ZAP *zap,float freq1, float freq2, int length); /* send arbitrary tone pair */ int zap_clid(ZAP *zap, char *number, char *name); /* get Caller*ID */ /* flags to various functions */ #define ZAP_DTMFINT 1 /* interrupt on DTMF */ #define ZAP_BEEPTONE 2 /* play beep tone before rec. */ #define ZAP_HOOKEXIT 4 /* exit on hook events */ #define ZAP_TIMEOUTOK 8 /* timeout ok term for DTMF */ #define ZAP_SILENCEINT 16 /* interrupt on silence for rec. */ /* hookswitch states */ #define ZAP_ONHOOK 0 /* on hook */ #define ZAP_OFFHOOK 1 /* off hook */ /* Events that can be received */ #define ZAP_EVENT_NOEVENT 0 /* no event */ #define ZAP_EVENT_ONHOOK 1 /* went on hook */ #define ZAP_EVENT_RINGANSWER 2 /* got ring (incomming) or answered (outgoing) */ #define ZAP_EVENT_WINKFLASH 3 /* got wink */ #define ZAP_EVENT_ALARM 4 /* got alarm */ #define ZAP_EVENT_NOALARM 5 /* alarm went away */ /* Conference values and masks */ #define ZAP_NORMAL 0 /* normal mode */ #define ZAP_MONITOR 1 /* monitor mode (rx of other chan) */ #define ZAP_MONITORTX 2 /* monitor mode (tx of other chan) */ #define ZAP_MONITORBOTH 3 /* monitor mode (rx & tx of other chan) */ #define ZAP_CONF 4 /* conference mode */ #define ZAP_CONFANN 5 /* conference announce mode */ #define ZAP_CONFMON 6 /* conference monitor mode */ #define ZAP_CONFANNMON 7 /* conference announce/monitor mode */ #define ZAP_CONF_LISTENER 0x100 /* is a listener on the conference */ #define ZAP_CONF_TALKER 0x200 /* is a talker on the conference */ /* digit modes */ #define ZAP_DTMF 0 /* receive DTMF digits */ #define ZAP_MF 1 /* receive MF digits */ #define ZAP_MUTECONF 2 /* mute on conf */ #define ZAP_DEFAULT_MFLENGTH 60 /* default tone length -- 60 ms */ #define ZAP_DEFAULT_DTMFLENGTH 100 /* default tone length -- 100 ms */