package com.buglabs.bug.sysfs; import java.io.File; import java.io.IOException; import com.buglabs.bug.base.pub.IBUG20BaseControl; import com.buglabs.bug.sysfs.SysfsNode; /** * A class to control a single-color or multi-color LED. * * @author kgilmer * */ public class LEDDevice extends SysfsNode { /** * LED is single color. */ public static final int TYPE_MONO_COLOR = 1; /** * LED is tri color */ public static final int TYPE_TRI_COLOR = 2; /** * Constant for single color LED */ public static final int COLOR_MONO = 0; /** * Color constants for tri color LEDs. */ /** * Used in the construction of file paths for LED sysfs API in Linux . */ private static final String FILE_BRIGHTNESS = "brightness"; private static final String FILE_TRIGGER = "trigger"; private static final String FILE_MAX_BRIGHTNESS = "max_brightness"; private static final String PLATFORM_NAME = "omap3bug"; /** * Name of LED in sysfs */ private final String name; /** * Number of colors LED supports */ private final int type; /** * Arrays to access files to control and read LED state. */ private final File[] ledBase; private final File[] ledBrightness; private final File[] ledMaxBrightness; private final File[] ledTrigger; /** * Constructor for mono LED. * * @param root * @param name * @param color */ public LEDDevice(File root, String name, String color) { super(root); this.name = name; this.type = TYPE_MONO_COLOR; ledBase = new File[1]; ledBase[0] = new File(root, createLEDFilename(name, color)); ledBrightness = new File[1]; ledBrightness[0] = new File(ledBase[0], FILE_BRIGHTNESS); ledMaxBrightness = new File[1]; ledMaxBrightness[0] = new File(ledBase[0], FILE_MAX_BRIGHTNESS); ledTrigger = new File[1]; ledTrigger[0] = new File(ledBase[0], FILE_TRIGGER); } /** * Constructor for tri-color LED * * @param root * @param name */ public LEDDevice(File root, String name) { super(root); this.name = name; this.type = TYPE_TRI_COLOR; ledBase = new File[3]; ledBase[IBUG20BaseControl.COLOR_RED] = new File(root, createLEDFilename(name, "red")); ledBase[IBUG20BaseControl.COLOR_GREEN] = new File(root, createLEDFilename(name, "green")); ledBase[IBUG20BaseControl.COLOR_BLUE] = new File(root, createLEDFilename(name, "blue")); ledBrightness = new File[3]; ledBrightness[IBUG20BaseControl.COLOR_RED] = new File(ledBase[IBUG20BaseControl.COLOR_RED], FILE_BRIGHTNESS); ledBrightness[IBUG20BaseControl.COLOR_GREEN] = new File(ledBase[IBUG20BaseControl.COLOR_GREEN], FILE_BRIGHTNESS); ledBrightness[IBUG20BaseControl.COLOR_BLUE] = new File(ledBase[IBUG20BaseControl.COLOR_BLUE], FILE_BRIGHTNESS); ledMaxBrightness = new File[3]; ledMaxBrightness[IBUG20BaseControl.COLOR_RED] = new File(ledBase[IBUG20BaseControl.COLOR_RED], FILE_MAX_BRIGHTNESS); ledMaxBrightness[IBUG20BaseControl.COLOR_GREEN] = new File(ledBase[IBUG20BaseControl.COLOR_GREEN], FILE_MAX_BRIGHTNESS); ledMaxBrightness[IBUG20BaseControl.COLOR_BLUE] = new File(ledBase[IBUG20BaseControl.COLOR_BLUE], FILE_MAX_BRIGHTNESS); ledTrigger = new File[3]; ledTrigger[IBUG20BaseControl.COLOR_RED] = new File(ledBase[IBUG20BaseControl.COLOR_RED], FILE_TRIGGER); ledTrigger[IBUG20BaseControl.COLOR_GREEN] = new File(ledBase[IBUG20BaseControl.COLOR_GREEN], FILE_TRIGGER); ledTrigger[IBUG20BaseControl.COLOR_BLUE] = new File(ledBase[IBUG20BaseControl.COLOR_BLUE], FILE_TRIGGER); } /** * @return name of LED. */ public String getName() { return name; } /** * @return type of LED */ public int getType() { return type; } /** * @param n * @param color * @return String representing directory name for LED control. */ private String createLEDFilename(String n, String color) { return PLATFORM_NAME + ":" + color + ":" + n; } /** * Set the brightness for the specified LED. * @param color * @param brightness * @throws IOException */ public void setBrightness(int color, int brightness) throws IOException { println(ledBrightness[color], "" + brightness); } /** * @param color * @return the current brightness of the specified LED. */ public int getBrightness(int color) { return Integer.parseInt(getFirstLineofFile(ledBrightness[color])); } /** * Set a trigger on a LED. * @param color * @param trigger * @throws IOException */ public void setTrigger(int color, String trigger) throws IOException { println(ledTrigger[color], trigger); } /** * @param color * @return The LED trigger that is currently set. "none" means no trigger is active. * @throws IOException */ public String getLEDTrigger(int color) throws IOException { String line = getFirstLineofFile(ledTrigger[color]); String[] elems = line.split("["); elems = elems[1].split("]"); return elems[0]; } /** * Get the Trigger types this LED supports. These trigger types can be set using setLEDTrigger. * @param color * @return * @throws IOException */ public String[] getLEDTriggers(int color) throws IOException { String line = getFirstLineofFile(ledTrigger[color]); String[] elems = line.split(" "); for (int i = 0; i < elems.length; ++i) { if (elems[i].startsWith("[")) { elems[i] = elems[i].substring(1, elems[i].length() - 1); // Only one trigger is set, so we only have to strip this once. break; } } return elems; } /** * @return The number of colors this LED supports. Zero based. */ public int getColorCount() { return ledBase.length; } }