|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)hys24.c 1.1 (Berkeley) 1/13/86";
3: #endif !lint
4:
5: #include "../condevs.h"
6:
7: #ifdef HAYES2400
8: /*
9: * hyspopn24(telno, flds, dev) connect to hayes smartmodem (pulse call)
10: * hystopn24(telno, flds, dev) connect to hayes smartmodem (tone call)
11: * char *flds[], *dev[];
12: *
13: * return codes:
14: * >0 - file number - ok
15: * CF_DIAL,CF_DEVICE - failed
16: */
17:
18: hyspopn24(telno, flds, dev)
19: char *telno, *flds[];
20: struct Devices *dev;
21: {
22: return hysopn24(telno, flds, dev, 0);
23: }
24:
25: hystopn24(telno, flds, dev)
26: char *telno, *flds[];
27: struct Devices *dev;
28: {
29: return hysopn24(telno, flds, dev, 1);
30: }
31:
32: /* ARGSUSED */
33: hysopn24(telno, flds, dev, toneflag)
34: char *telno;
35: char *flds[];
36: struct Devices *dev;
37: int toneflag;
38: {
39: int dh = -1;
40: char *ii;
41: extern errno;
42: char dcname[20];
43:
44: sprintf(dcname, "/dev/%s", dev->D_line);
45: DEBUG(4, "dc - %s\n", dcname);
46: if (setjmp(Sjbuf)) {
47: logent(dcname, "TIMEOUT");
48: if (dh >= 0)
49: hyscls24(dh);
50: return CF_DIAL;
51: }
52: signal(SIGALRM, alarmtr);
53: getnextfd();
54: alarm(10);
55: dh = open(dcname, 2); /* read/write */
56: alarm(0);
57:
58: for (ii = telno; *ii; ii++)
59: if (*ii == '=')
60: *ii = ',';
61:
62: /* modem is open */
63: next_fd = -1;
64: if (dh >= 0) {
65: fixline(dh, dev->D_speed);
66: write(dh, "\rATZH\r", 6);
67: sleep(2);
68: if (dochat(dev, flds, dh)) {
69: logent(dcname, "CHAT FAILED");
70: hyscls24(dh);
71: return CF_DIAL;
72: }
73: write(dh, "AT&F&D3&C1E0X1\r", 15);
74: if (expect("OK\r\n", dh) != 0) {
75: logent(dcname, "HSM not responding OK");
76: hyscls24(dh);
77: return CF_DIAL;
78: }
79: if (toneflag)
80: write(dh, "\rATDT", 5);
81: else
82: write(dh, "\rATDP", 5);
83: write(dh, telno, strlen(telno));
84: write(dh, "\r", 1);
85:
86: if (expect("CONNECT", dh) != 0) {
87: logent("HSM no carrier", _FAILED);
88: strcpy(devSel, dev->D_line);
89: hyscls24(dh);
90: return CF_DIAL;
91: }
92:
93: }
94: if (dh < 0) {
95: logent(dcname, "CAN'T OPEN");
96: return dh;
97: }
98: DEBUG(4, "hayes ok\n", CNULL);
99: return dh;
100: }
101:
102: hyscls24(fd)
103: int fd;
104: {
105: char dcname[20];
106:
107: if (fd > 0) {
108: sprintf(dcname, "/dev/%s", devSel);
109: DEBUG(4, "Hanging up fd = %d\n", fd);
110: sleep(1);
111: /*
112: * Since we have a getty sleeping on this line, when it wakes up it sends
113: * all kinds of garbage to the modem. Unfortunatly, the modem likes to
114: * execute the previous command when it sees the garbage. The previous
115: * command was to dial the phone, so let's make the last command reset
116: * the modem.
117: */
118: write(fd, "\r+++", 4);
119: sleep(2);
120: write(fd, "\rATH\rATZ\r", 9);
121: sleep(2);
122: close(fd);
123: delock(devSel);
124: }
125: }
126: #endif HAYES2400
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.