Sirius -旧ブログ、更新されません-

2011年01月11日の記事

2011年1月11日(火) 20:50

KURO-RS 用 daemo プログラムの作成

玄箱で KURO-RS が使えることが分かったので、サービスとして動き、リモコンでコントロールできるようなソフトを探してみました。しかし、自分の利用に合うようなものが見つからなかったので自分で作ってみることにしました。



自分が欲しい機能は、



1、登録しているリモコンのボタンで玄箱をコントロールする。

2、登録しているリモコンのボタンで KURO-RS から他の機器へリモコンの信号が送れる。

    このときボタンひとつで複数の機器へそれぞれリモコン信号を送れるようにする。

3、daemon として動き、daemon が動いていても、外部コマンドからの要求でリモコン信号の送出や学習が出来る。

4、KURO-RS とやり取りする標準的な関数群を作成し、再利用できるようにする。



リモコン信号の保存と送信は付属のソースをコンパイルして出来ますが、同時使用は当然出来ないでしょう。

また送られてきたリモコン信号と登録されている信号の比較をどうするかも考えないといけません。



まず、リモコンの信号と KURO-RS(PC-OPRS1) について検索してみると次のようなページにたどり着きました。



[PC-OP-RS1]SONYフォーマットを合成する(Perlで)

赤外線リモコンを Linux からコントロール



なるほど、KURO-RS は送られてきた信号 240 バイト分をそのまま記録してそのまま送出しているだけのようです。

この信号をちゃんとデコードできればいいのか。



まず、自分なりに保存したリモコンの信号を解析してみることにしました。

保存したデータをビット列で表示するプログラムを作成しました。

-------------------ここから-------------------


#include <stdio.h>

#include <stdlib.h>



int main(int argc, char *argv[])

{

    FILE *fp;

    int i, j;

    int msb, byte;

    unsigned char buf[255], c;



    if( argc != 3 ) exit(1);



    msb = byte = 0;

    if( *(argv[2]) == '1' ) msb = 1;

    if( *(argv[2]+1) == '1' ) byte = 1;



    if( !(fp = fopen(argv[1], "rb")) ) exit(1);



    fread(buf, sizeof(unsigned char), 240, fp);



    for( i = 0; i < 240; i++ ) {

        if( byte ) {

            if( i % 2 ) c = buf[i-1];

            else        c = buf[i+1];

        } else c = buf[i];

        for( j = 0; j < 8; j++ ) {

            if( msb ) printf("%d", (c>>j) &0x1);

            else      printf("%d", (c>>(7-j)) &0x1);

        }

        if( (i % 8) == 7 ) printf("\n");

        else               printf(" ");

    }

    printf("\n");

}


-------------------ここまで-------------------

最初の引数がリモコン信号を保存したファイル名、次の引数の最初の文字が最上位ビットの位置、次の文字がバイトスワップするかどうかを指定します。



PC 用の USB 接続地デジチューナー HDUSF のリモコンが余っていたので、この電源ボタンの信号を保存し、ビット列で表示してみました。

$ dump Power 00

11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111

11111111 11111111 11111111 00000111 00000000 00000000 00000000 00000000

00000000 00111111 11111000 00000001 00000000 11111100 11100000 00000111

00000000 11110000 10000001 00011111 11111100 11000000 00000111 00111110

00000000 10000000 00011111 00000000 11000000 00001111 00000000 11110000

00000011 00011111 00000000 11000000 00001111 00000000 11100000 00000011

00000000 11111000 00000001 00000000 01111100 00000000 00000000 00111111

11110000 10000001 00011111 11111100 11100000 00000111 00111110 11110000

00000011 00000000 11111100 11000000 00000111 00000000 11110000 00000011

00000000 11111000 00000000 00000000 01111110 00000000 00000000 00111111

00000000 11000000 00001111 00000000 11100000 00000111 00111111 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 11111100

11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111

11111111 11111111 00001111 00000000 00000000 11111000 00000001 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000



$ dump Power 10

11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111

11111111 11111111 11111111 11100000 00000000 00000000 00000000 00000000

00000000 11111100 00011111 10000000 00000000 00111111 00000111 11100000

00000000 00001111 10000001 11111000 00111111 00000011 11100000 01111100

00000000 00000001 11111000 00000000 00000011 11110000 00000000 00001111

11000000 11111000 00000000 00000011 11110000 00000000 00000111 11000000

00000000 00011111 10000000 00000000 00111110 00000000 00000000 11111100

00001111 10000001 11111000 00111111 00000111 11100000 01111100 00001111

11000000 00000000 00111111 00000011 11100000 00000000 00001111 11000000

00000000 00011111 00000000 00000000 01111110 00000000 00000000 11111100

00000000 00000011 11110000 00000000 00000111 11100000 11111100 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00111111

11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111

11111111 11111111 11110000 00000000 00000000 00011111 10000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000



$ dump Power 01

11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111

11111111 11111111 00000111 11111111 00000000 00000000 00000000 00000000

00111111 00000000 00000001 11111000 11111100 00000000 00000111 11100000

11110000 00000000 00011111 10000001 11000000 11111100 00111110 00000111

10000000 00000000 00000000 00011111 00001111 11000000 11110000 00000000

00011111 00000011 11000000 00000000 00000000 00001111 00000011 11100000

11111000 00000000 00000000 00000001 00000000 01111100 00111111 00000000

10000001 11110000 11111100 00011111 00000111 11100000 11110000 00111110

00000000 00000011 11000000 11111100 00000000 00000111 00000011 11110000

11111000 00000000 00000000 00000000 00000000 01111110 00111111 00000000

11000000 00000000 00000000 00001111 00000111 11100000 00000000 00111111

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 11111100 00000000

11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111

11111111 11111111 00000000 00001111 11111000 00000000 00000000 00000001

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000



$ dump Power 11

11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111

11111111 11111111 11100000 11111111 00000000 00000000 00000000 00000000

11111100 00000000 10000000 00011111 00111111 00000000 11100000 00000111

00001111 00000000 11111000 10000001 00000011 00111111 01111100 11100000

00000001 00000000 00000000 11111000 11110000 00000011 00001111 00000000

11111000 11000000 00000011 00000000 00000000 11110000 11000000 00000111

00011111 00000000 00000000 10000000 00000000 00111110 11111100 00000000

10000001 00001111 00111111 11111000 11100000 00000111 00001111 01111100

00000000 11000000 00000011 00111111 00000000 11100000 11000000 00001111

00011111 00000000 00000000 00000000 00000000 01111110 11111100 00000000

00000011 00000000 00000000 11110000 11100000 00000111 00000000 11111100

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00111111 00000000

11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111

11111111 11111111 00000000 11110000 00011111 00000000 00000000 10000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000



どうやら MSB でバイトスワップもしなくていいようです。そのままやればいいんですね。

written by sirius [KURO-RS] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL
Sirius -旧ブログ、更新されません-

MySketch 2.7.2 written by 夕雨