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