[Armadillo:06489] Re: Armadillo-420のSW1について。
mizo
email@hidden
2011年 1月 7日 (金) 15:39:59 JST
溝渕です。
TFC 小林 wrote:
> お世話になります。小林です。
> 引き続き、Armadillo-420のSW1について教えてください。
>
> 下記、プログラムを作成したのですが、ボタンを押してもイベントが発生しないの
> か、
> 「No Event」と、「Value = 00」が1秒ごとずっと表示され続けます。
このプログラムだとそのように動くのが正しい動作だと思います。ちなみに、
「XXXのような動作をさせたいが、YYYのようになってしまう。」など期待する動
作も書いてもらえると回答しやすいです。
printf("Value = %02x\n", data);
を通るのを、イベント発生後のみにしたい場合は、
printf("No Event\n");
の後に
continue;
すると良いと思います。
data == 1
にならないのは、close()しているからですね。open()/close()をwhileの外に出
せば、「Value = 01」が表示されると思います。
> Open時に、「|O_NONBLOCK」を指定しないと、
> Readコマンドで止まってしまうのか、ボタンを押すたびに、
> 「On Event」と、「Value = 01」が表示されます。
O_NONBLOCKを指定してopen()したファイルに対する操作は、ブロックされませ
ん。O_NONBLOCKを指定しない場合、何らかのイベントが発生するまでブロックし
ます。
きっと、タクトスイッチを押した状態でプログラムを起動し、タクトスイッチを
離した場合は、「On Event」と、「Value = 00」が表示されると思います。
以上です。
> 希望としては、SW1の状態表示と、他の処理を行いたいのですが、
> どのようにすればいいのか教えてください。
>
> #define DEV_NAME_PSW1 "/dev/input/event0"
>
> int fd,ret;
> char val;
> int data;
> struct input_event event;
>
> while(1){
>
> data = 0;
>
> fd = open(DEV_NAME_PSW1, O_RDONLY | O_NONBLOCK);
> ret = read(fd, &event, sizeof(event));
> if (ret != sizeof(event)) {
> printf("No Event\n");
> }else{
> printf("On Event\n");
> }
>
> if ((event.type == EV_KEY) && (event.code == KEY_ENTER) && (event.value !=
> 0)){
> data = 1;
> }
>
> close(fd);
>
> // シリアル受信など、別処理を行う。
> printf("Value = %02x\n", data);
> sleep(1);
>
> }
armadillo メーリングリストの案内