|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)att2224.c 1.1 (Berkeley) 2/12/86";
3: #endif
4:
5: #include "../condevs.h"
6:
7: #ifdef ATT2224
8: attopn(telno, flds, dev)
9: char *telno, *flds[];
10: struct Devices *dev;
11: {
12: char dcname[20], phone[MAXPH+10], c = 0;
13: int dnf, failret = 0, timelim;
14:
15: sprintf(dcname, "/dev/%s", dev->D_line);
16:
17: if (setjmp(Sjbuf)) {
18: delock(dev->D_line);
19: logent("DEVICE", "NO");
20: DEBUG(4, "Open timed out %s", dcname);
21: alarm (0);
22: return CF_NODEV;
23: }
24:
25: signal(SIGALRM, alarmtr);
26: getnextfd();
27: alarm(10);
28:
29: if ((dnf = open(dcname, 2)) <= 0) {
30: delock(dev->D_line);
31: logent("DEVICE", "NO");
32: DEBUG(4, "Can't open %s", dcname);
33: alarm (0);
34: return CF_NODEV;
35: }
36:
37: alarm(0);
38: next_fd = -1;
39: fixline(dnf, dev->D_speed);
40: DEBUG(4, "modem port - %s\n", dcname);
41:
42: if (setjmp(Sjbuf)) {
43: delock(dev->D_line);
44: logent("ACU WRITE", "FAILED");
45: return CF_DIAL;
46: }
47: signal(SIGALRM, alarmtr);
48: alarm(10);
49: do {
50: slowrite(dnf, "\r"); /* wake up modem */
51: } while (expect(":~3", dnf));
52: alarm(0);
53:
54: sprintf (phone, "atzt%s\r", telno);
55: slowrite (dnf, phone); /* type telno string to modem */
56:
57: if ((expect(phone, dnf)) != SUCCESS) {
58: delock(dev->D_line);
59: logent("ACU READ", "FAILED");
60: return CF_DIAL;
61: }
62:
63: if (setjmp(Sjbuf)) {
64: delock(dev->D_line);
65: logent("NO ANSWER", "FAILED");
66: alarm (0);
67: return CF_DIAL;
68: }
69: timelim = strlen(telno) * 4;
70: signal(SIGALRM, alarmtr);
71: alarm(timelim > 30 ? timelim : 30);
72:
73: readchar:
74: if ((read(dnf, &c, 1)) != 1) {
75: delock(dev->D_line);
76: logent("ACU READ", "FAILED");
77: return CF_DIAL;
78: }
79:
80: switch (c) {
81: case 'D': /* no dial tone */
82: logent("NO DIAL TONE", "FAILED");
83: failret++;
84: break;
85: case 'B': /* line busy */
86: logent("LINE BUSY", "FAILED");
87: failret++;
88: break;
89: case 'N': /* no answer */
90: logent("NO ANSWER", "FAILED");
91: failret++;
92: break;
93: case 'H': /* handshake failed */
94: logent("MODEM HANDSHAKE", "FAILED");
95: failret++;
96: break;
97: case '3': /* 2400 baud */
98: DEBUG(4, "Baudrate set to 2400 baud", CNULL);
99: fixline(dnf, 2400);
100: break;
101: case '2': /* 1200 baud */
102: DEBUG(4, "Baudrate set to 1200 baud", CNULL);
103: fixline(dnf, 1200);
104: break;
105: case '1': /* 300 baud */
106: DEBUG(4, "Baudrate set to 300 baud", CNULL);
107: fixline(dnf, 300);
108: break;
109: default: /* Not one of the above, so must be garbage */
110: goto readchar;
111: }
112: if (failret) {
113: alarm (0);
114: delock(dev->D_line);
115: return CF_DIAL;
116: }
117: alarm (0);
118: return dnf;
119: }
120:
121: attcls(fd)
122: int fd;
123: {
124: char dcname[20];
125: #ifdef USG
126: struct termio hup, sav;
127: #else !USG
128: struct sgttyb hup, sav;
129: #endif !USG
130:
131: if (fd > 0) {
132: sprintf(dcname, "/dev/%s", devSel);
133: DEBUG(4, "Hanging up fd = %d\n", fd);
134: /*
135: * code to drop DTR -- change to 0 baud then back to default.
136: */
137: gtty(fd, &hup);
138: gtty(fd, &sav);
139: #ifdef USG
140: hup.c_cflag = B0;
141: #else !USG
142: hup.sg_ispeed = B0;
143: hup.sg_ospeed = B0;
144: #endif !USG
145: stty(fd, &hup);
146: sleep(2);
147: stty(fd, &sav);
148: /*
149: * now raise DTR -- close the device
150: */
151: sleep(2);
152: close(fd);
153: delock(devSel);
154: }
155: }
156: #endif ATT2224
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.