date and time created 85/03/22 09:03:14 by ralph
[unix-history] / usr / src / usr.bin / uucp / libacu / va811.c
CommitLineData
b4d75520
RC
1#ifndef lint
2static char sccsid[] = "@(#)va811.c 4.1 (Berkeley) %G%";
3#endif
4
5#include "../condevs.h"
6
7#ifdef VA811S
8/*
9 * Racal-Vadic VA811 dialer with 831 adaptor.
10 * A typical 300 baud L-devices entry is
11 * ACU /dev/tty10 unused 300 va811s
12 * where tty10 is the communication line (D_Line),
13 * and 300 is the line speed.
14 * This is almost identical to RVMACS except that we don't need to
15 * send addresses and modem types, and don't need the fork.
16 * Joe Kelsey, fluke!joe, vax4.1526, Apr 11 1984.
17 */
18
19#define STX 02 /* Access Adaptor */
20#define ETX 03 /* Transfer to Dialer */
21#define SI 017 /* Buffer Empty (end of phone number) */
22#define SOH 01 /* Abort */
23
24va811opn(ph, flds, dev)
25char *ph, *flds[];
26struct Devices *dev;
27{
28 int va;
29 register int i, tries;
30 char c, dcname[20];
31 char vabuf[35]; /* STX, 31 phone digits, SI, ETX, NUL */
32
33 va = 0;
34 sprintf(dcname, "/dev/%s", dev->D_line);
35 if (setjmp(Sjbuf)) {
36 DEBUG(1, "timeout va811 open\n", 0);
37 logent("va811opn", "TIMEOUT");
38 if (va >= 0)
39 close(va);
40 delock(dev->D_line);
41 return CF_NODEV;
42 }
43 DEBUG(4, "va811: STARTING CALL\n", 0);
44 getnextfd();
45 signal(SIGALRM, alarmtr);
46 alarm(10);
47 va = open(dcname, 2);
48 alarm(0);
49
50 /* line is open */
51 next_fd = -1;
52 if (va < 0) {
53 DEBUG(4, errno == 4 ? "%s: no carrier\n" : "%s: can't open\n",
54 dcname);
55 delock(dev->D_line);
56 logent(dcname, "CAN'T OPEN");
57 return(errno == 4 ? CF_DIAL : CF_NODEV);
58 }
59 fixline(va, dev->D_speed);
60
61 /* first, reset everything */
62 sendthem("\\01\\c", va);
63 DEBUG(4, "wanted %c ", 'B');
64 i = expect("B", va);
65 DEBUG(4, "got %s\n", i ? "?" : "that");
66 if (i != 0) {
67 DEBUG(4, "va811: NO RESPONSE\n", 0);
68 logent("va811 reset", "TIMEOUT");
69 close(va);
70 delock(dev->D_line);
71 return CF_DIAL;
72 }
73
74 sprintf(vabuf, "%c%.31s%c%c\\c", STX, ph, SI, SOH);
75 sendthem(vabuf, va);
76 DEBUG(4, "wanted %c ", 'B');
77 i = expect("B", va);
78 DEBUG(4, "got %s\n", i ? "?" : "that");
79
80 if (i != 0) {
81 DEBUG(4, "va811: STORE NUMBER\n", 0);
82 logent("va811 STORE", _FAILED);
83 close(va);
84 delock(dev->D_line);
85 return CF_DIAL;
86 }
87
88 for (tries = 0; tries < TRYCALLS; tries++) {
89 sprintf(vabuf, "%c%c\\c", STX, ETX);
90 sendthem(vabuf, va);
91 DEBUG(4, "DIALING...", CNULL);
92 i = expect("A", va);
93 DEBUG(4, " %s\n", i ? _FAILED : "SUCCEEDED");
94 if (i != 0) {
95 DEBUG(4, "va811: RESETTING\n", CNULL);
96 logent("va811 DIAL", _FAILED);
97 sendthem("\\01\\c", va);
98 expect("B", va);
99 }
100 else
101 break;
102 }
103
104 if (tries >= TRYCALLS) {
105 close(va);
106 delock(dev->D_line);
107 return CF_DIAL;
108 }
109
110 DEBUG(4, "va811 ok\n", CNULL);
111 return va;
112}
113
114va811cls(fd)
115register int fd;
116{
117 DEBUG(2, "va811 close %d\n", fd);
118 p_chwrite(fd, SOH);
119/* ioctl(fd, TIOCCDTR, NULL);*/
120 close(fd);
121 delock(devSel);
122}
123#endif VA811S