Browse Source

* companion_radio_usb: encoding in ArduinoSerialInterface changed to 16-bit frame lengths

* MAX_FRAME_SIZE now 172 (to fit max 160 byte text msg)
pull/10/head
Scott Powell 1 year ago
parent
commit
4f0acbd8da
  1. 23
      src/helpers/ArduinoSerialInterface.cpp
  2. 4
      src/helpers/ArduinoSerialInterface.h
  3. 2
      src/helpers/BaseSerialInterface.h

23
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) {

4
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];

2
src/helpers/BaseSerialInterface.h

@ -2,7 +2,7 @@
#include <Arduino.h>
#define MAX_FRAME_SIZE 160
#define MAX_FRAME_SIZE 172
class BaseSerialInterface {
protected:

Loading…
Cancel
Save