Add internal protocol decoding reset
parent
8a5614844c
commit
89dcafbcef
|
|
@ -76,10 +76,12 @@ DecodeStatus Protocol::DecodeRequest(uint8_t c) {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t Protocol::EncodeRequest(const RequestMsg &msg, uint8_t *txbuff) {
|
uint8_t Protocol::EncodeRequest(const RequestMsg &msg, uint8_t *txbuff) {
|
||||||
|
constexpr uint8_t reqSize = 3;
|
||||||
txbuff[0] = (uint8_t)msg.code;
|
txbuff[0] = (uint8_t)msg.code;
|
||||||
txbuff[1] = msg.value + '0';
|
txbuff[1] = msg.value + '0';
|
||||||
txbuff[2] = '\n';
|
txbuff[2] = '\n';
|
||||||
return 3;
|
return reqSize;
|
||||||
|
static_assert(reqSize <= MaxRequestSize(), "Request message length exceeded the maximum size, increase the magic constant in MaxRequestSize()");
|
||||||
}
|
}
|
||||||
|
|
||||||
DecodeStatus Protocol::DecodeResponse(uint8_t c) {
|
DecodeStatus Protocol::DecodeResponse(uint8_t c) {
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,10 @@ public:
|
||||||
/// @returns number of bytes written into txbuff
|
/// @returns number of bytes written into txbuff
|
||||||
static uint8_t EncodeRequest(const RequestMsg &msg, uint8_t *txbuff);
|
static uint8_t EncodeRequest(const RequestMsg &msg, uint8_t *txbuff);
|
||||||
|
|
||||||
|
/// @returns the maximum byte length necessary to encode a request message
|
||||||
|
/// Beneficial in case of pre-allocating a buffer for enconding a RequestMsg.
|
||||||
|
static constexpr uint8_t MaxRequestSize() { return 3; }
|
||||||
|
|
||||||
/// Encode generic response Command Accepted or Rejected
|
/// Encode generic response Command Accepted or Rejected
|
||||||
/// @param msg source request message for this response
|
/// @param msg source request message for this response
|
||||||
/// @param ar code of response parameter
|
/// @param ar code of response parameter
|
||||||
|
|
@ -131,6 +135,16 @@ public:
|
||||||
/// @returns the most recently lexed response message
|
/// @returns the most recently lexed response message
|
||||||
inline const ResponseMsg GetResponseMsg() const { return responseMsg; }
|
inline const ResponseMsg GetResponseMsg() const { return responseMsg; }
|
||||||
|
|
||||||
|
/// resets the internal request decoding state (typically after an error)
|
||||||
|
void ResetRequestDecoder() {
|
||||||
|
rqState = RequestStates::Code;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// resets the internal response decoding state (typically after an error)
|
||||||
|
void ResetResponseDecoder() {
|
||||||
|
rspState = ResponseStates::RequestCode;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum class RequestStates : uint8_t {
|
enum class RequestStates : uint8_t {
|
||||||
Code, ///< starting state - expects message code
|
Code, ///< starting state - expects message code
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue