/dev/ttyUSB0にあるXBee rfモジュールでSelect() sys calを使用していますが、このsyscalは返されません(タイムアウト時にのみ返されます)が、このポートのWHILEループでread()を使用すると、データが来る
/*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);
}
注:関数内のコマンドについては、 GTKtermを開いた後にsystem()
発行して取得しました(プログラムからモデムと通信できたときです)ので、GTKtermがポートを構成したと推測し、まったく同じものを使用しました構成。stty -F /dev/USB0 -g
/dev/ttyUSB0