[OpenBlockS Users page]
[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[obu:00209] LED で遊ぼう


松本です。

  OpenBlockS に付いている 7segments LED ですが、せっかく付いている
ので遊んでみようというわけです。
  カーネル再構築とかの難しい話でなく、OpenBlockS の標準カーネルに
付いている LED ドライバを叩いてみようという話です。

  動作中の OpenBlockS の LED はチラチラ点滅していますが(初代は∞)
これは runled というプログラムがやってますので、以下を試す前に
ps で pid を調べて kill しておいて下さい。
  次に shell から次の通りやってみて下さい(root で)。

$ echo "8" >/dev/segled

世の中そんなに甘くは無いだろうと思いながらもやってみるとうまく行き
ました。 0 ~ 9, A ~ F を順に試してみて下さい。あと '+', '-' を書く
事で点の部分を on/off 出来ます。

  せっかくだから任意のパターンを出してみたいと思うかも知れません。
ioctl を使えば出来ます。サンプルプログラムをこのメールの最後に付属
します。glibc2.1 な ppc linux か、OpenBlockS のセルフ開発環境で、
コンパイルして下さい。どのビットがどのLEDに対応するかに付いては、
村瀬さんの使い倒すページ(http://homepage2.nifty.com/murase/obs/)の
http://homepage2.nifty.com/murase/obs/mpc860.html
を参考にして下さい。ちなみに各ビットを 1 で  ON, 0 で OFF となり
ます。多分ドライバ内で、ビットを反転しているのでしょう。

  オリジナルな LED 点滅パターンで自慢したりすると良いかも。
--------------------------------
/* ledtest.c 
   gcc -O2 -o ledtest ledtest.c
*/

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>

#define  SEG_BAR0     0x00001
#define  SEG_BAR1     0x00002
#define  SEG_DOT      0x00004
#define  SEG_BAR3     0x00008
#define  SEG_BAR14    0x04000
#define  SEG_BAR15    0x08000
#define  SEG_BAR16    0x10000
#define  SEG_BAR17    0x20000


int pt_data[] = {
    SEG_BAR14 | SEG_BAR15,
    SEG_BAR15 | SEG_BAR3,
    SEG_BAR3  | SEG_BAR1,
    SEG_BAR1  | SEG_BAR0,
    SEG_BAR0  | SEG_BAR17,
    SEG_BAR17 | SEG_BAR3,
    SEG_BAR3  | SEG_BAR16,
    SEG_BAR16 | SEG_BAR14,
    -1
};


int
main()
{
    int fd,stat;
    int pt_no = 0;

    fd = open( "/dev/segled", O_RDWR );
    if( fd == -1 ){
	perror( "open:" );
	exit(1);
    }

    stat = ioctl( fd, 0x40045304, 0x7ffffc90 );
    if( stat == -1 ){
	perror( "ioctl:" );
	exit(1);
    }

    while(1){
	stat = ioctl( fd, 0x40045302, pt_data[pt_no++] );
	if( stat == -1 ){
	    perror( "ioctl:" );
	    exit(1);
	}
	if( pt_data[pt_no] == -1 ){
	    pt_no = 0;
	}
	usleep(200000);
    }
    return 0;
}

------------------
-- 
松本 徳真
Norimasa Matsumoto
E-mail: matsu@xxxxxxxxxxxxx

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: