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

名前

URL

タイトル

コメント

2011年1月17日(月) 21:57

KURO-RS 用 daemon その1

土曜日の夜に熱を出し寝込んでいました。



赤外線データの解析と平行して daemon プログラムを作成しています。まず、KURO-RS とやり取りする共通関数を製作しています。

次のような関数です。



・open_rs

KURO-RS デバイスを開きます。引数として、デバイスファイル、ブロックするかどうかが必要です。戻り値として KURO-RS 用構造体のポインタを返します。

・close_rs

KURO-RS デバイスを閉じます。引数として、KURO-RS 用構造体のポインタが必要です。

・send_command

KURO-RS へコマンドを送信します。引数として、KURO-RS 用構造体のポインタ、1文字のコマンドが必要です。

・send_data

リモコン信号を送信します。引数として、KURO-RS 用構造体のポインタ、送信ポート、送信データが必要です。

・recive_data

リモコン信号を受信します。引数として、KURO-RS 用構造体のポインタ、受信データ格納場所が必要です。

・send_irdata

リモコン信号を送信します。引数として、KURO-RS 用構造体のポインタ、送信ポート、送信データが必要です。

send_data との違いは、送信要求も含めてこの関数が行います。

・recive_irdata

リモコン信号を受信します。引数として、KURO-RS 用構造体のポインタ、受信データ格納場所が必要です。

recive_data との違いは、受信要求も含めてこの関数が行います。



上記関数は既に実装済みで、これらを使って送受信プログラムを作成してみました。

受信プログラム


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

#include <stdio.h>

#include <stdlib.h>

#include <signal.h>

#include <string.h>

#include <malloc.h>



#include "kuro_rs.h"

#include "kuro_rs_common.h"



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

{

    unsigned char buf[255];

    char *data_file = NULL;

    char *device = "/dev/ttyUSB0";

    FILE *fp;

    RS *rp;



    if( argc >= 2 && argv[1] && *argv[1] )

        data_file = argv[1];



    if( !data_file ) {

        printf("%s data file\n", argv[0]);

        exit(1);

    }



    if( !(rp = open_rs(device, 1)) ) {

        printf("device open error(%s)\n", device);

        exit(1);

    }

    if( recive_irdata(rp, buf) ) {

        printf("recive error\n");

        exit(1);

    }

    close_rs(rp);



    if( !(fp = fopen(data_file, "wb")) ) {

        printf("file open err(%s)\n", data_file);

        exit(1);

    } else {

        fwrite(buf, sizeof(unsigned char), REC_DATA_SIZE, fp);

        fclose(fp);

    }

    printf("Rec File : %s\n", data_file);

    exit(0);

}

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


KURO-RS を開き、データを受信。最後に閉じます。



送信プログラム


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

#include <stdio.h>

#include <stdlib.h>

#include <signal.h>

#include <string.h>

#include <malloc.h>



#include "kuro_rs.h"

#include "kuro_rs_common.h"



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

{

    unsigned char buf[255];

    char *port = "1";

    char *data_file = NULL;

    char *device = "/dev/ttyUSB0";

    FILE *fp;

    RS *rp;



    if( argc >= 2 && argv[1] && *argv[1] )

        data_file = argv[1];

    if( argc >= 3 && argv[1] && *argv[2] )

        port = argv[2];



   if( !data_file ) {

        printf("%s data file [port]\n", argv[0]);

        exit(1);

    }



    if( !(fp = fopen(data_file, "rb")) ) {

        printf("file open err(%s)\n", data_file);

        exit(1);

    } else {

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

        fclose(fp);

    }



    if( !port || (*port < '1' || *port > '4') )

        *port = '1';



    if( !(rp = open_rs(device, 1)) ) {

        printf("device open error(%s)\n", device);

        exit(1);

    }

    if( send_irdata(rp, *port, buf) ) {

        printf("can't send data\n");

        exit(1);

    }

    close_rs(rp);

    printf("Send File : %s\n", data_file);



    exit(0);

}

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


送信データを読み込んで、KURO-RS を開き、送信します。最後に KURO-RS を閉じます。



保存したファイルを指定して動かしてみました。リモコンデータの送信が行われました。

大丈夫なようです。

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

この記事へのトラックバックPingURL

Comments

TrackBacks

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

MySketch 2.7.2 written by 夕雨