я использую функцию Select () в rf-модуле XBee, который находится на /dev/ttyUSB0. Но этот syscal просто не возвращает (возвращает только по таймауту), но если я использую read () в цикле WHILE на этом порту, я можно увидеть данные приходящие
/*code to open the port*/
system("stty -F /dev/ttyUSB0 5:0:8bd:0:3:1c:7f:15:1:64:0:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0");
fd = open("/dev/ttyUSB0", O_RDWR );
printf("fd is %d",fd);
if(fd == -1)
return ERR_PORT;
select возвращается только тогда, когда TIMEOUT отсутствует, когда порт готов к чтению
FD_ZERO (&set);
FD_SET (fd, &set);//fd is an opened file des. for /dev/ttyUSB0
struct timeval timeout;
timeout.tv_sec = 50;
timeout.tv_usec = 0;
if(select(FD_SETSIZE,&set, NULL,NULL,&timeout)==1)
Do_stuff();
else
return TIMEOUT;
но если я использую следующее, я вижу распечатываемые данные
char ch;
while(1)
{
read(fd,&ch,1);
printf("\n0x%X",ch);
}
Обратите внимание: о команде в функции system()
я получил ее, выдав stty -F /dev/USB0 -g
после того, как GTKterm был открыт на /dev/ttyUSB0
(то есть, когда я смог поговорить с моим модемом из моей программы), поэтому сделал предположение что GTKterm настроил порт, и я использовал точно такую же конфигурацию.