2 * Copyright (c) 1999 Hellmuth Michaelis. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 *---------------------------------------------------------------------------
27 * isdnphone - isdn (i4b) handling
28 * ===============================
30 * $Id: isdn.c,v 1.4 1999/12/13 21:25:26 hm Exp $
32 * $FreeBSD: src/usr.sbin/i4b/isdnphone/isdn.c,v 1.1.2.1 2001/08/01 17:45:06 obrien Exp $
33 * $DragonFly: src/usr.sbin/i4b/isdnphone/isdn.c,v 1.2 2003/06/17 04:29:55 dillon Exp $
35 * last edit-date: [Mon Dec 13 21:53:05 1999]
37 *---------------------------------------------------------------------------*/
41 /*---------------------------------------------------------------------------*
43 *---------------------------------------------------------------------------*/
45 init_dial(char *device)
49 if((ret = open(device, O_RDWR)) < 0)
51 fprintf(stderr, "unable to open %s: %s\n", device, strerror(errno));
57 /*---------------------------------------------------------------------------*
58 * i4bteld data available handler
59 *---------------------------------------------------------------------------*/
65 if((read (dialerfd, &result, 1) < 0))
67 fatal("read failed: %s", strerror(errno));
74 message("connected to remote!");
78 message("remote is busy!");
83 message("disconnected from remote!");
87 message("no answer from remote!");
91 message("unknown response = 0x%2x!", result);
96 /*---------------------------------------------------------------------------*
98 *---------------------------------------------------------------------------*/
100 init_tel(char *device)
105 if(play_fmt == AFMT_MU_LAW)
106 format = CVT_ALAW2ULAW;
110 if((ret = open(device, O_RDWR)) < 0)
111 fatal("unable to open %s: %s\n", device, strerror(errno));
113 if((ioctl(ret, I4B_TEL_SETAUDIOFMT, &format)) < 0)
114 fatal("ioctl I4B_TEL_SETAUDIOFMT failed: %s", strerror(errno));
119 /*---------------------------------------------------------------------------*
121 *---------------------------------------------------------------------------*/
123 do_dial(char *number)
125 char commandbuffer[80];
126 sprintf(commandbuffer, "D%s", number);
128 if((write(dialerfd, commandbuffer, strlen(commandbuffer))) < 0)
130 fatal("write commandbuffer failed: %s", strerror(errno));
134 /*---------------------------------------------------------------------------*
136 *---------------------------------------------------------------------------*/
140 char commandbuffer[80];
144 message("tried hangup while ST_IDLE");
148 sprintf(commandbuffer, "H");
150 if((write(dialerfd, commandbuffer, strlen(commandbuffer))) < 0)
152 fatal("write commandbuffer failed: %s", strerror(errno));
156 /*---------------------------------------------------------------------------*
157 * i4btel speech data available handler
158 *---------------------------------------------------------------------------*/
162 unsigned char buffer[BCH_MAX_DATALEN];
165 ret = read(telfd, buffer, BCH_MAX_DATALEN);
169 fatal("read telfd failed: %s", strerror(errno));
172 debug("tel_hdlr: read %d bytes\n", ret);
176 audiowrite(ret, buffer);
180 /*---------------------------------------------------------------------------*
181 * write audio data to ISDN
182 *---------------------------------------------------------------------------*/
184 telwrite(int len, unsigned char *buf)
186 if((write(telfd, buf, len)) < 0)
188 fatal("write tel failed: %s", strerror(errno));