gyo

SBDBT.cpp

Committer:
gotto0
Date:
2017-05-06
Revision:
1:8810976be033
Parent:
0:afe58893bfe7
Child:
2:1472e7c5317d

File content as of revision 1:8810976be033:

#include "SBDBT.h"

namespace raven
{
    
    SBDBT::SBDBT(PinName p1, PinName p2)
    {
        i = 0;
        flag = 0;
        length = 8;
        value = 128;
        position = 0;
        data = new char [length];
        olddata = 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;
        flag = 0;
        length = 8;
        value = 128;
        position = 0;
        data = new char [length];
        olddata = new char [length];
        sr = new Serial(p1,p2);
        sr -> baud(baud);
        sr -> attach(this,&SBDBT::getf,Serial::RxIrq);
    }
    
    void SBDBT::getf()
    {
        olddata[i] = data[i];
        data[i] = sr -> getc();
        if(data[i] == value)    //受信したデータが訂正用定数であり
        {
            if(i != position)       //訂正用定数を受信すべき位置でないとき
            {
                data[position] = value;     //正しい位置に訂正用定数を代入
                i = position + 1;           //受信先も正しい位置へもどす
            }
            else                    //訂正用定数を受信すべき位置であるとき
                i++;                    //次の位置で受信する
        }
        else                    //受信したデータが訂正用定数でなく
        {
            if(i == position){}     //訂正用定数を受信すべき位置であるとき
                                        //再度同じ位置で受信する
            else                    //訂正用定数を受信すべき場所でないとき
                i++;                    //次の位置で受信する
        }
        if(i>=length)           //位置がデータの長さを超えたら
        {
            i=0;                    //位置を初期化
            flag = 1;               //全データ受信完了
        }
    }
    
    SBDBT::~SBDBT()
    {
        delete sr;
    }
}//namespace