Project

General

Profile

Download (5.59 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 iteration. */
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
	}
91
	led_ctl($led, $dstring);
92
}
93

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

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

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

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

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

    
142
/*
143
 * Custom pattern for assigning interfaces
144
 */
145
function led_assigninterfaces() {
146
	led_pattern(1, 'AaaAaaaaaaaaaaaa');
147
	led_pattern(2, 'aaaaaAaaAaaaaaaa');
148
	led_pattern(3, 'aaaaaaaaaaAaaAaa');
149
}
150

    
151
/*
152
 * Return the three LEDs to a standard setup (1=on, 2 and 3 = off)
153
 */
154
function led_normalize() {
155
	led_on(1);
156
	led_off(2);
157
	led_off(3);
158
}
159

    
160
/*
161
 * Shut off ALL LEDs.
162
 */
163
function led_alloff() {
164
	led_off(1);
165
	led_off(2);
166
	led_off(3);
167
}
168

    
169
/*
170
 * Translate a string to morse code. Characters not known to have a
171
 * valid morse code representation will be ignored.
172
 */
173
function str_to_morse($string) {
174
	$i = 0;
175
	$morsestring = "";
176
	while ($i < strlen($string)) {
177
		$morsestring .= char_to_morse(substr($string, $i++, 1)) . " ";
178
	}
179
	return $morsestring . "\n";
180
}
181

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

    
356
?>
(31-31/68)