/src/barebox/commands/led.c
Line | Count | Source |
1 | | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | | // SPDX-FileCopyrightText: © 2010 Sascha Hauer, Pengutronix |
3 | | |
4 | | /* LED command support for barebox */ |
5 | | |
6 | | #include <common.h> |
7 | | #include <led.h> |
8 | | #include <command.h> |
9 | | #include <getopt.h> |
10 | | #include <errno.h> |
11 | | |
12 | | static int do_led(int argc, char *argv[]) |
13 | 0 | { |
14 | 0 | unsigned long value; |
15 | 0 | struct led *led; |
16 | 0 | int ret; |
17 | 0 | int opt; |
18 | 0 | int flash = 0, blink = 0; |
19 | 0 | int blink_on_ms = 500; |
20 | 0 | int blink_off_ms = 500; |
21 | |
|
22 | 0 | while ((opt = getopt(argc, argv, "fb")) > 0) { |
23 | 0 | switch(opt) { |
24 | 0 | case 'f': |
25 | 0 | flash = 1; |
26 | 0 | break; |
27 | 0 | case 'b': |
28 | 0 | blink = 1; |
29 | 0 | break; |
30 | 0 | } |
31 | 0 | } |
32 | | |
33 | 0 | if (flash || blink) { |
34 | 0 | int args = argc - optind; |
35 | |
|
36 | 0 | if (!args || (flash && blink)) |
37 | 0 | return COMMAND_ERROR_USAGE; |
38 | | |
39 | 0 | led = led_by_name_or_number(argv[optind]); |
40 | 0 | if (!led) { |
41 | 0 | printf("no such LED: %s\n", argv[optind]); |
42 | 0 | return 1; |
43 | 0 | } |
44 | | |
45 | 0 | if (args > 1) |
46 | 0 | blink_on_ms = simple_strtoul(argv[optind + 1], NULL, 0); |
47 | 0 | if (args > 2) |
48 | 0 | blink_off_ms = simple_strtoul(argv[optind + 2], NULL, 0); |
49 | |
|
50 | 0 | if (flash) |
51 | 0 | return led_flash(led, blink_on_ms); |
52 | 0 | if (blink) |
53 | 0 | return led_blink(led, blink_on_ms, blink_off_ms); |
54 | 0 | } |
55 | | |
56 | 0 | if (argc == 1) { |
57 | 0 | int i = 0; |
58 | |
|
59 | 0 | led = led_by_number(i); |
60 | 0 | if (!led) { |
61 | 0 | printf("no registered LEDs\n"); |
62 | 0 | return COMMAND_ERROR; |
63 | 0 | } |
64 | | |
65 | 0 | printf("registered LEDs:\n"); |
66 | |
|
67 | 0 | while ((led = led_by_number(i))) { |
68 | 0 | printf("%-2d: name: %-10s max_value: %d\n", |
69 | 0 | i, led->name ? led->name : "none", |
70 | 0 | led->max_value); |
71 | 0 | i++; |
72 | 0 | } |
73 | 0 | return 0; |
74 | 0 | } |
75 | | |
76 | 0 | if (argc != 3) |
77 | 0 | return COMMAND_ERROR_USAGE; |
78 | | |
79 | 0 | led = led_by_name_or_number(argv[1]); |
80 | 0 | if (!led) { |
81 | 0 | printf("no such LED: %s\n", argv[1]); |
82 | 0 | return 1; |
83 | 0 | } |
84 | | |
85 | 0 | value = simple_strtoul(argv[optind + 1], NULL, 0); |
86 | |
|
87 | 0 | ret = led_set(led, value); |
88 | 0 | if (ret < 0) { |
89 | 0 | printf("led: %pe\n", ERR_PTR(ret)); |
90 | 0 | return COMMAND_ERROR; |
91 | 0 | } |
92 | | |
93 | 0 | return 0; |
94 | 0 | } |
95 | | |
96 | | BAREBOX_CMD_HELP_START(led) |
97 | | BAREBOX_CMD_HELP_TEXT("Control the value of a LED. The exact meaning of VALUE is unspecified,") |
98 | | BAREBOX_CMD_HELP_TEXT("it can be a brightness, or a color. Most often a value of '1' means on") |
99 | | BAREBOX_CMD_HELP_TEXT("and '0' means off. Basic usage is 'led <led> <value>'. LEDs can be given") |
100 | | BAREBOX_CMD_HELP_TEXT("by name or number.") |
101 | | BAREBOX_CMD_HELP_TEXT("") |
102 | | BAREBOX_CMD_HELP_TEXT("Without arguments the available LEDs are listed.") |
103 | | BAREBOX_CMD_HELP_TEXT("Options:") |
104 | | BAREBOX_CMD_HELP_OPT ("-b <led> [duration-on-ms] [duration-off-ms]", "blink a LED") |
105 | | BAREBOX_CMD_HELP_OPT ("-f <led> [duration-ms]", "flash a LED") |
106 | | BAREBOX_CMD_HELP_END |
107 | | |
108 | | BAREBOX_CMD_START(led) |
109 | | .cmd = do_led, |
110 | | BAREBOX_CMD_DESC("control LEDs") |
111 | | BAREBOX_CMD_OPTS("LED VALUE") |
112 | | BAREBOX_CMD_GROUP(CMD_GRP_HWMANIP) |
113 | | BAREBOX_CMD_HELP(cmd_led_help) |
114 | | BAREBOX_CMD_END |