diff options
| author | lonkaars <loek@pipeframe.xyz> | 2022-05-26 15:39:31 +0200 | 
|---|---|---|
| committer | lonkaars <loek@pipeframe.xyz> | 2022-05-26 15:39:31 +0200 | 
| commit | 60f07661602a5dfe8e39b8038964b38bddcb33a5 (patch) | |
| tree | 0b257acda0797a13cd09e7df2d16a6da0a6aef11 /shared/serial_parse.c | |
| parent | 333eea840a17d0f8ecf0110d952df2857fea4da0 (diff) | |
| parent | f073c9d3848dab915bed4844e9d13684aa5e23eb (diff) | |
merge dev into master
Diffstat (limited to 'shared/serial_parse.c')
| -rw-r--r-- | shared/serial_parse.c | 44 | 
1 files changed, 44 insertions, 0 deletions
| diff --git a/shared/serial_parse.c b/shared/serial_parse.c new file mode 100644 index 0000000..89c5809 --- /dev/null +++ b/shared/serial_parse.c @@ -0,0 +1,44 @@ +#include <stdbool.h> +#include <string.h> + +#include "consts.h" +#include "serial_parse.h" + +// TODO: give this function last time of byte, and measure if >5ms, throw warning +void w2_serial_parse(uint8_t byte) { +	static uint8_t current_message[W2_SERIAL_READ_BUFFER_SIZE] = {0}; +	static uint8_t current_message_index					   = 0; +	static uint8_t complete_message_length					   = 2; + +	static bool attentive = false; +	static bool listening = false; + +	if (byte == W2_SERIAL_START_BYTE) { +		attentive = !attentive; +		// if (attentive && listening) { +		// 	current_message[current_message_index++] = byte; +		// } +	} else { +		// activate listen after non-0xff byte after 0xff +		if (attentive && !listening) { +			attentive = false; +			listening = true; +		} +	} + +	if (!listening) return; +	current_message[current_message_index++] = byte; + +	complete_message_length = w2_cmd_sizeof(current_message, current_message_index); + +	if (current_message_index == complete_message_length) { +		w2_cmd_handler(current_message, current_message_index); + +		memset(¤t_message, 0, W2_SERIAL_READ_BUFFER_SIZE); +		current_message_index	= 0; +		complete_message_length = 1; +		attentive				= false; +		listening				= false; +		return; +	} +} |