Sirius

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 夕雨