Projet

Général

Profil

Télécharger (5,58 ko) Statistiques
| Branche: | Tag: | Révision:

univnautes / etc / inc / led.inc @ c650b2f7

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
	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
 * Custom pattern for assigning interfaces
142
 */
143
function led_assigninterfaces() {
144
	led_pattern(1, 'AaaAaaaaaaaaaaaa');
145
	led_pattern(2, 'aaaaaAaaAaaaaaaa');
146
	led_pattern(3, 'aaaaaaaaaaAaaAaa');
147
}
148

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

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

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

    
180
/*
181
 * Translate a single character to morse code. Characters not known
182
 * to have a valid morse code representation will be ignored.
183
 */
184
function char_to_morse($char) {
185
	switch (strtoupper($char)) {
186
		case "A":
187
			return ".-";
188
			break;
189
		case "B":
190
			return "-...";
191
			break;
192
		case "C":
193
			return "-.-.";
194
			break;
195
		case "D":
196
			return "-..";
197
			break;
198
		case "E":
199
			return ".";
200
			break;
201
		case "F":
202
			return "..-.";
203
			break;
204
		case "G":
205
			return "--.";
206
			break;
207
		case "H":
208
			return "....";
209
			break;
210
		case "I":
211
			return "..";
212
			break;
213
		case "J":
214
			return ".---";
215
			break;
216
		case "K":
217
			return "-.-";
218
			break;
219
		case "L":
220
			return ".-..";
221
			break;
222
		case "M":
223
			return "--";
224
			break;
225
		case "N":
226
			return "-.";
227
			break;
228
		case "O":
229
			return "---";
230
			break;
231
		case "P":
232
			return ".--.";
233
			break;
234
		case "Q":
235
			return "--.-";
236
			break;
237
		case "R":
238
			return ".-.";
239
			break;
240
		case "S":
241
			return "...";
242
			break;
243
		case "T":
244
			return "-";
245
			break;
246
		case "U":
247
			return "..-";
248
			break;
249
		case "V":
250
			return "...-";
251
			break;
252
		case "W":
253
			return ".--";
254
			break;
255
		case "X":
256
			return "-..-";
257
			break;
258
		case "Y":
259
			return "-.--";
260
			break;
261
		case "Z":
262
			return "--..";
263
			break;
264
		case "0":
265
			return "-----";
266
			break;
267
		case "1":
268
			return ".----";
269
			break;
270
		case "2":
271
			return "..---";
272
			break;
273
		case "3":
274
			return "...--";
275
			break;
276
		case "4":
277
			return "....-";
278
			break;
279
		case "5":
280
			return ".....";
281
			break;
282
		case "6":
283
			return "-....";
284
			break;
285
		case "7":
286
			return "--...";
287
			break;
288
		case "8":
289
			return "---..";
290
			break;
291
		case "9":
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
		case "+":
331
			return ".-.-.";
332
			break;
333
		case "-":
334
			return "-....-";
335
			break;
336
		case "_":
337
			return "..--.-";
338
			break;
339
		case "$":
340
			return "...-..-";
341
			break;
342
		case "@":
343
			return ".--.-.";
344
			break;
345
		case '"':
346
			return ".-..-.";
347
			break;
348
		default:
349
			return "";
350
			break;
351
	}
352
}
353

    
354
?>
(31-31/68)