I messed up the merge, so pushing it over to another repo so I don't lose it. Will tidy up and remove later

Dependencies:   BufferedSerial FatFileSystemCpp mbed

VIPSSerialProtocol.h

Committer:
AndyA
Date:
2021-01-15
Revision:
0:97661408d0f9
Child:
1:dd1f7e162f91

File content as of revision 0:97661408d0f9:

#ifndef __VIPSSERIALPROTOCOL_H__
#define __VIPSSERIALPROTOCOL_H__

#include "mbed.h"
#include "position.h"
#include "BufferedSerial.h"

extern const char* VIPSStatusMessages[];

class VIPSSerial { 

public:    

    VIPSSerial(const PinName Rx, const PinName Tx);
    void onSerialRx();
    int getStatusMessage() {int tmp=statusMessage; statusMessage=0; return tmp;}
    void fakeRX();

    // send all position outputs rather than just when requested.
    void sendAllUpdated(bool enable);

    // send a position output for the requested time. Times are based on the global TimeSinceLastFrame timer.
    position* sendPositionForTime(uint32_t timeValue);
    position* getWaitingPostion() {position *ptr = outputPtr; outputPtr=NULL; return ptr;}

private:

    struct posAndTime_s {
        uint32_t time;
        position pos;
    };

    void processRxMessage();
    void getCRC(unsigned char* data, int len, unsigned char* checksum);
    bool checkCRC(unsigned char* data);
    void sendResponse(unsigned char function, unsigned char* data, int dataLen);
    void sendAck(unsigned char function);
    void sendNack(unsigned char function);
    void sendVBOXTime();
    void parsePostionInput_legacy();
    void parsePostionInput_mocap();
    bool checkNewPacketRC(unsigned char* data);
    BufferedSerial _port;
    unsigned char messageInBuffer[128];
    unsigned char messageOutBuffer[16];    
    #define posHistoryLen 3
    struct posAndTime_s lastPositions[posHistoryLen];
    int nextPosition;

    position outputPosition;
    position *outputPtr;

    int messagePrt;
    int messageLength;
    int statusMessage;
    bool enableAllUpdates;
    bool newFormatMsg;
    uint32_t pointCount;

};

#endif