static char sccsid
[] = "@(#)va820.c 4.3 (Berkeley) %G%";
* Racal-Vadic 'RV820' with 831 adaptor.
* dialer baud rate is hardcoded
#define MAXDIG 30 /* set by switches inside adapter */
register int va
, i
, child
;
char c
, acu
[20], com
[20];
if (strlen(ph
) > MAXDIG
) {
DEBUG(4, "BAD PHONE NUMBER %s\n", ph
);
logent("rvadopn", "BAD PHONE NUMBER");
logent("rvadopn", "TIMEOUT");
DEBUG(4, "ACU %s\n", dev
->D_calldev
);
DEBUG(4, "LINE %s\n", dev
->D_line
);
sprintf(acu
, "/dev/%s", dev
->D_calldev
);
signal(SIGALRM
, alarmtr
);
DEBUG(4, "ACU OPEN FAIL %d\n", errno
);
logent(acu
, "CAN'T OPEN");
* Set speed and modes on dialer and clear any
DEBUG(4, "SETTING UP VA831 (%d)\n", va
);
ioctl(va
, TIOCGETP
, &sg
);
sg
.sg_ispeed
= sg
.sg_ospeed
= B1200
;
ioctl(va
, TIOCSETP
, &sg
);
DEBUG(4, "CLEARING VA831\n", 0);
if ( write(va
, &c_abort
, 1) != 1) {
DEBUG(4,"BAD VA831 WRITE %d\n", errno
);
logent(acu
, "CAN'T CLEAR");
DEBUG(4,"BAD VA831 RESPONSE %c\n", c
);
logent(acu
, "CAN'T CLEAR");
* Build the dialing sequence for the adapter
DEBUG(4, "DIALING %s\n", ph
);
sprintf(vadbuf
, "%c%s<%c%c", c_start
, ph
, c_empty
, c_end
);
timelim
= 5 * strlen(ph
);
alarm(timelim
< 30 ? 30 : timelim
);
nw
= write(va
, vadbuf
, strlen(vadbuf
)); /* Send Phone Number */
if (nw
!= strlen(vadbuf
)) {
DEBUG(4,"BAD VA831 WRITE %d\n", nw
);
logent(acu
, "BAD WRITE");
sprintf(com
, "/dev/%s", dev
->D_line
);
/* create child to open comm line */
if ((child
= fork()) == 0) {
DEBUG(4, "WAITING FOR ANSWER\n", 0);
if (read(va
, &c
, 1) != 1) {
logent("ACU READ", _FAILED
);
DEBUG(2, "Line Busy / No Answer\n", 0);
DEBUG(2, "Dialer format error\n", 0);
DEBUG(2, "Dialer parity error\n", 0);
DEBUG(2, "Phone number too long\n", 0);
DEBUG(2, "Modem Busy\n", 0);
DEBUG(2, "Unknown MACS return code '%c'\n", c
&0177);
* open line - will return on carrier
if ((i
= open(com
, 2)) < 0) {
logent("carrier", "LOST");
logent("dialup open", _FAILED
);
DEBUG(2, "RVADIC opened %d\n", i
);
fixline(i
, dev
->D_speed
);
while ((nw
= wait(<
)) != child
&& nw
!= -1)
DEBUG(2, "RVADIC close %d\n", fd
);