FEP RX library
Dependents: 2022_FEPRX-PS4 2022A_FEPRX_TokiPS4 2022NHK_A_ashimawari 2022NHK_A_main
Diff: FEP_RX22.cpp
- Revision:
- 0:062f14a26406
- Child:
- 1:8979e85cceb1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FEP_RX22.cpp Wed Oct 05 01:14:22 2022 +0000 @@ -0,0 +1,96 @@ +/** + * @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; +} \ No newline at end of file