diff options
author | jim-p <jim@pingle.org> | 2009-07-10 20:53:58 -0400 |
---|---|---|
committer | jim-p <jim@pingle.org> | 2009-07-10 20:58:07 -0400 |
commit | a2d02d8d233ce31d8e1ef5eafc95cc47c11b4ade (patch) | |
tree | da553c89c93b6dc61e94769a9c75945b64f08293 /etc/inc | |
parent | 2257118f09d5bcf4d27adfab38573be87f2cbbc8 (diff) | |
download | pfsense-a2d02d8d233ce31d8e1ef5eafc95cc47c11b4ade.zip pfsense-a2d02d8d233ce31d8e1ef5eafc95cc47c11b4ade.tar.gz |
First try at an LED library to help control the LEDs on ALIX, WRAP, or anything that supports led(4) Part of feature #17
May be useful for notifications, startup progress indication, etc.
Diffstat (limited to 'etc/inc')
-rw-r--r-- | etc/inc/led.inc | 331 |
1 files changed, 331 insertions, 0 deletions
diff --git a/etc/inc/led.inc b/etc/inc/led.inc new file mode 100644 index 0000000..d29a381 --- /dev/null +++ b/etc/inc/led.inc @@ -0,0 +1,331 @@ +<? +/* + * led.inc + * + * (C) 2009 Jim Pingle <jimp@pfsense.org> + * + * LED control library that wraps around the functionality of led(4) + * + */ + +$led_root = "/dev/led/led"; + +/* + * Send the control string to an LED + */ +function led_ctl($led, $str) { + global $led_root; + if (led_exists($led)) { + exec("/bin/echo " . escapeshellarg($str) . " > {$led_root}{$led}"); + return true; + } + return false; +} + +/* + * Blink an LED at set speed from 1-9 (1=Very Fast, 9=Very Slow) + */ +function led_blink($led, $speed=0) { + switch ($speed) { + case "reallyfast": + case "veryfast": + $speed = 1; + break; + case "fast": + $speed = 3; + break; + case "medium": + $speed = 5; + break; + case "slow": + $speed = 7; + break; + case "reallyslow": + case "veryslow": + $speed = 9; + break; + } + if (is_numeric($speed) && ($speed > 0) && ($speed < 10)) { + return led_ctl($led, "f{$speed}"); + } + return false; +} + +/* + * Blink an LED in a specific pattern + * Letters A-J are on from 1/10s to 1s + * Letters a-j are off from 1/10s to 1s + */ +function led_pattern($led, $pattern, $repeat=true) { + /* End with a . to stop after one interation. */ + $end = $repeat ? "" : "."; + return led_ctl($led, "s{$pattern}{$end}"); +} + +/* + * Encode a text message into morse code, and send it to an LED + */ +function led_morse($led, $message) { + return led_ctl($led, "m" . str_to_morse($message)); +} + +/* + * Blink digits out on LED at 1/10s intervals + * e.g 1=1 blink, 8=8 blinks + * 0 is 10 pulses. + * One second pause between digits. + */ +function led_digit($led, $digitstring) { + $i = 0; + $dstring = "d"; + while ($i < strlen($digitstring)) { + $thisdigit = substr($digitstring, $i++, 1); + if (is_numeric($thisdigit)) + $dstring .= $thisdigit; + } + led_ctl($led, $dstring); +} + +/* + * Turn an LED on + */ +function led_on($led) { + led_ctl($led, "1"); +} + +/* + * Turn an LED off + */ +function led_off($led) { + led_ctl($led, "0"); +} + +/* + * Find the number of LEDs present on the system. + */ +function led_count() { + global $led_root; + $count = 0; + $leds = array(); + if (is_dir(dirname($led_root))) { + $leds = glob("{$led_root}*"); + $count = count($leds); + } + return $count; +} + +/* + * Test to see if a given LED exists. + */ +function led_exists($led) { + global $led_root; + if (!is_numeric($led)) + return false; + return file_exists("{$led_root}{$led}"); +} + +/* + * Sweep across three LEDs in a K.I.T.T.-like way. + */ +function led_kitt() { + led_pattern(1, 'AaaaaA'); + led_pattern(2, 'aAaaAa'); + led_pattern(3, 'aaAAaa'); +} + +/* + * Return the three LEDs to a standard setup (1=on, 2 and 3 = off) + */ +function led_normalize() { + led_on(1); + led_off(2); + led_off(3); +} + +/* + * Translate a string to morse code. Characters not known to have a + * valid morse code representation will be ignored. + */ +function str_to_morse($string) { + $i = 0; + $morsestring = ""; + while ($i < strlen($string)) { + $morsestring .= char_to_morse(substr($string, $i++, 1)) . " "; + } + return $morsestring . "\n"; +} + +/* + * Translate a single character to morse code. Characters not known + * to have a valid morse code representation will be ignored. + */ +function char_to_morse($char) { + switch (strtoupper($char)) { + case "A": + return ".-"; + break; + case "B": + return "-..."; + break; + case "C": + return "-.-."; + break; + case "D": + return "-.."; + break; + case "E": + return "."; + break; + case "F": + return "..-."; + break; + case "G": + return "--."; + break; + case "H": + return "...."; + break; + case "I": + return ".."; + break; + case "J": + return ".---"; + break; + case "K": + return "-.-"; + break; + case "L": + return ".-.."; + break; + case "M": + return "--"; + break; + case "N": + return "-."; + break; + case "O": + return "---"; + break; + case "P": + return ".--."; + break; + case "Q": + return "--.-"; + break; + case "R": + return ".-."; + break; + case "S": + return "..."; + break; + case "T": + return "-"; + break; + case "U": + return "..-"; + break; + case "V": + return "...-"; + break; + case "W": + return ".--"; + break; + case "X": + return "-..-"; + break; + case "Y": + return "-.--"; + break; + case "Z": + return "--.."; + break; + case "0": + return "-----"; + break; + case "1": + return ".----"; + break; + case "2": + return "..---"; + break; + case "3": + return "...--"; + break; + case "4": + return "....-"; + break; + case "5": + return "....."; + break; + case "6": + return "-...."; + break; + case "7": + return "--..."; + break; + case "8": + return "---.."; + break; + case "9": + return "----."; + break; + case ".": + return ".-.-.-"; + break; + case ",": + return "--..--"; + break; + case "?": + return "..--.."; + break; + case "'": + return ".----."; + break; + case "!": + return "-.-.--"; + break; + case "/": + return "-..-."; + break; + case "(": + return "-.--."; + break; + case ")": + return "-.--.-"; + break; + case "&": + return ".-..."; + break; + case ":": + return "---..."; + break; + case ";": + return "-.-.-."; + break; + case "=": + return "-...-"; + break; + case "+": + return ".-.-."; + break; + case "-": + return "-....-"; + break; + case "_": + return "..--.-"; + break; + case "$": + return "...-..-"; + break; + case "@": + return ".--.-."; + break; + case '"': + return ".-..-."; + break; + default: + return ""; + break; + } +} +?>
\ No newline at end of file |