diff options
Diffstat (limited to 'commands/trigger.c')
-rw-r--r-- | commands/trigger.c | 54 |
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 |