1*48651Sbostic /*- 2*48651Sbostic * Copyright (c) 1985 The Regents of the University of California. 3*48651Sbostic * All rights reserved. 4*48651Sbostic * 5*48651Sbostic * %sccs.include.proprietary.c% 6*48651Sbostic */ 7*48651Sbostic 817782Sralph #ifndef lint 9*48651Sbostic static char sccsid[] = "@(#)va212.c 4.5 (Berkeley) 04/24/91"; 10*48651Sbostic #endif /* not lint */ 1117782Sralph 1246875Sbostic #include "condevs.h" 1317782Sralph 1417782Sralph va212opn(telno, flds, dev) 1517782Sralph char *telno; 1617782Sralph char *flds[]; 1717782Sralph struct Devices *dev; 1817782Sralph { 1917782Sralph int dh = -1; 2017782Sralph int i, ok, er = 0, delay; 2117782Sralph extern errno; 2217782Sralph char dcname[20]; 2317782Sralph 2417782Sralph sprintf(dcname, "/dev/%s", dev->D_line); 2517782Sralph if (setjmp(Sjbuf)) { 2617782Sralph DEBUG(1, "timeout va212 open\n", 0); 2717782Sralph logent("va212 open", "TIMEOUT"); 2817782Sralph if (dh >= 0) 2917782Sralph close(dh); 3017782Sralph delock(dev->D_line); 3117782Sralph return CF_NODEV; 3217782Sralph } 3317782Sralph signal(SIGALRM, alarmtr); 3417782Sralph getnextfd(); 3517782Sralph alarm(10); 3617782Sralph dh = open(dcname, 2); 3717782Sralph alarm(0); 3817782Sralph 3917782Sralph /* modem is open */ 4017782Sralph next_fd = -1; 4117782Sralph if (dh < 0) { 4217782Sralph DEBUG (4, errno == 4 ? "%s: no carrier\n" : "%s: can't open\n", 4317782Sralph dcname); 4417782Sralph delock(dev->D_line); 4517782Sralph return errno == 4 ? CF_DIAL : CF_NODEV; 4617782Sralph } 4717782Sralph fixline(dh, dev->D_speed); 4817782Sralph 4917782Sralph /* translate - to K for Vadic */ 5017782Sralph DEBUG(4, "calling %s -> ", telno); 5117782Sralph delay = 0; 5217782Sralph for (i = 0; i < strlen(telno); ++i) { 5317782Sralph switch(telno[i]) { 5417782Sralph case '=': /* await dial tone */ 5517782Sralph case '-': /* delay */ 5617782Sralph case '<': 5717782Sralph telno[i] = 'K'; 5817782Sralph delay += 5; 5917782Sralph break; 6017782Sralph } 6117782Sralph } 6217782Sralph DEBUG(4, "%s\n", telno); 6317782Sralph for(i = 0; i < TRYCALLS; ++i) { /* make TRYCALLS tries */ 6417782Sralph /* wake up Vadic */ 6517782Sralph sendthem("\005\\d", dh); 6617782Sralph DEBUG(4, "wanted * ", CNULL); 6717782Sralph ok = expect("*", dh); 6817782Sralph DEBUG(4, "got %s\n", ok ? "?" : "that"); 6917782Sralph if (ok != 0) 7017782Sralph continue; 7117782Sralph 7217782Sralph sendthem("D\\d", dh); /* "D" (enter number) command */ 7317782Sralph DEBUG(4, "wanted NUMBER? ", CNULL); 7417782Sralph ok = expect("NUMBER?", dh); 7517782Sralph if (ok == 0) 7617782Sralph ok = expect("\n", dh); 7717782Sralph DEBUG(4, "got %s\n", ok ? "?" : "that"); 7817782Sralph if (ok != 0) 7917782Sralph continue; 8017782Sralph 8117782Sralph /* send telno, send \r */ 8217782Sralph sendthem(telno, dh); 8317782Sralph DEBUG(4, "wanted %s ", telno); 8417782Sralph ok = expect(telno, dh); 8517782Sralph if (ok == 0) 8617782Sralph ok = expect("\n", dh); 8717782Sralph DEBUG(4, "got %s\n", ok ? "?" : "that"); 8817782Sralph if (ok != 0) 8917782Sralph continue; 9017782Sralph 9117782Sralph sendthem("", dh); /* confirm number */ 9217782Sralph DEBUG(4, "wanted %s ", "DIALING..."); 9317782Sralph ok = expect("DIALING...", dh); 9417782Sralph if (ok == 0) { 9517782Sralph ok = expect("\n", dh); 9617782Sralph DEBUG(4, "wanted ANSWER TONE", CNULL); 9717782Sralph ok = expect("ANSWER TONE", dh); 9817782Sralph if (ok == 0) 9917782Sralph ok = expect("\n", dh); 10017782Sralph } 10117782Sralph DEBUG(4, "got %s\n", ok ? "?" : "that"); 10217782Sralph if (ok == 0) 10317782Sralph break; 10417782Sralph } 10517782Sralph 10617782Sralph if (ok == 0) { 10723703Sbloom DEBUG(4, "wanted ON LINE\\r\\n ", CNULL); 10823703Sbloom ok = expect("ON LINE\r\n", dh); 10917782Sralph DEBUG(4, "got %s\n", ok ? "?" : "that"); 11017782Sralph } 11117782Sralph 11217782Sralph if (ok != 0) { 11317782Sralph sendthem("I\\d", dh); /* back to idle */ 11417782Sralph if (dh > 2) 11517782Sralph close(dh); 11617782Sralph DEBUG(4, "vadDial failed\n", CNULL); 11717782Sralph delock(dev->D_line); 11817782Sralph return CF_DIAL; 11917782Sralph } 12017782Sralph DEBUG(4, "va212 ok\n", 0); 12117782Sralph return dh; 12217782Sralph } 12317782Sralph 12417782Sralph va212cls(fd) 12517782Sralph { 12617782Sralph if (fd > 0) { 12717782Sralph close(fd); 12817782Sralph sleep(5); 12917782Sralph delock(devSel); 13017782Sralph } 13117782Sralph } 132