Project

General

Profile

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

    
24
$led_root = "/dev/led/led";
25

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
365
?>
(28-28/61)