FEP RX library
Dependents: 2022_FEPRX-PS4 2022A_FEPRX_TokiPS4 2022NHK_A_ashimawari 2022NHK_A_main
FEP_RX22.cpp@2:39eb865e21e1, 2022-10-06 (annotated)
- Committer:
- piroro4560
- Date:
- Thu Oct 06 08:09:12 2022 +0000
- Revision:
- 2:39eb865e21e1
- Parent:
- 1:8979e85cceb1
erase count_timeout
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
piroro4560 | 0:062f14a26406 | 1 | /** |
piroro4560 | 0:062f14a26406 | 2 | * @file FEP_RX22.cpp |
piroro4560 | 1:8979e85cceb1 | 3 | * @brief FEP受信用ライブラリ |
piroro4560 | 0:062f14a26406 | 4 | * @author 安澤瑠 |
piroro4560 | 2:39eb865e21e1 | 5 | * @date 22/10/6 |
piroro4560 | 0:062f14a26406 | 6 | */ |
piroro4560 | 0:062f14a26406 | 7 | #include "FEP_RX22.h" |
piroro4560 | 0:062f14a26406 | 8 | |
piroro4560 | 0:062f14a26406 | 9 | FEP_RX22::FEP_RX22(PinName tx, PinName rx, uint8_t addr_, int baud) : |
piroro4560 | 0:062f14a26406 | 10 | RawSerial(tx, rx, baud) |
piroro4560 | 0:062f14a26406 | 11 | { |
piroro4560 | 0:062f14a26406 | 12 | addr = addr_; |
piroro4560 | 0:062f14a26406 | 13 | timeout = TIMEOUT_COUNT; |
piroro4560 | 0:062f14a26406 | 14 | bufindex = 0; |
piroro4560 | 0:062f14a26406 | 15 | } |
piroro4560 | 0:062f14a26406 | 16 | |
piroro4560 | 0:062f14a26406 | 17 | void FEP_RX22::StartReceive() |
piroro4560 | 0:062f14a26406 | 18 | { |
piroro4560 | 0:062f14a26406 | 19 | attach(callback(this, &FEP_RX22::ReceiveBytes)); |
piroro4560 | 0:062f14a26406 | 20 | timeoutTimer.attach(callback(this, &FEP_RX22::TimeoutLoop), 0.1); |
piroro4560 | 0:062f14a26406 | 21 | } |
piroro4560 | 0:062f14a26406 | 22 | |
piroro4560 | 0:062f14a26406 | 23 | void FEP_RX22::TimeoutLoop() |
piroro4560 | 0:062f14a26406 | 24 | { |
piroro4560 | 0:062f14a26406 | 25 | if (timeout >= TIMEOUT_COUNT) { |
piroro4560 | 0:062f14a26406 | 26 | status = false; |
piroro4560 | 0:062f14a26406 | 27 | } else { |
piroro4560 | 0:062f14a26406 | 28 | status = true; |
piroro4560 | 0:062f14a26406 | 29 | timeout++; |
piroro4560 | 0:062f14a26406 | 30 | } |
piroro4560 | 0:062f14a26406 | 31 | } |
piroro4560 | 0:062f14a26406 | 32 | |
piroro4560 | 0:062f14a26406 | 33 | void FEP_RX22::ReceiveBytes() |
piroro4560 | 0:062f14a26406 | 34 | { |
piroro4560 | 0:062f14a26406 | 35 | buffer[bufindex] = getc(); // Receive 1byte |
piroro4560 | 0:062f14a26406 | 36 | timeout = 0; |
piroro4560 | 0:062f14a26406 | 37 | |
piroro4560 | 0:062f14a26406 | 38 | if ( (!strncmp((char*)(buffer + ((256 + bufindex - 1)%256) ), "\r\n", 2)) ) { // <CR><LF> bufindex = <LF>(='\n') |
piroro4560 | 0:062f14a26406 | 39 | CheckData(); |
piroro4560 | 0:062f14a26406 | 40 | } |
piroro4560 | 0:062f14a26406 | 41 | bufindex++; |
piroro4560 | 0:062f14a26406 | 42 | } |
piroro4560 | 0:062f14a26406 | 43 | |
piroro4560 | 0:062f14a26406 | 44 | void FEP_RX22::CheckData() |
piroro4560 | 0:062f14a26406 | 45 | { |
piroro4560 | 1:8979e85cceb1 | 46 | indexofR=0; |
piroro4560 | 2:39eb865e21e1 | 47 | for (uint16_t i_Rbn=0; i_Rbn<256; i_Rbn++) { |
piroro4560 | 2:39eb865e21e1 | 48 | indexofR = (256 + bufindex - i_Rbn) % 256; |
piroro4560 | 1:8979e85cceb1 | 49 | if ( !strncmp((char*)(buffer + indexofR) , "RBN", 3) ) { // check header indexofR is address of 'R'BN |
piroro4560 | 1:8979e85cceb1 | 50 | #if ControllerMode |
piroro4560 | 1:8979e85cceb1 | 51 | getControllerState(); |
piroro4560 | 1:8979e85cceb1 | 52 | #else |
piroro4560 | 1:8979e85cceb1 | 53 | datalen = (buffer[(indexofR+6)%256]-48)*100 + (buffer[(indexofR+7)%256]-48)*10 + (buffer[(indexofR+8)%256]-48); |
piroro4560 | 2:39eb865e21e1 | 54 | for (int i_msg=0; i_msg<datalen; i_msg++) { |
piroro4560 | 2:39eb865e21e1 | 55 | msgdata[i_msg] = buffer[(indexofR+9+i_msg)%256]; |
piroro4560 | 0:062f14a26406 | 56 | } |
piroro4560 | 1:8979e85cceb1 | 57 | #endif |
piroro4560 | 0:062f14a26406 | 58 | |
piroro4560 | 0:062f14a26406 | 59 | return; |
piroro4560 | 0:062f14a26406 | 60 | } |
piroro4560 | 0:062f14a26406 | 61 | } |
piroro4560 | 0:062f14a26406 | 62 | } |
piroro4560 | 0:062f14a26406 | 63 | |
piroro4560 | 1:8979e85cceb1 | 64 | uint8_t FEP_RX22::getData(uint8_t *data) |
piroro4560 | 1:8979e85cceb1 | 65 | { |
piroro4560 | 1:8979e85cceb1 | 66 | for(int i=0; i<128; i++) data[i] = msgdata[i]; |
piroro4560 | 1:8979e85cceb1 | 67 | return datalen; |
piroro4560 | 1:8979e85cceb1 | 68 | } |
piroro4560 | 0:062f14a26406 | 69 | |
piroro4560 | 1:8979e85cceb1 | 70 | void FEP_RX22::getControllerState() |
piroro4560 | 0:062f14a26406 | 71 | { |
piroro4560 | 1:8979e85cceb1 | 72 | /* コントローラの仕様変更時はここを変える */ |
piroro4560 | 1:8979e85cceb1 | 73 | for (int i_button=0; i_button<2; i_button++) { |
piroro4560 | 1:8979e85cceb1 | 74 | button[i_button] = buffer[(indexofR+9+i_button)%256]; |
piroro4560 | 1:8979e85cceb1 | 75 | } |
piroro4560 | 1:8979e85cceb1 | 76 | for (int i_stick=0; i_stick<4; i_stick++) { |
piroro4560 | 1:8979e85cceb1 | 77 | stick[i_stick] = buffer[(indexofR+11+i_stick)%256]; |
piroro4560 | 1:8979e85cceb1 | 78 | } |
piroro4560 | 1:8979e85cceb1 | 79 | for (int i_trigger=0; i_trigger<2; i_trigger++) { |
piroro4560 | 1:8979e85cceb1 | 80 | trigger[i_trigger] = buffer[(indexofR+15+i_trigger)%256]; |
piroro4560 | 1:8979e85cceb1 | 81 | } |
piroro4560 | 1:8979e85cceb1 | 82 | |
piroro4560 | 1:8979e85cceb1 | 83 | return; |
piroro4560 | 0:062f14a26406 | 84 | } |
piroro4560 | 0:062f14a26406 | 85 | |
piroro4560 | 0:062f14a26406 | 86 | bool FEP_RX22::getButton(uint8_t n) |
piroro4560 | 0:062f14a26406 | 87 | { |
piroro4560 | 0:062f14a26406 | 88 | if (n<8) { |
piroro4560 | 0:062f14a26406 | 89 | return (button[0]>>n) & 1; |
piroro4560 | 0:062f14a26406 | 90 | } else { |
piroro4560 | 0:062f14a26406 | 91 | return (button[1]>>(n-8)) & 1; |
piroro4560 | 0:062f14a26406 | 92 | } |
piroro4560 | 0:062f14a26406 | 93 | } |
piroro4560 | 0:062f14a26406 | 94 | |
piroro4560 | 0:062f14a26406 | 95 | int16_t FEP_RX22::getStick(uint8_t n) |
piroro4560 | 0:062f14a26406 | 96 | { |
piroro4560 | 0:062f14a26406 | 97 | if (n%2) return 128-stick[n]; |
piroro4560 | 0:062f14a26406 | 98 | else return stick[n]-128; |
piroro4560 | 0:062f14a26406 | 99 | } |
piroro4560 | 0:062f14a26406 | 100 | |
piroro4560 | 0:062f14a26406 | 101 | int16_t FEP_RX22::getTrigger(uint8_t n) |
piroro4560 | 0:062f14a26406 | 102 | { |
piroro4560 | 0:062f14a26406 | 103 | return trigger[n]; |
piroro4560 | 0:062f14a26406 | 104 | } |
piroro4560 | 0:062f14a26406 | 105 | |
piroro4560 | 1:8979e85cceb1 | 106 | bool FEP_RX22::getStatus() |
piroro4560 | 1:8979e85cceb1 | 107 | { |
piroro4560 | 1:8979e85cceb1 | 108 | return status; |
piroro4560 | 0:062f14a26406 | 109 | } |