Skip to content

Commit 7d15f8a

Browse files
committed
drivers: led: shell: add blink cmd
Add blink command to led shell module Signed-off-by: Yishai Jaffe <yishai1999@gmail.com>
1 parent ad4c3e3 commit 7d15f8a

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

drivers/led/led_shell.c

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ enum {
1919
arg_idx_dev = 1,
2020
arg_idx_led = 2,
2121
arg_idx_value = 3,
22+
arg_idx_delay_on = 3,
23+
arg_idx_delay_off = 4,
2224
};
2325

2426
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)
8587
return err;
8688
}
8789

90+
static int cmd_blink(const struct shell *sh, size_t argc, char **argv)
91+
{
92+
const struct device *dev;
93+
uint32_t led, delay_on, delay_off;
94+
char *end_ptr;
95+
int err;
96+
97+
err = parse_common_args(sh, argv, &dev, &led);
98+
if (err < 0) {
99+
return err;
100+
}
101+
102+
delay_on = strtoul(argv[arg_idx_delay_on], &end_ptr, 0);
103+
if (*end_ptr != '\0') {
104+
shell_error(sh, "Invalid delay_on parameter %s", argv[arg_idx_delay_on]);
105+
return -EINVAL;
106+
}
107+
108+
if (argc > arg_idx_delay_off) {
109+
delay_off = strtoul(argv[arg_idx_delay_off], &end_ptr, 0);
110+
if (*end_ptr != '\0') {
111+
shell_error(sh, "Invalid delay_off parameter %s", argv[arg_idx_delay_off]);
112+
return -EINVAL;
113+
}
114+
} else {
115+
delay_off = delay_on;
116+
}
117+
118+
shell_print(sh, "%s: blinking LED %d with %d ms on and %d ms off",
119+
dev->name, led, delay_on, delay_off);
120+
121+
err = led_blink(dev, led, delay_on, delay_off);
122+
if (err) {
123+
shell_error(sh, "Error: %d", err);
124+
}
125+
126+
return err;
127+
}
128+
88129
static const char *led_color_to_str(uint8_t color)
89130
{
90131
switch (color) {
@@ -353,6 +394,10 @@ SHELL_STATIC_SUBCMD_SET_CREATE(
353394
3, 0),
354395
SHELL_CMD_ARG(on, &dsub_device_name, SHELL_HELP("Turn on LED", "<device> <led>"), cmd_on, 3,
355396
0),
397+
SHELL_CMD_ARG(blink, &dsub_device_name,
398+
SHELL_HELP("Blink LED on and off",
399+
"<device> <led> <delay_on_in_ms> [<delay_off_in_ms>]"),
400+
cmd_blink, 4, 1),
356401
SHELL_CMD_ARG(get_info, &dsub_device_name,
357402
SHELL_HELP("Get LED information", "<device> <led>"), cmd_get_info, 3, 0),
358403
SHELL_CMD_ARG(set_brightness, &dsub_device_name,

0 commit comments

Comments
 (0)