diff --git a/src/helpers/ArduinoSerialInterface.cpp b/src/helpers/ArduinoSerialInterface.cpp index ac0bf848..a01fa586 100644 --- a/src/helpers/ArduinoSerialInterface.cpp +++ b/src/helpers/ArduinoSerialInterface.cpp @@ -1,8 +1,9 @@ #include "ArduinoSerialInterface.h" -#define RECV_STATE_IDLE 0 -#define RECV_STATE_HDR_FOUND 1 -#define RECV_STATE_LEN_FOUND 2 +#define RECV_STATE_IDLE 0 +#define RECV_STATE_HDR_FOUND 1 +#define RECV_STATE_LEN1_FOUND 2 +#define RECV_STATE_LEN2_FOUND 3 void ArduinoSerialInterface::enable() { _isEnabled = true; @@ -26,10 +27,12 @@ size_t ArduinoSerialInterface::writeFrame(const uint8_t src[], size_t len) { return 0; } - uint8_t hdr[2]; + uint8_t hdr[3]; hdr[0] = '>'; - hdr[1] = len; - _serial->write(hdr, 2); + hdr[1] = (len & 0xFF); // LSB + hdr[2] = (len >> 8); // MSB + + _serial->write(hdr, 3); return _serial->write(src, len); } @@ -45,9 +48,13 @@ size_t ArduinoSerialInterface::checkRecvFrame(uint8_t dest[]) { } break; case RECV_STATE_HDR_FOUND: - _frame_len = (uint8_t)c; + _frame_len = (uint8_t)c; // LSB + _state = RECV_STATE_LEN1_FOUND; + break; + case RECV_STATE_LEN1_FOUND: + _frame_len |= ((uint16_t)c) << 8; // MSB rx_len = 0; - _state = _frame_len > 0 ? RECV_STATE_LEN_FOUND : RECV_STATE_IDLE; + _state = _frame_len > 0 ? RECV_STATE_LEN2_FOUND : RECV_STATE_IDLE; break; default: if (rx_len < MAX_FRAME_SIZE) { diff --git a/src/helpers/ArduinoSerialInterface.h b/src/helpers/ArduinoSerialInterface.h index 2666016d..e7794ee0 100644 --- a/src/helpers/ArduinoSerialInterface.h +++ b/src/helpers/ArduinoSerialInterface.h @@ -6,8 +6,8 @@ class ArduinoSerialInterface : public BaseSerialInterface { bool _isEnabled; uint8_t _state; - uint8_t _frame_len; - uint8_t rx_len; + uint16_t _frame_len; + uint16_t rx_len; HardwareSerial* _serial; uint8_t rx_buf[MAX_FRAME_SIZE]; diff --git a/src/helpers/BaseSerialInterface.h b/src/helpers/BaseSerialInterface.h index 0659e71e..e6092765 100644 --- a/src/helpers/BaseSerialInterface.h +++ b/src/helpers/BaseSerialInterface.h @@ -2,7 +2,7 @@ #include -#define MAX_FRAME_SIZE 160 +#define MAX_FRAME_SIZE 172 class BaseSerialInterface { protected: