static char sccsid
[] = "@(#)sy.c 4.1 (Berkeley) %G%";
* sykopn: establish connection through a sytek port.
* Returns descriptor open to tty for reading and writing.
* Negative values (-1...-7) denote errors in connmsg.
* Will try to change baud rate of local port to match
* that of the remote side.
char sykspeed
[50]; /* speed to reset to on close */
char *rindex(), *fdig(), dcname
[20];
dfp
= fopen(DEVFILE
, "r");
ASSERT(dfp
!= NULL
, "Can't open", DEVFILE
, 0);
signal(SIGALRM
, alarmtr
);
while(rddev(dfp
, &dev
) != FAIL
) {
/* we'll set our own speed; F_CLASS is how cynthia configures it every night
if (strcmp(flds[F_CLASS], dev.D_class) != SAME)
if (snccmp(flds
[F_LINE
], dev
.D_type
) != SAME
)
if (mlock(dev
.D_line
) == FAIL
)
sprintf(dcname
, "/dev/%s", dev
.D_line
);
logent(dev
.D_line
,"sytek open TIMEOUT");
speed
= atoi(fdig(dev
.D_class
));
/* negotiate with sytek */
DEBUG(4, "wanted %s ", "#");
DEBUG(4, "got %s\n", ok
? "?" : "that");
if(atoi(fdig(dev
.D_class
)) == 9600){
DEBUG(4, "sytek BREAK failed\n", "");
DEBUG(4, "got %s\n", ok
? "?" : "that");
if(speed
!= atoi(fdig(flds
[F_CLASS
]))){
DEBUG(4, "changing speed\n", "");
sprintf(speedbuf
, "baud %s\r", fdig(flds
[F_CLASS
]));
write(dh
, speedbuf
, strlen(speedbuf
));
speed
= atoi(fdig(flds
[F_CLASS
]));
DEBUG(4, "speed set %s\n", ok
? "failed" : flds
[F_CLASS
]);
strcpy(sykspeed
, dev
.D_class
);
write(dh
, "command break\r", 14);
DEBUG(4, "got %s\n", ok
? "?" : "that");
write(dh
, flds
[F_PHONE
], strlen(flds
[F_PHONE
]));
DEBUG(4, "sytek dial %s\n", flds
[F_PHONE
]);
DEBUG(4, "wanted %s ", "COMPLETED TO ");
ok
= expect("COMPLETED TO ", dh
);
DEBUG(4, "got %s\n", ok
? "?" : "that");
DEBUG(4, "sytek failed\n", "");
DEBUG(4, "sytek ok\n", "");
strcpy(devSel
, dev
.D_line
); /* for later unlock */
DEBUG(4, "got %s\n", ok
? "?" : "that");
write(fd
, "done 1\r", 7);
DEBUG(4, "got %s\n", ok
? "?" : "that");
DEBUG(4, "reset baud to %s\n", sykspeed
);
write(fd
, sykspeed
, strlen(sykspeed
));