先open :
fno = open("/dev/ir",O_RONLY);讀取ir的資料:
read(fno,&ldata,sizeof(unsigned long))ir的key 一次會有4個byte.
- byte 0 : 公司id
- byte 1 : custom id
- byte 2 : code
- byte 3: ~code 就是byte 2: code反向。
然後check一下byte2+byte 3是不是0xFF,
如果是,就可以拿byte 2來動作了。
寫這個code要注意big-endian, little-endia的問題。不然,就要用char 來操作。
因為dev/ir是char device,所以read的方法可以apply一般的file read option。
也可以用select來作timeout read:
fd_set rfds;
struct timeval tv;
FD_ZERO(&rfds); // 初始化flag
FD_SET(fno,&rfds); // 設定待會要動作的file id.
tv.tv_sec=5; // time out 5 sec
tv.tv_usec=0;
ret = select(fno+1, &rfds, NULL, NULL, &tv); // 進行select - wait 動作,max fno 要是wait 的file id +1
if(ret) {
// 收到資料
}else{
// timeout
}
沒有留言:
張貼留言