Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
#include <fcntl.h>
#include <termios.h>
#include <linux/types.h>
#include <sys/signal.h>
int fd;
bool wait_flag=true;
struct sigaction saio;
...
fd=open(argv[1],O_RDWR | O_NOCTTY | O_EXCL);
saio.sa_handler = signal_handler_IO;
sigemptyset(&saio.sa_mask); //saio.sa_mask = 0;
saio.sa_flags = 0;
saio.sa_restorer = NULL;
sigaction(SIGIO,&saio,NULL);
fcntl(fd, F_SETOWN, getpid());
fcntl(fd, F_SETFL, FASYNC);
termios options;
tcgetattr(fd, &options);
cfsetispeed(&options,B19200);
cfsetospeed(&options,B19200);
options.c_iflag &= ~IGNPAR;
options.c_iflag &= ~CSTOPB;
options.c_oflag = 0;
options.c_lflag = 0; //ICANON;
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 1;
options.c_cflag |= (CS8 | CLOCAL | CREAD | CRTSCTS);
void signal_handler_IO (int status)
{
int rnum=read(fd,buf,100); // читать 100 символов в буфер из порта, читать нужно с избытком, в rnum будет реальное количество прочитанного
...
wait_flag = false;
}
while (wait_flag==true);
wait_flag=true;
Создаем простейшее usb-устройство для общения со своей программой