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:
parent
c0cba8f21a
commit
7a5f96d844
1 changed files with 20 additions and 5 deletions
|
@ -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"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue