APP 4

Dependencies:   mbed CRC16 mbed-rtos

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