74 template<u
int8_t NMaxMessage = 10>
77 static_assert( (0U < NMaxMessage) and (NMaxMessage < 127U),
78 "The max length of the message is out of range" );
172 uint8_t
size()
const {
return m_index; }
179 const uint8_t*
buff()
const {
return m_message; }
182 using State_t = bool (
Bicoder::*)(const uint8_t data);
184 bool waitHeader(
const uint8_t data);
185 bool inMessage(
const uint8_t data);
186 bool afterEscape(
const uint8_t data);
188 void appendMessage(
const uint8_t data );
189 bool pushByte(
const uint8_t data );
190 bool encodeByte(
const uint8_t data );
192 State_t m_state { &Bicoder::waitHeader };
194 uint8_t m_index { 0 };
195 bool m_isCompleted {
false };
199 void Bicoder<N>::appendMessage(
const uint8_t data )
201 m_message[m_index] = data;
206 bool Bicoder<N>::pushByte(
const uint8_t data )
214 appendMessage( data );
223 m_state = &Bicoder::waitHeader;
224 m_isCompleted =
false;
230 return (this->*m_state)( data );
238 for( uint8_t i = 0; (i < size); ++i )
240 if( not decodeByte( data[i] ) )
244 return m_isCompleted;
259 appendMessage( data );
275 for( uint8_t i = 0; i < size; ++i )
276 encodeByte( data[i] );
280 return m_isCompleted =
true;
289 m_state = &Bicoder::inMessage;
295 bool Bicoder<N>::inMessage(
const uint8_t data )
300 m_state = &Bicoder::waitHeader;
301 m_isCompleted =
true;
304 m_state = &Bicoder::afterEscape;
310 return pushByte( data );
315 bool Bicoder<N>::afterEscape(
const uint8_t data )
317 m_state = &Bicoder::inMessage;
Definition DataLinkSerialProtocol.h:14
ESpecial
Definition DataLinkSerialProtocol.h:19
@ eFTR
Definition DataLinkSerialProtocol.h:35
@ eHDR
Definition DataLinkSerialProtocol.h:27
@ eXOR
Definition DataLinkSerialProtocol.h:23
@ eESC
Definition DataLinkSerialProtocol.h:31
Definition DataLinkSerialProtocol.h:76
uint8_t size() const
Definition DataLinkSerialProtocol.h:172
void reset()
Definition DataLinkSerialProtocol.h:220
static constexpr uint8_t maxEncodedSize
Definition DataLinkSerialProtocol.h:84
bool isCompleted() const
Definition DataLinkSerialProtocol.h:164
bool decodeMessage(const uint8_t *data, uint8_t size)
Definition DataLinkSerialProtocol.h:234
bool decodeByte(const uint8_t data)
Definition DataLinkSerialProtocol.h:228
bool encodeMessage(const uint8_t *data, uint8_t size)
Definition DataLinkSerialProtocol.h:266
const uint8_t * buff() const
Definition DataLinkSerialProtocol.h:179