drivers: can: shell: add support for setting one-shot mode

Add support for setting one-shot mode.

Signed-off-by: Henrik Brix Andersen <hebad@vestas.com>
This commit is contained in:
Henrik Brix Andersen 2022-07-12 22:23:05 +02:00 committed by Carles Cufí
commit 7a5f96d844

View file

@ -20,7 +20,8 @@ static struct k_poll_event msgq_events[1] = {
};
static inline int read_config_options(const struct shell *sh, int pos,
char **argv, bool *listenonly, bool *loopback)
char **argv, bool *listenonly, bool *loopback,
bool *oneshot)
{
char *arg = argv[pos];
@ -44,6 +45,13 @@ static inline int read_config_options(const struct shell *sh, int pos,
*loopback = true;
}
break;
case 'o':
if (oneshot == NULL) {
shell_error(sh, "Unknown option %c", *arg);
} else {
*oneshot = true;
}
break;
default:
shell_error(sh, "Unknown option %c", *arg);
return -EINVAL;
@ -231,7 +239,9 @@ static int cmd_config(const struct shell *sh, size_t argc, char **argv)
{
const struct device *can_dev;
int pos = 1;
bool listenonly = false, loopback = false;
bool listenonly = false;
bool loopback = false;
bool oneshot = false;
can_mode_t mode = CAN_MODE_NORMAL;
uint32_t bitrate;
int ret;
@ -245,7 +255,7 @@ static int cmd_config(const struct shell *sh, size_t argc, char **argv)
pos++;
pos = read_config_options(sh, pos, argv, &listenonly, &loopback);
pos = read_config_options(sh, pos, argv, &listenonly, &loopback, &oneshot);
if (pos < 0) {
return -EINVAL;
}
@ -258,6 +268,10 @@ static int cmd_config(const struct shell *sh, size_t argc, char **argv)
mode |= CAN_MODE_LOOPBACK;
}
if (oneshot) {
mode |= CAN_MODE_ONE_SHOT;
}
ret = can_set_mode(can_dev, mode);
if (ret) {
shell_error(sh, "Failed to set mode [%d]",
@ -444,9 +458,10 @@ static int cmd_remove_rx_filter(const struct shell *sh, size_t argc, char **argv
SHELL_STATIC_SUBCMD_SET_CREATE(sub_can,
SHELL_CMD_ARG(config, NULL,
"Configure CAN controller.\n"
" Usage: config device_name [-sl] bitrate\n"
" Usage: config device_name [-slo] bitrate\n"
" -s Listen-only mode\n"
" -l Loopback mode",
" -l Loopback mode\n"
" -o One-shot mode",
cmd_config, 3, 1),
SHELL_CMD_ARG(send, NULL,
"Send a CAN frame.\n"