NHK2020_master_program

Dependencies:   mbed QEI

FEP2/FEP.cpp

Committer:
skouki
Date:
2020-11-07
Revision:
2:e2ec64c77b6e
Parent:
1:496ab5127b06

File content as of revision 2:e2ec64c77b6e:

#include "FEP.h"

FEP::FEP(PinName tx, PinName rx, uint8_t addr, int baud) :
    RawSerial(tx, rx, baud)
{
    _address = addr;
}

void FEP::startReceive(uint16_t dataSize)
{
    bufferSize = dataSize + 15;
    bufferPoint = 0;
    receivedBytes = 0;
    buffer = new uint8_t[bufferSize];
    data  = new uint8_t[dataSize];
    attach(callback(this, &FEP::receiveByte));
}

void FEP::getData(uint8_t data_[])
{
    for(int i = 0; i < bufferSize - 15; i++) {
        data_[i] = data[i];
    }
}

void FEP::sendData(uint8_t *data_[], uint8_t length)
{
    uint8_t checksum = 0x00;

    printf("@TBN%03d%03d", _address, length + 1);
    for (int j = 0; j < length; j++) {
        checksum += *data_[j];
        putc(*data_[j]);
    }
    putc(checksum);
    putc('\r');
    putc('\n');
}

void FEP::receiveByte()
{
    buffer[bufferPoint % bufferSize] = getc();

    if(bufferPoint != 0xff) {
        ++bufferPoint;
    } else {
        bufferPoint = (255%bufferSize)+1;
    }

    ++receivedBytes;

    if(receivedBytes >= bufferSize) checkData();
}

void FEP::checkData()
{
    for(int i = 0; i < bufferSize; i++) {
        if(buffer[i % bufferSize] == FEP_HEADER0 && buffer[(i + 1) % bufferSize] == FEP_HEADER1 && buffer[(i + 2) % bufferSize] == FEP_HEADER2) {
            uint8_t checksum = 0x00;
            for(int j = 9; j < bufferSize - 6; j++) {
                checksum += buffer[(i + j)% bufferSize];
            }
            if(checksum == buffer[(i + bufferSize - 6)% bufferSize]) {
                for(int j = 9; j < bufferSize - 6; j++) {
                    data[j - 9] = buffer[(i + j) % bufferSize];
                }
                receivedBytes = 0;
                return;
            }
        }
    }
}