com-порт: проблема записи/чтения
От: MASReady  
Дата: 21.08.12 20:02
Оценка:
Доброго времени суток!
Пишу под 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.