|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)va811.c 4.1 (Berkeley) 1/22/85"; ! 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: ! 24: va811opn(ph, flds, dev) ! 25: char *ph, *flds[]; ! 26: struct 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: ! 114: va811cls(fd) ! 115: register 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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.