Arianna autonomous DAQ firmware
Dependencies: mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW
SnSDUtils.h@5:9cea89700c66, 2012-08-03 (annotated)
- Committer:
- uci1
- Date:
- Fri Aug 03 00:04:34 2012 +0000
- Revision:
- 5:9cea89700c66
- Parent:
- 4:a91682e19d6b
- Child:
- 6:6f002d202f59
Bug fix to power: set 0 for cards and amps if on. Still working on communications. Many debug printouts.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
uci1 | 0:664899e0b988 | 1 | #ifndef SN_SnSDUtils |
uci1 | 0:664899e0b988 | 2 | #define SN_SnSDUtils |
uci1 | 0:664899e0b988 | 3 | |
uci1 | 0:664899e0b988 | 4 | #include <stdio.h> |
uci1 | 0:664899e0b988 | 5 | #include <stdint.h> |
uci1 | 0:664899e0b988 | 6 | |
uci1 | 0:664899e0b988 | 7 | #include "SnCommWin.h" |
uci1 | 5:9cea89700c66 | 8 | #include "SnBitUtils.h" |
uci1 | 5:9cea89700c66 | 9 | #include "SnPowerFrame.h" |
uci1 | 0:664899e0b988 | 10 | |
uci1 | 0:664899e0b988 | 11 | class SnEventFrame; |
uci1 | 0:664899e0b988 | 12 | class SnConfigFrame; |
uci1 | 0:664899e0b988 | 13 | |
uci1 | 0:664899e0b988 | 14 | // a namespace-like class to handle the i/o with the SD card |
uci1 | 0:664899e0b988 | 15 | |
uci1 | 0:664899e0b988 | 16 | class SnSDUtils { |
uci1 | 0:664899e0b988 | 17 | public: |
uci1 | 1:e392595b4b76 | 18 | static const char* const kSDsubDir; |
uci1 | 1:e392595b4b76 | 19 | static const uint8_t kFNBufSize=128; |
uci1 | 1:e392595b4b76 | 20 | static const uint8_t kIOvers; // file I/O version |
uci1 | 5:9cea89700c66 | 21 | static const uint32_t kMaxSizeOfFileHdr; |
uci1 | 0:664899e0b988 | 22 | |
uci1 | 0:664899e0b988 | 23 | private: |
uci1 | 0:664899e0b988 | 24 | |
uci1 | 0:664899e0b988 | 25 | static |
uci1 | 3:24c5f0f50bf1 | 26 | FILE* OpenSDFile(const char* name, const char* mode); |
uci1 | 1:e392595b4b76 | 27 | |
uci1 | 1:e392595b4b76 | 28 | static |
uci1 | 0:664899e0b988 | 29 | uint16_t GetSeqNum(const uint64_t macadr, |
uci1 | 0:664899e0b988 | 30 | const uint32_t run); |
uci1 | 0:664899e0b988 | 31 | |
uci1 | 0:664899e0b988 | 32 | static |
uci1 | 0:664899e0b988 | 33 | const char* GetOutFileName(const uint64_t macadr, |
uci1 | 0:664899e0b988 | 34 | const uint32_t run, |
uci1 | 0:664899e0b988 | 35 | const uint16_t seq); |
uci1 | 0:664899e0b988 | 36 | |
uci1 | 0:664899e0b988 | 37 | static |
uci1 | 0:664899e0b988 | 38 | void DeleteFile(FILE*& f, const char* fname); |
uci1 | 0:664899e0b988 | 39 | |
uci1 | 0:664899e0b988 | 40 | static char fgCurFileName[kFNBufSize]; |
uci1 | 1:e392595b4b76 | 41 | static FILE* fgCurFile; |
uci1 | 0:664899e0b988 | 42 | |
uci1 | 0:664899e0b988 | 43 | public: |
uci1 | 0:664899e0b988 | 44 | SnSDUtils() {} |
uci1 | 0:664899e0b988 | 45 | virtual ~SnSDUtils() {} |
uci1 | 0:664899e0b988 | 46 | |
uci1 | 0:664899e0b988 | 47 | static |
uci1 | 0:664899e0b988 | 48 | int CloseOutputFile(FILE* f) |
uci1 | 0:664899e0b988 | 49 | { return (f!=0) ? fclose(f) : 0; } |
uci1 | 0:664899e0b988 | 50 | |
uci1 | 0:664899e0b988 | 51 | static |
uci1 | 0:664899e0b988 | 52 | FILE* OpenNewOutputFile(const uint64_t macadr, |
uci1 | 4:a91682e19d6b | 53 | const uint32_t run, |
uci1 | 4:a91682e19d6b | 54 | const uint16_t v1, const uint16_t v2); |
uci1 | 0:664899e0b988 | 55 | |
uci1 | 0:664899e0b988 | 56 | static |
uci1 | 3:24c5f0f50bf1 | 57 | FILE* OpenExistingFile(const char* name, const bool setcurrent); |
uci1 | 0:664899e0b988 | 58 | |
uci1 | 0:664899e0b988 | 59 | static |
uci1 | 0:664899e0b988 | 60 | SnCommWin::ECommWinResult SendAllFiles(SnCommWin* comm, |
uci1 | 3:24c5f0f50bf1 | 61 | const bool doDelete, |
uci1 | 3:24c5f0f50bf1 | 62 | const uint32_t timeout, |
uci1 | 3:24c5f0f50bf1 | 63 | char* const buf, |
uci1 | 3:24c5f0f50bf1 | 64 | const uint32_t bsize); |
uci1 | 0:664899e0b988 | 65 | |
uci1 | 0:664899e0b988 | 66 | static |
uci1 | 0:664899e0b988 | 67 | const char* GetCurFileName() { return fgCurFileName; } |
uci1 | 0:664899e0b988 | 68 | |
uci1 | 0:664899e0b988 | 69 | static |
uci1 | 1:e392595b4b76 | 70 | FILE* GetCurFile() { return fgCurFile; } |
uci1 | 1:e392595b4b76 | 71 | |
uci1 | 1:e392595b4b76 | 72 | static |
uci1 | 0:664899e0b988 | 73 | bool WriteEventTo(FILE* efile, char* const evtBuf, |
uci1 | 0:664899e0b988 | 74 | const SnEventFrame& evt, |
uci1 | 0:664899e0b988 | 75 | const SnConfigFrame& conf); |
uci1 | 0:664899e0b988 | 76 | |
uci1 | 0:664899e0b988 | 77 | static |
uci1 | 0:664899e0b988 | 78 | bool WriteConfig(FILE* efile, |
uci1 | 0:664899e0b988 | 79 | const SnConfigFrame& conf); |
uci1 | 5:9cea89700c66 | 80 | /* |
uci1 | 0:664899e0b988 | 81 | static |
uci1 | 2:e67f7c158087 | 82 | bool WriteFileHeader(FILE* f, const uint64_t macadr, |
uci1 | 4:a91682e19d6b | 83 | const uint32_t run, const uint16_t seq, |
uci1 | 4:a91682e19d6b | 84 | const uint16_t v1, const uint16_t v2); |
uci1 | 2:e67f7c158087 | 85 | |
uci1 | 2:e67f7c158087 | 86 | static |
uci1 | 2:e67f7c158087 | 87 | bool ReadFileHeader(FILE* f, uint64_t& macadr, |
uci1 | 4:a91682e19d6b | 88 | uint32_t& run, uint16_t& seq, |
uci1 | 4:a91682e19d6b | 89 | uint16_t& v1, uint16_t& v2); |
uci1 | 5:9cea89700c66 | 90 | */ |
uci1 | 5:9cea89700c66 | 91 | template<class T> |
uci1 | 5:9cea89700c66 | 92 | static |
uci1 | 5:9cea89700c66 | 93 | SnCommWin::ECommWinResult WriteFileHeader(T& f, const uint64_t macadr, |
uci1 | 5:9cea89700c66 | 94 | const uint32_t run, const uint16_t seq, |
uci1 | 5:9cea89700c66 | 95 | const uint16_t v1, const uint16_t v2) { |
uci1 | 5:9cea89700c66 | 96 | // MUST INCREMENT kIOvers if these writes are altered |
uci1 | 5:9cea89700c66 | 97 | f = SnBitUtils::WriteTo(f, kIOvers); |
uci1 | 5:9cea89700c66 | 98 | f = SnBitUtils::WriteTo(f, macadr); |
uci1 | 5:9cea89700c66 | 99 | f = SnBitUtils::WriteTo(f, run); |
uci1 | 5:9cea89700c66 | 100 | f = SnBitUtils::WriteTo(f, seq); |
uci1 | 5:9cea89700c66 | 101 | SnPowerFrame::WriteTo(f, v1, v2); |
uci1 | 5:9cea89700c66 | 102 | return SnCommWin::kOkMsgSent; |
uci1 | 5:9cea89700c66 | 103 | } |
uci1 | 5:9cea89700c66 | 104 | |
uci1 | 5:9cea89700c66 | 105 | template<class T> |
uci1 | 5:9cea89700c66 | 106 | static |
uci1 | 5:9cea89700c66 | 107 | SnCommWin::ECommWinResult ReadFileHeader(T& f, uint64_t& macadr, |
uci1 | 5:9cea89700c66 | 108 | uint32_t& run, uint16_t& seq, |
uci1 | 5:9cea89700c66 | 109 | uint16_t& v1, uint16_t& v2) { |
uci1 | 5:9cea89700c66 | 110 | uint8_t Rv=0; |
uci1 | 5:9cea89700c66 | 111 | f = SnBitUtils::ReadFrom(f, Rv); |
uci1 | 5:9cea89700c66 | 112 | f = SnBitUtils::ReadFrom(f, macadr); |
uci1 | 5:9cea89700c66 | 113 | f = SnBitUtils::ReadFrom(f, run); |
uci1 | 5:9cea89700c66 | 114 | f = SnBitUtils::ReadFrom(f, seq); |
uci1 | 5:9cea89700c66 | 115 | if (Rv>1) { |
uci1 | 5:9cea89700c66 | 116 | SnPowerFrame::ReadFrom(f, v1, v2); |
uci1 | 5:9cea89700c66 | 117 | } |
uci1 | 5:9cea89700c66 | 118 | return SnCommWin::kOkWithMsg; |
uci1 | 5:9cea89700c66 | 119 | } |
uci1 | 5:9cea89700c66 | 120 | |
uci1 | 5:9cea89700c66 | 121 | static |
uci1 | 5:9cea89700c66 | 122 | uint32_t SizeOfFileHeader() { return kMaxSizeOfFileHdr; } |
uci1 | 0:664899e0b988 | 123 | |
uci1 | 0:664899e0b988 | 124 | friend class SnSDUtilsWhisperer; // to restrict access to specific functions |
uci1 | 0:664899e0b988 | 125 | }; |
uci1 | 0:664899e0b988 | 126 | |
uci1 | 0:664899e0b988 | 127 | class SnSDUtilsWhisperer { |
uci1 | 0:664899e0b988 | 128 | static |
uci1 | 0:664899e0b988 | 129 | void DeleteFile(FILE*& f, const char* fname) { |
uci1 | 0:664899e0b988 | 130 | return SnSDUtils::DeleteFile(f, fname); |
uci1 | 0:664899e0b988 | 131 | } |
uci1 | 0:664899e0b988 | 132 | |
uci1 | 0:664899e0b988 | 133 | friend class SnCommWin; // the one who's allowed to use me |
uci1 | 0:664899e0b988 | 134 | }; |
uci1 | 0:664899e0b988 | 135 | |
uci1 | 0:664899e0b988 | 136 | #endif // SN_SnSDUtils |