|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)nov.c 4.1 (Berkeley) 1/22/85"; ! 3: #endif ! 4: ! 5: #include "../condevs.h" ! 6: #ifdef NOVATION ! 7: ! 8: /*** ! 9: * novopn(telno, flds, dev) connect to novation Smart-Cat ! 10: * (similar to hayes smartmodem) ! 11: * char *flds[], *dev[]; ! 12: * ! 13: * return codes: ! 14: * >0 - file number - ok ! 15: * CF_DIAL,CF_DEVICE - failed ! 16: */ ! 17: ! 18: novopn(telno, flds, dev) ! 19: char *telno; ! 20: char *flds[]; ! 21: struct Devices *dev; ! 22: { ! 23: int dh = -1; ! 24: extern errno; ! 25: char dcname[20]; ! 26: int pulse = 0; ! 27: ! 28: sprintf(dcname, "/dev/%s", dev->D_line); ! 29: DEBUG(4, "dc - %s\n", dcname); ! 30: if (strcmp(dev->D_calldev, "pulse") == 0) ! 31: pulse = 1; ! 32: if (setjmp(Sjbuf)) { ! 33: DEBUG(1, "timeout novation open %s\n", dcname); ! 34: logent("novation open", "TIMEOUT"); ! 35: if (dh >= 0) ! 36: close(dh); ! 37: delock(dev->D_line); ! 38: return CF_DIAL; ! 39: } ! 40: signal(SIGALRM, alarmtr); ! 41: getnextfd(); ! 42: alarm(10); ! 43: dh = open(dcname, 2); /* read/write */ ! 44: alarm(0); ! 45: ! 46: /* modem is open */ ! 47: next_fd = -1; ! 48: if (dh >= 0) { ! 49: fixline(dh, dev->D_speed); ! 50: /* set guard time small so line is in transparant mode */ ! 51: slowrite(dh, "\rATS12=1\r"); ! 52: if (expect("OK", dh) != 0) { ! 53: logent("NOV no line", _FAILED); ! 54: strcpy(devSel, dev->D_line); ! 55: novcls(dh); ! 56: return CF_DIAL; ! 57: } ! 58: ! 59: if (pulse) ! 60: slowrite(dh, "ATDP"); ! 61: else ! 62: slowrite(dh, "ATDT"); ! 63: slowrite(dh, telno); ! 64: slowrite(dh, "\r"); ! 65: ! 66: if (expect("CONNECT", dh) != 0) { ! 67: logent("NOV no carrier", _FAILED); ! 68: strcpy(devSel, dev->D_line); ! 69: novcls(dh); ! 70: return CF_DIAL; ! 71: } ! 72: ! 73: } ! 74: if (dh < 0) { ! 75: DEBUG(4, "novation failed\n", CNULL); ! 76: delock(dev->D_line); ! 77: } ! 78: DEBUG(4, "novation ok\n", CNULL); ! 79: return dh; ! 80: } ! 81: ! 82: novcls(fd) ! 83: int fd; ! 84: { ! 85: char dcname[20]; ! 86: struct sgttyb hup, sav; ! 87: ! 88: if (fd > 0) { ! 89: sprintf(dcname, "/dev/%s", devSel); ! 90: DEBUG(4, "Hanging up fd = %d\n", fd); ! 91: /* ! 92: * code to drop DTR -- change to 0 baud then back to default. ! 93: */ ! 94: gtty(fd, &hup); ! 95: gtty(fd, &sav); ! 96: hup.sg_ispeed = B0; ! 97: hup.sg_ospeed = B0; ! 98: stty(fd, &hup); ! 99: sleep(2); ! 100: stty(fd, &sav); ! 101: /* ! 102: * now raise DTR -- close the device & open it again. ! 103: */ ! 104: sleep(2); ! 105: close(fd); ! 106: sleep(2); ! 107: fd = open(dcname, 2); ! 108: /* ! 109: * Since we have a getty sleeping on this line, when it wakes up it sends ! 110: * all kinds of garbage to the modem. Unfortunatly, the modem likes to ! 111: * execute the previous command when it sees the garbage. The previous ! 112: * command was to dial the phone, so let's make the last command reset ! 113: * the modem. ! 114: */ ! 115: sleep(2); ! 116: slowrite(fd, "\rATZ\r"); ! 117: close(fd); ! 118: delock(devSel); ! 119: } ! 120: } ! 121: ! 122: #endif NOVATION
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.