APP 4

Dependencies:   mbed CRC16 mbed-rtos

Revision:
12:715af3660c73
Parent:
10:51ee22e230c7
Child:
14:9505b98c6623
--- a/MEF.cpp	Sun Feb 21 21:47:13 2016 +0000
+++ b/MEF.cpp	Mon Feb 22 16:56:48 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