Project

General

Profile

Download (5.3 KB) Statistics
| Branch: | Tag: | Revision:
1
<?
2
/*
3
 * led.inc
4
 *
5
 * (C) 2009 Jim Pingle <jimp@pfsense.org>
6
 *
7
 * LED control library that wraps around the functionality of led(4)
8
 *
9
 */
10
/*
11
	pfSense_BUILDER_BINARIES:	/bin/echo
12
	pfSense_MODULE:	utils
13
*/
14

    
15
$led_root = "/dev/led/led";
16

    
17
/*
18
 * Send the control string to an LED
19
 */
20
function led_ctl($led, $str) {
21
	global $led_root;
22
	if (led_exists($led)) {
23
		exec("/bin/echo " . escapeshellarg($str) . " > {$led_root}{$led}");
24
		return true;
25
	}
26
	return false;
27
}
28

    
29
/*
30
 * Blink an LED at set speed from 1-9 (1=Very Fast, 9=Very Slow)
31
 */
32
function led_blink($led, $speed=0) {
33
	switch ($speed) {
34
		case "reallyfast":
35
		case "veryfast":
36
			$speed = 1;
37
			break;
38
		case "fast":
39
			$speed = 3;
40
			break;
41
		case "medium":
42
			$speed = 5;
43
			break;
44
		case "slow":
45
			$speed = 7;
46
			break;
47
		case "reallyslow":
48
		case "veryslow":
49
			$speed = 9;
50
			break;
51
	}
52
	if (is_numeric($speed) && ($speed > 0) && ($speed < 10)) {
53
		return led_ctl($led, "f{$speed}");
54
	}
55
	return false;
56
}
57

    
58
/*
59
 * Blink an LED in a specific pattern
60
 * Letters A-J are on from 1/10s to 1s
61
 * Letters a-j are off from 1/10s to 1s
62
 */
63
function led_pattern($led, $pattern, $repeat=true) {
64
	/*  End with a . to stop after one interation. */
65
	$end = $repeat ? "" : ".";
66
	return led_ctl($led, "s{$pattern}{$end}");
67
}
68

    
69
/*
70
 * Encode a text message into morse code, and send it to an LED
71
 */
72
function led_morse($led, $message) {
73
	return led_ctl($led, "m" . str_to_morse($message));
74
}
75

    
76
/*
77
 * Blink digits out on LED at 1/10s intervals
78
 * e.g 1=1 blink, 8=8 blinks
79
 * 0 is 10 pulses.
80
 * One second pause between digits.
81
 */
82
function led_digit($led, $digitstring) {
83
	$i = 0;
84
	$dstring = "d";
85
	while ($i < strlen($digitstring)) {
86
		$thisdigit = substr($digitstring, $i++, 1);
87
		if (is_numeric($thisdigit))
88
			$dstring .= $thisdigit;
89
	}
90
	led_ctl($led, $dstring);
91
}
92

    
93
/*
94
 * Turn an LED on
95
 */
96
function led_on($led) {
97
	led_ctl($led, "1");
98
}
99

    
100
/*
101
 * Turn an LED off
102
 */
103
function led_off($led) {
104
	led_ctl($led, "0");
105
}
106

    
107
/*
108
 * Find the number of LEDs present on the system.
109
 */
110
function led_count() {
111
	global $led_root;
112
	$count = 0;
113
	$leds = array();
114
	if (is_dir(dirname($led_root))) {
115
		$leds = glob("{$led_root}*");
116
		$count = count($leds);
117
	}
118
	return $count;
119
}
120

    
121
/*
122
 * Test to see if a given LED exists.
123
 */
124
function led_exists($led) {
125
	global $led_root;
126
	if (!is_numeric($led))
127
		return false;
128
	return file_exists("{$led_root}{$led}");
129
}
130

    
131
/*
132
 * Sweep across three LEDs in a K.I.T.T.-like way.
133
 */
134
function led_kitt() {
135
	led_pattern(1, 'AaaaaA');
136
	led_pattern(2, 'aAaaAa');
137
	led_pattern(3, 'aaAAaa');
138
}
139

    
140
/*
141
 * Return the three LEDs to a standard setup (1=on, 2 and 3 = off)
142
 */
