Arianna autonomous DAQ firmware
Dependencies: mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW
SnConfigFrame.h@16:744ce85aede2, 2012-09-12 (annotated)
- Committer:
- uci1
- Date:
- Wed Sep 12 04:47:22 2012 +0000
- Revision:
- 16:744ce85aede2
- Parent:
- 15:f2569d8e4176
- Child:
- 18:55f1581f2ee4
SBD comm seems to be working. USB comm seems to be working (at 115200 baud). AFAR comm seems to be working. This version is set for USB communication and has zero text output.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
uci1 | 3:24c5f0f50bf1 | 1 | #ifndef SN_SnConfigFrame |
uci1 | 3:24c5f0f50bf1 | 2 | #define SN_SnConfigFrame |
uci1 | 3:24c5f0f50bf1 | 3 | |
uci1 | 3:24c5f0f50bf1 | 4 | #include <stdint.h> |
uci1 | 3:24c5f0f50bf1 | 5 | #include "SnConstants.h" |
uci1 | 3:24c5f0f50bf1 | 6 | #include "SnBitUtils.h" |
uci1 | 3:24c5f0f50bf1 | 7 | |
uci1 | 16:744ce85aede2 | 8 | //#define DEBUG |
uci1 | 16:744ce85aede2 | 9 | |
uci1 | 3:24c5f0f50bf1 | 10 | class SnConfigFrame { |
uci1 | 3:24c5f0f50bf1 | 11 | public: |
uci1 | 3:24c5f0f50bf1 | 12 | static const uint32_t kMinCommWinPrdLowPwr; // exclusive min low power comm win period (s) |
uci1 | 3:24c5f0f50bf1 | 13 | static const uint32_t kMaxCommWinPrdLowPwr; // exclusive max low power comm win period (s) |
uci1 | 3:24c5f0f50bf1 | 14 | static const uint32_t kMinCommWinDurLowPwr; // exclusive min low power comm win duration (s) |
uci1 | 3:24c5f0f50bf1 | 15 | static const uint32_t kMaxCommWinDurLowPwr; // exclusive max low power comm win duration (s) |
uci1 | 3:24c5f0f50bf1 | 16 | static const uint8_t kConfLblLen=64; // length of configuration label char array (63+'\0') |
uci1 | 8:95a325df1f6b | 17 | static const uint8_t kIPLen=16; // length of IP string. matches MBED's Socket class (so no ipv6) |
uci1 | 3:24c5f0f50bf1 | 18 | |
uci1 | 3:24c5f0f50bf1 | 19 | static const char* const kDefConfFile; // default configuration file |
uci1 | 3:24c5f0f50bf1 | 20 | |
uci1 | 8:95a325df1f6b | 21 | static const uint32_t kMaxSizeOfV1 = |
uci1 | 8:95a325df1f6b | 22 | + (9u*sizeof(uint32_t)) + (6u*sizeof(uint16_t)) |
uci1 | 8:95a325df1f6b | 23 | + (10u*sizeof(uint8_t)) + (3u*kNplas*sizeof(uint16_t)) |
uci1 | 3:24c5f0f50bf1 | 24 | + (kTotDacs*sizeof(uint16_t)) |
uci1 | 3:24c5f0f50bf1 | 25 | + (kConfLblLen*sizeof(uint8_t)); |
uci1 | 8:95a325df1f6b | 26 | static const uint32_t kMaxSizeOfV2 = |
uci1 | 8:95a325df1f6b | 27 | kMaxSizeOfV1 + sizeof(uint32_t) + sizeof(uint8_t); |
uci1 | 8:95a325df1f6b | 28 | static const uint32_t kMaxSizeOfV3 = |
uci1 | 8:95a325df1f6b | 29 | kMaxSizeOfV2 + (2u*sizeof(uint16_t)) + (4u*kIPLen*sizeof(char)); |
uci1 | 8:95a325df1f6b | 30 | static const uint32_t kMaxSizeOf = kMaxSizeOfV3; |
uci1 | 3:24c5f0f50bf1 | 31 | |
uci1 | 3:24c5f0f50bf1 | 32 | enum EDatPackBit { |
uci1 | 3:24c5f0f50bf1 | 33 | kSDcard = BIT(0), |
uci1 | 3:24c5f0f50bf1 | 34 | kIrid = BIT(1), |
uci1 | 3:24c5f0f50bf1 | 35 | kAfar = BIT(2), |
uci1 | 3:24c5f0f50bf1 | 36 | kUSB = BIT(3) |
uci1 | 3:24c5f0f50bf1 | 37 | }; |
uci1 | 3:24c5f0f50bf1 | 38 | |
uci1 | 3:24c5f0f50bf1 | 39 | enum ESendDataBit { |
uci1 | 3:24c5f0f50bf1 | 40 | // can't use BIT(0)! (-0 = 0 => send nothing) |
uci1 | 13:7a1fb885a8e4 | 41 | kAllFiles = BIT(1), // if bit=0 => send most recent file |
uci1 | 13:7a1fb885a8e4 | 42 | kTimeout = BIT(2), // if bit=0 => ignore timeout |
uci1 | 13:7a1fb885a8e4 | 43 | kDelete = BIT(3), // if bit=0 => do not delete sent files |
uci1 | 13:7a1fb885a8e4 | 44 | kForceSBDdata = BIT(4), // if bit=0 => do not send data over SBD |
uci1 | 13:7a1fb885a8e4 | 45 | kUseBits = -BIT(15) // useful to initialize fCommSendData as a bit word |
uci1 | 3:24c5f0f50bf1 | 46 | }; |
uci1 | 3:24c5f0f50bf1 | 47 | |
uci1 | 4:a91682e19d6b | 48 | enum EPowerModeBit { |
uci1 | 4:a91682e19d6b | 49 | kAmpsDatTak = BIT(0), |
uci1 | 4:a91682e19d6b | 50 | kCardDatTak = BIT(1), |
uci1 | 4:a91682e19d6b | 51 | kIridDatTak = BIT(2), |
uci1 | 4:a91682e19d6b | 52 | kAfarDatTak = BIT(3), |
uci1 | 4:a91682e19d6b | 53 | kAmpsComWin = BIT(4), |
uci1 | 4:a91682e19d6b | 54 | kCardComWin = BIT(5), |
uci1 | 4:a91682e19d6b | 55 | kIridComWin = BIT(6), |
uci1 | 4:a91682e19d6b | 56 | kAfarComWin = BIT(7) |
uci1 | 4:a91682e19d6b | 57 | }; |
uci1 | 4:a91682e19d6b | 58 | |
uci1 | 3:24c5f0f50bf1 | 59 | enum ERunMode { |
uci1 | 8:95a325df1f6b | 60 | kSingleSeqBit = BIT(0), // if 0, infinite sequences |
uci1 | 8:95a325df1f6b | 61 | kCountPowerBit = BIT(1), // if 0, count events |
uci1 | 3:24c5f0f50bf1 | 62 | }; |
uci1 | 3:24c5f0f50bf1 | 63 | |
uci1 | 3:24c5f0f50bf1 | 64 | // i/o version |
uci1 | 3:24c5f0f50bf1 | 65 | static const uint8_t kIOVers; // MUST BE INCREASED if any member var changes (==> also if kNchans, etc. change!) |
uci1 | 3:24c5f0f50bf1 | 66 | |
uci1 | 3:24c5f0f50bf1 | 67 | private: |
uci1 | 3:24c5f0f50bf1 | 68 | // !! |
uci1 | 3:24c5f0f50bf1 | 69 | // !! If any member variables change, update: SizeOf function and kIOVers value! (also if kNchans, etc. change!) |
uci1 | 3:24c5f0f50bf1 | 70 | // !! |
uci1 | 3:24c5f0f50bf1 | 71 | |
uci1 | 3:24c5f0f50bf1 | 72 | // mbed mac address |
uci1 | 3:24c5f0f50bf1 | 73 | static uint64_t fgMacAdr; // mbed mac address |
uci1 | 3:24c5f0f50bf1 | 74 | // conf header |
uci1 | 3:24c5f0f50bf1 | 75 | char fLabel[kConfLblLen]; // configuration label |
uci1 | 3:24c5f0f50bf1 | 76 | uint32_t fConfTime; // cpu config time |
uci1 | 3:24c5f0f50bf1 | 77 | uint32_t fRun; // run number |
uci1 | 3:24c5f0f50bf1 | 78 | uint32_t fFirstEvt; // starting event number |
uci1 | 3:24c5f0f50bf1 | 79 | uint32_t fEvtsPerSeq; // number of events per file |
uci1 | 3:24c5f0f50bf1 | 80 | uint8_t fRunMode; // mode of running (see ERunMode) |
uci1 | 3:24c5f0f50bf1 | 81 | uint8_t fStreamHiLoPlas; // (1byte bool) if true, add the separated hi/lo thresh PLA patterns to the i/o |
uci1 | 3:24c5f0f50bf1 | 82 | // data packing |
uci1 | 3:24c5f0f50bf1 | 83 | uint8_t fWvLoseLSB; // number of least significant bits to lose when packing waveform data |
uci1 | 3:24c5f0f50bf1 | 84 | uint8_t fWvLoseMSB; // number of most significant bits to lose when packing waveform data |
uci1 | 3:24c5f0f50bf1 | 85 | uint16_t fWvBaseline; // global baseline to use when packing data (useful to reduce clipping on the high end) |
uci1 | 3:24c5f0f50bf1 | 86 | uint8_t fDatPackType; // type of data packing. OR'd bitword: if bit 1, will pack for writing. see EDatPackBit. default: always pack (all 1's) |
uci1 | 3:24c5f0f50bf1 | 87 | // trigger setup |
uci1 | 3:24c5f0f50bf1 | 88 | uint16_t fDAC[kNchans][kNfpgaDacs]; //[card id][dac id] values should be 0-4095 here (not checked tho) |
uci1 | 3:24c5f0f50bf1 | 89 | uint8_t fNumPlas; // number of patterns to use. must be <= kNplas. |
uci1 | 3:24c5f0f50bf1 | 90 | uint16_t fPLA[kNplas]; //[pattern id] (same for each card) |
uci1 | 3:24c5f0f50bf1 | 91 | uint8_t fNumCardsMajLog; // number of cards participating in the MajLogic trigger (1 to 4) |
uci1 | 3:24c5f0f50bf1 | 92 | uint8_t fEnableThermTrig; // (1byte bool) whether or not to allow thermal triggers |
uci1 | 3:24c5f0f50bf1 | 93 | uint16_t fForceTrigPeriod; // number of seconds between force triggers (0=none) |
uci1 | 3:24c5f0f50bf1 | 94 | uint16_t fHeartBeatPeriod; // number of seconds between heartbeats (0=none) |
uci1 | 3:24c5f0f50bf1 | 95 | uint8_t fAmpsOn; // which amps are on (bit word. uint8_t => 8 amps max) |
uci1 | 3:24c5f0f50bf1 | 96 | uint16_t fEvtThrtlPeriodMs; // throttle period to write events (ms) |
uci1 | 3:24c5f0f50bf1 | 97 | // power |
uci1 | 4:a91682e19d6b | 98 | uint8_t fPowerMode; // power mode bit word: see EPowerModeBit |
uci1 | 3:24c5f0f50bf1 | 99 | int16_t fBatVoltLowPwr; // battery level at which to switch to low power (not used?) |
uci1 | 8:95a325df1f6b | 100 | uint16_t fVoltCheckPeriod; // how often to check the voltages (s) |
uci1 | 3:24c5f0f50bf1 | 101 | // communication |
uci1 | 3:24c5f0f50bf1 | 102 | uint32_t fCommWinPeriod; // seconds between communication window startup (0=always on) |
uci1 | 3:24c5f0f50bf1 | 103 | uint32_t fCommWinDuration; // seconds that communication window stays open (0=always open) |
uci1 | 3:24c5f0f50bf1 | 104 | int16_t fCommSendData; // data to send during comm win (=0: none, >0=send up to x events from last file until comm win closes, <0=see ESendDataBit) |
uci1 | 3:24c5f0f50bf1 | 105 | uint32_t fCommWinPrdLowPwr; // low power communication window period (seconds) (range enforced) |
uci1 | 3:24c5f0f50bf1 | 106 | uint32_t fCommWinDurLowPwr; // low power communication window duration (seconds) (range enforced) |
uci1 | 8:95a325df1f6b | 107 | char fRemoteServer[kIPLen]; // IP address of remote server (for afar) |
uci1 | 8:95a325df1f6b | 108 | uint16_t fRemotePort; // port number of remote server (for afar) |
uci1 | 8:95a325df1f6b | 109 | char fMbedIP[kIPLen]; // IP address of this mbed |
uci1 | 8:95a325df1f6b | 110 | char fMbedMask[kIPLen]; // IP address of this mbed mask |
uci1 | 8:95a325df1f6b | 111 | char fMbedGate[kIPLen]; // IP address of this mbed gateway |
uci1 | 3:24c5f0f50bf1 | 112 | // watchdog |
uci1 | 3:24c5f0f50bf1 | 113 | uint32_t fWatchDogPeriod; // number of seconds of inactivity for watchdog to issue a reset |
uci1 | 3:24c5f0f50bf1 | 114 | |
uci1 | 8:95a325df1f6b | 115 | // in case of low power, store regular settings |
uci1 | 8:95a325df1f6b | 116 | // these are not sent over i/o or stored in the file |
uci1 | 8:95a325df1f6b | 117 | // so they are not included in SizeOf |
uci1 | 8:95a325df1f6b | 118 | bool fIsLowPower; |
uci1 | 8:95a325df1f6b | 119 | char fNormLabel[kConfLblLen]; |
uci1 | 8:95a325df1f6b | 120 | uint8_t fNormPowerMode; |
uci1 | 8:95a325df1f6b | 121 | |
uci1 | 3:24c5f0f50bf1 | 122 | void SetHardDefaults(); |
uci1 | 3:24c5f0f50bf1 | 123 | |
uci1 | 3:24c5f0f50bf1 | 124 | static |
uci1 | 8:95a325df1f6b | 125 | uint32_t SizeOf(const uint8_t rv, |
uci1 | 8:95a325df1f6b | 126 | const bool streamHiLoPlas, |
uci1 | 3:24c5f0f50bf1 | 127 | const uint8_t nplas, |
uci1 | 3:24c5f0f50bf1 | 128 | const uint8_t lblLen) { |
uci1 | 3:24c5f0f50bf1 | 129 | // private because it cannot be used to read from a buffer |
uci1 | 3:24c5f0f50bf1 | 130 | // (the label length and fStreamHiLoPlas are not known a priori) |
uci1 | 3:24c5f0f50bf1 | 131 | // returns the num of bytes needed to stream this object |
uci1 | 3:24c5f0f50bf1 | 132 | // = size of member vars + 1 for i/o version + extra PLA strings (maybe) |
uci1 | 8:95a325df1f6b | 133 | uint32_t maxsize = kMaxSizeOf; |
uci1 | 8:95a325df1f6b | 134 | if (rv==1) { |
uci1 | 8:95a325df1f6b | 135 | maxsize = kMaxSizeOfV1; |
uci1 | 8:95a325df1f6b | 136 | } else if (rv==2) { |
uci1 | 8:95a325df1f6b | 137 | maxsize = kMaxSizeOfV2; |
uci1 | 8:95a325df1f6b | 138 | } |
uci1 | 8:95a325df1f6b | 139 | uint32_t sz = maxsize - kConfLblLen + lblLen; |
uci1 | 3:24c5f0f50bf1 | 140 | static const uint32_t mhlp = 2u*kNplas*sizeof(uint16_t); |
uci1 | 3:24c5f0f50bf1 | 141 | const int32_t dp = (nplas-kNplas)*sizeof(uint16_t); |
uci1 | 3:24c5f0f50bf1 | 142 | const uint8_t fac = (streamHiLoPlas) ? 3u : 1u; |
uci1 | 3:24c5f0f50bf1 | 143 | sz += (fac*dp); |
uci1 | 3:24c5f0f50bf1 | 144 | if (streamHiLoPlas==false) { |
uci1 | 3:24c5f0f50bf1 | 145 | sz -= mhlp; |
uci1 | 3:24c5f0f50bf1 | 146 | } |
uci1 | 3:24c5f0f50bf1 | 147 | return sz; |
uci1 | 3:24c5f0f50bf1 | 148 | } |
uci1 | 3:24c5f0f50bf1 | 149 | |
uci1 | 3:24c5f0f50bf1 | 150 | public: |
uci1 | 8:95a325df1f6b | 151 | SnConfigFrame() : fIsLowPower(false) { Reset(); } |
uci1 | 3:24c5f0f50bf1 | 152 | virtual ~SnConfigFrame() {} |
uci1 | 3:24c5f0f50bf1 | 153 | |
uci1 | 8:95a325df1f6b | 154 | bool IsCountingPowerReadings() const { return ((fRunMode & kCountPowerBit)!=0); } |
uci1 | 8:95a325df1f6b | 155 | bool IsSingleSeqRunMode() const { return ((fRunMode & kSingleSeqBit)!=0); } |
uci1 | 8:95a325df1f6b | 156 | bool IsLowPowerMode() const { return fIsLowPower; } |
uci1 | 3:24c5f0f50bf1 | 157 | const char* GetLabel() const { return fLabel; } |
uci1 | 3:24c5f0f50bf1 | 158 | uint32_t GetLabelStrLen() const { return strlen(fLabel); } |
uci1 | 3:24c5f0f50bf1 | 159 | uint32_t GetRun() const { return fRun; } |
uci1 | 3:24c5f0f50bf1 | 160 | uint32_t GetFirstEvt() const { return fFirstEvt; } |
uci1 | 3:24c5f0f50bf1 | 161 | uint32_t GetEvtsPerFile() const { return fEvtsPerSeq; } |
uci1 | 3:24c5f0f50bf1 | 162 | uint16_t GetEvtThrtlPeriodMs() const { return fEvtThrtlPeriodMs; } |
uci1 | 3:24c5f0f50bf1 | 163 | uint16_t GetForceTrigPeriod() const { return fForceTrigPeriod; } |
uci1 | 3:24c5f0f50bf1 | 164 | uint16_t GetHeartbeatPeriod() const { return fHeartBeatPeriod; } |
uci1 | 8:95a325df1f6b | 165 | uint16_t GetBatVoltLowPwr() const { return fBatVoltLowPwr; } |
uci1 | 8:95a325df1f6b | 166 | uint16_t GetVoltCheckPeriod() const { return fVoltCheckPeriod; } |
uci1 | 3:24c5f0f50bf1 | 167 | uint32_t GetWatchdogPeriod() const { return fWatchDogPeriod; } |
uci1 | 3:24c5f0f50bf1 | 168 | uint16_t GetDac(const uint8_t ch, const uint8_t dn) const { return fDAC[ch][dn]; } |
uci1 | 3:24c5f0f50bf1 | 169 | uint8_t GetNumPlas() const { return fNumPlas; } |
uci1 | 3:24c5f0f50bf1 | 170 | uint16_t GetPla(const uint8_t pn) const { return fPLA[pn]; } |
uci1 | 3:24c5f0f50bf1 | 171 | uint8_t GetNumCardsMajLog() const { return fNumCardsMajLog; } |
uci1 | 3:24c5f0f50bf1 | 172 | bool IsThermTrigEnabled() const { return fEnableThermTrig!=0; } |
uci1 | 3:24c5f0f50bf1 | 173 | bool IsEachAmpOn() const { |
uci1 | 3:24c5f0f50bf1 | 174 | bool allon=true; |
uci1 | 3:24c5f0f50bf1 | 175 | for (uint8_t i=0; (i<kNchans) && allon; i++) { |
uci1 | 3:24c5f0f50bf1 | 176 | allon = (fAmpsOn & BIT(i))!=0; |
uci1 | 3:24c5f0f50bf1 | 177 | } |
uci1 | 3:24c5f0f50bf1 | 178 | return allon; |
uci1 | 3:24c5f0f50bf1 | 179 | } |
uci1 | 3:24c5f0f50bf1 | 180 | // TODO: allow check for individual amps, when they can be turned on individually |
uci1 | 3:24c5f0f50bf1 | 181 | |
uci1 | 8:95a325df1f6b | 182 | const char* GetRemoteServer() const { return fRemoteServer; } |
uci1 | 8:95a325df1f6b | 183 | uint16_t GetRemotePort() const { return fRemotePort; } |
uci1 | 8:95a325df1f6b | 184 | const char* GetMbedIP() const { return fMbedIP; } |
uci1 | 8:95a325df1f6b | 185 | const char* GetMbedMask() const { return fMbedMask; } |
uci1 | 8:95a325df1f6b | 186 | const char* GetMbedGate() const { return fMbedGate; } |
uci1 | 8:95a325df1f6b | 187 | uint32_t GetCommWinPeriod() const { return fIsLowPower ? fCommWinPrdLowPwr : fCommWinPeriod; } |
uci1 | 8:95a325df1f6b | 188 | uint32_t GetCommWinDuration() const { return fIsLowPower ? fCommWinDurLowPwr : fCommWinDuration; } |
uci1 | 3:24c5f0f50bf1 | 189 | int16_t GetCommSendData() const { return fCommSendData; } |
uci1 | 3:24c5f0f50bf1 | 190 | |
uci1 | 3:24c5f0f50bf1 | 191 | bool IsSendingAllFiles() const |
uci1 | 3:24c5f0f50bf1 | 192 | { return (fCommSendData<0) && ((fCommSendData & kAllFiles)!=0); } |
uci1 | 3:24c5f0f50bf1 | 193 | bool IsObeyingTimeout() const |
uci1 | 3:24c5f0f50bf1 | 194 | { return (fCommSendData<0) && ((fCommSendData & kTimeout)!=0); } |
uci1 | 3:24c5f0f50bf1 | 195 | bool IsDeletingFiles() const |
uci1 | 3:24c5f0f50bf1 | 196 | { return (fCommSendData<0) && ((fCommSendData & kDelete)!=0); } |
uci1 | 15:f2569d8e4176 | 197 | bool IsForcingSBDdata() const |
uci1 | 15:f2569d8e4176 | 198 | { return (fCommSendData<0) && ((fCommSendData & kForceSBDdata)!=0); } |
uci1 | 3:24c5f0f50bf1 | 199 | |
uci1 | 4:a91682e19d6b | 200 | uint8_t GetPowerMode() const { return fPowerMode; } |
uci1 | 8:95a325df1f6b | 201 | int GetPowPinSetting(const EPowerModeBit p) const { |
uci1 | 8:95a325df1f6b | 202 | // return int to correspond to what DigitalOut::operator= expects |
uci1 | 8:95a325df1f6b | 203 | const bool on = IsPoweredFor(p); |
uci1 | 5:9cea89700c66 | 204 | if (p==kCardDatTak || p==kCardComWin || |
uci1 | 5:9cea89700c66 | 205 | p==kAmpsDatTak || p==kAmpsComWin) { |
uci1 | 5:9cea89700c66 | 206 | return on ? 0 : 1; |
uci1 | 5:9cea89700c66 | 207 | } else { |
uci1 | 5:9cea89700c66 | 208 | return on ? 1 : 0; |
uci1 | 5:9cea89700c66 | 209 | } |
uci1 | 5:9cea89700c66 | 210 | } |
uci1 | 8:95a325df1f6b | 211 | bool IsPoweredFor(const EPowerModeBit p) const { |
uci1 | 8:95a325df1f6b | 212 | return ((fPowerMode & p)!=0); |
uci1 | 8:95a325df1f6b | 213 | } |
uci1 | 8:95a325df1f6b | 214 | |
uci1 | 8:95a325df1f6b | 215 | void EnablePowerFor(const EPowerModeBit p) { fPowerMode |= p; } |
uci1 | 8:95a325df1f6b | 216 | void DisablePowerFor(const EPowerModeBit p) { fPowerMode &= ~p; } |
uci1 | 8:95a325df1f6b | 217 | |
uci1 | 8:95a325df1f6b | 218 | void ChangeToLowPower(); |
uci1 | 8:95a325df1f6b | 219 | void ChangeToNormPower(); |
uci1 | 3:24c5f0f50bf1 | 220 | |
uci1 | 3:24c5f0f50bf1 | 221 | const char* GetOutFileName(const char* dir) const; |
uci1 | 3:24c5f0f50bf1 | 222 | |
uci1 | 3:24c5f0f50bf1 | 223 | // waveform packing info |
uci1 | 3:24c5f0f50bf1 | 224 | uint16_t GetWvBaseline() const { return fWvBaseline; } |
uci1 | 3:24c5f0f50bf1 | 225 | uint8_t GetWvLoseLSB() const { return fWvLoseLSB; } |
uci1 | 3:24c5f0f50bf1 | 226 | uint8_t GetWvLoseMSB() const { return fWvLoseMSB; } |
uci1 | 3:24c5f0f50bf1 | 227 | bool IsDatPackedFor(const EDatPackBit d) const { return (fDatPackType & d)!=0; } |
uci1 | 3:24c5f0f50bf1 | 228 | void GetPackParsFor(const EDatPackBit d, |
uci1 | 3:24c5f0f50bf1 | 229 | uint8_t& loseLSB, uint8_t& loseMSB, |
uci1 | 3:24c5f0f50bf1 | 230 | uint16_t& wvBase) const; |
uci1 | 3:24c5f0f50bf1 | 231 | |
uci1 | 3:24c5f0f50bf1 | 232 | // i/o |
uci1 | 3:24c5f0f50bf1 | 233 | template<class T> |
uci1 | 3:24c5f0f50bf1 | 234 | void ReadFrom(T& b) { |
uci1 | 3:24c5f0f50bf1 | 235 | // no check on the length of buf is done here |
uci1 | 3:24c5f0f50bf1 | 236 | // that should be been done already |
uci1 | 3:24c5f0f50bf1 | 237 | // |
uci1 | 3:24c5f0f50bf1 | 238 | // must match WriteTo |
uci1 | 3:24c5f0f50bf1 | 239 | |
uci1 | 3:24c5f0f50bf1 | 240 | uint8_t Rv=0; |
uci1 | 3:24c5f0f50bf1 | 241 | b = SnBitUtils::ReadFrom(b, Rv); // i/o version |
uci1 | 12:d472f9811262 | 242 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 243 | printf("Rv=%hhu\r\n",Rv); |
uci1 | 12:d472f9811262 | 244 | #endif |
uci1 | 3:24c5f0f50bf1 | 245 | if (Rv>0) { |
uci1 | 3:24c5f0f50bf1 | 246 | uint32_t llen=kConfLblLen; |
uci1 | 3:24c5f0f50bf1 | 247 | b = SnBitUtils::ReadFrom(b, llen); |
uci1 | 12:d472f9811262 | 248 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 249 | printf("llen=%u\r\n",llen); |
uci1 | 12:d472f9811262 | 250 | #endif |
uci1 | 3:24c5f0f50bf1 | 251 | b = SnBitUtils::ReadFrom(b, fLabel, llen); |
uci1 | 12:d472f9811262 | 252 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 253 | printf("lbl=%s\r\n",fLabel); |
uci1 | 12:d472f9811262 | 254 | #endif |
uci1 | 3:24c5f0f50bf1 | 255 | b = SnBitUtils::ReadFrom(b, fConfTime); |
uci1 | 12:d472f9811262 | 256 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 257 | printf("ct=%u\r\n",fConfTime); |
uci1 | 12:d472f9811262 | 258 | #endif |
uci1 | 3:24c5f0f50bf1 | 259 | b = SnBitUtils::ReadFrom(b, fRun); |
uci1 | 12:d472f9811262 | 260 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 261 | printf("run=%u\r\n",fRun); |
uci1 | 12:d472f9811262 | 262 | #endif |
uci1 | 3:24c5f0f50bf1 | 263 | b = SnBitUtils::ReadFrom(b, fFirstEvt); |
uci1 | 12:d472f9811262 | 264 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 265 | printf("fe=%u\r\n",fFirstEvt); |
uci1 | 12:d472f9811262 | 266 | #endif |
uci1 | 3:24c5f0f50bf1 | 267 | if (Rv>1) { |
uci1 | 3:24c5f0f50bf1 | 268 | b = SnBitUtils::ReadFrom(b, fEvtsPerSeq); |
uci1 | 12:d472f9811262 | 269 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 270 | printf("eps=%u\r\n",fEvtsPerSeq); |
uci1 | 12:d472f9811262 | 271 | #endif |
uci1 | 3:24c5f0f50bf1 | 272 | b = SnBitUtils::ReadFrom(b, fRunMode); |
uci1 | 12:d472f9811262 | 273 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 274 | printf("rm=%hhu\r\n",fRunMode); |
uci1 | 12:d472f9811262 | 275 | #endif |
uci1 | 3:24c5f0f50bf1 | 276 | } |
uci1 | 3:24c5f0f50bf1 | 277 | b = SnBitUtils::ReadFrom(b, fStreamHiLoPlas); |
uci1 | 12:d472f9811262 | 278 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 279 | printf("shilo=%d\r\n",(int)fStreamHiLoPlas); |
uci1 | 12:d472f9811262 | 280 | #endif |
uci1 | 3:24c5f0f50bf1 | 281 | b = SnBitUtils::ReadFrom(b, fWvLoseLSB); |
uci1 | 12:d472f9811262 | 282 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 283 | printf("lsb=%hhu\r\n",fWvLoseLSB); |
uci1 | 12:d472f9811262 | 284 | #endif |
uci1 | 3:24c5f0f50bf1 | 285 | b = SnBitUtils::ReadFrom(b, fWvLoseMSB); |
uci1 | 12:d472f9811262 | 286 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 287 | printf("msb=%hhu\r\n",fWvLoseMSB); |
uci1 | 12:d472f9811262 | 288 | #endif |
uci1 | 3:24c5f0f50bf1 | 289 | b = SnBitUtils::ReadFrom(b, fWvBaseline); |
uci1 | 12:d472f9811262 | 290 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 291 | printf("bl=%hu\r\n",fWvBaseline); |
uci1 | 12:d472f9811262 | 292 | #endif |
uci1 | 3:24c5f0f50bf1 | 293 | b = SnBitUtils::ReadFrom(b, fDatPackType); |
uci1 | 12:d472f9811262 | 294 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 295 | printf("dp=%hhu\r\n",fDatPackType); |
uci1 | 12:d472f9811262 | 296 | #endif |
uci1 | 3:24c5f0f50bf1 | 297 | uint16_t* dc = &(fDAC[0][0]); |
uci1 | 3:24c5f0f50bf1 | 298 | for (uint16_t i=0; i<kTotDacs; i++, dc++) { |
uci1 | 3:24c5f0f50bf1 | 299 | b = SnBitUtils::ReadFrom(b, *dc); |
uci1 | 12:d472f9811262 | 300 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 301 | printf("dac[%hu]=%hu\r\n",i,*dc); |
uci1 | 12:d472f9811262 | 302 | #endif |
uci1 | 3:24c5f0f50bf1 | 303 | } |
uci1 | 3:24c5f0f50bf1 | 304 | b = SnBitUtils::ReadFrom(b, fNumPlas); |
uci1 | 12:d472f9811262 | 305 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 306 | printf("npla=%hhu\r\n",fNumPlas); |
uci1 | 12:d472f9811262 | 307 | #endif |
uci1 | 3:24c5f0f50bf1 | 308 | uint16_t* pl = &(fPLA[0]); |
uci1 | 3:24c5f0f50bf1 | 309 | for (uint8_t j=0; j<fNumPlas; j++, pl++) { |
uci1 | 3:24c5f0f50bf1 | 310 | b = SnBitUtils::ReadFrom(b, *pl); |
uci1 | 12:d472f9811262 | 311 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 312 | printf("pla[%hhu]=%hu\r\n",j,*pl); |
uci1 | 12:d472f9811262 | 313 | #endif |
uci1 | 3:24c5f0f50bf1 | 314 | } |
uci1 | 3:24c5f0f50bf1 | 315 | b = SnBitUtils::ReadFrom(b, fNumCardsMajLog); |
uci1 | 12:d472f9811262 | 316 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 317 | printf("mj=%hhu\r\n",fNumCardsMajLog); |
uci1 | 12:d472f9811262 | 318 | #endif |
uci1 | 3:24c5f0f50bf1 | 319 | b = SnBitUtils::ReadFrom(b, fEnableThermTrig); |
uci1 | 12:d472f9811262 | 320 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 321 | printf("thm=%d\r\n",(int)fEnableThermTrig); |
uci1 | 12:d472f9811262 | 322 | #endif |
uci1 | 3:24c5f0f50bf1 | 323 | b = SnBitUtils::ReadFrom(b, fForceTrigPeriod); |
uci1 | 12:d472f9811262 | 324 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 325 | printf("force=%hu\r\n",fForceTrigPeriod); |
uci1 | 12:d472f9811262 | 326 | #endif |
uci1 | 3:24c5f0f50bf1 | 327 | b = SnBitUtils::ReadFrom(b, fHeartBeatPeriod); |
uci1 | 12:d472f9811262 | 328 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 329 | printf("heart=%hu\r\n",fHeartBeatPeriod); |
uci1 | 12:d472f9811262 | 330 | #endif |
uci1 | 3:24c5f0f50bf1 | 331 | b = SnBitUtils::ReadFrom(b, fAmpsOn); |
uci1 | 12:d472f9811262 | 332 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 333 | printf("amps=%hhu\r\n",fAmpsOn); |
uci1 | 12:d472f9811262 | 334 | #endif |
uci1 | 3:24c5f0f50bf1 | 335 | b = SnBitUtils::ReadFrom(b, fEvtThrtlPeriodMs); |
uci1 | 12:d472f9811262 | 336 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 337 | printf("throt=%hu\r\n",fEvtThrtlPeriodMs); |
uci1 | 12:d472f9811262 | 338 | #endif |
uci1 | 3:24c5f0f50bf1 | 339 | b = SnBitUtils::ReadFrom(b, fPowerMode); |
uci1 | 12:d472f9811262 | 340 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 341 | printf("pow=%hhu\r\n",fPowerMode); |
uci1 | 12:d472f9811262 | 342 | #endif |
uci1 | 3:24c5f0f50bf1 | 343 | b = SnBitUtils::ReadFrom(b, fBatVoltLowPwr); |
uci1 | 12:d472f9811262 | 344 | #ifdef DEBUG |
uci1 | 8:95a325df1f6b | 345 | printf("batlow=%hd\r\n",fBatVoltLowPwr); |
uci1 | 12:d472f9811262 | 346 | #endif |
uci1 | 8:95a325df1f6b | 347 | if (Rv>2) { |
uci1 | 8:95a325df1f6b | 348 | b = SnBitUtils::ReadFrom(b, fVoltCheckPeriod); |
uci1 | 12:d472f9811262 | 349 | #ifdef DEBUG |
uci1 | 8:95a325df1f6b | 350 | printf("vltchk=%hu\r\n",fVoltCheckPeriod); |
uci1 | 12:d472f9811262 | 351 | #endif |
uci1 | 8:95a325df1f6b | 352 | } |
uci1 | 3:24c5f0f50bf1 | 353 | b = SnBitUtils::ReadFrom(b, fCommWinPeriod); |
uci1 | 12:d472f9811262 | 354 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 355 | printf("cmper=%u\r\n",fCommWinPeriod); |
uci1 | 12:d472f9811262 | 356 | #endif |
uci1 | 3:24c5f0f50bf1 | 357 | b = SnBitUtils::ReadFrom(b, fCommWinDuration); |
uci1 | 12:d472f9811262 | 358 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 359 | printf("cmdur=%u\r\n",fCommWinDuration); |
uci1 | 12:d472f9811262 | 360 | #endif |
uci1 | 3:24c5f0f50bf1 | 361 | b = SnBitUtils::ReadFrom(b, fCommSendData); |
uci1 | 12:d472f9811262 | 362 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 363 | printf("send=%d\r\n",fCommSendData); |
uci1 | 12:d472f9811262 | 364 | #endif |
uci1 | 3:24c5f0f50bf1 | 365 | b = SnBitUtils::ReadFrom(b, fCommWinPrdLowPwr); |
uci1 | 12:d472f9811262 | 366 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 367 | printf("cmperlp=%u\r\n",fCommWinPrdLowPwr); |
uci1 | 12:d472f9811262 | 368 | #endif |
uci1 | 3:24c5f0f50bf1 | 369 | b = SnBitUtils::ReadFrom(b, fCommWinDurLowPwr); |
uci1 | 12:d472f9811262 | 370 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 371 | printf("cmdurlp=%u\r\n",fCommWinDurLowPwr); |
uci1 | 12:d472f9811262 | 372 | #endif |
uci1 | 8:95a325df1f6b | 373 | if (Rv>2) { |
uci1 | 8:95a325df1f6b | 374 | b = SnBitUtils::ReadFrom(b, fRemoteServer, kIPLen); |
uci1 | 12:d472f9811262 | 375 | #ifdef DEBUG |
uci1 | 8:95a325df1f6b | 376 | printf("rserv=%s\r\n",fRemoteServer); |
uci1 | 12:d472f9811262 | 377 | #endif |
uci1 | 8:95a325df1f6b | 378 | b = SnBitUtils::ReadFrom(b, fRemotePort); |
uci1 | 12:d472f9811262 | 379 | #ifdef DEBUG |
uci1 | 8:95a325df1f6b | 380 | printf("rport=%hu\r\n",fRemotePort); |
uci1 | 12:d472f9811262 | 381 | #endif |
uci1 | 8:95a325df1f6b | 382 | b = SnBitUtils::ReadFrom(b, fMbedIP, kIPLen); |
uci1 | 12:d472f9811262 | 383 | #ifdef DEBUG |
uci1 | 8:95a325df1f6b | 384 | printf("mbedip=%s\r\n",fMbedIP); |
uci1 | 12:d472f9811262 | 385 | #endif |
uci1 | 8:95a325df1f6b | 386 | b = SnBitUtils::ReadFrom(b, fMbedMask, kIPLen); |
uci1 | 12:d472f9811262 | 387 | #ifdef DEBUG |
uci1 | 8:95a325df1f6b | 388 | printf("mbedmask=%s\r\n",fMbedMask); |
uci1 | 12:d472f9811262 | 389 | #endif |
uci1 | 8:95a325df1f6b | 390 | b = SnBitUtils::ReadFrom(b, fMbedGate, kIPLen); |
uci1 | 12:d472f9811262 | 391 | #ifdef DEBUG |
uci1 | 8:95a325df1f6b | 392 | printf("mbedgate=%s\r\n",fMbedGate); |
uci1 | 12:d472f9811262 | 393 | #endif |
uci1 | 8:95a325df1f6b | 394 | } |
uci1 | 3:24c5f0f50bf1 | 395 | b = SnBitUtils::ReadFrom(b, fWatchDogPeriod); |
uci1 | 12:d472f9811262 | 396 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 397 | printf("watch=%u\r\n",fWatchDogPeriod); |
uci1 | 12:d472f9811262 | 398 | #endif |
uci1 | 3:24c5f0f50bf1 | 399 | if (fStreamHiLoPlas!=0) { |
uci1 | 3:24c5f0f50bf1 | 400 | uint16_t hi, lo; |
uci1 | 3:24c5f0f50bf1 | 401 | for (uint8_t j=0; j<fNumPlas; j++) { |
uci1 | 3:24c5f0f50bf1 | 402 | b = SnBitUtils::ReadFrom(b, hi); |
uci1 | 12:d472f9811262 | 403 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 404 | printf("hi=%hu\r\n",hi); |
uci1 | 12:d472f9811262 | 405 | #endif |
uci1 | 3:24c5f0f50bf1 | 406 | b = SnBitUtils::ReadFrom(b, lo); |
uci1 | 12:d472f9811262 | 407 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 408 | printf("lo=%hu\r\n",lo); |
uci1 | 12:d472f9811262 | 409 | #endif |
uci1 | 3:24c5f0f50bf1 | 410 | // don't save these |
uci1 | 3:24c5f0f50bf1 | 411 | } |
uci1 | 3:24c5f0f50bf1 | 412 | } |
uci1 | 3:24c5f0f50bf1 | 413 | } |
uci1 | 12:d472f9811262 | 414 | #ifdef DEBUG |
uci1 | 3:24c5f0f50bf1 | 415 | printf("read from done\r\n"); |
uci1 | 12:d472f9811262 | 416 | #endif |
uci1 | 3:24c5f0f50bf1 | 417 | } |
uci1 | 3:24c5f0f50bf1 | 418 | |
uci1 | 3:24c5f0f50bf1 | 419 | template <class T> |
uci1 | 3:24c5f0f50bf1 | 420 | void WriteTo(T& b) const { |
uci1 | 3:24c5f0f50bf1 | 421 | // no check on the length of the buf is done here |
uci1 | 3:24c5f0f50bf1 | 422 | // that should be done already |
uci1 | 3:24c5f0f50bf1 | 423 | // |
uci1 | 3:24c5f0f50bf1 | 424 | // must match ReadFromBuf |
uci1 | 3:24c5f0f50bf1 | 425 | // |
uci1 | 3:24c5f0f50bf1 | 426 | // intentionally not writing mac address here, so we don't have to read it in |
uci1 | 3:24c5f0f50bf1 | 427 | |
uci1 | 3:24c5f0f50bf1 | 428 | const uint32_t llen = strlen(fLabel); |
uci1 | 3:24c5f0f50bf1 | 429 | |
uci1 | 3:24c5f0f50bf1 | 430 | b = SnBitUtils::WriteTo(b, kIOVers); // i/o version |
uci1 | 3:24c5f0f50bf1 | 431 | b = SnBitUtils::WriteTo(b, llen); |
uci1 | 3:24c5f0f50bf1 | 432 | b = SnBitUtils::WriteTo(b, fLabel, llen); |
uci1 | 3:24c5f0f50bf1 | 433 | b = SnBitUtils::WriteTo(b, fConfTime); |
uci1 | 3:24c5f0f50bf1 | 434 | b = SnBitUtils::WriteTo(b, fRun); |
uci1 | 3:24c5f0f50bf1 | 435 | b = SnBitUtils::WriteTo(b, fFirstEvt); |
uci1 | 3:24c5f0f50bf1 | 436 | b = SnBitUtils::WriteTo(b, fEvtsPerSeq); |
uci1 | 3:24c5f0f50bf1 | 437 | b = SnBitUtils::WriteTo(b, fRunMode); |
uci1 | 3:24c5f0f50bf1 | 438 | b = SnBitUtils::WriteTo(b, fStreamHiLoPlas); |
uci1 | 3:24c5f0f50bf1 | 439 | b = SnBitUtils::WriteTo(b, fWvLoseLSB); |
uci1 | 3:24c5f0f50bf1 | 440 | b = SnBitUtils::WriteTo(b, fWvLoseMSB); |
uci1 | 3:24c5f0f50bf1 | 441 | b = SnBitUtils::WriteTo(b, fWvBaseline); |
uci1 | 3:24c5f0f50bf1 | 442 | b = SnBitUtils::WriteTo(b, fDatPackType); |
uci1 | 3:24c5f0f50bf1 | 443 | const uint16_t* dc = &(fDAC[0][0]); |
uci1 | 3:24c5f0f50bf1 | 444 | for (uint16_t i=0; i<kTotDacs; i++, dc++) { |
uci1 | 3:24c5f0f50bf1 | 445 | b = SnBitUtils::WriteTo(b, *dc); |
uci1 | 3:24c5f0f50bf1 | 446 | } |
uci1 | 3:24c5f0f50bf1 | 447 | b = SnBitUtils::WriteTo(b, fNumPlas); |
uci1 | 3:24c5f0f50bf1 | 448 | const uint16_t* pl = &(fPLA[0]); |
uci1 | 3:24c5f0f50bf1 | 449 | for (uint8_t j=0; j<fNumPlas; j++, pl++) { |
uci1 | 3:24c5f0f50bf1 | 450 | b = SnBitUtils::WriteTo(b, *pl); |
uci1 | 3:24c5f0f50bf1 | 451 | } |
uci1 | 3:24c5f0f50bf1 | 452 | b = SnBitUtils::WriteTo(b, fNumCardsMajLog); |
uci1 | 3:24c5f0f50bf1 | 453 | b = SnBitUtils::WriteTo(b, fEnableThermTrig); |
uci1 | 3:24c5f0f50bf1 | 454 | b = SnBitUtils::WriteTo(b, fForceTrigPeriod); |
uci1 | 3:24c5f0f50bf1 | 455 | b = SnBitUtils::WriteTo(b, fHeartBeatPeriod); |
uci1 | 3:24c5f0f50bf1 | 456 | b = SnBitUtils::WriteTo(b, fAmpsOn); |
uci1 | 3:24c5f0f50bf1 | 457 | b = SnBitUtils::WriteTo(b, fEvtThrtlPeriodMs); |
uci1 | 3:24c5f0f50bf1 | 458 | b = SnBitUtils::WriteTo(b, fPowerMode); |
uci1 | 3:24c5f0f50bf1 | 459 | b = SnBitUtils::WriteTo(b, fBatVoltLowPwr); |
uci1 | 8:95a325df1f6b | 460 | b = SnBitUtils::WriteTo(b, fVoltCheckPeriod); |
uci1 | 3:24c5f0f50bf1 | 461 | b = SnBitUtils::WriteTo(b, fCommWinPeriod); |
uci1 | 3:24c5f0f50bf1 | 462 | b = SnBitUtils::WriteTo(b, fCommWinDuration); |
uci1 | 3:24c5f0f50bf1 | 463 | b = SnBitUtils::WriteTo(b, fCommSendData); |
uci1 | 3:24c5f0f50bf1 | 464 | b = SnBitUtils::WriteTo(b, fCommWinPrdLowPwr); |
uci1 | 3:24c5f0f50bf1 | 465 | b = SnBitUtils::WriteTo(b, fCommWinDurLowPwr); |
uci1 | 8:95a325df1f6b | 466 | b = SnBitUtils::WriteTo(b, fRemoteServer, kIPLen); |
uci1 | 8:95a325df1f6b | 467 | b = SnBitUtils::WriteTo(b, fRemotePort); |
uci1 | 8:95a325df1f6b | 468 | b = SnBitUtils::WriteTo(b, fMbedIP, kIPLen); |
uci1 | 8:95a325df1f6b | 469 | b = SnBitUtils::WriteTo(b, fMbedMask, kIPLen); |
uci1 | 8:95a325df1f6b | 470 | b = SnBitUtils::WriteTo(b, fMbedGate, kIPLen); |
uci1 | 3:24c5f0f50bf1 | 471 | b = SnBitUtils::WriteTo(b, fWatchDogPeriod); |
uci1 | 3:24c5f0f50bf1 | 472 | if (fStreamHiLoPlas!=0) { |
uci1 | 3:24c5f0f50bf1 | 473 | pl = fPLA; |
uci1 | 3:24c5f0f50bf1 | 474 | uint16_t hi, lo; |
uci1 | 3:24c5f0f50bf1 | 475 | for (uint8_t j=0; j<fNumPlas; j++, pl++) { |
uci1 | 3:24c5f0f50bf1 | 476 | GetHiLoPlas(*pl, hi, lo); |
uci1 | 3:24c5f0f50bf1 | 477 | b = SnBitUtils::WriteTo(b, hi); |
uci1 | 3:24c5f0f50bf1 | 478 | b = SnBitUtils::WriteTo(b, lo); |
uci1 | 3:24c5f0f50bf1 | 479 | } |
uci1 | 3:24c5f0f50bf1 | 480 | } |
uci1 | 3:24c5f0f50bf1 | 481 | } |
uci1 | 3:24c5f0f50bf1 | 482 | |
uci1 | 3:24c5f0f50bf1 | 483 | bool ReadFromFile(const char* cfile); |
uci1 | 3:24c5f0f50bf1 | 484 | bool WriteToFile(const char* cfile) const; |
uci1 | 3:24c5f0f50bf1 | 485 | |
uci1 | 3:24c5f0f50bf1 | 486 | void Reset() { |
uci1 | 3:24c5f0f50bf1 | 487 | memset(fLabel, 0, sizeof(char)*kConfLblLen); |
uci1 | 3:24c5f0f50bf1 | 488 | if (ReadFromFile(kDefConfFile)==false) { |
uci1 | 3:24c5f0f50bf1 | 489 | // couldn't get default. use hardcoded version. |
uci1 | 3:24c5f0f50bf1 | 490 | SetHardDefaults(); |
uci1 | 3:24c5f0f50bf1 | 491 | } |
uci1 | 16:744ce85aede2 | 492 | #ifdef DEBUG |
uci1 | 16:744ce85aede2 | 493 | printf("config reset to %s\r\n",fLabel); |
uci1 | 16:744ce85aede2 | 494 | #endif |
uci1 | 3:24c5f0f50bf1 | 495 | } |
uci1 | 3:24c5f0f50bf1 | 496 | |
uci1 | 8:95a325df1f6b | 497 | uint32_t SizeOf(const uint8_t rv) const { |
uci1 | 3:24c5f0f50bf1 | 498 | // returns the num of bytes needed to stream this object |
uci1 | 3:24c5f0f50bf1 | 499 | // = size of member vars + 1 for i/o version + extra PLA strings (maybe) |
uci1 | 3:24c5f0f50bf1 | 500 | // + length of label string |
uci1 | 8:95a325df1f6b | 501 | return SizeOf(rv, fStreamHiLoPlas!=0, fNumPlas, strlen(fLabel)); |
uci1 | 3:24c5f0f50bf1 | 502 | } |
uci1 | 3:24c5f0f50bf1 | 503 | |
uci1 | 3:24c5f0f50bf1 | 504 | static void SetMacAddress(); |
uci1 | 3:24c5f0f50bf1 | 505 | static uint64_t GetMacAddress() { |
uci1 | 3:24c5f0f50bf1 | 506 | if (fgMacAdr==0) { |
uci1 | 3:24c5f0f50bf1 | 507 | SetMacAddress(); |
uci1 | 3:24c5f0f50bf1 | 508 | } |
uci1 | 3:24c5f0f50bf1 | 509 | return fgMacAdr; |
uci1 | 3:24c5f0f50bf1 | 510 | } |
uci1 | 3:24c5f0f50bf1 | 511 | |
uci1 | 3:24c5f0f50bf1 | 512 | static uint32_t GetLabelMaxLen() { return kConfLblLen; } |
uci1 | 3:24c5f0f50bf1 | 513 | |
uci1 | 3:24c5f0f50bf1 | 514 | static void GetHiLoPlas(const uint16_t pla, |
uci1 | 3:24c5f0f50bf1 | 515 | uint16_t& hiPla, |
uci1 | 3:24c5f0f50bf1 | 516 | uint16_t& loPla, |
uci1 | 3:24c5f0f50bf1 | 517 | const bool r2l=false); |
uci1 | 3:24c5f0f50bf1 | 518 | }; |
uci1 | 3:24c5f0f50bf1 | 519 | |
uci1 | 3:24c5f0f50bf1 | 520 | #endif // SN_SnConfigFrame |