APP 4
Dependencies: mbed CRC16 mbed-rtos
Diff: MEF.cpp
- Revision:
- 10:51ee22e230c7
- Child:
- 12:715af3660c73
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MEF.cpp Sun Feb 21 21:42:36 2016 +0000 @@ -0,0 +1,97 @@ +#include "MEF.h" + +void MEF::ReceiveBit(bool bit) +{ + switch (state) + { + case PREAMBLE : + { + m_InputBuffer[m_Counter] = bit; + m_Counter++; + if(preambleChecker()) + { + state = START; + m_Counter = 0; + } + + }break; + case START : + { + m_InputBuffer[m_Counter] = bit; + m_Counter++; + if(m_Counter == 8 && startChecker()) + { + state = TYPE; + m_Counter = 0; + } + + + }break; + case TYPE : + { + m_Counter ++; + if(m_Counter == 8) + { + state = LENGTH; + m_Counter = 0; + } + + }break; + case LENGTH : + { + m_InputBuffer[m_Counter] = bit; + m_Counter++; + if(m_Counter == 8) + { + state = DATA; + m_DataSize = calculateSize(); + m_Counter = 0; + } + + }break; + case DATA : + { + }break; + case CRC16 : + { + + }break; + case END : + { + + }break; + } +} + +bool MEF::preambleChecker() +{ + bool temp = false; + bool resultTest1 = true, resultTest2 = true; + for(int i = 0; i < 8; i++) + { + if(m_InputBuffer[i] != temp) + { + resultTest1 = false; + } + if(m_InputBuffer[i] == temp) + { + resultTest2 = false; + } + temp = !temp; + } + return resultTest1 || resultTest2; +} + +bool MEF::startChecker() +{ + if(m_InputBuffer[0] == 0 && m_InputBuffer[1] == 1 && m_InputBuffer[2] == 1 && m_InputBuffer[3] == 1 && m_InputBuffer[4] == 1 && m_InputBuffer[5] == 1 && m_InputBuffer[6] == 1 && m_InputBuffer[7] == 0) + { + return true; + } + return false; +} + +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); +} \ No newline at end of file