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 $
34 * last edit-date: [Mon Dec 13 21:53:05 1999]
36 *---------------------------------------------------------------------------*/
40 /*---------------------------------------------------------------------------*
42 *---------------------------------------------------------------------------*/
44 init_dial(char *device)
48 if((ret = open(device, O_RDWR)) < 0)
50 fprintf(stderr, "unable to open %s: %s\n", device, strerror(errno));
56 /*---------------------------------------------------------------------------*
57 * i4bteld data available handler
58 *---------------------------------------------------------------------------*/
64 if((read (dialerfd, &result, 1) < 0))
66 fatal("read failed: %s", strerror(errno));
73 message("connected to remote!");
77 message("remote is busy!");
82 message("disconnected from remote!");
86 message("no answer from remote!");
90 message("unknown response = 0x%2x!", result);
95 /*---------------------------------------------------------------------------*
97 *---------------------------------------------------------------------------*/
99 init_tel(char *device)
104 if(play_fmt == AFMT_MU_LAW)
105 format = CVT_ALAW2ULAW;
109 if((ret = open(device, O_RDWR)) < 0)
110 fatal("unable to open %s: %s\n", device, strerror(errno));
112 if((ioctl(ret, I4B_TEL_SETAUDIOFMT, &format)) < 0)
113 fatal("ioctl I4B_TEL_SETAUDIOFMT failed: %s", strerror(errno));
118 /*---------------------------------------------------------------------------*
120 *---------------------------------------------------------------------------*/
122 do_dial(char *number)
124 char commandbuffer[80];
125 sprintf(commandbuffer, "D%s", number);
127 if((write(dialerfd, commandbuffer, strlen(commandbuffer))) < 0)
129 fatal("write commandbuffer failed: %s", strerror(errno));
133 /*---------------------------------------------------------------------------*
135 *---------------------------------------------------------------------------*/
139 char commandbuffer[80];
143 message("tried hangup while ST_IDLE");
147 sprintf(commandbuffer, "H");
149 if((write(dialerfd, commandbuffer, strlen(commandbuffer))) < 0)
151 fatal("write commandbuffer failed: %s", strerror(errno));
155 /*---------------------------------------------------------------------------*
156 * i4btel speech data available handler
157 *---------------------------------------------------------------------------*/
161 unsigned char buffer[BCH_MAX_DATALEN];
164 ret = read(telfd, buffer, BCH_MAX_DATALEN);
168 fatal("read telfd failed: %s", strerror(errno));
171 debug("tel_hdlr: read %d bytes\n", ret);
175 audiowrite(ret, buffer);
179 /*---------------------------------------------------------------------------*
180 * write audio data to ISDN
181 *---------------------------------------------------------------------------*/
183 telwrite(int len, unsigned char *buf)
185 if((write(telfd, buf, len)) < 0)
187 fatal("write tel failed: %s", strerror(errno));