BayEOS-Arduino  1.8.0_0.0.4
BayEOS.h
1 
41 #ifndef BayEOS_h
42 #define BayEOS_h
43 #define BayEOS_VERSION "1.4"
44 /*
45  * Frame-Types
46  */
47 
48 #define BayEOS_DataFrame 0x1
49 #define BayEOS_Command 0x2 /* [0x2][CMD][ARGS...] */
50 #define BayEOS_CommandResponse 0x3 /* [0x3][CMD][RESPONSE...] */
51 #define BayEOS_Message 0x4
52 #define BayEOS_ErrorMessage 0x5
53 /*
54  * Routed, Delayed, RoutedRSSI, Timestamp Frame:
55  * These frames wrap the original frame. In principle this can be
56  * used several times. However the effective payload is reduced by
57  * five (six with RSSI) byte per hub
58  */
59 #define BayEOS_RoutedFrame 0x6 /* [0x6][MY_ID][PANID][Original Frame] */
60 #define BayEOS_DelayedFrame 0x7 /* [0x7][(unsigned long) delay (msec)][Original Frame] */
61 #define BayEOS_RoutedFrameRSSI 0x8 /* [0x9][MY_ID][PANID][RSSI][Original Frame]
62 Note RSSI is negative but without sign as uint8_t
63 */
64 #define BayEOS_TimestampFrame 0x9 /* [0x9][(unsigned long) timestamp (sec since 2000-01-01 00:00 GMT)][Original Frame] */
65 #define BayEOS_BinaryFrame 0xa /* [0xa][(unsigned long) pos][binary data] */
66 #define BayEOS_OriginFrame 0xb /* [0xb][origin_length][ORIGIN][Original Frame] -> Origin replaces current origin*/
67 #define BayEOS_MillisecondTimestampFrame 0xc /* [0xc][(long long) timestamp (millisec since 1970-01-01 00:00 GMT)][Original Frame] */]
68 #define BayEOS_RoutedOriginFrame 0xd /* [0xd][origin_length][ORIGIN][Original Frame] -> Origin is appended to current origin using "/" */
69 
70 /*Send commands to the Gateway via frame/save interface */
71 #define BayEOS_GatewayCommand 0xe /* [0xe][type][ARGS...] */
72 #define BayEOS_GatewayCommand_SetName 0x1 /* [0xe][0x1][Name] */
73 #define BayEOS_GatewayCommand_ApplyTemplate 0x2 /* [0xe][0x2][TemplateName/UUID/URL] */
74 #define BayEOS_GatewayCommand_SetSamplingInt 0x3 /* [0xe][0x3][long] */
75 #define BayEOS_GatewayCommand_SetCheckDelay 0x4 /* [0xe][0x4][long] */
76 
77 //#define BayEOS_GatewayCommand_SetChannelName 0x21 /* [0xe][0x2][NR][Name] */
78 
79 #define BayEOS_ChecksumFrame 0xf /* [0xf][frame][checksum_16bit] */
80 
81 /* BayEOS Data Frames */
82 /* [0x1][0x1][offset][[float]]+... */
83 #define BayEOS_Float32le 0x1
84 #define BayEOS_Int32le 0x2
85 #define BayEOS_Int16le 0x3
86 #define BayEOS_UInt8 0x4
87 #define BayEOS_Double64le 0x5
88 #define BayEOS_String 0x6 /* [length (2b)][string] */
89 #define BayEOS_Binary 0x7 /* [offset][length (2b)][data] */
90 
91 /* [0x1][0x21][[float]]+... */
92 #define BayEOS_WithoutOffsetFloat32le 0x21
93 #define BayEOS_WithoutOffsetInt32le 0x22
94 #define BayEOS_WithoutOffsetInt16le 0x23
95 #define BayEOS_WithoutOffsetUInt8 0x24
96 #define BayEOS_WithoutOffsetDouble64le 0x25
97 /* [0x1][0x41][[Channel number][float]]+... */
98 #define BayEOS_ChannelFloat32le 0x41
99 #define BayEOS_ChannelInt32le 0x42
100 #define BayEOS_ChannelInt16le 0x43
101 #define BayEOS_ChannelUInt8 0x44
102 #define BayEOS_ChannelDouble64le 0x45
103  /* [0x1][0x61][[Label length][ChannelLabel][float]]+... */
104 #define BayEOS_LabelledChannelFloat32le 0x61
105 #define BayEOS_LabelledChannelInt32le 0x62
106 #define BayEOS_LabelledChannelInt16le 0x63
107 #define BayEOS_LabelledChannelUInt8 0x64
108 #define BayEOS_LabelledChannelDouble64le 0x65
109 
110 
111 #define BayEOS_WithoutOffset 0x20
112 #define BayEOS_ChannelNumber 0x40
113 #define BayEOS_ChannelLabel 0x60
114 
115 #define BayEOS_DATATYP_MASK 0x0f
116 #define BayEOS_OFFSETTYP_MASK 0xf0
117 
124 #define BayEOS_SetCannelAddress 0x1
125 #define BayEOS_GetCannelAddress 0x2
126 #define BayEOS_SetAutoSearch 0x3
127 #define BayEOS_GetAutoSearch 0x4
128 #define BayEOS_SetPin 0x5
129 #define BayEOS_GetPin 0x6
130 #define BayEOS_GetTime 0x7
131 #define BayEOS_SetTime 0x8
132 #define BayEOS_GetName 0x9
133 #define BayEOS_SetName 0xa
134 #define BayEOS_StartData 0xb
135 #define BayEOS_StopData 0xc
138 #define BayEOS_GetVersion 0xd
139 #define BayEOS_GetSamplingInt 0xe
140 #define BayEOS_SetSamplingInt 0xf
141 #define BayEOS_TimeOfNextFrame 0x10
142 #define BayEOS_StartLiveData 0x11
143 #define BayEOS_ModeStop 0x12 /* renamed from StopLiveData - Should be used to stop DUMP/LIVE/SEND-Mode */
144 #define BayEOS_Seek 0x13
145 #define BayEOS_StartBinaryDump 0x14
146 #define BayEOS_BufferCommand 0x15
148 #define BayEOS_GetBatStatus 0x16 /* [0x2][0x16] -> returns [0x3][0x16][uint16_t mV][uint16_t warning limit] */
149 
150 
151 #ifndef BayEOS_MAX_PAYLOAD
152 #define BayEOS_MAX_PAYLOAD 100
153 #endif
154 
155 
156 
157 #include <BayEOSBuffer.h>
158 
159 
160 class BayEOS {
161 public:
165  BayEOS(void) {
166  _buffer=NULL;
167  }
172  virtual uint8_t sendPayload(void)=0;
173 
178  virtual uint8_t readIntoPayload(int timeout=5000){return 0;};
179 
184  virtual int available(void){ return 0;};
185 
189  uint8_t sendError(const String &s);
190 
194  uint8_t sendMessage(const String &s);
195 
199  void startFrame(uint8_t type);
200 
204  void startOriginFrame(const String &o, uint8_t routed=0);
205 
209  void startDataFrame(uint8_t subtype=BayEOS_Float32le,uint8_t checksum=0);
210 
216  void startDataFrameWithOrigin(uint8_t subtype,const String &o,uint8_t checksum=0,uint8_t routed=0);
217 
227  uint8_t addChannelValue(float v, uint8_t channel_number=0);
228  uint8_t addChannelValue(double v, uint8_t channel_number=0);
229  uint8_t addChannelValue(long v, uint8_t channel_number=0);
230  uint8_t addChannelValue(unsigned long v, uint8_t channel_number=0);
231  uint8_t addChannelValue(int v, uint8_t channel_number=0);
232  uint8_t addChannelValue(unsigned int v, uint8_t channel_number=0);
233  uint8_t addChannelValue(int8_t v, uint8_t channel_number=0);
234  uint8_t addChannelValue(uint8_t v, uint8_t channel_number=0);
235 
244  uint8_t addChannelValue(float v, const char* channel_label);
245  uint8_t addChannelValue(double v, const char* channel_label);
246  uint8_t addChannelValue(long v, const char* channel_label);
247  uint8_t addChannelValue(unsigned long v, const char* channel_label);
248  uint8_t addChannelValue(int v, const char* channel_label);
249  uint8_t addChannelValue(unsigned int v, const char* channel_label);
250  uint8_t addChannelValue(int8_t v, const char* channel_label);
251  uint8_t addChannelValue(uint8_t v, const char* channel_label);
252 
253  /*
254  * Add Checksum at end of frame
255  */
256  uint8_t addChecksum(void);
257 
258  /*
259  * tries to validate checksum of payload
260  * returns
261  * 0 on success
262  * 1 on checksum error
263  * 2 on no checksum
264  */
265  uint8_t validateChecksum(void);
266 
270  void startRoutedFrame(uint16_t sourceMyID,uint16_t sourcePANID,uint8_t rssi=0);
271 
275  void startDelayedFrame(unsigned long delay);
276 
280  void startTimestampFrame(unsigned long timestamp);
281 
285  void startCommand(uint8_t cmd_api);
286 
290  void startCommandResponse(uint8_t cmd_api);
291 
297  uint8_t addToPayload(uint8_t b);
298 
302  uint8_t addToPayload(const void* p,uint8_t length);
303 
307  uint8_t addToPayload(const uint8_t* c);
308 
312  uint8_t addToPayload(const String &s);
313 
317  uint8_t addToPayload(float f);
318 
322  uint8_t addToPayload(unsigned long l);
323 
327  uint8_t addToPayload(long l);
328 
332  uint8_t addToPayload(int w);
333 
337  uint8_t addToPayload(uint16_t w);
338 
339 
343  uint8_t getPayloadBytesLeft(void) const;
344 
348  uint8_t getPayloadLength(void) const;
349 
353  uint8_t getPacketLength(void) const;
354 
358  const uint8_t *getPayload(void) const;
359 
360  /*
361  * get a byte from payload
362  */
363  uint8_t getPayload(uint8_t index) const;
364 
365 
369  uint8_t sendOrBuffer(void);
370 
374  uint8_t sendFromBuffer(void);
375 
379  uint8_t writeToBuffer(void);
380 
384  uint8_t readFromBuffer(void);
385 
389  uint8_t readBinaryFromBuffer(unsigned long pos);
390 
394  uint8_t readBinaryFromBuffer(unsigned long pos,unsigned long end, unsigned long vpos);
395 
401  void setBuffer(BayEOSBuffer &buffer, uint16_t max_skip=0) {
402  _buffer = &buffer;
403  _max_skip=max_skip;
404  _skip_counter=0;
405  _failure_counter=0;
406  }
407 
408  uint8_t _payload[BayEOS_MAX_PAYLOAD];
409  uint8_t _next;
410  uint8_t _success;
411  uint8_t _failure_counter; //counts send failures
412  uint16_t _max_skip; //maximum number of packets to write to buffer before next try
413  uint16_t _skip_counter; //skip counter
414  BayEOSBuffer* _buffer;
415 };
416 
417 
418 inline uint8_t BayEOS::addToPayload(uint8_t b){
419  if(_next<BayEOS_MAX_PAYLOAD){
420  _payload[_next]=b;
421  _next++;
422  return 1;
423  }
424  return 0;
425 
426 }
427 #endif
428 
virtual uint8_t sendPayload(void)=0
const uint8_t * getPayload(void) const
Definition: BayEOS.cpp:399
uint8_t sendError(const String &s)
Definition: BayEOS.cpp:273
uint8_t writeToBuffer(void)
Definition: BayEOS.cpp:285
virtual uint8_t readIntoPayload(int timeout=5000)
Definition: BayEOS.h:178
void startCommand(uint8_t cmd_api)
Definition: BayEOS.cpp:221
uint8_t sendFromBuffer(void)
Definition: BayEOS.cpp:360
void startDataFrame(uint8_t subtype=BayEOS_Float32le, uint8_t checksum=0)
Definition: BayEOS.cpp:8
uint8_t getPayloadBytesLeft(void) const
Definition: BayEOS.cpp:387
void startRoutedFrame(uint16_t sourceMyID, uint16_t sourcePANID, uint8_t rssi=0)
Definition: BayEOS.cpp:199
uint8_t addToPayload(uint8_t b)
Definition: BayEOS.h:418
uint8_t getPacketLength(void) const
Definition: BayEOS.cpp:395
uint8_t sendOrBuffer(void)
Definition: BayEOS.cpp:335
Definition: BayEOS.h:160
void startDataFrameWithOrigin(uint8_t subtype, const String &o, uint8_t checksum=0, uint8_t routed=0)
Definition: BayEOS.cpp:23
void startFrame(uint8_t type)
Definition: BayEOS.cpp:3
void startDelayedFrame(unsigned long delay)
Definition: BayEOS.cpp:211
void startTimestampFrame(unsigned long timestamp)
Definition: BayEOS.cpp:216
void setBuffer(BayEOSBuffer &buffer, uint16_t max_skip=0)
Definition: BayEOS.h:401
virtual int available(void)
Definition: BayEOS.h:184
uint8_t readBinaryFromBuffer(unsigned long pos)
Definition: BayEOS.cpp:293
void startCommandResponse(uint8_t cmd_api)
Definition: BayEOS.cpp:226
uint8_t addChannelValue(float v, uint8_t channel_number=0)
Definition: BayEOS.cpp:57
BayEOS(void)
Definition: BayEOS.h:165
uint8_t sendMessage(const String &s)
Definition: BayEOS.cpp:279
uint8_t readFromBuffer(void)
Definition: BayEOS.cpp:308
void startOriginFrame(const String &o, uint8_t routed=0)
Definition: BayEOS.cpp:16
uint8_t getPayloadLength(void) const
Definition: BayEOS.cpp:391