Arianna autonomous DAQ firmware
Dependencies: mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW
SnClockSetFrame.h
- Committer:
- uci1
- Date:
- 2013-10-05
- Revision:
- 40:1324da35afd4
- Child:
- 84:80b15993944e
File content as of revision 40:1324da35afd4:
#ifndef SNS_SnClockSetFrame #define SNS_SnClockSetFrame #include "mbed.h" #include <stdint.h> #include "SnCommWin.h" class SnClockSetFrame { public: static const uint8_t kIOVers; // MUST BE INCREASED if any member var changes static const uint32_t kMaxSizeOf = sizeof(uint8_t) + (3u*sizeof(uint32_t)) + sizeof(int); private: uint32_t fPrevTime; uint32_t fSetTime; Timer fSinceSet; void ResetCCtimer() { fSinceSet.reset(); fSinceSet.start(); } public: SnClockSetFrame() : fPrevTime(0), fSetTime(0) {} virtual ~SnClockSetFrame() {} void SetClocks(const uint32_t prev, const uint32_t stim) { ResetCCtimer(); fPrevTime = prev; fSetTime = stim; } static uint32_t SizeOf(const uint8_t rv=SnClockSetFrame::kIOVers) { return kMaxSizeOf; } template<class T> SnCommWin::ECommWinResult WriteTo(T& x) { // expect 'x' to be a MODSERIAL or a char const* or a FILE* x = SnBitUtils::WriteTo(x, kIOVers); x = SnBitUtils::WriteTo(x, fPrevTime); x = SnBitUtils::WriteTo(x, fSetTime); x = SnBitUtils::WriteTo(x, static_cast<uint32_t>(time(0))); x = SnBitUtils::WriteTo(x, static_cast<int32_t>(fSinceSet.read_us())); // read_us returns a signed int for some reason. so we keep that // convention and merely make the number of bits explicit via the // cast. changing to an unsigned int is left for later. return SnCommWin::kOkMsgSent; } template<class T> static SnCommWin::ECommWinResult ReadFrom(T& b, uint32_t& prev, uint32_t& stim, uint32_t& ctim, int32_t& ss) { uint8_t Rv=0; b = SnBitUtils::ReadFrom(b, Rv); b = SnBitUtils::ReadFrom(b, prev); b = SnBitUtils::ReadFrom(b, stim); b = SnBitUtils::ReadFrom(b, ctim); b = SnBitUtils::ReadFrom(b, ss); return SnCommWin::kOkWithMsg; } }; #endif // SNS_SnClockSetFrame