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

##### Functions

    va820cls          X
    va820opn          X

##### Variables

    c_abort           X
    c_empty           X
    c_end             X
    c_start           X

##### Macros

    MAXDIG            X

       1: #ifndef lint
       2: static char sccsid[] = "@(#)va820.c	4.3 (Berkeley) 10/10/85";
       3: #endif
       4:
       5: #include "../condevs.h"
       6: #ifdef  VA820
       7:
       8: /*
       9:  * Racal-Vadic 'RV820' with 831 adaptor.
      10:  * BUGS:
      11:  * dialer baud rate is hardcoded
      12:  */
      13: #define MAXDIG 30   /* set by switches inside adapter */
      14: char    c_abort = '\001';
      15: char    c_start = '\002';
      16: char    c_empty = '\017';
      17: char    c_end   = '\003';
      18:
      19: va820opn(ph, flds, dev)
      20: char *ph, *flds[];
      21: struct Devices *dev;
      22: {
      23:     register int va, i, child;
      24:     char c, acu[20], com[20];
      25:     char vadbuf[MAXDIG+2];
      26:     int nw, lt;
      27:     unsigned timelim;
      28:     struct sgttyb sg;
      29:
      30:     child = -1;
      31:     if (strlen(ph) > MAXDIG) {
      32:         DEBUG(4, "BAD PHONE NUMBER %s\n", ph);
      33:         logent("rvadopn", "BAD PHONE NUMBER");
      34:         i = CF_DIAL;
      35:         goto ret;
      36:     }
      37:
      38:     if (setjmp(Sjbuf)) {
      39:         logent("rvadopn", "TIMEOUT");
      40:         i = CF_DIAL;
      41:         goto ret;
      42:     }
      43:     DEBUG(4, "ACU %s\n", dev->D_calldev);
      44:     DEBUG(4, "LINE %s\n", dev->D_line);
      45:     sprintf(acu, "/dev/%s", dev->D_calldev);
      46:     getnextfd();
      47:     signal(SIGALRM, alarmtr);
      48:     alarm(10);
      49:     va = open(acu, 2);
      50:     alarm(0);
      51:     next_fd = -1;
      52:     if (va < 0) {
      53:         DEBUG(4, "ACU OPEN FAIL %d\n", errno);
      54:         logent(acu, "CAN'T OPEN");
      55:         i = CF_NODEV;
      56:         goto ret;
      57:     }
      58:     /*
      59: 	 * Set speed and modes on dialer and clear any
      60: 	 * previous requests
      61: 	 */
      62:     DEBUG(4, "SETTING UP VA831 (%d)\n", va);
      63:     ioctl(va, TIOCGETP, &sg);
      64:     sg.sg_ispeed = sg.sg_ospeed = B1200;
      65:     sg.sg_flags |= RAW;
      66:     sg.sg_flags &= ~ECHO;
      67:     ioctl(va, TIOCSETP, &sg);
      68:     DEBUG(4, "CLEARING VA831\n", 0);
      69:     if ( write(va, &c_abort, 1) != 1) {
      70:         DEBUG(4,"BAD VA831 WRITE %d\n", errno);
      71:         logent(acu, "CAN'T CLEAR");
      72:         i = CF_DIAL;
      73:         goto ret;
      74:     }
      75:     sleep(1);           /* XXX */
      76:     read(va, &c, 1);
      77:     if (c != 'B') {
      78:         DEBUG(4,"BAD VA831 RESPONSE %c\n", c);
      79:         logent(acu, "CAN'T CLEAR");
      80:         i = CF_DIAL;
      81:         goto ret;
      82:     }
      83:     /*
      84: 	 * Build the dialing sequence for the adapter
      85: 	 */
      86:     DEBUG(4, "DIALING %s\n", ph);
      87:     sprintf(vadbuf, "%c%s<%c%c", c_start, ph, c_empty, c_end);
      88:     timelim = 5 * strlen(ph);
      89:     alarm(timelim < 30 ? 30 : timelim);
      90:     nw = write(va, vadbuf, strlen(vadbuf)); /* Send Phone Number */
      91:     if (nw != strlen(vadbuf)) {
      92:         DEBUG(4,"BAD VA831 WRITE %d\n", nw);
      93:         logent(acu, "BAD WRITE");
      94:         goto failret;
      95:     }
      96:
      97:     sprintf(com, "/dev/%s", dev->D_line);
      98:
      99:     /* create child to open comm line */
     100:     if ((child = fork()) == 0) {
     101:         signal(SIGINT, SIG_DFL);
     102:         open(com, 0);
     103:         sleep(5);
     104:         _exit(1);
     105:     }
     106:
     107:     DEBUG(4, "WAITING FOR ANSWER\n", 0);
     108:     if (read(va, &c, 1) != 1) {
     109:         logent("ACU READ", _FAILED);
     110:         goto failret;
     111:     }
     112:     switch(c) {
     113:     case 'A':
     114:         /* Fine! */
     115:         break;
     116:     case 'B':
     117:         DEBUG(2, "Line Busy / No Answer\n", 0);
     118:         goto failret;
     119:     case 'D':
     120:         DEBUG(2, "Dialer format error\n", 0);
     121:         goto failret;
     122:     case 'E':
     123:         DEBUG(2, "Dialer parity error\n", 0);
     124:         goto failret;
     125:     case 'F':
     126:         DEBUG(2, "Phone number too long\n", 0);
     127:         goto failret;
     128:     case 'G':
     129:         DEBUG(2, "Modem Busy\n", 0);
     130:         goto failret;
     131:     default:
     132:         DEBUG(2, "Unknown MACS return code '%c'\n", c&0177);
     133:         goto failret;
     134:     }
     135:     /*
     136: 	 * open line - will return on carrier
     137: 	 */
     138:     if ((i = open(com, 2)) < 0) {
     139:         if (errno == EIO)
     140:             logent("carrier", "LOST");
     141:         else
     142:             logent("dialup open", _FAILED);
     143:         goto failret;
     144:     }
     145:     DEBUG(2, "RVADIC opened %d\n", i);
     146:     fixline(i, dev->D_speed);
     147:     goto ret;
     148: failret:
     149:     i = CF_DIAL;
     150: ret:
     151:     alarm(0);
     152:     if (child != -1)
     153:         kill(child, SIGKILL);
     154:     close(va);
     155:     while ((nw = wait(&lt)) != child && nw != -1)
     156:         ;
     157:     return i;
     158: }
     159:
     160: va820cls(fd)
     161: register int fd;
     162: {
     163:
     164:     DEBUG(2, "RVADIC close %d\n", fd);
     165:     close(fd);
     166: }
     167: #endif VA820

#### Defined functions

va820cls defined in line 160; never used
va820opn defined in line 19; never used

#### Defined variables

c_abort defined in line 14; used 1 times

- in line 69

c_empty defined in line 16; used 1 times

- in line 87

c_end defined in line 17; used 1 times

- in line 87

c_start defined in line 15; used 1 times

- in line 87

sccsid defined in line 2; never used

#### Defined macros

MAXDIG defined in line 13; used 2 times

- in line 25, 31

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