2 #pragma GCC optimize("O3")
10 #define TP_FRAME_FLAG_INVALID 0b10000000
13 #define TP_FRAME_FLAG_EXTENDED 0b01000000
16 #define TP_FRAME_FLAG_REPEATED 0b00100000
19 #define TP_FRAME_FLAG_ECHO 0b00010000
22 #define TP_FRAME_FLAG_ADDRESSED 0b00001000
25 #define TP_FRAME_FLAG_ACK_BUSY 0b00000100
28 #define TP_FRAME_FLAG_ACK_NACK 0b00000010
31 #define TP_FRAME_FLAG_ACK 0b00000001
44 inline void presetFlags()
73 _data = (uint8_t*)malloc(_maxSize);
137 inline uint8_t
data(uint16_t pos)
150 memset(_data, 0x0, _maxSize);
158 return _size >= (_size >= 7 ?
fullSize() : _maxSize);
166 return (_data[0] & 0xD3) == 0x10;
175 return isExtended() ? (_data[2] << 8) + _data[3] : (_data[1] << 8) + _data[2];
180 uint16_t value =
source();
182 sprintf(buffer,
"%02i.%02i.%03i", (value >> 12 & 0b1111), (value >> 8 & 0b1111), (value & 0b11111111));
192 sprintf(buffer,
"%02i/%02i/%03i", (value >> 11 & 0b1111), (value >> 8 & 0b111), (value & 0b11111111));
194 sprintf(buffer,
"%02i.%02i.%03i", (value >> 12 & 0b1111), (value >> 8 & 0b1111), (value & 0b11111111));
205 return isExtended() ? (_data[4] << 8) + _data[5] : (_data[3] << 8) + _data[4];
214 return isExtended() ? _data[6] : _data[5] & 0b1111;
240 return isExtended() ? (_data[1] >> 7) & 0b1 : (_data[5] >> 7) & 0b1;
258 uint8_t* cemiBuffer = (uint8_t*)malloc(
cemiSize());
261 cemiBuffer[0] = 0x29;
263 cemiBuffer[2] = _data[0];
267 memcpy(cemiBuffer + 2, _data,
fullSize() - 1);
271 cemiBuffer[3] = _data[5] & 0xF0;
272 memcpy(cemiBuffer + 4, _data + 1, 4);
273 cemiBuffer[8] = _data[5] & 0x0F;
274 memcpy(cemiBuffer + 9, _data + 6, cemiBuffer[8] + 2 - 1);
291 for (uint16_t i = 0; i < s; i++)
294 return _data[s] == (uint8_t)~sum;
307 return !(_data[0] & 0b100000);
void fillTelegramTP(uint8_t *data)
uint16_t telegramLengthtTP() const
std::string humanDestination()
TpFrame(CemiFrame &cemiFrame)
uint8_t * cemiData()
Creates a buffer and converts the TpFrame into a CemiFrame.
void addByte(uint8_t byte)
std::string humanSource()
TpFrame(uint16_t maxSize=263)
uint8_t data(uint16_t pos)
void addFlags(uint8_t flags)