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
));