APP 4

Dependencies:   mbed CRC16 mbed-rtos

MEF.cpp

Committer:
manl2003
Date:
2016-02-21
Revision:
10:51ee22e230c7
Child:
12:715af3660c73

File content as of revision 10:51ee22e230c7:

#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);
}