|
19 | 19 | arg_idx_dev = 1,
|
20 | 20 | arg_idx_led = 2,
|
21 | 21 | arg_idx_value = 3,
|
| 22 | + arg_idx_delay_on = 3, |
| 23 | + arg_idx_delay_off = 4, |
22 | 24 | };
|
23 | 25 |
|
24 | 26 | static int parse_common_args(const struct shell *sh, char **argv,
|
@@ -85,6 +87,40 @@ static int cmd_on(const struct shell *sh, size_t argc, char **argv)
|
85 | 87 | return err;
|
86 | 88 | }
|
87 | 89 |
|
| 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 | + delay_off = strtoul(argv[arg_idx_delay_off], &end_ptr, 0); |
| 109 | + if (*end_ptr != '\0') { |
| 110 | + shell_error(sh, "Invalid delay_off parameter %s", argv[arg_idx_delay_off]); |
| 111 | + return -EINVAL; |
| 112 | + } |
| 113 | + |
| 114 | + shell_print(sh, "%s: blinking LED %d", dev->name, led); |
| 115 | + |
| 116 | + err = led_blink(dev, led, delay_on, delay_off); |
| 117 | + if (err) { |
| 118 | + shell_error(sh, "Error: %d", err); |
| 119 | + } |
| 120 | + |
| 121 | + return err; |
| 122 | +} |
| 123 | + |
88 | 124 | static const char *led_color_to_str(uint8_t color)
|
89 | 125 | {
|
90 | 126 | switch (color) {
|
@@ -350,6 +386,7 @@ SHELL_DYNAMIC_CMD_CREATE(dsub_device_name, device_name_get);
|
350 | 386 | SHELL_STATIC_SUBCMD_SET_CREATE(
|
351 | 387 | sub_led, SHELL_CMD_ARG(off, &dsub_device_name, "<device> <led>", cmd_off, 3, 0),
|
352 | 388 | SHELL_CMD_ARG(on, &dsub_device_name, "<device> <led>", cmd_on, 3, 0),
|
| 389 | + SHELL_CMD_ARG(blink, &dsub_device_name, "<device> <led> <delay_on> <delay_off>", cmd_blink, 5, 0), |
353 | 390 | SHELL_CMD_ARG(get_info, &dsub_device_name, "<device> <led>", cmd_get_info, 3, 0),
|
354 | 391 | SHELL_CMD_ARG(set_brightness, &dsub_device_name, "<device> <led> <value [0-100]>",
|
355 | 392 | cmd_set_brightness, 4, 0),
|
|
0 commit comments