diff options
author | lonkaars <loek@pipeframe.xyz> | 2022-05-27 12:53:42 +0200 |
---|---|---|
committer | lonkaars <loek@pipeframe.xyz> | 2022-05-27 12:53:42 +0200 |
commit | 4c4d045329c4a149bae0b53952c39c14243e1870 (patch) | |
tree | 18ce1a31adb20421635738d627b46150b1fb9fea /robot/sercomm.c | |
parent | 05318790dcbd6714a2adb3532e902a56a6638ca0 (diff) |
throw error on noisy serial channel
Diffstat (limited to 'robot/sercomm.c')
-rw-r--r-- | robot/sercomm.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/robot/sercomm.c b/robot/sercomm.c index 2736030..83d6419 100644 --- a/robot/sercomm.c +++ b/robot/sercomm.c @@ -3,6 +3,7 @@ #include "../shared/bin.h" #include "../shared/serial_parse.h" +#include "errcatch.h" #include "hypervisor.h" #include "io.h" #include "mode_dirc.h" @@ -51,6 +52,26 @@ void w2_sercomm_append_msg(w2_s_bin *data) { g_w2_sercomm_index = next_index; } +void w2_cmd_handler(uint8_t data[W2_SERIAL_READ_BUFFER_SIZE], uint8_t data_length) { + w2_s_bin *copy = w2_bin_s_alloc(data_length, data); + void (*handler)(w2_s_bin *) = g_w2_cmd_handlers[data[0]]; + + if (handler == NULL) { +#ifdef W2_SIM + // TODO throw warning + simwarn("unknown serial message with code 0x%02x\n", data[0]); +#endif + w2_errcatch_throw(W2_E_WARN_SERIAL_NOISY); + } else { +#ifdef W2_SIM + w2_sim_print_serial(copy); +#endif + handler(copy); + } + + free(copy); +} + void w2_cmd_ping_rx(w2_s_bin *data) { w2_s_cmd_ping_rx *message = malloc(w2_cmd_sizeof(data->data, data->bytes)); memcpy(message, data->data, data->bytes); |