diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2018-05-24 13:18:03 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2018-05-28 10:43:39 -0400 |
commit | 528f9f76042a7d82a2108f4ea582c61481368ecf (patch) | |
tree | 82ae8a6000e29481cea6382985478b2763def7da | |
parent | c8af3feee6b35e33ab989ca8af0b48d738d4aedf (diff) | |
download | kutter-528f9f76042a7d82a2108f4ea582c61481368ecf.tar.gz kutter-528f9f76042a7d82a2108f4ea582c61481368ecf.tar.xz kutter-528f9f76042a7d82a2108f4ea582c61481368ecf.zip |
command: Add command_find_and_dispatch() helper
Add a helper function that calls command_find_block() followed by
command_dispatch().
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r-- | src/avr/usbserial.c | 6 | ||||
-rw-r--r-- | src/command.c | 11 | ||||
-rw-r--r-- | src/command.h | 2 | ||||
-rw-r--r-- | src/generic/usb_cdc.c | 4 | ||||
-rw-r--r-- | src/linux/console.c | 4 |
5 files changed, 17 insertions, 10 deletions
diff --git a/src/avr/usbserial.c b/src/avr/usbserial.c index fe378227..2a16160d 100644 --- a/src/avr/usbserial.c +++ b/src/avr/usbserial.c @@ -7,7 +7,7 @@ #include <string.h> // memmove #include "../lib/pjrc_usb_serial/usb_serial.h" #include "board/misc.h" // console_sendf -#include "command.h" // command_dispatch +#include "command.h" // command_find_and_dispatch #include "sched.h" // DECL_INIT static uint8_t receive_buf[MESSAGE_MAX], receive_pos; @@ -51,9 +51,7 @@ console_task(void) { console_check_input(); uint_fast8_t pop_count; - int8_t ret = command_find_block(receive_buf, receive_pos, &pop_count); - if (ret > 0) - command_dispatch(receive_buf, pop_count); + int8_t ret = command_find_and_dispatch(receive_buf, receive_pos, &pop_count); if (ret) console_pop_input(pop_count); } diff --git a/src/command.c b/src/command.c index 965f91ed..2df70d85 100644 --- a/src/command.c +++ b/src/command.c @@ -307,3 +307,14 @@ command_dispatch(uint8_t *buf, uint_fast8_t msglen) func(args); } } + +// Find a message block and then dispatch all the commands in it +int_fast8_t +command_find_and_dispatch(uint8_t *buf, uint_fast8_t buf_len + , uint_fast8_t *pop_count) +{ + int_fast8_t ret = command_find_block(buf, buf_len, pop_count); + if (ret > 0) + command_dispatch(buf, *pop_count); + return ret; +} diff --git a/src/command.h b/src/command.h index 2dd195ea..035d3929 100644 --- a/src/command.h +++ b/src/command.h @@ -72,6 +72,8 @@ void command_sendf(const struct command_encoder *ce, ...); int_fast8_t command_find_block(uint8_t *buf, uint_fast8_t buf_len , uint_fast8_t *pop_count); void command_dispatch(uint8_t *buf, uint_fast8_t msglen); +int_fast8_t command_find_and_dispatch(uint8_t *buf, uint_fast8_t buf_len + , uint_fast8_t *pop_count); // out/compile_time_request.c (auto generated file) extern const struct command_parser command_index[]; diff --git a/src/generic/usb_cdc.c b/src/generic/usb_cdc.c index 56a60fac..ab1869f8 100644 --- a/src/generic/usb_cdc.c +++ b/src/generic/usb_cdc.c @@ -93,9 +93,7 @@ usb_bulk_out_task(void) return; // Process any existing message blocks uint_fast8_t rpos = receive_pos, pop_count; - int_fast8_t ret = command_find_block(receive_buf, rpos, &pop_count); - if (ret > 0) - command_dispatch(receive_buf, pop_count); + int_fast8_t ret = command_find_and_dispatch(receive_buf, rpos, &pop_count); if (ret) { // Move buffer uint_fast8_t needcopy = rpos - pop_count; diff --git a/src/linux/console.c b/src/linux/console.c index 9064171f..4afa6151 100644 --- a/src/linux/console.c +++ b/src/linux/console.c @@ -156,9 +156,7 @@ console_task(void) // Find and dispatch message blocks in the input int len = receive_pos + ret; uint_fast8_t pop_count, msglen = len > MESSAGE_MAX ? MESSAGE_MAX : len; - ret = command_find_block(receive_buf, msglen, &pop_count); - if (ret > 0) - command_dispatch(receive_buf, pop_count); + ret = command_find_and_dispatch(receive_buf, msglen, &pop_count); if (ret) { len -= pop_count; if (len) { |