public slip_error_t slip_read_byte(byte val) { slip_error_t error = slip_error_t.SLIP_NO_ERROR; switch (this.state) { case slip_state_t.SLIP_STATE_NORMAL: switch (val) { case SLIP_SPECIAL_BYTE_END: if (this.size > 0) { this.descriptor.recv_message( this.descriptor.buf, this.size ); } reset_rx(); break; case SLIP_SPECIAL_BYTE_ESC: this.state = slip_state_t.SLIP_STATE_ESCAPED; break; default: error = put_byte_to_buffer(val); break; } break; case slip_state_t.SLIP_STATE_ESCAPED: switch (val) { case SLIP_ESCAPED_BYTE_END: val = SLIP_SPECIAL_BYTE_END; break; case SLIP_ESCAPED_BYTE_ESC: val = SLIP_SPECIAL_BYTE_ESC; break; default: error = slip_error_t.SLIP_ERROR_UNKNOWN_ESCAPED_BYTE; reset_rx(); break; } if (error != slip_error_t.SLIP_NO_ERROR) { break; } error = put_byte_to_buffer(val); break; } return(error); }
slip_error_t put_byte_to_buffer(byte val) { slip_error_t error = slip_error_t.SLIP_NO_ERROR; if (this.size >= this.descriptor.buf_size) { error = slip_error_t.SLIP_ERROR_BUFFER_OVERFLOW; reset_rx(); } else { this.descriptor.buf[this.size++] = val; this.state = slip_state_t.SLIP_STATE_NORMAL; } return(error); }