Arianna autonomous DAQ firmware
Dependencies: mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW
Diff: SnSDUtils.h
- Revision:
- 8:95a325df1f6b
- Parent:
- 6:6f002d202f59
- Child:
- 10:3c93db1cfb12
--- a/SnSDUtils.h Sat Aug 04 01:48:55 2012 +0000 +++ b/SnSDUtils.h Wed Aug 08 23:27:37 2012 +0000 @@ -7,6 +7,7 @@ #include "SnCommWin.h" #include "SnBitUtils.h" #include "SnPowerFrame.h" +#include "SnHeaderFrame.h" class SnEventFrame; class SnConfigFrame; @@ -50,8 +51,7 @@ static FILE* OpenNewOutputFile(const uint64_t macadr, - const uint32_t run, - const uint16_t v1, const uint16_t v2); + const uint32_t run); static FILE* OpenExistingFile(const char* name, const bool setcurrent); @@ -63,7 +63,8 @@ char* const buf, const uint32_t bsize, const SnConfigFrame& curConf, - SnEventFrame& evt); + SnEventFrame& evt, + SnPowerFrame& pow); static const char* GetCurFileName() { return fgCurFileName; } @@ -79,28 +80,37 @@ static bool WriteConfig(FILE* efile, const SnConfigFrame& conf); - /* - static - bool WriteFileHeader(FILE* f, const uint64_t macadr, - const uint32_t run, const uint16_t seq, - const uint16_t v1, const uint16_t v2); + template<class T> static - bool ReadFileHeader(FILE* f, uint64_t& macadr, - uint32_t& run, uint16_t& seq, - uint16_t& v1, uint16_t& v2); - */ + SnCommWin::ECommWinResult WritePowerTo(T& f, + const SnPowerFrame& pow, + uint32_t& pnum) { + const SnCommWin::ECommWinResult rs = + SnHeaderFrame::WriteTo(f, SnHeaderFrame::kPowerCode, + SnPowerFrame::SizeOf(SnPowerFrame::kIOvers)); + const SnCommWin::ECommWinResult re = pow.WriteTo(f); + ++pnum; + return (rs<re) ? rs : re; + } + + template<class T> + static + SnCommWin::ECommWinResult ReadBlockHeader(T& f, + uint8_t& mcode, + uint32_t& mlen) { + return SnHeaderFrame::ReadFrom(f, mcode, mlen); + } + template<class T> static SnCommWin::ECommWinResult WriteFileHeader(T& f, const uint64_t macadr, - const uint32_t run, const uint16_t seq, - const uint16_t v1, const uint16_t v2) { + const uint32_t run, const uint16_t seq) { // MUST INCREMENT kIOvers if these writes are altered f = SnBitUtils::WriteTo(f, kIOvers); f = SnBitUtils::WriteTo(f, macadr); f = SnBitUtils::WriteTo(f, run); f = SnBitUtils::WriteTo(f, seq); - SnPowerFrame::WriteTo(f, v1, v2); return SnCommWin::kOkMsgSent; } @@ -108,20 +118,32 @@ static SnCommWin::ECommWinResult ReadFileHeader(T& f, uint64_t& macadr, uint32_t& run, uint16_t& seq, - uint16_t& v1, uint16_t& v2) { + SnPowerFrame* pow=0) { + SnCommWin::ECommWinResult res = SnCommWin::kOkWithMsg; uint8_t Rv=0; f = SnBitUtils::ReadFrom(f, Rv); f = SnBitUtils::ReadFrom(f, macadr); f = SnBitUtils::ReadFrom(f, run); f = SnBitUtils::ReadFrom(f, seq); - if (Rv>1) { - SnPowerFrame::ReadFrom(f, v1, v2); + if (Rv==2) { + uint16_t v1, v2; + f = SnBitUtils::ReadFrom(f, v1); + f = SnBitUtils::ReadFrom(f, v2); + if (pow!=0) { + pow->Set(v1, v2, 0, 0, 0); + } } - return SnCommWin::kOkWithMsg; + return res; } static - uint32_t SizeOfFileHeader() { return kMaxSizeOfFileHdr; } + uint32_t SizeOfFileHeader(const uint8_t rv) { + if (rv==2) { + return kMaxSizeOfFileHdr; + } else { + return sizeof(uint8_t)+sizeof(uint64_t)+sizeof(uint32_t)+sizeof(uint16_t); + } + } friend class SnSDUtilsWhisperer; // to restrict access to specific functions };