Arianna autonomous DAQ firmware

Dependencies:   mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW

SnCommWin.h

Committer:
uci1
Date:
2012-08-10
Revision:
10:3c93db1cfb12
Parent:
8:95a325df1f6b
Child:
12:d472f9811262

File content as of revision 10:3c93db1cfb12:

#ifndef SN_SnCommWin
#define SN_SnCommWin

#include "mbed.h"
#include <stdint.h>

#include "SnConfigFrame.h"
class SnEventFrame;
class SnPowerFrame;

// ABC for communication types

class SnCommWin {
 public:
    enum ECommWinResult {
        kUndefFail,     // undefined fail type
        kCanNotConnect, // unable to connect to port
        kFailTimeout,   // timed out but message required
        kFailNoneSent,  // none of the message sent
        kFailPartSent,  // only part of the message sent
        kUnexpectedRec, // unexpected / unhandled message received
        kAllFails,      // to be used for "if (ret > kAllFails) ==> success"
        // only successes should go below
        kConnected,     // connection established, no messaging attempted
        kOkMsgSent,     // message sent without waiting for "received" handshake
        kOkNoMsg,       // timed out with no message, but that is ok
        kOkWithMsg      // successfully received message
    };
        

 protected:
    virtual ECommWinResult SendFileContents(FILE* inf,
                                            const SnConfigFrame& curConf,
                                            SnEventFrame& evt,
                                            SnPowerFrame& pow,
                                            char* const genBuf,
                                            uint32_t nevts,
                                            const uint32_t timeout_clock,
                                            const uint32_t firstEvt=0);

    virtual SnConfigFrame::EDatPackBit GetCommType() const=0;
    
    virtual int32_t ReceiveAll(char* const buf, const uint32_t mlen,
                               const uint32_t timeout_clock)=0;
    virtual int32_t SendAll(char* const data, const uint32_t length,
                            const uint32_t timeout_clock)=0;

 public:
    virtual ~SnCommWin() {}
    
    virtual void Set(const SnConfigFrame& conf)=0;
    
    virtual ECommWinResult  OpenWindow(const uint32_t timeout,
                                       const bool sendStatus,
                                       const SnConfigFrame& conf,
                                       const SnEventFrame& evt,
                                       const SnPowerFrame& pow,
                                       const uint16_t seq,
                                       const float thmrate,
                                       const float evtrate,
                                       char* const genBuf)=0;
    
    virtual bool            Connect(const uint32_t timeout)=0;

    virtual ECommWinResult  WaitHandshake(const uint32_t timeout,
                                          char* const buf,
                                          const uint32_t bsize,
                                          uint8_t& hndShkCode);
    
    ECommWinResult  GetConfig(SnConfigFrame& conf,
                              const uint32_t timeOut,
                              char* const confBuf,
                              const uint32_t bsize);
    
    ECommWinResult  SendStatus(const SnConfigFrame& conf,
                               const SnEventFrame& evt,
                               const SnPowerFrame& pow,
                               const uint16_t seq,
                               const float thmrate,
                               const float evtrate,
                               char* const genBuf,
                               const uint32_t timeout_clock);
            
    ECommWinResult SendFilename(const char* fn,
                                char* const genBuf,
                                const uint32_t timeout_clock);

    ECommWinResult SendData(FILE* inf, const char* infn,
                            const SnConfigFrame& curConf,
                            SnEventFrame& evt,
                            SnPowerFrame& pow,
                            char* const genBuf,
                            const uint32_t bsize,
                            const uint32_t nevts,
                            const uint32_t timeout_clock,
                            const uint32_t firstEvt=0);

    ECommWinResult  SendData(SnConfigFrame& conf,
                             SnEventFrame& evt,
                             SnPowerFrame& pow,
                             char* const genBuf,
                             const uint32_t bsize,
                             const uint32_t timeout);

};

#endif // SN_SnCommWin