From 609524ecd54526b3f3c7d52cc43a3c9795970f6b Mon Sep 17 00:00:00 2001 From: Jason Kridner Date: Thu, 20 May 2010 05:41:26 -0500 Subject: [PATCH] Add 'led' command This patch allows any board implementing the coloured LED API to control the LEDs from the console. led [green | yellow | red | all ] [ on | off ] or led [ 1 | 2 | 3 | all ] [ on | off ] Adds configuration item CONFIG_CMD_LED enabling the command. Partially based on patch from Ulf Samuelsson: http://www.mail-archive.com/u-boot@lists.denx.de/msg09593.html. (cherry picked from commit aaf47f8d6af81393b7d3275d69b5dbdf07a3d6fb) (cherry picked from commit 3d314bf59a48c2ee93d06d50b81f109af6a6c1ec) Signed-off-by: Jason Kridner --- common/Makefile | 1 + common/cmd_led.c | 207 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 208 insertions(+), 0 deletions(-) create mode 100644 common/cmd_led.c diff --git a/common/Makefile b/common/Makefile index dbf7a05..1d717ca 100644 --- a/common/Makefile +++ b/common/Makefile @@ -106,6 +106,7 @@ COBJS-$(CONFIG_CMD_IRQ) += cmd_irq.o COBJS-$(CONFIG_CMD_ITEST) += cmd_itest.o COBJS-$(CONFIG_CMD_JFFS2) += cmd_jffs2.o COBJS-$(CONFIG_CMD_CRAMFS) += cmd_cramfs.o +COBJS-$(CONFIG_CMD_LED) += cmd_led.o COBJS-$(CONFIG_CMD_LICENSE) += cmd_license.o COBJS-y += cmd_load.o COBJS-$(CONFIG_LOGBUFFER) += cmd_log.o diff --git a/common/cmd_led.c b/common/cmd_led.c new file mode 100644 index 0000000..3b7b534 --- /dev/null +++ b/common/cmd_led.c @@ -0,0 +1,207 @@ +/* + * (C) Copyright 2010 + * Jason Kridner + * + * Based on cmd_led.c patch from: + * http://www.mail-archive.com/u-boot@lists.denx.de/msg06873.html + * (C) Copyright 2008 + * Ulf Samuelsson + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * This file provides a shell like 'test' function to return + * true/false from an integer or string compare of two memory + * locations or a location and a scalar/literal. + * A few parts were lifted from bash 'test' command + */ + +#include +#include +#include +#include + +int do_led ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[] ) +{ +#ifdef CONFIG_BOARD_SPECIFIC_LED + led_id_t mask; +#endif + int state; + + /* Validate arguments */ + if ((argc != 3)){ + printf("Usage:\n%s\n", cmdtp->usage); + return 1; + } + + if (strcmp(argv[2], "off") == 0) { + state = 0; + } else if (strcmp(argv[2], "on") == 0) { + state = 1; + } else { + printf ("Usage:\n%s\n", cmdtp->usage); + return 1; + } + +#if defined(STATUS_LED_BIT) && defined(CONFIG_BOARD_SPECIFIC_LED) + if (strcmp(argv[1], "0") == 0) { + mask = STATUS_LED_BIT; + __led_set(mask, state); + } + else +#endif +#if defined(STATUS_LED_BIT1) && defined(CONFIG_BOARD_SPECIFIC_LED) + if (strcmp(argv[1], "1") == 0) { + mask = STATUS_LED_BIT1; + __led_set(mask, state); + } + else +#endif +#if defined(STATUS_LED_BIT2) && defined(CONFIG_BOARD_SPECIFIC_LED) + if (strcmp(argv[1], "2") == 0) { + mask = STATUS_LED_BIT2; + __led_set(mask, state); + } + else +#endif +#if defined(STATUS_LED_BIT3) && defined(CONFIG_BOARD_SPECIFIC_LED) + if (strcmp(argv[1], "3") == 0) { + mask = STATUS_LED_BIT3; + __led_set(mask, state); + } + else +#endif +#ifdef STATUS_LED_RED + if (strcmp(argv[1], "red") == 0) { + if (state == 0) + red_LED_off(); + else + red_LED_on(); + } + else +#endif +#ifdef STATUS_LED_GREEN + if (strcmp(argv[1], "green") == 0) { + if (state == 0) + green_LED_off(); + else + green_LED_on(); + } + else +#endif +#ifdef STATUS_LED_YELLOW + if (strcmp(argv[1], "yellow") == 0) { + if (state == 0) + yellow_LED_off(); + else + yellow_LED_on(); + } + else +#endif +#ifdef STATUS_LED_BLUE + if (strcmp(argv[1], "blue") == 0) { + if (state == 0) + blue_LED_off(); + else + blue_LED_on(); + } + else +#endif + if (strcmp(argv[1], "all") == 0) { + mask = 0 +#if defined(STATUS_LED_BIT) && defined(CONFIG_BOARD_SPECIFIC_LED) + | STATUS_LED_BIT +#endif +#if defined(STATUS_LED_BIT1) && defined(CONFIG_BOARD_SPECIFIC_LED) + | STATUS_LED_BIT1 +#endif +#if defined(STATUS_LED_BIT2) && defined(CONFIG_BOARD_SPECIFIC_LED) + | STATUS_LED_BIT2 +#endif +#if defined(STATUS_LED_BIT3) && defined(CONFIG_BOARD_SPECIFIC_LED) + | STATUS_LED_BIT3 +#endif + ; +#ifdef CONFIG_BOARD_SPECIFIC_LED + __led_set(mask, state); +#endif +#ifdef STATUS_LED_RED + if (state == 0) + red_LED_off(); + else + red_LED_on(); +#endif +#ifdef STATUS_LED_GREEN + if (state == 0) + green_LED_off(); + else + green_LED_on(); +#endif +#ifdef STATUS_LED_YELLOW + if (state == 0) + yellow_LED_off(); + else + yellow_LED_on(); +#endif +#ifdef STATUS_LED_BLUE + if (state == 0) + blue_LED_off(); + else + blue_LED_on(); +#endif + } else { + printf ("Usage:\n%s\n", cmdtp->usage); + return 1; + } + + return 0; +} + +U_BOOT_CMD( + led, 3, 1, do_led, + "led\t- [" +#if defined(STATUS_LED_BIT) && defined(CONFIG_BOARD_SPECIFIC_LED) + "0|" +#endif +#if defined(STATUS_LED_BIT1) && defined(CONFIG_BOARD_SPECIFIC_LED) + "1|" +#endif +#if defined(STATUS_LED_BIT2) && defined(CONFIG_BOARD_SPECIFIC_LED) + "2|" +#endif +#if defined(STATUS_LED_BIT3) && defined(CONFIG_BOARD_SPECIFIC_LED) + "3|" +#endif +#ifdef STATUS_LED_GREEN + "green|" +#endif +#ifdef STATUS_LED_YELLOW + "yellow|" +#endif +#ifdef STATUS_LED_RED + "red|" +#endif +#ifdef STATUS_LED_BLUE + "blue|" +#endif + "all] [on|off]\n", + "led [led_name] [on|off] sets or clears led(s)\n" +); + -- 1.5.6.4