joe@fluke.UUCP (Joe Kelsey) (11/06/84)
state: Exp; lines added/del: 2/2 modified VADIC and VA212 to attempt the call TRYCALLS times, instead of the previous 5 times. ---------------------------- version 1.5 date: 84/04/10 15:25:11; author: joe; state: Exp; lines added/del: 30/7 Modified va811 code to retry call up to TRYCALLS times. ---------------------------- version 1.4 date: 84/04/10 14:56:50; author: joe; state: Exp; lines added/del: 104/1 added code for VA811S. Copied most of VADIC code, but this is a single line dialer, so no MACS support. Also modified the micom stuff to match FLUKE's Micom prompts. va811 tested, micom not tested. ---------------------------- version 1.3 date: 84/02/20 09:20:52; author: joe; state: Exp; lines added/del: 141/0 Added code for VA212. Similar to VADIC 3451, but differs in modem responses. Tested and verified. ---------------------------- version 1.2 date: 84/02/20 08:03:55; author: joe; state: Exp; lines added/del: 3/1 Added more info on error returns from vaopen(). ---------------------------- version 1.1 date: 84/01/24 11:19:57; author: lcp; state: Exp; Initial version ============================================================================= < condevs.c.r1.1 > condevs.c.r1.6 74a75,77 > #ifdef VA212 > int va212opn(), va212cls(); > #endif VA212 76a80,82 > #endif VA212 > #ifdef VA811S > int va811opn(), va811cls(); 113a120,122 > #ifdef VA212 > { "ACU", "va212", Acuopn, va212opn, va212cls }, > #endif VA212 116a126,128 > #ifdef VA811S > { "ACU", "va811s", Acuopn, va811opn, va811cls }, > #endif VA811S 422a435 > #ifndef FLUKE 424a438,441 > #else > DEBUG(4, "wanted %s ", "#"); > ok = expect("#", dh); > #endif FLUKE 429a447 > #ifndef FLUKE 431a450,453 > #else > DEBUG(4, "wanted %s ", "CONNECTING"); > ok = expect("CONNECTING", dh); > #endif FLUKE 1265a1288,1289 > DEBUG (4, errno == 4 ? "%s: no carrier\n" : "%s: can't open\n", > dcname); 1267c1291 < return(CF_NODEV); --- > return(errno == 4 ? CF_DIAL : CF_NODEV); 1285c1309 < for(i = 0; i < 5; ++i) { /* make 5 tries */ --- > for(i = 0; i < TRYCALLS; ++i) { /* make TRYCALLS tries */ 1347a1372,1500 > #ifdef VA212 > > /* > * va212opn: establish dial-out connection through a Racal-Vadic 212. > * Returns descriptor open to tty for reading and writing. > * Negative values (-1...-7) denote errors in connmsg. > * Be sure to disconnect tty when done, via HUPCL or stty 0. > */ > > va212opn(telno, flds, dev) > char *telno; > char *flds[]; > struct Devices *dev; > { > int dh = -1; > int i, ok, er = 0, delay; > extern errno; > char dcname[20]; > > sprintf(dcname, "/dev/%s", dev->D_line); > if (setjmp(Sjbuf)) { > DEBUG(1, "timeout va212 open\n", ""); > logent("va212 open", "TIMEOUT"); > if (dh >= 0) > close(dh); > delock(dev->D_line); > return(CF_NODEV); > } > signal(SIGALRM, alarmtr); > getnextfd(); > alarm(10); > dh = open(dcname, 2); > alarm(0); > > /* modem is open */ > next_fd = -1; > if (dh < 0) { > DEBUG (4, errno == 4 ? "%s: no carrier\n" : "%s: can't open\n", > dcname); > delock(dev->D_line); > return(errno == 4 ? CF_DIAL : CF_NODEV); > } > fixline(dh, dev->D_speed); > > /* translate - to K for Vadic */ > DEBUG(4, "calling %s -> ", telno); > delay = 0; > for (i = 0; i < strlen(telno); ++i) { > switch(telno[i]) { > case '=': /* await dial tone */ > case '-': /* delay */ > case '<': > telno[i] = 'K'; > delay += 5; > break; > } > } > DEBUG(4, "%s\n", telno); > for(i = 0; i < TRYCALLS; ++i) { /* make TRYCALLS tries */ > /* wake up Vadic */ > sendthem("\005\\d", dh); > DEBUG(4, "wanted %s ", "*"); > ok = expect("*", dh); > DEBUG(4, "got %s\n", ok ? "?" : "that"); > if (ok != 0) > continue; > > sendthem("D\\d", dh); /* "D" (enter number) command */ > DEBUG(4, "wanted %s ", "NUMBER?"); > ok = expect("NUMBER?", dh); > if (ok == 0) > ok = expect("\n", dh); > DEBUG(4, "got %s\n", ok ? "?" : "that"); > if (ok != 0) > continue; > > /* send telno, send \r */ > sendthem(telno, dh); > ok = expect(telno, dh); > if (ok == 0) > ok = expect("\n", dh); > DEBUG(4, "got %s\n", ok ? "?" : "that"); > if (ok != 0) > continue; > > sendthem("", dh); /* confirm number */ > DEBUG(4, "wanted %s ", "DIALING..."); > ok = expect("DIALING...", dh); > if (ok == 0) { > ok = expect("\n", dh); > DEBUG(4, "wanted %s ", "ANSWER TONE"); > ok = expect("ANSWER TONE", dh); > if (ok == 0) > ok = expect("\n", dh); > } > DEBUG(4, "got %s\n", ok ? "?" : "that"); > if (ok == 0) > break; > } > > if (ok == 0) { > DEBUG(4, "wanted ON LINE \\r\\n ", 0); > ok = expect("ON LINE \r\n", dh); > DEBUG(4, "got %s\n", ok ? "?" : "that"); > } > > if (ok != 0) { > sendthem("I\\d", dh); /* back to idle */ > if (dh > 2) > close(dh); > DEBUG(4, "vadDial failed\n", ""); > delock(dev->D_line); > return(CF_DIAL); > } > DEBUG(4, "va212 ok\n", ""); > return(dh); > } > > va212cls(fd) { > > if (fd > 0) { > close(fd); > sleep(5); > delock(devSel); > } > } > > #endif VA212 > 1482c1635,1751 < #endif --- > #endif RVMACS > > #ifdef VA811S > /* > * Racal-Vadic VA811 dialer with 831 adaptor. > * A typical 300 baud L-devices entry is > * ACU /dev/tty10 unused 300 va811s > * where tty10 is the communication line (D_Line), > * and 300 is the line speed. > * This is almost identical to RVMACS except that we don't need to > * send addresses and modem types, and don't need the fork. > */ > > #define STX 02 /* Access Adaptor */ > #define ETX 03 /* Transfer to Dialer */ > #define SI 017 /* Buffer Empty (end of phone number) */ > #define SOH 01 /* Abort */ > > va811opn(ph, flds, dev) > char *ph, *flds[]; > struct Devices *dev; > { > int va; > register int i, tries; > char c, dcname[20]; > char vabuf[35]; /* STX, 31 phone digits, SI, ETX, NUL */ > > va = 0; > sprintf(dcname, "/dev/%s", dev->D_line); > if (setjmp(Sjbuf)) { > DEBUG(1, "timeout va811 open\n", ""); > logent("va811opn", "TIMEOUT"); > if (va >= 0) > close(va); > delock(dev->D_line); > return CF_NODEV; > } > DEBUG(4, "va811: STARTING CALL\n", 0); > getnextfd(); > signal(SIGALRM, alarmtr); > alarm(10); > va = open(dcname, 2); > alarm(0); > > /* line is open */ > next_fd = -1; > if (va < 0) { > DEBUG(4, errno == 4 ? "%s: no carrier\n" : "%s: can't open\n", > dcname); > delock(dev->D_line); > logent(dcname, "CAN'T OPEN"); > return(errno == 4 ? CF_DIAL : CF_NODEV); > } > fixline(va, dev->D_speed); > > /* first, reset everything */ > sendthem("\\01\\c", va); > DEBUG(4, "wanted %c ", 'B'); > i = expect("B", va); > DEBUG(4, "got %s\n", i ? "?" : "that"); > if (i != 0) { > DEBUG(4, "va811: NO RESPONSE\n", ""); > logent("va811 reset", "TIMEOUT"); > close(va); > delock(dev->D_line); > return(CF_DIAL); > } > > sprintf(vabuf, "%c%.31s%c%c\\c", STX, ph, SI, SOH); > sendthem(vabuf, va); > DEBUG(4, "wanted %c ", 'B'); > i = expect("B", va); > DEBUG(4, "got %s\n", i ? "?" : "that"); > > if (i != 0) { > DEBUG(4, "va811: STORE NUMBER\n", ""); > logent("va811 STORE", "FAILED"); > close(va); > delock(dev->D_line); > return(CF_DIAL); > } > > for (tries = 0; tries < TRYCALLS; tries++) { > sprintf(vabuf, "%c%c\\c", STX, ETX); > sendthem(vabuf, va); > DEBUG(4, "DIALING...", ""); > i = expect("A", va); > DEBUG(4, " %s\n", i ? "FAILED" : "SUCCEEDED"); > if (i != 0) { > DEBUG(4, "va811: RESETTING\n", ""); > logent("va811 DIAL", "FAILED"); > sendthem("\\01\\c", va); > expect("B", va); > } > else > break; > } > > if (tries >= TRYCALLS) { > close(va); > delock(dev->D_line); > return(CF_DIAL); > } > > DEBUG(4, "va811 ok\n", ""); > return(va); > } > > va811cls(fd) > register int fd; > { > DEBUG(2, "va811 close %d\n", fd); > p_chwrite(fd, SOH); > /* ioctl(fd, TIOCCDTR, NULL);*/ > close(fd); > } > #endif VA811S /Joe Kelsey John Fluke Mfg. Co., Inc. PO Box C9090 (206)356 5933 Everett, WA 98206