gyo

SBDBT.cpp

Committer:
gotto0
Date:
2017-08-13
Revision:
6:da71294502ee
Parent:
5:a4a994824c96
Child:
7:30e05998769b

File content as of revision 6:da71294502ee:

#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;                    //位置を初期化
        }
    }
    
    int SBDBT::sw()
    {
        return data[1]+data[2]<<8;
    }
    
    void SBDBT::print()
    {
        printf("%3d %3d %3d %3d %3d %3d %3d %3d\n",data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]);
    }
    
    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;
    }
    
    signed char SBDBT::rs_x()
    {
        return data[5]-64;
    }
    
    signed char SBDBT::rs_y()
    {
        return data[6]-64;
    }
    
    signed char SBDBT::ls_x()
    {
        return data[3]-64;
    }
    
    signed char SBDBT::ls_y()
    {
        return data[4]-64;
    }
    
    char SBDBT::rs_x_check()
    {
        return data[5]==data[5] ? 0 : 1;
    }
    
    char SBDBT::rs_y_check()
    {
        return data[6]==data[6] ? 0 : 1;
    }
    
    char SBDBT::ls_x_check()
    {
        return data[3]==data[3] ? 0 : 1;
    }
    
    char SBDBT::ls_y_check()
    {
        return data[4]==data[4] ? 0 : 1;
    }
    
    SBDBT::~SBDBT()
    {
        delete sr;
        delete tmp;
        delete data;
    }
}//namespace