|
|
@ -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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|