Skip to content
Snippets Groups Projects
commsControl.h 1.52 KiB
Newer Older
#ifndef COMMS_CONTROL_H
#define COMMS_CONTROL_H

#include <Arduino.h>
#include "Queue.h"

#include "commsConstants.h"
#include "commsFormat.h"

///////////////////////////////////////////////////////////////////////////
// class to provide simple communication protocol based on the data format
class commsControl {
public:
    commsControl(uint32_t baudrate = 115200);

    void beginSerial();

    // TODO: passed as struct, or simply array of size and memcpy? should be dataType or just define?
    void registerData(dataType type, dataFormat* values);

    void sender();
    void receiver();

private:
    DataQueue<commsFormat>* getQueue(uint8_t address);

    void sendQueue   (DataQueue<commsFormat>* queue);
    void resendPacket (DataQueue<commsFormat>* queue);
    void receivePacket(DataQueue<commsFormat>* queue);
    void finishPacket (DataQueue<commsFormat>* queue);

    bool encoder(uint8_t* data, uint8_t dataSize);
    bool decoder(uint8_t* data, uint8_t dataStart, uint8_t dataStop);

    void sendPacket(commsFormat* packet);

private:
    DataQueue<commsALARM> queueAlarm_;
    DataQueue<commsDATA>  queueData_ ;
    DataQueue<commsCMD>   queueCmd_  ;

    commsFormat commsTmp_;

    uint32_t baudrate_;

    uint64_t lastTransTime_;

    uint8_t commsReceived_[CONST_MAX_SIZE_BUFFER];
    uint8_t commsReceivedSize_;
    uint8_t commsSend_    [CONST_MAX_SIZE_BUFFER];
    uint8_t commsSendSize_;

    uint8_t lastTrans_[CONST_MAX_SIZE_BUFFER];
    uint8_t startTransIndex_;
    uint8_t lastTransIndex_;

    bool foundStart_;
};

#endif