aboutsummaryrefslogtreecommitdiff
path: root/src/helpers/ArduinoSerialInterface.cpp
diff options
context:
space:
mode:
authorScott Powell <sqij@protonmail.com>2025-01-29 10:12:22 +1100
committerScott Powell <sqij@protonmail.com>2025-01-29 10:12:22 +1100
commit4f0acbd8dafc25e772d0364897d653ffe08a9eef (patch)
treea3ea145a2cbb268f861fdf06650213a3b2eab16b /src/helpers/ArduinoSerialInterface.cpp
parente53f0d0725a5b15c68bc88f550924cccb0fb5474 (diff)
* companion_radio_usb: encoding in ArduinoSerialInterface changed to 16-bit frame lengths
* MAX_FRAME_SIZE now 172 (to fit max 160 byte text msg)
Diffstat (limited to 'src/helpers/ArduinoSerialInterface.cpp')
-rw-r--r--src/helpers/ArduinoSerialInterface.cpp23
1 files changed, 15 insertions, 8 deletions
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) {