diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2017-04-07 09:59:29 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2017-04-07 09:59:29 +0200 |
commit | 5204fb1264037917733abe5f7611e2d5e4cb411e (patch) | |
tree | 70c8c40a964cdd829089828d6ff201c649de2fc8 /commands | |
parent | 80aaa2634ee0787e3304dce07f3dc83917a8a5c8 (diff) | |
parent | 7dd8ae82311daa9ee22ffc762ea158c3977fb20c (diff) | |
download | barebox-5204fb1264037917733abe5f7611e2d5e4cb411e.tar.gz barebox-5204fb1264037917733abe5f7611e2d5e4cb411e.tar.xz |
Merge branch 'for-next/led'
Diffstat (limited to 'commands')
-rw-r--r-- | commands/led.c | 44 | ||||
-rw-r--r-- | commands/trigger.c | 54 |
2 files changed, 72 insertions, 26 deletions
diff --git a/commands/led.c b/commands/led.c index 354f74df8f..a53f0df6a2 100644 --- a/commands/led.c +++ b/commands/led.c @@ -29,6 +29,44 @@ static int do_led(int argc, char *argv[]) unsigned long value; struct led *led; int ret; + int opt; + int flash = 0, blink = 0; + int blink_on_ms = 500; + int blink_off_ms = 500; + + while ((opt = getopt(argc, argv, "fb")) > 0) { + switch(opt) { + case 'f': + flash = 1; + break; + case 'b': + blink = 1; + break; + } + } + + if (flash || blink) { + int args = argc - optind; + + if (!args || (flash && blink)) + return COMMAND_ERROR_USAGE; + + led = led_by_name_or_number(argv[optind]); + if (!led) { + printf("no such LED: %s\n", argv[optind]); + return 1; + } + + if (args > 1) + blink_on_ms = simple_strtoul(argv[optind + 1], NULL, 0); + if (args > 2) + blink_off_ms = simple_strtoul(argv[optind + 2], NULL, 0); + + if (flash) + return led_flash(led, blink_on_ms); + if (blink) + return led_blink(led, blink_on_ms, blink_off_ms); + } if (argc == 1) { int i = 0; @@ -73,9 +111,13 @@ static int do_led(int argc, char *argv[]) BAREBOX_CMD_HELP_START(led) BAREBOX_CMD_HELP_TEXT("Control the value of a LED. The exact meaning of VALUE is unspecified,") BAREBOX_CMD_HELP_TEXT("it can be a brightness, or a color. Most often a value of '1' means on") -BAREBOX_CMD_HELP_TEXT("and '0' means off.") +BAREBOX_CMD_HELP_TEXT("and '0' means off. Basic usage is 'led <led> <value>'. LEDs can be given") +BAREBOX_CMD_HELP_TEXT("by name or number.") BAREBOX_CMD_HELP_TEXT("") BAREBOX_CMD_HELP_TEXT("Without arguments the available LEDs are listed.") +BAREBOX_CMD_HELP_TEXT("Options:") +BAREBOX_CMD_HELP_OPT ("-b <led> [duration-on-ms] [duration-off-ms]", "blink a LED") +BAREBOX_CMD_HELP_OPT ("-f <led> [duration-ms]", "flash a LED") BAREBOX_CMD_HELP_END BAREBOX_CMD_START(led) diff --git a/commands/trigger.c b/commands/trigger.c index 2758ce74e8..0dd3b346fa 100644 --- a/commands/trigger.c +++ b/commands/trigger.c @@ -28,59 +28,62 @@ #define LED_COMMAND_SHOW_INFO 2 #define LED_COMMAND_DISABLE_TRIGGER 3 -static char *trigger_names[] = { - [LED_TRIGGER_PANIC] = "panic", - [LED_TRIGGER_HEARTBEAT] = "heartbeat", - [LED_TRIGGER_NET_RX] = "net rx", - [LED_TRIGGER_NET_TX] = "net tx", - [LED_TRIGGER_NET_TXRX] = "net", - [LED_TRIGGER_DEFAULT_ON] = "default on", -}; static int do_trigger(int argc, char *argv[]) { - struct led *led; - int i, opt, ret = 0; + struct led *led = NULL; + int opt, ret = 0; int cmd = LED_COMMAND_SHOW_INFO; - unsigned long trigger = 0; + enum led_trigger trigger; + const char *led_name = NULL; + const char *trigger_name = NULL; while((opt = getopt(argc, argv, "t:d:")) > 0) { switch(opt) { case 't': - trigger = simple_strtoul(optarg, NULL, 0); + trigger_name = optarg; cmd = LED_COMMAND_SET_TRIGGER; break; case 'd': - trigger = simple_strtoul(optarg, NULL, 0); + led_name = optarg; cmd = LED_COMMAND_DISABLE_TRIGGER; } } + if (optind < argc) + led = led_by_name_or_number(argv[optind]); + switch (cmd) { case LED_COMMAND_SHOW_INFO: - for (i = 0; i < LED_TRIGGER_MAX; i++) { - int led = led_get_trigger(i); - printf("%d: %s", i, trigger_names[i]); - if (led >= 0) - printf(" (led %d)", led); - printf("\n"); - } + led_triggers_show_info(); break; case LED_COMMAND_DISABLE_TRIGGER: - ret = led_set_trigger(trigger, NULL); + led = led_by_name_or_number(led_name); + if (!led) { + printf("no such led: %s\n", led_name); + return 1; + } + + led_trigger_disable(led); break; case LED_COMMAND_SET_TRIGGER: if (argc - optind != 1) return COMMAND_ERROR_USAGE; - led = led_by_name_or_number(argv[optind]); + led = led_by_name_or_number(argv[optind]); if (!led) { printf("no such led: %s\n", argv[optind]); return 1; } + trigger = trigger_by_name(trigger_name); + if (trigger == LED_TRIGGER_INVALID) { + printf("no such trigger: %s\n", trigger_name); + return 1; + } + ret = led_set_trigger(trigger, led); break; } @@ -92,16 +95,17 @@ static int do_trigger(int argc, char *argv[]) BAREBOX_CMD_HELP_START(trigger) BAREBOX_CMD_HELP_TEXT("Control a LED trigger. Without options assigned triggers are shown.") +BAREBOX_CMD_HELP_TEXT("triggers are given with their name, LEDs are given with their name or number") BAREBOX_CMD_HELP_TEXT("") BAREBOX_CMD_HELP_TEXT("Options:") -BAREBOX_CMD_HELP_OPT ("-t", "set a trigger (needs LED argument)") -BAREBOX_CMD_HELP_OPT ("-d", "disable a trigger") +BAREBOX_CMD_HELP_OPT ("-t <trigger> <led>", "set a trigger") +BAREBOX_CMD_HELP_OPT ("-d <led>", "disable a trigger") BAREBOX_CMD_HELP_END BAREBOX_CMD_START(trigger) .cmd = do_trigger, BAREBOX_CMD_DESC("handle LED triggers") - BAREBOX_CMD_OPTS("[-td] TRIGGER [LED]") + BAREBOX_CMD_OPTS("[-td] [LED]") BAREBOX_CMD_GROUP(CMD_GRP_HWMANIP) BAREBOX_CMD_HELP(cmd_trigger_help) BAREBOX_CMD_END |