Project

General

Profile

Download (5.53 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
$led_root = "/dev/led/led";
12

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

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

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

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

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

    
90
/*
91
 * Turn an LED on
92
 */
93
function led_on($led) {
94
	led_ctl($led, "1");
95
}
96

    
97
/*
98
 * Turn an LED off
99
 */
100
function led_off($led) {
101
	led_ctl($led, "0");
102
}
103

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

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

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

    
138
/*
139
 * Custom pattern for assigning interfaces
140
 */
141
function led_assigninterfaces() {
142
	led_pattern(1, 'AaaAaaaaaaaaaaaa');
143
	led_pattern(2, 'aaaaaAaaAaaaaaaa');
144
	led_pattern(3, 'aaaaaaaaaaAaaAaa');
145
}
146

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

    
156
/*
157
 * Shut off ALL LEDs.
158
 */
159
function led_alloff() {
160
	led_off(1);
161
	led_off(2);
162
	led_off(3);
163
}
164

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

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

    
352
?>
(30-30/65)