Доброго времени суток!
Пишу под linux(Fedora)
Есть подключенное к порту устройство, которое отвечает только на определенные запросы, на неизвестные ничего не отвечает.
Открываю com-port(open(...)), далее пишу в него (write(...)) и читаю ответ (read(...)),
так вот при чтении сначала читается то, что я записал в порт, а затем ответ устройства
например, на запрос "status" устройство должно ответить "normal work"
а в место этого получаем "statusnormal work"
или, если пишем запрос который устройство не знает и не должно отвечать на чтении получаем тот же запрос который послали.
причем на некоторых com-платах все нормально, а на некоторых такая проблема.
настройки все одинаковые.
код примерно такой:
fd = open( "/dev/ttyS0", O_RDWR | O_NOCTTY ); if (fd<=0) exit(-1);
tcgetattr(fd,&oldtio); /* сохраняем текущие настройки порта */
tcgetattr(fd,&newtio); /* сохраняем текущие настройки порта */
newtio.c_cflag = ( CBAUD | CSIZE | CS8 | CREAD | CSTOPB | CLOCAL );
newtio.c_iflag = 0;
newtio.c_oflag = 0;
newtio.c_lflag = 0;
newtio.c_cc[ VTIME ] = 0;
newtio.c_cc[ VMIN ] = 0;
cfsetispeed( &newtio, B57600 );
cfsetospeed( &newtio, B57600 );
tcflush( fd, TCIFLUSH );
tcsetattr( fd, TCSANOW, &newtio );
res = write(fd,bufw,szw);
usleep(scaninterval);
memset( bufr, 0, sizeof(bufr) );
res = read(fd,buf,255);
tcsetattr(fd,TCSANOW,&oldtio);
close(fd)
22.08.12 01:34: Перенесено модератором из 'Железо' — AndrewVK