APP 4
Dependencies: mbed CRC16 mbed-rtos
Diff: MEF.cpp
- Revision:
- 14:9505b98c6623
- Parent:
- 12:715af3660c73
- Child:
- 15:ed9511c3aac6
diff -r 195826b8c61b -r 9505b98c6623 MEF.cpp --- a/MEF.cpp Mon Feb 22 17:52:26 2016 +0000 +++ b/MEF.cpp Mon Feb 22 18:06:59 2016 +0000 @@ -1,4 +1,5 @@ #include "MEF.h" +#include "CRC16.h" void MEF::ReceiveBit(bool bit) { @@ -8,7 +9,7 @@ { m_InputBuffer[m_Counter] = bit; m_Counter++; - if(preambleChecker()) + if(m_Counter == 8 ) { state = START; m_Counter = 0; @@ -24,6 +25,11 @@ state = TYPE; m_Counter = 0; } + else + { + //BOOMBOOM + _decodeError(); + } }break; @@ -51,14 +57,52 @@ }break; case DATA : { + m_BSPayload[m_Counter] = bit; + if ((m_Counter % 8) == 0 && m_Counter != 0) + { + m_CPayload[m_Counter / 8] = (m_BSPayload[m_Counter] << 0) | (m_BSPayload[m_Counter - 1] << 1) | (m_BSPayload[m_Counter - 2] << 2) | (m_BSPayload[m_Counter - 3] << 3) | (m_BSPayload[m_Counter - 4] << 4) | (m_BSPayload[m_Counter - 5] << 5) | (m_BSPayload[m_Counter - 6] << 6) | (m_BSPayload[m_Counter - 7] << 7); + } + m_Counter++; + if(m_Counter == m_DataSize*8) + { + + state = CRC16STATE; + CRC16 crc16; + m_CRC = crc16.calculateCRC16(m_CPayload, m_DataSize); + m_Counter = 0; + } }break; - case CRC16 : + case CRC16STATE : { + m_InputBuffer[m_Counter] = bit; + m_Counter++; + if(m_Counter == 16) + { + if(!compareCRC()) + { + //BOOMBOOM + _decodeError(); + } + m_Counter = 0; + } }break; case END : { - + m_InputBuffer[m_Counter] = bit; + m_Counter++; + if(m_Counter == 8 && startChecker()) + { + state = PREAMBLE; + m_Counter = 0; + //CALLBACK + //_decodeCallback(); + } + else + { + //BOOMBOOM + _decodeError(); + } }break; } } @@ -94,4 +138,31 @@ int MEF::calculateSize() { return (m_InputBuffer[0] << 7) | (m_InputBuffer[1] << 6) | (m_InputBuffer[2] << 5) | (m_InputBuffer[3] << 4) | (m_InputBuffer[4] << 3) | (m_InputBuffer[5] << 2) | (m_InputBuffer[6] << 1) | (m_InputBuffer[7] << 0); +} + +bool MEF::compareCRC() +{ + unsigned short incommingCRC = (m_InputBuffer[0] << 0) | + (m_InputBuffer[1] << 1) | + (m_InputBuffer[2] << 2) | + (m_InputBuffer[3] << 3) | + (m_InputBuffer[4] << 4) | + (m_InputBuffer[5] << 5) | + (m_InputBuffer[6] << 6) | + (m_InputBuffer[7] << 7) | + (m_InputBuffer[8] << 8) | + (m_InputBuffer[9] << 9) | + (m_InputBuffer[10] << 10) | + (m_InputBuffer[11] << 11) | + (m_InputBuffer[12] << 12) | + (m_InputBuffer[13] << 13) | + (m_InputBuffer[14] << 14) | + (m_InputBuffer[15] << 15); + + return m_CRC == incommingCRC; +} + +void MEF::error() +{ + } \ No newline at end of file