[Armadillo:06491] Re: Armadillo-420のSW1について。

Takenoshita Koyo email@hidden
2011年 1月 7日 (金) 16:49:18 JST


竹之下です。

> 希望としては、SW1の状態表示と、他の処理を行いたいのですが、
> どのようにすればいいのか教えてください。
mizoが指摘してくれているように、デバイスファイルをO_NONBLOCKでオープンして、
read()でブロックさせないという方法もあるのですが、
別の方法として、ブロックされないときだけread()するやり方もあります。

イメージとしては、次のようなコードになります。

==== 擬似コードここから ====
int fd;
struct input_event event;

fd = open(DEV_NAME_SW1, O_RDONLY); /* O_NONBLOCKはつけない */

while(1) {
	if (ブロックせずにread()可能) {
		read(fd, &event);
		if (eventがSW1のもの) {
			SW1の状態表示();
		}
	} else {
		他の処理();
	}
}

/* ここは実行されない */
close(fd);
==== 擬似コードここまで ====

「ブロックせずにread()可能」かどうかを調べるには、select()システムコールを使います。
簡単なサンプルコードを添付しますので、よろしければ参考にしてください。
なお、select()の詳しい使い方は、「man 3 select」コマンドで参照できます。

TFC 小林 さんは書きました:
> お世話になります。小林です。
> 引き続き、Armadillo-420のSW1について教えてください。
> 
> 下記、プログラムを作成したのですが、ボタンを押してもイベントが発生しないの
> か、
> 「No Event」と、「Value = 00」が1秒ごとずっと表示され続けます。
> 
> Open時に、「|O_NONBLOCK」を指定しないと、
> Readコマンドで止まってしまうのか、ボタンを押すたびに、
> 「On Event」と、「Value = 01」が表示されます。
> 
> 希望としては、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 mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
> 


-- 
Koyo Takenoshita
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: swtest.c
型:         text/x-csrc
サイズ:     1836 バイト
説明:       無し
URL:        <http://lists.atmark-techno.com/pipermail/armadillo/attachments/20110107/ad029f9a/attachment.c>


armadillo メーリングリストの案内