summaryrefslogtreecommitdiffstats
path: root/commands
diff options
context:
space:
mode:
Diffstat (limited to 'commands')
-rw-r--r--commands/trigger.c54
1 files changed, 29 insertions, 25 deletions
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