Witam!
Na podstawie przykładowych programów napisałem program, który ma za zadanie przez RSa czytać dane z innego urządzenia. Funkcja otwierania portu
int open_device()
{
QTextStream out(stdout);
int fd=0;
struct termios options;
fd = open("/dev/ttyUSB0", O_RDWR | O_NDELAY | O_NOCTTY);
if (fd == -1) {
out << "nie moge otworzyc ttyUSB0" << endl;
return 0;
} else {
out << "otwieram ttyUSB0" << endl;
fcntl(fd, F_SETFL, 0);
}
tcgetattr(fd, &options);
cfsetispeed(&options, B19200);
cfsetospeed(&options, B19200);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &options);
fcntl(fd, F_SETFL, 0);
tcflush(fd,TCIOFLUSH);
return fd;
}
do odczytu używam result = read(device, &data_result, 1); oczywiście dobieram ilość bajtów. Dane odczytywane są co sekundę. Program ten jest wpleciony w aplikację QT. Problem polega na tym, że czasem wszystko działa kilka minut, a czasem mniej. Zawiesza się zawsze przy odczycie. Czy powinienem w jakiś onny sposób ustawić flagi w fcntl? A może jest tego inna przyczyna?
z góry dzięki
pozdrawiam
herszt