gyo

SBDBT.cpp

Committer:
gotto0
Date:
2017-05-08
Revision:
5:a4a994824c96
Parent:
3:16a15d26ebe8
Child:
6:da71294502ee

File content as of revision 5:a4a994824c96:

#include "SBDBT.h"

namespace raven
{
    
    SBDBT::SBDBT(PinName p1, PinName p2)
    {
        i = 0;
        readable = 0;
        length = 8;
        value = 128;
        position = 0;
        tmp = new char [length];
        data = new char [length];
        sr = new Serial(p1,p2);
        sr -> baud(2400);
        sr -> attach(this,&SBDBT::getf,Serial::RxIrq);
    }
    
    SBDBT::SBDBT(PinName p1, PinName p2, int baud)
    {
        i = 0;
        readable = 0;
        length = 8;
        value = 128;
        position = 0;
        tmp = new char [length];
        data = new char [length];
        sr = new Serial(p1,p2);
        sr -> baud(baud);
        sr -> attach(this,&SBDBT::getf,Serial::RxIrq);
    }
    
    void SBDBT::getf()
    {
        tmp[i] = sr -> getc();
        if(tmp[i] == value)    //受信したデータが訂正用定数であり
        {
            if(i != position)       //訂正用定数を受信すべき位置でないとき
            {
                tmp[position] = value;     //正しい位置に訂正用定数を代入
                i = position + 1;           //受信先も正しい位置へもどす
            }
            else                    //訂正用定数を受信すべき位置であるとき
                i++;                    //次の位置で受信する
        }
        else                    //受信したデータが訂正用定数でなく
        {
            if(i == position){}     //訂正用定数を受信すべき位置であるとき
                                        //再度同じ位置で受信する
            else                    //訂正用定数を受信すべき場所でないとき
                i++;                    //次の位置で受信する
        }
        if(i>=length)           //位置がデータの長さを超えたら
        {
            data[0] = tmp[0];
            data[1] = tmp[1];
            data[2] = tmp[2];
            data[3] = tmp[3];
            data[4] = tmp[4];
            data[5] = tmp[5];
            data[6] = tmp[6];
            data[7] = tmp[7];
            readable = 1;               //全データ受信完了
            i=0;                    //位置を初期化
        }
    }
    
    char SBDBT::maru()
    {
        if(data[2] & 64)
            return 1;
        return 0;
    } 
    
    char SBDBT::batu()
    {
        if(data[2] & 32)
            return 1;
        return 0;
    }
    
    char SBDBT::sikaku()
    {
        if(data[1] & 1)
            return 1;
        return 0;
    }
    
    char SBDBT::sankaku()
    {
        if(data[2] & 16)
            return 1;
        return 0;
    }
    
    char SBDBT::L1()
    {
        if(data[1] & 2)
            return 1;
        return 0;
    }
    
    char SBDBT::L2()
    {
        if(data[1] & 4)
            return 1;
        return 0;
    }
    
    char SBDBT::R1()
    {
        if(data[1] & 8)
            return 1;
        return 0;
    }
    
    char SBDBT::R2()
    {
        if(data[1] & 16)
            return 1;
        return 0;
    }
    
    char SBDBT::ue()
    {
        if(data[2] & 1)
            return 1;
        return 0;
    }
    
    char SBDBT::sita()
    {
        if(data[2] & 2)
            return 1;
        return 0;
    }
    
    char SBDBT::migi()
    {
        if(data[2] & 4)
            return 1;
        return 0;
    }
    
    char SBDBT::hidari()
    {
        if(data[2] & 8)
            return 1;
        return 0;
    }
    
    char SBDBT::rs_x()
    {
        return data[5];
    }
    
    char SBDBT::rs_y()
    {
        return data[6];
    }
    
    char SBDBT::ls_x()
    {
        return data[3];
    }
    
    char SBDBT::ls_y()
    {
        return data[4];
    }
    
    SBDBT::~SBDBT()
    {
        delete sr;
    }
}//namespace