# 2.11BSD#431 - /usr/src/usr.bin/uucp/aculib/hys.c

##### Functions

    hyscls            X
    hysopn            X
    hyspopn           X
    hystopn           X

##### Macros

    DROPDTR           X

       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

- in line 61, 76, 82, 89, 107, 129

hysopn defined in line 43; used 2 times

- in line 32, 39

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

- in line 151, 158

Last modified: 1987-02-17 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1542 |