|
|
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.