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