|
@@ -45,9 +45,6 @@ void init_byte_stuffer_state(byte_stuffer_state_t* state) {
|
|
|
state->long_frame = false;
|
|
state->long_frame = false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-static void start_frame(byte_stuffer_state_t* state, uint8_t data) {
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
void recv_byte(byte_stuffer_state_t* state, uint8_t data) {
|
|
void recv_byte(byte_stuffer_state_t* state, uint8_t data) {
|
|
|
// Start of a new frame
|
|
// Start of a new frame
|
|
|
if (state->next_zero == 0) {
|
|
if (state->next_zero == 0) {
|
|
@@ -61,7 +58,9 @@ void recv_byte(byte_stuffer_state_t* state, uint8_t data) {
|
|
|
if (data == 0) {
|
|
if (data == 0) {
|
|
|
if (state->next_zero == 0) {
|
|
if (state->next_zero == 0) {
|
|
|
// The frame is completed
|
|
// The frame is completed
|
|
|
- recv_frame(state->data, state->data_pos);
|
|
|
|
|
|
|
+ if (state->data_pos > 0) {
|
|
|
|
|
+ recv_frame(state->data, state->data_pos);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
else {
|
|
else {
|
|
|
// The frame is invalid, so reset
|
|
// The frame is invalid, so reset
|
|
@@ -69,8 +68,16 @@ void recv_byte(byte_stuffer_state_t* state, uint8_t data) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
else {
|
|
else {
|
|
|
- if (state->next_zero == 0) {
|
|
|
|
|
|
|
+ if (state->data_pos == MAX_FRAME_SIZE) {
|
|
|
|
|
+ // We exceeded our maximum frame size
|
|
|
|
|
+ // therefore there's nothing else to do than reset to a new frame
|
|
|
|
|
+ state->next_zero = data;
|
|
|
|
|
+ state->long_frame = data == 0xFF;
|
|
|
|
|
+ state->data_pos = 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (state->next_zero == 0) {
|
|
|
if (state->long_frame) {
|
|
if (state->long_frame) {
|
|
|
|
|
+ // This is part of a long frame, so continue
|
|
|
state->next_zero = data;
|
|
state->next_zero = data;
|
|
|
state->long_frame = data == 0xFF;
|
|
state->long_frame = data == 0xFF;
|
|
|
}
|
|
}
|