17 if(routed)
startFrame((uint8_t) BayEOS_RoutedOriginFrame);
24 uint8_t checksum, uint8_t routed) {
28 if(routed)
addToPayload((uint8_t) BayEOS_RoutedOriginFrame);
60 if (_payload[0] == BayEOS_ChecksumFrame) {
63 if (_payload[offset] == BayEOS_OriginFrame || _payload[offset] == BayEOS_RoutedOriginFrame) {
64 offset += _payload[offset + 1] + 2;
66 if (_payload[offset] != BayEOS_DataFrame)
68 if ((_payload[offset + 1] & BayEOS_OFFSETTYP_MASK) == BayEOS_ChannelLabel)
70 if (((_payload[offset + 1] & BayEOS_OFFSETTYP_MASK) == BayEOS_ChannelNumber))
72 else if ((((_payload[offset + 1] & BayEOS_OFFSETTYP_MASK) == 0x0)
73 & (_next == (2 + offset)))) {
78 switch (_payload[offset + 1] & 0x0f) {
122 if (_payload[0] == BayEOS_ChecksumFrame) {
125 if (_payload[offset] == BayEOS_OriginFrame || _payload[offset] == BayEOS_RoutedOriginFrame) {
126 offset += _payload[offset + 1] + 2;
128 if (_payload[offset] != BayEOS_DataFrame)
130 if ((_payload[offset + 1] & BayEOS_OFFSETTYP_MASK) != BayEOS_ChannelLabel)
134 switch (_payload[offset + 1] & 0x0f) {
154 uint8_t BayEOS::addChecksum() {
155 uint16_t checksum = 0;
156 for (uint8_t i = 0; i < _next; i++) {
157 checksum += _payload[i];
159 return addToPayload((uint16_t)(0xffff - checksum & 0xffff));
161 uint8_t BayEOS::validateChecksum() {
163 uint8_t has_checksum = 0;
164 uint16_t checksum = 0;
165 while (!has_checksum) {
166 switch (_payload[offset]) {
167 case BayEOS_RoutedFrame:
170 case BayEOS_RoutedFrameRSSI:
173 case BayEOS_DelayedFrame:
176 case BayEOS_TimestampFrame:
179 case BayEOS_OriginFrame:
180 case BayEOS_RoutedOriginFrame:
181 offset += 2+_payload[offset+1];
183 case BayEOS_ChecksumFrame:
191 checksum += _payload[offset];
194 checksum += *(uint16_t*) (_payload+offset);
195 if(checksum == 0xffff)
return 0;
232 uint8_t* b = (uint8_t *) p;
233 for (
int i = 0; i < length; i++) {
247 for (uint8_t i = 0; i < s.length(); i++) {
290 return _buffer->
addPacket(_payload, _next);
300 unsigned long vpos) {
315 if (_buffer->
rtc()) {
316 if (_buffer->_absoluteTime)
337 if (_failure_counter < 2
340 (uint16_t) _failure_counter
341 * (uint16_t) _failure_counter)
342 || _skip_counter >= _max_skip) {
346 _failure_counter = 0;
350 if (_failure_counter != 255)
362 if (_failure_counter < 2
366 (uint16_t) _failure_counter
367 * (uint16_t) _failure_counter) ||
368 _skip_counter >= _max_skip) {
372 _failure_counter = 0;
377 if (_failure_counter != 255)
388 return (BayEOS_MAX_PAYLOAD-_next);
392 return BayEOS_MAX_PAYLOAD;
404 return _payload[index];
virtual uint8_t sendPayload(void)=0
const uint8_t * getPayload(void) const
int readPacket(uint8_t *dest)
uint8_t sendError(const String &s)
uint8_t writeToBuffer(void)
void startCommand(uint8_t cmd_api)
uint8_t sendFromBuffer(void)
void startDataFrame(uint8_t subtype=BayEOS_Float32le, uint8_t checksum=0)
uint8_t getPayloadBytesLeft(void) const
void startRoutedFrame(uint16_t sourceMyID, uint16_t sourcePANID, uint8_t rssi=0)
uint8_t addToPayload(uint8_t b)
uint8_t getPacketLength(void) const
uint8_t sendOrBuffer(void)
void startDataFrameWithOrigin(uint8_t subtype, const String &o, uint8_t checksum=0, uint8_t routed=0)
void startFrame(uint8_t type)
void startDelayedFrame(unsigned long delay)
unsigned long packetMillis(void)
void startTimestampFrame(unsigned long timestamp)
uint8_t readBinary(unsigned long pos, uint8_t length, uint8_t *dest)
unsigned long available(void)
uint8_t readBinaryFromBuffer(unsigned long pos)
uint8_t packetLength(void)
void startCommandResponse(uint8_t cmd_api)
uint8_t addChannelValue(float v, uint8_t channel_number=0)
uint8_t addPacket(const uint8_t *payload, uint8_t length)
uint8_t sendMessage(const String &s)
uint8_t readFromBuffer(void)
uint8_t initNextPacket(void)
void startOriginFrame(const String &o, uint8_t routed=0)
uint8_t getPayloadLength(void) const