FEP RX library
Dependents: 2022_FEPRX-PS4 2022A_FEPRX_TokiPS4 2022NHK_A_ashimawari 2022NHK_A_main
FEP_RX22.cpp
- Committer:
- piroro4560
- Date:
- 2022-10-05
- Revision:
- 0:062f14a26406
- Child:
- 1:8979e85cceb1
File content as of revision 0:062f14a26406:
/** * @file FEP_RX22.cpp * @author 安澤瑠 * @date 22/10/4 */ #include "FEP_RX22.h" FEP_RX22::FEP_RX22(PinName tx, PinName rx, uint8_t addr_, int baud) : RawSerial(tx, rx, baud) { addr = addr_; timeout = TIMEOUT_COUNT; bufindex = 0; retindex = 0; } void FEP_RX22::StartReceive() { attach(callback(this, &FEP_RX22::ReceiveBytes)); timeoutTimer.attach(callback(this, &FEP_RX22::TimeoutLoop), 0.1); } void FEP_RX22::TimeoutLoop() { if (timeout >= TIMEOUT_COUNT) { status = false; } else { status = true; timeout++; } } void FEP_RX22::ReceiveBytes() { buffer[bufindex] = getc(); // Receive 1byte timeout = 0; if ( (!strncmp((char*)(buffer + ((256 + bufindex - 1)%256) ), "\r\n", 2)) ) { // <CR><LF> bufindex = <LF>(='\n') CheckData(); } bufindex++; } void FEP_RX22::CheckData() { uint8_t temp=0; for (uint16_t i=0; i<256; i++) { temp = (256 + bufindex - i) % 256; if ( !strncmp((char*)(buffer + temp) , "RBN", 3) ) { // check header temp='R' /* コントローラの仕様変更時はここを変える */ for (int i_button=0; i_button<2; i_button++) { button[i_button] = buffer[(temp+9+i_button)%256]; } for (int i_stick=0; i_stick<4; i_stick++) { stick[i_stick] = buffer[(temp+11+i_stick)%256]; } for (int i_trigger=0; i_trigger<2; i_trigger++) { trigger[i_trigger] = buffer[(temp+15+i_trigger)%256]; } count_timeout = buffer[(temp+17)%256]; return; } } } void FEP_RX22::GetData(uint8_t *data) { for (int i=0; i<DATANUM; i++) data[i] = retdata[i]; } bool FEP_RX22::getButton(uint8_t n) { if (n<8) { return (button[0]>>n) & 1; } else { return (button[1]>>(n-8)) & 1; } } int16_t FEP_RX22::getStick(uint8_t n) { if (n%2) return 128-stick[n]; else return stick[n]-128; } int16_t FEP_RX22::getTrigger(uint8_t n) { return trigger[n]; } uint8_t FEP_RX22::getTimeout() { return count_timeout; }