1: #ifndef lint
   2: static char sccsid[] = "@(#)hys.c	4.6 (Berkeley) 2/12/86";
   3: #endif
   4: 
   5: #include "../condevs.h"
   6: 
   7: #ifdef HAYES
   8: #ifdef USR2400
   9: #define DROPDTR
  10: /*
  11:  * The "correct" switch settings for a USR Courier 2400 are
  12:  * 	Dialin/out:	0 0 1 1 0 0 0 1 0 0
  13:  *	Dialout only:	0 0 1 1 1 1 0 1 0 0
  14:  * where 0 = off and 1 = on
  15:  */
  16: #endif USR2400
  17: 
  18: /*
  19:  *	hyspopn(telno, flds, dev) connect to hayes smartmodem (pulse call)
  20:  *	hystopn(telno, flds, dev) connect to hayes smartmodem (tone call)
  21:  *	char *flds[], *dev[];
  22:  *
  23:  *	return codes:
  24:  *		>0  -  file number  -  ok
  25:  *		CF_DIAL,CF_DEVICE  -  failed
  26:  */
  27: 
  28: hyspopn(telno, flds, dev)
  29: char *telno, *flds[];
  30: struct Devices *dev;
  31: {
  32:     return hysopn(telno, flds, dev, 0);
  33: }
  34: 
  35: hystopn(telno, flds, dev)
  36: char *telno, *flds[];
  37: struct Devices *dev;
  38: {
  39:     return hysopn(telno, flds, dev, 1);
  40: }
  41: 
  42: /* ARGSUSED */
  43: hysopn(telno, flds, dev, toneflag)
  44: char *telno;
  45: char *flds[];
  46: struct Devices *dev;
  47: int toneflag;
  48: {
  49:     extern errno;
  50:     char dcname[20];
  51:     char cbuf[MAXPH];
  52:     register char *cp;
  53:     register int i;
  54:     int dh = -1, nrings = 0;
  55: 
  56:     sprintf(dcname, "/dev/%s", dev->D_line);
  57:     DEBUG(4, "dc - %s\n", dcname);
  58:     if (setjmp(Sjbuf)) {
  59:         logent(dcname, "TIMEOUT");
  60:         if (dh >= 0)
  61:             hyscls(dh);
  62:         return CF_DIAL;
  63:     }
  64:     signal(SIGALRM, alarmtr);
  65:     getnextfd();
  66:     alarm(10);
  67:     dh = open(dcname, 2); /* read/write */
  68:     alarm(0);
  69: 
  70:     /* modem is open */
  71:     next_fd = -1;
  72:     if (dh >= 0) {
  73:         fixline(dh, dev->D_speed);
  74:         if (dochat(dev, flds, dh)) {
  75:             logent(dcname, "CHAT FAILED");
  76:             hyscls(dh);
  77:             return CF_DIAL;
  78:         }
  79:         write(dh, "ATV1E0H\r", 8);
  80:         if (expect("OK\r\n", dh) != 0) {
  81:             logent(dcname, "HSM seems dead");
  82:             hyscls(dh);
  83:             return CF_DIAL;
  84:         }
  85: #ifdef USR2400
  86:         write(dh, "ATX6S7=44\r", 10);
  87:         if (expect("OK\r\n", dh) != 0) {
  88:             logent(dcname, "HSM seems dead");
  89:             hyscls(dh);
  90:             return CF_DIAL;
  91:         }
  92: #endif USR2400
  93:         if (toneflag)
  94:             write(dh, "\rATDT", 5);
  95:         else
  96: #ifdef USR2400
  97:             write(dh, "\rATD", 4);
  98: #else HAYES
  99:             write(dh, "\rATDP", 5);
 100: #endif HAYES
 101:         write(dh, telno, strlen(telno));
 102:         write(dh, "\r", 1);
 103: 
 104:         if (setjmp(Sjbuf)) {
 105:             logent(dcname, "TIMEOUT");
 106:             strcpy(devSel, dev->D_line);
 107:             hyscls(dh);
 108:             return CF_DIAL;
 109:         }
 110:         signal(SIGALRM, alarmtr);
 111:         alarm(2*MAXMSGTIME);
 112:         do {
 113:             cp = cbuf;
 114:             while (read(dh, cp ,1) == 1)
 115:                 if (*cp >= ' ')
 116:                     break;
 117:             while (++cp < &cbuf[MAXPH] && read(dh, cp, 1) == 1 && *cp != '\n')
 118:                 ;
 119:             alarm(0);
 120:             *cp-- = '\0';
 121:             if (*cp == '\r')
 122:                 *cp = '\0';
 123:             DEBUG(4,"\nGOT: %s", cbuf);
 124:             alarm(MAXMSGTIME);
 125:         } while (strncmp(cbuf, "RING", 4) == 0 && nrings++ < 5);
 126:         if (strncmp(cbuf, "CONNECT", 7) != 0) {
 127:             logent(cbuf, _FAILED);
 128:             strcpy(devSel, dev->D_line);
 129:             hyscls(dh);
 130:             return CF_DIAL;
 131:         }
 132:         i = atoi(&cbuf[8]);
 133:         if (i > 0 && i != dev->D_speed) {
 134:             DEBUG(4,"Baudrate reset to %d\n", i);
 135:             fixline(dh, i);
 136:         }
 137: 
 138:     }
 139:     if (dh < 0) {
 140:         logent(dcname, "CAN'T OPEN");
 141:         return dh;
 142:     }
 143:     DEBUG(4, "hayes ok\n", CNULL);
 144:     return dh;
 145: }
 146: 
 147: hyscls(fd)
 148: int fd;
 149: {
 150:     char dcname[20];
 151: #ifdef DROPDTR
 152:     struct sgttyb hup, sav;
 153: #endif
 154: 
 155:     if (fd > 0) {
 156:         sprintf(dcname, "/dev/%s", devSel);
 157:         DEBUG(4, "Hanging up fd = %d\n", fd);
 158: #ifdef DROPDTR
 159:         /*
 160: 		 * code to drop DTR -- change to 0 baud then back to default.
 161: 		 */
 162:         gtty(fd, &hup);
 163:         gtty(fd, &sav);
 164:         hup.sg_ispeed = B0;
 165:         hup.sg_ospeed = B0;
 166:         stty(fd, &hup);
 167:         sleep(2);
 168:         stty(fd, &sav);
 169:         /*
 170: 		 * now raise DTR -- close the device & open it again.
 171: 		 */
 172:         sleep(2);
 173:         close(fd);
 174:         sleep(2);
 175:         fd = open(dcname, 2);
 176:         stty(fd, &sav);
 177: #else
 178:         sleep(3);
 179:         write(fd, "+++", 3);
 180: #endif
 181:         sleep(3);
 182:         write(fd, "ATZ\r", 4);
 183:         if (expect("OK",fd) != 0)
 184:             logent(devSel, "HSM did not respond to ATZ");
 185:         write(fd, "ATH\r", 4);
 186:         sleep(1);
 187:         close(fd);
 188:         delock(devSel);
 189:     }
 190: }
 191: #endif HAYES

Defined functions

hyscls defined in line 147; used 6 times
hysopn defined in line 43; used 2 times
hyspopn defined in line 28; never used
hystopn defined in line 35; never used

Defined variables

sccsid defined in line 2; never used

Defined macros

DROPDTR defined in line 9; used 2 times
Last modified: 1987-02-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 897
Valid CSS Valid XHTML 1.0 Strict