APP 4
Dependencies: mbed CRC16 mbed-rtos
MEF.cpp@10:51ee22e230c7, 2016-02-21 (annotated)
- Committer:
- manl2003
- Date:
- Sun Feb 21 21:42:36 2016 +0000
- Revision:
- 10:51ee22e230c7
- Child:
- 12:715af3660c73
asdf
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
manl2003 | 10:51ee22e230c7 | 1 | #include "MEF.h" |
manl2003 | 10:51ee22e230c7 | 2 | |
manl2003 | 10:51ee22e230c7 | 3 | void MEF::ReceiveBit(bool bit) |
manl2003 | 10:51ee22e230c7 | 4 | { |
manl2003 | 10:51ee22e230c7 | 5 | switch (state) |
manl2003 | 10:51ee22e230c7 | 6 | { |
manl2003 | 10:51ee22e230c7 | 7 | case PREAMBLE : |
manl2003 | 10:51ee22e230c7 | 8 | { |
manl2003 | 10:51ee22e230c7 | 9 | m_InputBuffer[m_Counter] = bit; |
manl2003 | 10:51ee22e230c7 | 10 | m_Counter++; |
manl2003 | 10:51ee22e230c7 | 11 | if(preambleChecker()) |
manl2003 | 10:51ee22e230c7 | 12 | { |
manl2003 | 10:51ee22e230c7 | 13 | state = START; |
manl2003 | 10:51ee22e230c7 | 14 | m_Counter = 0; |
manl2003 | 10:51ee22e230c7 | 15 | } |
manl2003 | 10:51ee22e230c7 | 16 | |
manl2003 | 10:51ee22e230c7 | 17 | }break; |
manl2003 | 10:51ee22e230c7 | 18 | case START : |
manl2003 | 10:51ee22e230c7 | 19 | { |
manl2003 | 10:51ee22e230c7 | 20 | m_InputBuffer[m_Counter] = bit; |
manl2003 | 10:51ee22e230c7 | 21 | m_Counter++; |
manl2003 | 10:51ee22e230c7 | 22 | if(m_Counter == 8 && startChecker()) |
manl2003 | 10:51ee22e230c7 | 23 | { |
manl2003 | 10:51ee22e230c7 | 24 | state = TYPE; |
manl2003 | 10:51ee22e230c7 | 25 | m_Counter = 0; |
manl2003 | 10:51ee22e230c7 | 26 | } |
manl2003 | 10:51ee22e230c7 | 27 | |
manl2003 | 10:51ee22e230c7 | 28 | |
manl2003 | 10:51ee22e230c7 | 29 | }break; |
manl2003 | 10:51ee22e230c7 | 30 | case TYPE : |
manl2003 | 10:51ee22e230c7 | 31 | { |
manl2003 | 10:51ee22e230c7 | 32 | m_Counter ++; |
manl2003 | 10:51ee22e230c7 | 33 | if(m_Counter == 8) |
manl2003 | 10:51ee22e230c7 | 34 | { |
manl2003 | 10:51ee22e230c7 | 35 | state = LENGTH; |
manl2003 | 10:51ee22e230c7 | 36 | m_Counter = 0; |
manl2003 | 10:51ee22e230c7 | 37 | } |
manl2003 | 10:51ee22e230c7 | 38 | |
manl2003 | 10:51ee22e230c7 | 39 | }break; |
manl2003 | 10:51ee22e230c7 | 40 | case LENGTH : |
manl2003 | 10:51ee22e230c7 | 41 | { |
manl2003 | 10:51ee22e230c7 | 42 | m_InputBuffer[m_Counter] = bit; |
manl2003 | 10:51ee22e230c7 | 43 | m_Counter++; |
manl2003 | 10:51ee22e230c7 | 44 | if(m_Counter == 8) |
manl2003 | 10:51ee22e230c7 | 45 | { |
manl2003 | 10:51ee22e230c7 | 46 | state = DATA; |
manl2003 | 10:51ee22e230c7 | 47 | m_DataSize = calculateSize(); |
manl2003 | 10:51ee22e230c7 | 48 | m_Counter = 0; |
manl2003 | 10:51ee22e230c7 | 49 | } |
manl2003 | 10:51ee22e230c7 | 50 | |
manl2003 | 10:51ee22e230c7 | 51 | }break; |
manl2003 | 10:51ee22e230c7 | 52 | case DATA : |
manl2003 | 10:51ee22e230c7 | 53 | { |
manl2003 | 10:51ee22e230c7 | 54 | }break; |
manl2003 | 10:51ee22e230c7 | 55 | case CRC16 : |
manl2003 | 10:51ee22e230c7 | 56 | { |
manl2003 | 10:51ee22e230c7 | 57 | |
manl2003 | 10:51ee22e230c7 | 58 | }break; |
manl2003 | 10:51ee22e230c7 | 59 | case END : |
manl2003 | 10:51ee22e230c7 | 60 | { |
manl2003 | 10:51ee22e230c7 | 61 | |
manl2003 | 10:51ee22e230c7 | 62 | }break; |
manl2003 | 10:51ee22e230c7 | 63 | } |
manl2003 | 10:51ee22e230c7 | 64 | } |
manl2003 | 10:51ee22e230c7 | 65 | |
manl2003 | 10:51ee22e230c7 | 66 | bool MEF::preambleChecker() |
manl2003 | 10:51ee22e230c7 | 67 | { |
manl2003 | 10:51ee22e230c7 | 68 | bool temp = false; |
manl2003 | 10:51ee22e230c7 | 69 | bool resultTest1 = true, resultTest2 = true; |
manl2003 | 10:51ee22e230c7 | 70 | for(int i = 0; i < 8; i++) |
manl2003 | 10:51ee22e230c7 | 71 | { |
manl2003 | 10:51ee22e230c7 | 72 | if(m_InputBuffer[i] != temp) |
manl2003 | 10:51ee22e230c7 | 73 | { |
manl2003 | 10:51ee22e230c7 | 74 | resultTest1 = false; |
manl2003 | 10:51ee22e230c7 | 75 | } |
manl2003 | 10:51ee22e230c7 | 76 | if(m_InputBuffer[i] == temp) |
manl2003 | 10:51ee22e230c7 | 77 | { |
manl2003 | 10:51ee22e230c7 | 78 | resultTest2 = false; |
manl2003 | 10:51ee22e230c7 | 79 | } |
manl2003 | 10:51ee22e230c7 | 80 | temp = !temp; |
manl2003 | 10:51ee22e230c7 | 81 | } |
manl2003 | 10:51ee22e230c7 | 82 | return resultTest1 || resultTest2; |
manl2003 | 10:51ee22e230c7 | 83 | } |
manl2003 | 10:51ee22e230c7 | 84 | |
manl2003 | 10:51ee22e230c7 | 85 | bool MEF::startChecker() |
manl2003 | 10:51ee22e230c7 | 86 | { |
manl2003 | 10:51ee22e230c7 | 87 | 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) |
manl2003 | 10:51ee22e230c7 | 88 | { |
manl2003 | 10:51ee22e230c7 | 89 | return true; |
manl2003 | 10:51ee22e230c7 | 90 | } |
manl2003 | 10:51ee22e230c7 | 91 | return false; |
manl2003 | 10:51ee22e230c7 | 92 | } |
manl2003 | 10:51ee22e230c7 | 93 | |
manl2003 | 10:51ee22e230c7 | 94 | int MEF::calculateSize() |
manl2003 | 10:51ee22e230c7 | 95 | { |
manl2003 | 10:51ee22e230c7 | 96 | 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); |
manl2003 | 10:51ee22e230c7 | 97 | } |