Project

General

Profile

Download (6.08 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/*
3
 * led.inc
4
 *
5
 * part of pfSense (https://www.pfsense.org)
6
 * Copyright (c) 2009-2016 Electric Sheep Fencing, LLC
7
 * All rights reserved.
8
 *
9
 * Licensed under the Apache License, Version 2.0 (the "License");
10
 * you may not use this file except in compliance with the License.
11
 * You may obtain a copy of the License at
12
 *
13
 * http://www.apache.org/licenses/LICENSE-2.0
14
 *
15
 * Unless required by applicable law or agreed to in writing, software
16
 * distributed under the License is distributed on an "AS IS" BASIS,
17
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
 * See the License for the specific language governing permissions and
19
 * limitations under the License.
20
 */
21

    
22
$led_root = "/dev/led/led";
23

    
24
/*
25
 * Send the control string to an LED
26
 */
27
function led_ctl($led, $str) {
28
	global $led_root;
29
	if (led_exists($led)) {
30
		exec("/bin/echo " . escapeshellarg($str) . " > {$led_root}{$led}");
31
		return true;
32
	}
33
	return false;
34
}
35

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

    
65
/*
66
 * Blink an LED in a specific pattern
67
 * Letters A-J are on from 1/10s to 1s
68
 * Letters a-j are off from 1/10s to 1s
69
 */
70
function led_pattern($led, $pattern, $repeat = true) {
71
	/*  End with a . to stop after one iteration. */
72
	$end = $repeat ? "" : ".";
73
	return led_ctl($led, "s{$pattern}{$end}");
74
}
75

    
76
/*
77
 * Encode a text message into morse code, and send it to an LED
78
 */
79
function led_morse($led, $message) {
80
	return led_ctl($led, "m" . str_to_morse($message));
81
}
82

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

    
101
/*
102
 * Turn an LED on
103
 */
104
function led_on($led) {
105
	led_ctl($led, "1");
106
}
107

    
108
/*
109
 * Turn an LED off
110
 */
111
function led_off($led) {
112
	led_ctl($led, "0");
113
}
114

    
115
/*
116
 * Find the number of LEDs present on the system.
117
 */
118
function led_count() {
119
	global $led_root;
120
	$count = 0;
121
	$leds = array();
122
	if (is_dir(dirname($led_root))) {
123
		$leds = glob("{$led_root}*");
124
		$count = count($leds);
125
	}
126
	return $count;
127
}
128

    
129
/*
130
 * Test to see if a given LED exists.
131
 */
132
function led_exists($led) {
133
	global $led_root;
134
	if (!is_numeric($led)) {
135
		return false;
136
	}
137
	return file_exists("{$led_root}{$led}");
138
}
139

    
140
/*
141
 * Sweep across three LEDs in a K.I.T.T.-like way.
142
 */
143
function led_kitt() {
144
	led_pattern(1, 'AaaaaA');
145
	led_pattern(2, 'aAaaAa');
146
	led_pattern(3, 'aaAAaa');
147
}
148

    
149
/*
150
 * Custom pattern for assigning interfaces
151
 */
152
function led_assigninterfaces() {
153
	led_pattern(1, 'AaaAaaaaaaaaaaaa');
154
	led_pattern(2, 'aaaaaAaaAaaaaaaa');
155
	led_pattern(3, 'aaaaaaaaaaAaaAaa');
156
}
157

    
158
/*
159
 * Return the three LEDs to a standard setup (1=on, 2 and 3 = off)
160
 */
161
function led_normalize() {
162
	led_on(1);
163
	led_off(2);
164
	led_off(3);
165
}
166

    
167
/*
168
 * Shut off ALL LEDs.
169
 */
170
function led_alloff() {
171
	led_off(1);
172
	led_off(2);
173
	led_off(3);
174
}
175

    
176
/*
177
 * Translate a string to morse code. Characters not known to have a
178
 * valid morse code representation will be ignored.
179
 */
180
function str_to_morse($string) {
181
	$i = 0;
182
	$morsestring = "";
183
	while ($i < strlen($string)) {
184
		$morsestring .= char_to_morse(substr($string, $i++, 1)) . " ";
185
	}
186
	return $morsestring . "\n";
187
}
188

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

    
363
?>
(30-30/65)