Arianna autonomous DAQ firmware

Dependencies:   mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW

Committer:
uci1
Date:
Thu May 23 22:26:39 2013 +0000
Revision:
36:87865913ae6f
Parent:
27:efc4d654b139
Child:
37:ff95e7070f26
this will not compile. just starting to modularize the comms and essential packages for extraction (to use in both the DAQ and monitoring station)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
uci1 1:e392595b4b76 1 #ifndef SN_SnCommWin
uci1 1:e392595b4b76 2 #define SN_SnCommWin
uci1 1:e392595b4b76 3
uci1 1:e392595b4b76 4 #include "mbed.h"
uci1 1:e392595b4b76 5 #include <stdint.h>
uci1 21:ce51bb0ba4a5 6 #include <string>
uci1 1:e392595b4b76 7
uci1 8:95a325df1f6b 8 #include "SnConfigFrame.h"
uci1 1:e392595b4b76 9 class SnEventFrame;
uci1 8:95a325df1f6b 10 class SnPowerFrame;
uci1 1:e392595b4b76 11
uci1 1:e392595b4b76 12 // ABC for communication types
uci1 1:e392595b4b76 13
uci1 1:e392595b4b76 14 class SnCommWin {
uci1 36:87865913ae6f 15 /*
uci1 1:e392595b4b76 16 public:
uci1 1:e392595b4b76 17 enum ECommWinResult {
uci1 1:e392595b4b76 18 kUndefFail, // undefined fail type
uci1 1:e392595b4b76 19 kCanNotConnect, // unable to connect to port
uci1 1:e392595b4b76 20 kFailTimeout, // timed out but message required
uci1 2:e67f7c158087 21 kFailNoneSent, // none of the message sent
uci1 1:e392595b4b76 22 kFailPartSent, // only part of the message sent
uci1 3:24c5f0f50bf1 23 kUnexpectedRec, // unexpected / unhandled message received
uci1 1:e392595b4b76 24 kAllFails, // to be used for "if (ret > kAllFails) ==> success"
uci1 1:e392595b4b76 25 // only successes should go below
uci1 1:e392595b4b76 26 kConnected, // connection established, no messaging attempted
uci1 27:efc4d654b139 27 kOkStopComm, // received signal to stop communicating
uci1 1:e392595b4b76 28 kOkMsgSent, // message sent without waiting for "received" handshake
uci1 1:e392595b4b76 29 kOkNoMsg, // timed out with no message, but that is ok
uci1 12:d472f9811262 30 kOkWithMsg, // successfully received message
uci1 12:d472f9811262 31 kOkWthMsgNoConf // successfully received message and it says to stick with the same config
uci1 1:e392595b4b76 32 };
uci1 36:87865913ae6f 33 */
uci1 23:ccf39298f205 34 static const size_t kMaxStrLen = 512; // max bytes for a string send. prevent something crazy
uci1 25:57b2627fe756 35 static const char* kLocalDir; // the local mbed directory
uci1 27:efc4d654b139 36 static const char* kDelAllConfCodeStr; // a magic string to confirm deletion of all files on the SD card
uci1 27:efc4d654b139 37 static const uint8_t kDelAllConfCodeLen; // the length of the magic string
uci1 21:ce51bb0ba4a5 38
uci1 21:ce51bb0ba4a5 39 private:
uci1 21:ce51bb0ba4a5 40 SnCommWin::ECommWinResult GetFilename(const uint32_t timeout,
uci1 21:ce51bb0ba4a5 41 char* const buf,
uci1 21:ce51bb0ba4a5 42 const uint32_t namelen);
uci1 21:ce51bb0ba4a5 43 SnCommWin::ECommWinResult GetLocalFile(std::string fname,
uci1 21:ce51bb0ba4a5 44 char* const buf,
uci1 21:ce51bb0ba4a5 45 const uint32_t bsize,
uci1 21:ce51bb0ba4a5 46 const uint32_t timeout);
uci1 21:ce51bb0ba4a5 47 int16_t LoopLocalDirBinFiles(const bool doRemove,
uci1 21:ce51bb0ba4a5 48 const std::string& fname);
uci1 21:ce51bb0ba4a5 49 SnCommWin::ECommWinResult GetHeader(const uint32_t timeOut,
uci1 21:ce51bb0ba4a5 50 char* const buf,
uci1 21:ce51bb0ba4a5 51 const uint32_t bsize,
uci1 21:ce51bb0ba4a5 52 uint8_t& mcode,
uci1 21:ce51bb0ba4a5 53 uint32_t& mlen);
uci1 21:ce51bb0ba4a5 54
uci1 1:e392595b4b76 55
uci1 3:24c5f0f50bf1 56 protected:
uci1 12:d472f9811262 57 virtual int SendFileBlock(FILE* inf,
uci1 12:d472f9811262 58 const uint8_t blockHeaderCode,
uci1 12:d472f9811262 59 const uint32_t blockSize,
uci1 12:d472f9811262 60 char* const genBuf,
uci1 12:d472f9811262 61 const uint32_t timeout);
uci1 12:d472f9811262 62
uci1 8:95a325df1f6b 63 virtual ECommWinResult SendFileContents(FILE* inf,
uci1 8:95a325df1f6b 64 const SnConfigFrame& curConf,
uci1 8:95a325df1f6b 65 SnEventFrame& evt,
uci1 8:95a325df1f6b 66 SnPowerFrame& pow,
uci1 8:95a325df1f6b 67 char* const genBuf,
uci1 8:95a325df1f6b 68 uint32_t nevts,
uci1 12:d472f9811262 69 const uint32_t timeout_clock);
uci1 8:95a325df1f6b 70
uci1 21:ce51bb0ba4a5 71 // send and receive must not kick the watchdog, or a bad timeout
uci1 21:ce51bb0ba4a5 72 // could block a station forever!
uci1 8:95a325df1f6b 73 virtual int32_t ReceiveAll(char* const buf, const uint32_t mlen,
uci1 8:95a325df1f6b 74 const uint32_t timeout_clock)=0;
uci1 8:95a325df1f6b 75 virtual int32_t SendAll(char* const data, const uint32_t length,
uci1 8:95a325df1f6b 76 const uint32_t timeout_clock)=0;
uci1 12:d472f9811262 77
uci1 12:d472f9811262 78 bool IsTimedOut(const uint32_t timeout_clock) const;
uci1 8:95a325df1f6b 79
uci1 12:d472f9811262 80
uci1 1:e392595b4b76 81 public:
uci1 1:e392595b4b76 82 virtual ~SnCommWin() {}
uci1 1:e392595b4b76 83
uci1 16:744ce85aede2 84 virtual SnConfigFrame::EDatPackBit GetCommType() const=0;
uci1 16:744ce85aede2 85
uci1 16:744ce85aede2 86 virtual bool TrySetSysTimeUnix(const uint32_t timeout) { return 0; }
uci1 16:744ce85aede2 87
uci1 8:95a325df1f6b 88 virtual void Set(const SnConfigFrame& conf)=0;
uci1 8:95a325df1f6b 89
uci1 1:e392595b4b76 90 virtual ECommWinResult OpenWindow(const uint32_t timeout,
uci1 1:e392595b4b76 91 const bool sendStatus,
uci1 1:e392595b4b76 92 const SnConfigFrame& conf,
uci1 1:e392595b4b76 93 const SnEventFrame& evt,
uci1 8:95a325df1f6b 94 const SnPowerFrame& pow,
uci1 10:3c93db1cfb12 95 const uint16_t seq,
uci1 10:3c93db1cfb12 96 const float thmrate,
uci1 10:3c93db1cfb12 97 const float evtrate,
uci1 2:e67f7c158087 98 char* const genBuf)=0;
uci1 1:e392595b4b76 99
uci1 1:e392595b4b76 100 virtual bool Connect(const uint32_t timeout)=0;
uci1 15:f2569d8e4176 101 virtual bool CloseConn(const uint32_t timeout)=0;
uci1 16:744ce85aede2 102 virtual uint32_t GetConnectTimeout() const;
uci1 16:744ce85aede2 103 virtual uint32_t GetListenTimeout() const;
uci1 27:efc4d654b139 104 virtual bool GetDeleteAllConfirmCode(const SnConfigFrame& conf,
uci1 27:efc4d654b139 105 const uint32_t length,
uci1 27:efc4d654b139 106 const uint32_t timeout,
uci1 27:efc4d654b139 107 char* const buf,
uci1 27:efc4d654b139 108 const uint32_t bsize);
uci1 21:ce51bb0ba4a5 109 virtual ECommWinResult WaitHandshake(const SnConfigFrame& conf,
uci1 21:ce51bb0ba4a5 110 const uint32_t timeout,
uci1 3:24c5f0f50bf1 111 char* const buf,
uci1 6:6f002d202f59 112 const uint32_t bsize,
uci1 27:efc4d654b139 113 uint8_t& hndShkCode,
uci1 27:efc4d654b139 114 uint32_t* hndShkLen=0);
uci1 3:24c5f0f50bf1 115
uci1 8:95a325df1f6b 116 ECommWinResult GetConfig(SnConfigFrame& conf,
uci1 8:95a325df1f6b 117 const uint32_t timeOut,
uci1 8:95a325df1f6b 118 char* const confBuf,
uci1 8:95a325df1f6b 119 const uint32_t bsize);
uci1 1:e392595b4b76 120
uci1 8:95a325df1f6b 121 ECommWinResult SendStatus(const SnConfigFrame& conf,
uci1 8:95a325df1f6b 122 const SnEventFrame& evt,
uci1 8:95a325df1f6b 123 const SnPowerFrame& pow,
uci1 10:3c93db1cfb12 124 const uint16_t seq,
uci1 10:3c93db1cfb12 125 const float thmrate,
uci1 10:3c93db1cfb12 126 const float evtrate,
uci1 8:95a325df1f6b 127 char* const genBuf,
uci1 8:95a325df1f6b 128 const uint32_t timeout_clock);
uci1 1:e392595b4b76 129
uci1 23:ccf39298f205 130 SnCommWin::ECommWinResult SendString(const char* str,
uci1 23:ccf39298f205 131 const uint32_t timeout);
uci1 23:ccf39298f205 132
uci1 8:95a325df1f6b 133 ECommWinResult SendFilename(const char* fn,
uci1 8:95a325df1f6b 134 char* const genBuf,
uci1 8:95a325df1f6b 135 const uint32_t timeout_clock);
uci1 6:6f002d202f59 136
uci1 8:95a325df1f6b 137 ECommWinResult SendData(FILE* inf, const char* infn,
uci1 8:95a325df1f6b 138 const SnConfigFrame& curConf,
uci1 8:95a325df1f6b 139 SnEventFrame& evt,
uci1 8:95a325df1f6b 140 SnPowerFrame& pow,
uci1 8:95a325df1f6b 141 char* const genBuf,
uci1 8:95a325df1f6b 142 const uint32_t bsize,
uci1 8:95a325df1f6b 143 const uint32_t nevts,
uci1 8:95a325df1f6b 144 const uint32_t timeout_clock,
uci1 25:57b2627fe756 145 const uint32_t handshakeTimeout,
uci1 25:57b2627fe756 146 uint8_t* hndres=0);
uci1 6:6f002d202f59 147
uci1 8:95a325df1f6b 148 ECommWinResult SendData(SnConfigFrame& conf,
uci1 8:95a325df1f6b 149 SnEventFrame& evt,
uci1 8:95a325df1f6b 150 SnPowerFrame& pow,
uci1 8:95a325df1f6b 151 char* const genBuf,
uci1 8:95a325df1f6b 152 const uint32_t bsize,
uci1 12:d472f9811262 153 const uint32_t timeout,
uci1 12:d472f9811262 154 const uint32_t handshakeTimeout);
uci1 8:95a325df1f6b 155
uci1 25:57b2627fe756 156 static
uci1 25:57b2627fe756 157 void CapitalizeInPlace(std::string::iterator s,
uci1 25:57b2627fe756 158 const std::string::const_iterator send);
uci1 25:57b2627fe756 159
uci1 18:55f1581f2ee4 160 // for debugging
uci1 18:55f1581f2ee4 161 void dispStrBytes(const char* const s, const uint32_t len) const {
uci1 18:55f1581f2ee4 162 const char* c = s;
uci1 18:55f1581f2ee4 163 for (uint32_t i=0; i<len; ++i, ++c) {
uci1 18:55f1581f2ee4 164 if (*c>0x1F && *c<0x7F) {
uci1 18:55f1581f2ee4 165 printf("%c", *c);
uci1 18:55f1581f2ee4 166 } else {
uci1 18:55f1581f2ee4 167 printf(".x%02x.", *c);
uci1 18:55f1581f2ee4 168 }
uci1 18:55f1581f2ee4 169 }
uci1 18:55f1581f2ee4 170 }
uci1 18:55f1581f2ee4 171
uci1 1:e392595b4b76 172 };
uci1 1:e392595b4b76 173
uci1 1:e392595b4b76 174 #endif // SN_SnCommWin