Pavol Kycina
03/08/2010 4:49 AM
post48981
|
Try this....
#include <devctl.h>
#include <sys/dcmd_chr.h>
/* For "open()" */
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
/* For Errors */
#include <stdlib.h>
#include <stdio.h>
int check_statuses(int fd);
int main(int argc, char* argv[])
{
int data = 0, fd, i;
int rts = -1, dtr = -1;
for(i = 1; i < argc ; i++){
if(!strcmpi(argv[i], "+RTS")){
rts = 1;
} else if(!strcmpi(argv[i], "-RTS")) {
rts = 0;
} else if(!strcmpi(argv[i], "+DTR")){
dtr = 1;
} else if(!strcmpi(argv[i], "-DTR")) {
dtr = 0;
}
}
if(rts != -1){
data |= _CTL_RTS_CHG;
if(rts){
data |= _CTL_RTS;
}
}
if(dtr != -1){
data |= _CTL_DTR_CHG;
if(dtr){
data |= _CTL_DTR;
}
}
if(data){
if (devctl (0, DCMD_CHR_SERCTL, &data, sizeof(data), NULL))
{
fprintf(stderr, "Error setting RTS.\n");
perror (NULL);
exit(EXIT_FAILURE);
}
}
check_statuses(0);
return (0);
}
int check_statuses(int fd)
{
int data = 0;
if(devctl (fd, DCMD_CHR_LINESTATUS, &data, sizeof(data), NULL))
{
fprintf(stderr, "Error getting statuses.\n");
perror (NULL);
exit(EXIT_FAILURE);
}
if (data & _LINESTATUS_SER_RTS)
printf("+RTS ");
else
printf("-RTS ");
if (data & _LINESTATUS_SER_DTR)
printf("+DTR ");
else
printf("-DTR ");
if (data & _LINESTATUS_SER_CTS)
printf("+cts ");
else
printf("-cts ");
if (data & _LINESTATUS_SER_DSR)
printf("+dsr ");
else
printf("-dsr ");
if (data & _LINESTATUS_SER_RI)
printf("+ri ");
else
printf("-ri ");
if (data & _LINESTATUS_SER_CD)
printf("+cd ");
else
printf("-cd ");
printf("\n");
return(1);
}
|
|
|