1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| #include "driver_rs232.h"
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int fd, res;
struct termios newtio;
struct sigaction saio; /* definition of signal action */
char buf[4096];
int wait_flag;
void init_COM()
{
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY |O_NDELAY);
if (fd <0) {perror(MODEMDEVICE); }//exit(-1); }
/* install the signal handler before making the device asynchronous */
__sigset_t t;
saio.sa_handler = signal_handler_IO;
saio.sa_mask = t;
saio.sa_flags = 0;
saio.sa_restorer = NULL;
sigaction(SIGIO,&saio,NULL);
/* allow the process to receive SIGIO */
fcntl(fd, F_SETOWN, getpid());
/* Make the file descriptor asynchronous (the manual page says only
O_APPEND and O_NONBLOCK, will work with F_SETFL...) */
fcntl(fd, F_SETFL, FASYNC);
//bzero(&newtio, sizeof(newtio));
newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
/* set input mode (non-canonical, no echo,...) */
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
newtio.c_cc[VMIN] = 0; /* blocking read until 5 chars received */
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
}
/***************************************************************************
* signal handler. sets wait_flag to FALSE, to indicate above loop that *
* characters have been received. *
***************************************************************************/
void signal_handler_IO (int status)
{
// cout << "received SIGIO signal." << endl;
// printf("received SIGIO signal.\n");
wait_flag = 0;
} |
Partager