Arianna autonomous DAQ firmware

Dependencies:   mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW

SnCommWin.h

Committer:
uci1
Date:
2013-10-08
Revision:
41:d6f5e2f09e07
Parent:
40:1324da35afd4
Child:
56:0bba0ef15697

File content as of revision 41:d6f5e2f09e07:

#ifndef SN_SnCommWin
#define SN_SnCommWin

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

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

// DAQ station communication utilities

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
        kOkStopComm,    // received signal to stop communicating
        kOkMsgSent,     // message sent without waiting for "received" handshake
        kOkNoMsg,       // timed out with no message, but that is ok
        kOkWithMsg,     // successfully received message
        kOkWthMsgNoConf,// successfully received message and it says to stick with the same config
        kOkWthMsgDidDel // successfully received message and deleted a file because of it
    };

    static const char*    kLocalDir;          // the local mbed directory
    static const char*    kDelAllConfCodeStr; // a magic string to confirm deletion of all files on the SD card
    static const uint8_t  kDelAllConfCodeLen; // the length of the magic string
 
 private:
    SnCommWin::ECommWinResult GetFilename(const uint32_t timeout,
                                          char* const buf,
                                          const uint32_t namelen);
    SnCommWin::ECommWinResult GetLocalFile(std::string fname,
                                           char* const buf,
                                           const uint32_t bsize,
                                           const uint32_t timeout);
    int16_t                   LoopLocalDirBinFiles(const bool doRemove,
                                                   const std::string& fname);
    SnCommWin::ECommWinResult GetHeader(const uint32_t timeOut,
                                        char* const buf,
                                        const uint32_t bsize,
                                        uint8_t& mcode,
                                        uint32_t& mlen);


 protected:
    SnCommPeripheral*           fComm; // the communication peripheral. deleted in dtor!!

    virtual int32_t SendFileBlock(FILE* inf, 
                                  const uint8_t blockHeaderCode,
                                  const uint32_t blockSize,
                                  char* const genBuf,
                                  int32_t& bytesToSend,
                                  const uint32_t timeout);

    virtual int32_t SendFileContents(FILE* inf,
                                     const SnConfigFrame& curConf,
                                     SnEventFrame& evt,
                                     SnPowerFrame& pow,
                                     char* const genBuf,
                                     uint32_t nevts,
                                     int32_t& bytesToBeSent,
                                     const uint32_t timeout_clock);
    
 public:
    SnCommWin(SnCommPeripheral* p);
    virtual ~SnCommWin();
    
    // probably no need to overload
    virtual bool            TrySetSysTimeUnix(const uint32_t timeout,
                                              uint32_t& prvTime,
                                              uint32_t& setTime);
    virtual bool            Connect(const uint32_t timeout);
    virtual bool            CloseConn(const uint32_t timeout);
    virtual bool            PowerDown(const uint32_t timeout);
    
    // optional overloads
    virtual void Set(const SnConfigFrame& conf) {}
    
    // mandatory overloads
    virtual SnConfigFrame::EDatPackBit GetCommType() const=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            GetDeleteAllConfirmCode(const SnConfigFrame& conf,
                                                    const uint32_t length,
                                                    const uint32_t timeout,
                                                    char* const buf,
                                                    const uint32_t bsize);
    virtual ECommWinResult  WaitHandshake(const SnConfigFrame& conf,
                                          const uint32_t timeout,
                                          char* const buf,
                                          const uint32_t bsize,
                                          uint8_t& hndShkCode,
                                          uint32_t* hndShkLen=0);

    virtual ECommWinResult  HandleHandshake(FILE* inf, const char* infn,
                                            const SnConfigFrame& curConf,
                                            SnEventFrame& evt,
                                            SnPowerFrame& pow,
                                            char* const genBuf,
                                            const uint32_t bsize,
                                            const uint32_t handshakeTimeout,
                                            const uint8_t hndshk,
                                            const uint32_t hndlen,
                                            const uint32_t* nevts=0);
    int32_t                 SendHndshkReq(char* const genBuf,
                                          const uint32_t timeout_clock);
    
    ECommWinResult  SendSignalStrength(char* const genBuf,
                                       SnSignalStrengthFrame& sigstr,
                                       const uint32_t timeout_clock);

    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);
            
    SnCommWin::ECommWinResult SendString(const char* str,
                                         const uint32_t timeout);

    int32_t SendFilename(const char* fn,
                         char* const genBuf,
                         int32_t&    bytesToBeSent,
                         const uint32_t timeout_clock);

    ECommWinResult SendDataFromFile(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,
                            uint8_t* hndcode=0,
                            uint32_t* hndlen=0);

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

#endif // SN_SnCommWin