essential classes for arianna station protocol

Committer:
uci1
Date:
Thu Oct 30 05:53:49 2014 +0000
Revision:
6:3ee695731d92
Parent:
5:ef4c7dfbf8cf
Child:
7:4dcfa12d4fe9
Add more header codes. make ReadFrom and WriteTo templated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
uci1 0:df529a435193 1 #ifndef SNS_SnHeaderFrame
uci1 0:df529a435193 2 #define SNS_SnHeaderFrame
uci1 0:df529a435193 3
uci1 0:df529a435193 4 #include <stdint.h>
uci1 0:df529a435193 5
uci1 0:df529a435193 6 #include "SnBitUtils.h"
uci1 0:df529a435193 7
uci1 0:df529a435193 8 class SnHeaderFrame {
uci1 0:df529a435193 9 public:
uci1 0:df529a435193 10 //
uci1 0:df529a435193 11 // A simple class to function like namespace.
uci1 0:df529a435193 12 // The header for each i/o message is read/sent from here, in order to
uci1 0:df529a435193 13 // ensure consistency across the communication methods.
uci1 0:df529a435193 14 //
uci1 0:df529a435193 15
uci1 0:df529a435193 16 static const uint32_t kMaxSizeOf = sizeof(uint8_t) + sizeof(uint32_t);
uci1 0:df529a435193 17
uci1 0:df529a435193 18 // these are not in an enum so that we can control their size in bytes (1 byte)
uci1 6:3ee695731d92 19 // the values should NEVER change
uci1 0:df529a435193 20 static const uint8_t kStatusCode = 0x10;
uci1 0:df529a435193 21 static const uint8_t kFileCode = 0x20;
uci1 0:df529a435193 22 static const uint8_t kFilenameCode = 0x23;
uci1 4:9f7e3fb5394d 23 static const uint8_t kFileTrgStrtCode = 0x24;
uci1 4:9f7e3fb5394d 24 static const uint8_t kFileTrgStopCode = 0x25;
uci1 0:df529a435193 25 static const uint8_t kFileNevtsCode = 0x26;
uci1 0:df529a435193 26 static const uint8_t kFileNpwrsCode = 0x28;
uci1 0:df529a435193 27 static const uint8_t kFileHeadrCode = 0x2A;
uci1 0:df529a435193 28 static const uint8_t kFileReadFailCode= 0x2C;
uci1 0:df529a435193 29 static const uint8_t kMbedFileCode = 0x30;
uci1 0:df529a435193 30 static const uint8_t kMbedFilenameCode= 0x33;
uci1 0:df529a435193 31 static const uint8_t kMbedFileChksCode= 0x35;
uci1 0:df529a435193 32 static const uint8_t kConfigCode = 0x40;
uci1 0:df529a435193 33 static const uint8_t kEventCode = 0x50;
uci1 0:df529a435193 34 static const uint8_t kHndShkBits = 0x60; // all handshakes have these bits set
uci1 0:df529a435193 35 static const uint8_t kHnShOkComplCode = 0x61;
uci1 6:3ee695731d92 36 static const uint8_t kHnShOkRqPtRnCode= 0x62; // partial run req
uci1 6:3ee695731d92 37 static const uint8_t kHnShOkRqPtSqCode= 0x63; // [minseq,maxseq] of partial run req
uci1 0:df529a435193 38 static const uint8_t kHnShOkPartlCode = 0x64;
uci1 3:fc27e024ad2d 39 static const uint8_t kHnShOkReqRnCode = 0x65;
uci1 0:df529a435193 40 static const uint8_t kHnShOkStopCode = 0x66;
uci1 0:df529a435193 41 static const uint8_t kHnShOkDelRnCode = 0x67;
uci1 0:df529a435193 42 static const uint8_t kHnShOkDelAlCode = 0x68;
uci1 6:3ee695731d92 43 static const uint8_t kHnShOkClRSLCode = 0x69; // clear run/seq list since last comm win file
uci1 0:df529a435193 44 static const uint8_t kHnShFailPrtCode = 0x6A;
uci1 0:df529a435193 45 static const uint8_t kHnShFailNonCode = 0x6C;
uci1 4:9f7e3fb5394d 46 static const uint8_t kHnShDemandCode = 0x6E;
uci1 4:9f7e3fb5394d 47 static const uint8_t kHnShNoReplyCode = 0x6F;
uci1 0:df529a435193 48 static const uint8_t kPowerCode = 0x70;
uci1 6:3ee695731d92 49 static const uint8_t kTemperatureCode = 0x74;
uci1 0:df529a435193 50 static const uint8_t kHeartbeatCode = 0x78;
uci1 0:df529a435193 51 static const uint8_t kNoConfigCode = 0x80;
uci1 0:df529a435193 52 static const uint8_t kSbdMsgCode = 0x90;
uci1 0:df529a435193 53 static const uint8_t kStringCode = 0xA0; // a debug string
uci1 5:ef4c7dfbf8cf 54 static const uint8_t kSignalStrCode = 0xB0;
uci1 0:df529a435193 55
uci1 0:df529a435193 56 private:
uci1 0:df529a435193 57 static char fgHdBuf[kMaxSizeOf];
uci1 0:df529a435193 58
uci1 0:df529a435193 59 public:
uci1 0:df529a435193 60
uci1 0:df529a435193 61 static
uci1 0:df529a435193 62 char* GetHdBuf(const uint8_t mcode, const uint32_t mlen) {
uci1 0:df529a435193 63 char* b = fgHdBuf;
uci1 0:df529a435193 64 WriteTo(b, mcode, mlen);
uci1 0:df529a435193 65 return fgHdBuf;
uci1 0:df529a435193 66 }
uci1 0:df529a435193 67
uci1 0:df529a435193 68 template<class T>
uci1 0:df529a435193 69 static
uci1 1:28f2a824223d 70 bool WriteTo(T& x,
uci1 1:28f2a824223d 71 const uint8_t msgCode,
uci1 1:28f2a824223d 72 const uint32_t msgLen) {
uci1 4:9f7e3fb5394d 73 // expect 'x' to be a MODSERIAL or a char const* or a FILE*
uci1 0:df529a435193 74 x = SnBitUtils::WriteTo(x, msgCode);
uci1 0:df529a435193 75 x = SnBitUtils::WriteTo(x, msgLen);
uci1 1:28f2a824223d 76 return true;
uci1 0:df529a435193 77 }
uci1 0:df529a435193 78
uci1 0:df529a435193 79 template<class T>
uci1 0:df529a435193 80 static
uci1 1:28f2a824223d 81 bool ReadFrom(T& b,
uci1 1:28f2a824223d 82 uint8_t& msgCode,
uci1 1:28f2a824223d 83 uint32_t& msgLen) {
uci1 1:28f2a824223d 84 b = SnBitUtils::ReadFrom(b, msgCode);
uci1 1:28f2a824223d 85 b = SnBitUtils::ReadFrom(b, msgLen);
uci1 1:28f2a824223d 86 return true;
uci1 0:df529a435193 87 }
uci1 0:df529a435193 88
uci1 0:df529a435193 89 static
uci1 0:df529a435193 90 uint32_t SizeOf() {
uci1 0:df529a435193 91 return kMaxSizeOf;
uci1 0:df529a435193 92 }
uci1 0:df529a435193 93
uci1 0:df529a435193 94 };
uci1 0:df529a435193 95
uci1 0:df529a435193 96 #endif // SNS_SnHeaderFrame