143
function led_normalize() {
144
	led_on(1);
145
	led_off(2);
146
	led_off(3);
147
}
148

    
149
/*
150
 * Translate a string to morse code. Characters not known to have a
151
 * valid morse code representation will be ignored.
152
 */
153
function str_to_morse($string) {
154
	$i = 0;
155
	$morsestring = "";
156
	while ($i < strlen($string)) {
157
		$morsestring .= char_to_morse(substr($string, $i++, 1)) . " ";
158
	}
159
	return $morsestring . "\n";
160
}
161

    
162
/*
163
 * Translate a single character to morse code. Characters not known
164
 * to have a valid morse code representation will be ignored.
165
 */
166
function char_to_morse($char) {
167
	switch (strtoupper($char)) {
168
		case "A":
169
			return ".-";
170
			break;
171
		case "B":
172
			return "-...";
173
			break;
174
		case "C":
175
			return "-.-.";
176
			break;
177
		case "D":
178
			return "-..";
179
			break;
180
		case "E":
181
			return ".";
182
			break;
183
		case "F":
184
			return "..-.";
185
			break;
186
		case "G":
187
			return "--.";
188
			break;
189
		case "H":
190
			return "....";
191
			break;
192
		case "I":
193
			return "..";
194
			break;
195
		case "J":
196
			return ".---";
197
			break;
198
		case "K":
199
			return "-.-";
200
			break;
201
		case "L":
202
			return ".-..";
203
			break;
204
		case "M":
205
			return "--";
206
			break;
207
		case "N":
208
			return "-.";
209
			break;
210
		case "O":
211
			return "---";
212
			break;
213
		case "P":
214
			return ".--.";
215
			break;
216
		case "Q":
217
			return "--.-";
218
			break;
219
		case "R":
220
			return ".-.";
221
			break;
222
		case "S":
223
			return "...";
224
			break;
225
		case "T":
226
			return "-";
227
			break;
228
		case "U":
229
			return "..-";
230
			break;
231
		case "V":
232
			return "...-";
233
			break;
234
		case "W":
235
			return ".--";
236
			break;
237
		case "X":
238
			return "-..-";
239
			break;
240
		case "Y":
241
			return "-.--";
242
			break;
243
		case "Z":
244
			return "--..";
245
			break;
246
		case "0":
247
			return "-----";
248
			break;
249
		case "1":
250
			return ".----";
251
			break;
252
		case "2":
253
			return "..---";
254
			break;
255
		case "3":
256
			return "...--";
257
			break;
258
		case "4":
259
			return "....-";
260
			break;
261
		case "5":
262
			return ".....";
263
			break;
264
		case "6":
265
			return "-....";
266
			break;
267
		case "7":
268
			return "--...";
269
			break;
270
		case "8":
271
			return "---..";
272
			break;
273
		case "9":
274
			return "----.";
275
			break;
276
		case ".":
277
			return ".-.-.-";
278
			break;
279
		case ",":
280
			return "--..--";
281
			break;
282
		case "?":
283
			return "..--..";
284
			break;
285
		case "'":
286
			return ".----.";
287
			break;
288
		case "!":
289
			return "-.-.--";
290
			break;
291
		case "/":
292
			return "-..-.";
293
			break;
294
		case "(":
295
			return "-.--.";
296
			break;
297
		case ")":
298
			return "-.--.-";
299
			break;
300
		case "&":
301
			return ".-...";
302
			break;
303
		case ":":
304
			return "---...";
305
			break;
306
		case ";":
307
			return "-.-.-.";
308
			break;
309
		case "=":
310
			return "-...-";
311
			break;
312
		case "+":
313
			return ".-.-.";
314
			break;
315
		case "-":
316
			return "-....-";
317
			break;
318
		case "_":
319
			return "..--.-";
320
			break;
321
		case "$":
322
			return "...-..-";
323
			break;
324
		case "@":
325
			return ".--.-.";
326
			break;
327
		case '"':
328
			return ".-..-.";
329
			break;
330
		default:
331
			return "";
332
			break;
333
	}
334
}
335
?>
(24-24/51)