drivers: led: shell: add blink cmd

Add blink command to led shell module

Signed-off-by: Yishai Jaffe <yishai1999@gmail.com>
This commit is contained in:
Yishai Jaffe 2025-05-22 17:54:26 +03:00 committed by Chris Friedt
parent ede31d39f0
commit ee7834997b

View File

@ -19,6 +19,8 @@ enum {
arg_idx_dev = 1,
arg_idx_led = 2,
arg_idx_value = 3,
arg_idx_delay_on = 3,
arg_idx_delay_off = 4,
};
static int parse_common_args(const struct shell *sh, char **argv,
@ -85,6 +87,45 @@ static int cmd_on(const struct shell *sh, size_t argc, char **argv)
return err;
}
static int cmd_blink(const struct shell *sh, size_t argc, char **argv)
{
const struct device *dev;
uint32_t led, delay_on, delay_off;
char *end_ptr;
int err;
err = parse_common_args(sh, argv, &dev, &led);
if (err < 0) {
return err;
}
delay_on = strtoul(argv[arg_idx_delay_on], &end_ptr, 0);
if (*end_ptr != '\0') {
shell_error(sh, "Invalid delay_on parameter %s", argv[arg_idx_delay_on]);
return -EINVAL;
}
if (argc > arg_idx_delay_off) {
delay_off = strtoul(argv[arg_idx_delay_off], &end_ptr, 0);
if (*end_ptr != '\0') {
shell_error(sh, "Invalid delay_off parameter %s", argv[arg_idx_delay_off]);
return -EINVAL;
}
} else {
delay_off = delay_on;
}
shell_print(sh, "%s: blinking LED %d with %d ms on and %d ms off",
dev->name, led, delay_on, delay_off);
err = led_blink(dev, led, delay_on, delay_off);
if (err) {
shell_error(sh, "Error: %d", err);
}
return err;
}
static const char *led_color_to_str(uint8_t color)
{
switch (color) {
@ -353,6 +394,10 @@ SHELL_STATIC_SUBCMD_SET_CREATE(
3, 0),
SHELL_CMD_ARG(on, &dsub_device_name, SHELL_HELP("Turn on LED", "<device> <led>"), cmd_on, 3,
0),
SHELL_CMD_ARG(blink, &dsub_device_name,
SHELL_HELP("Blink LED on and off",
"<device> <led> <delay_on_in_ms> [<delay_off_in_ms>]"),
cmd_blink, 4, 1),
SHELL_CMD_ARG(get_info, &dsub_device_name,
SHELL_HELP("Get LED information", "<device> <led>"), cmd_get_info, 3, 0),
SHELL_CMD_ARG(set_brightness, &dsub_device_name,