1*e9283513SSascha Wildner.\" Copyright (c) 2003 Sergey A. Osokin <osa@FreeBSD.org> 2*e9283513SSascha Wildner.\" All rights reserved. 3*e9283513SSascha Wildner.\" 4*e9283513SSascha Wildner.\" Redistribution and use in source and binary forms, with or without 5*e9283513SSascha Wildner.\" modification, are permitted provided that the following conditions 6*e9283513SSascha Wildner.\" are met: 7*e9283513SSascha Wildner.\" 1. Redistributions of source code must retain the above copyright 8*e9283513SSascha Wildner.\" notice, this list of conditions and the following disclaimer. 9*e9283513SSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright 10*e9283513SSascha Wildner.\" notice, this list of conditions and the following disclaimer in the 11*e9283513SSascha Wildner.\" documentation and/or other materials provided with the distribution. 12*e9283513SSascha Wildner.\" 13*e9283513SSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND 14*e9283513SSascha Wildner.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15*e9283513SSascha Wildner.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16*e9283513SSascha Wildner.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE 17*e9283513SSascha Wildner.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18*e9283513SSascha Wildner.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19*e9283513SSascha Wildner.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20*e9283513SSascha Wildner.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21*e9283513SSascha Wildner.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22*e9283513SSascha Wildner.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23*e9283513SSascha Wildner.\" SUCH DAMAGE. 24*e9283513SSascha Wildner.\" 25*e9283513SSascha Wildner.\" $FreeBSD: head/share/man/man4/led.4 267938 2014-06-26 21:46:14Z bapt $ 26*e9283513SSascha Wildner.\" 27*e9283513SSascha Wildner.Dd October 19, 2014 28*e9283513SSascha Wildner.Dt LED 4 29*e9283513SSascha Wildner.Os 30*e9283513SSascha Wildner.Sh NAME 31*e9283513SSascha Wildner.Nm led 32*e9283513SSascha Wildner.Nd API for manipulating LEDs, lamps and other annunciators 33*e9283513SSascha Wildner.Sh SYNOPSIS 34*e9283513SSascha Wildner.In dev/misc/led/led.h 35*e9283513SSascha Wildner.Pp 36*e9283513SSascha Wildner.Fd "typedef void led_t(void *priv, int onoff);" 37*e9283513SSascha Wildner.Ft struct cdev * 38*e9283513SSascha Wildner.Fn led_create_state "led_t *func" "void *priv" "char const *name" "int state" 39*e9283513SSascha Wildner.Ft struct cdev * 40*e9283513SSascha Wildner.Fn led_create "led_t *func" "void *priv" "char const *name" 41*e9283513SSascha Wildner.Ft void 42*e9283513SSascha Wildner.Fn led_destroy "struct cdev *" 43*e9283513SSascha Wildner.Sh DESCRIPTION 44*e9283513SSascha WildnerThe 45*e9283513SSascha Wildner.Nm 46*e9283513SSascha Wildnerdriver provides generic support for handling LEDs, lamps and other 47*e9283513SSascha Wildnerannunciators. 48*e9283513SSascha Wildner.Pp 49*e9283513SSascha WildnerThe hardware driver must supply a function to turn the annunciator on and off 50*e9283513SSascha Wildnerand the device 51*e9283513SSascha Wildner.Fa name 52*e9283513SSascha Wildnerof the annunciator relative to 53*e9283513SSascha Wildner.Pa /dev/led/ . 54*e9283513SSascha WildnerThe 55*e9283513SSascha Wildner.Fa priv 56*e9283513SSascha Wildnerargument is passed back to this on/off function and can be used however 57*e9283513SSascha Wildnerthe hardware driver sees fit. 58*e9283513SSascha Wildner.Pp 59*e9283513SSascha WildnerThe lamp can be controlled by opening and writing 60*e9283513SSascha Wildner.Tn ASCII 61*e9283513SSascha Wildnerstrings to the 62*e9283513SSascha Wildner.Pa /dev/led/bla 63*e9283513SSascha Wildnerdevice. 64*e9283513SSascha Wildner.Pp 65*e9283513SSascha WildnerIn the following, we will use this special notation to indicate the resulting 66*e9283513SSascha Wildneroutput of the annunciator: 67*e9283513SSascha Wildner.Pp 68*e9283513SSascha Wildner.Bl -tag -width indent -offset indent -compact 69*e9283513SSascha Wildner.It Ic * 70*e9283513SSascha WildnerThe annunciator is on for 1/10th second. 71*e9283513SSascha Wildner.It Ic _ 72*e9283513SSascha WildnerThe annunciator is off for 1/10th second. 73*e9283513SSascha Wildner.El 74*e9283513SSascha Wildner.Pp 75*e9283513SSascha WildnerState can be set directly, and since the change happens immediately, 76*e9283513SSascha Wildnerit is possible to flash the annunciator with very short periods and 77*e9283513SSascha Wildnersynchronize it with program events. 78*e9283513SSascha WildnerIt should be noted that there is a non-trivial overhead, so this may 79*e9283513SSascha Wildnernot be usable for benchmarking or measuring short intervals. 80*e9283513SSascha Wildner.Pp 81*e9283513SSascha Wildner.Bl -tag -width indent -offset indent -compact 82*e9283513SSascha Wildner.It Ic 0 83*e9283513SSascha WildnerTurn the annunciator off immediately. 84*e9283513SSascha Wildner.It Ic 1 85*e9283513SSascha WildnerTurn the annunciator on immediately. 86*e9283513SSascha Wildner.El 87*e9283513SSascha Wildner.Pp 88*e9283513SSascha WildnerFlashing can be set with a given period. 89*e9283513SSascha WildnerThe pattern continues endlessly. 90*e9283513SSascha Wildner.Pp 91*e9283513SSascha Wildner.Bl -tag -width indent -offset indent -compact 92*e9283513SSascha Wildner.It Ic f 93*e9283513SSascha Wildner_* 94*e9283513SSascha Wildner.It Ic f1 95*e9283513SSascha Wildner_* 96*e9283513SSascha Wildner.It Ic f2 97*e9283513SSascha Wildner__** 98*e9283513SSascha Wildner.It Ic f3 99*e9283513SSascha Wildner___*** 100*e9283513SSascha Wildner.It ... 101*e9283513SSascha Wildner.It Ic f9 102*e9283513SSascha Wildner_________********* 103*e9283513SSascha Wildner.El 104*e9283513SSascha Wildner.Pp 105*e9283513SSascha WildnerThree high-level commands are available: 106*e9283513SSascha Wildner.Bl -tag -width indent -offset indent 107*e9283513SSascha Wildner.It Ic d%d 108*e9283513SSascha WildnerNumbers. 109*e9283513SSascha WildnerEach digit is blinked out at 1/10th second, zero as ten pulses. 110*e9283513SSascha WildnerBetween digits a one second pause and after the last 111*e9283513SSascha Wildnerdigit a two second pause after which the sequence is repeated. 112*e9283513SSascha Wildner.It Ic s%s 113*e9283513SSascha WildnerString. 114*e9283513SSascha WildnerThis gives full control over the annunciator. 115*e9283513SSascha WildnerLetters 116*e9283513SSascha Wildner.Ql A 117*e9283513SSascha Wildner.No ... 118*e9283513SSascha Wildner.Ql J 119*e9283513SSascha Wildnerturn the annunciator on for from 1/10th to one full 120*e9283513SSascha Wildnersecond. 121*e9283513SSascha WildnerLetters 122*e9283513SSascha Wildner.Ql a 123*e9283513SSascha Wildner.No ... 124*e9283513SSascha Wildner.Ql j 125*e9283513SSascha Wildnerturn the annunciator off for 1/10th 126*e9283513SSascha Wildnerto one full second. 127*e9283513SSascha WildnerLetters 128*e9283513SSascha Wildner.Ql u 129*e9283513SSascha Wildnerand 130*e9283513SSascha Wildner.Ql U 131*e9283513SSascha Wildnerturn the annunciator off and on respectively when the next 132*e9283513SSascha WildnerUTC second starts. 133*e9283513SSascha WildnerUnless terminated with a 134*e9283513SSascha Wildner.Ql \&. , 135*e9283513SSascha Wildnerthe sequence is immediately repeated. 136*e9283513SSascha Wildner.It Ic m%s 137*e9283513SSascha WildnerMorse. 138*e9283513SSascha Wildner.Pp 139*e9283513SSascha Wildner.Bl -tag -width indent -offset indent -compact 140*e9283513SSascha Wildner.It Ql \&. 141*e9283513SSascha Wildnerbecomes 142*e9283513SSascha Wildner.Ql _* 143*e9283513SSascha Wildner.It Ql - 144*e9283513SSascha Wildnerbecomes 145*e9283513SSascha Wildner.Sq Li _*** 146*e9283513SSascha Wildner.It Ql "\ " 147*e9283513SSascha Wildnerbecomes 148*e9283513SSascha Wildner.Sq Li __ 149*e9283513SSascha Wildner.It Ql \en 150*e9283513SSascha Wildnerbecomes 151*e9283513SSascha Wildner.Sq Li ____ 152*e9283513SSascha Wildner.El 153*e9283513SSascha Wildner.El 154*e9283513SSascha Wildner.Pp 155*e9283513SSascha WildnerThe sequence is repeated after a one second pause. 156*e9283513SSascha Wildner.Sh FILES 157*e9283513SSascha Wildner.Bl -tag -width ".Pa /dev/led/*" 158*e9283513SSascha Wildner.It Pa /dev/led/* 159*e9283513SSascha Wildner.El 160*e9283513SSascha Wildner.Sh EXAMPLES 161*e9283513SSascha WildnerA 162*e9283513SSascha Wildner.Sq Li d12 163*e9283513SSascha Wildnerflashes the lamp 164*e9283513SSascha Wildner.Pp 165*e9283513SSascha Wildner.Dl *__________*_*______________________________ 166*e9283513SSascha Wildner.Pp 167*e9283513SSascha WildnerA 168*e9283513SSascha Wildner.Sq Li sAaAbBa 169*e9283513SSascha Wildnerflashes 170*e9283513SSascha Wildner.Pp 171*e9283513SSascha Wildner.Dl *_*__**_ 172*e9283513SSascha Wildner.Bd -literal 173*e9283513SSascha Wildner/usr/games/morse -l "Soekris rocks" > /dev/led/error 174*e9283513SSascha Wildner.Ed 175*e9283513SSascha Wildner.Sh SEE ALSO 176*e9283513SSascha Wildner.Xr morse 6 177*e9283513SSascha Wildner.Sh HISTORY 178*e9283513SSascha WildnerThe 179*e9283513SSascha Wildner.Nm 180*e9283513SSascha Wildnerdriver first appeared in 181*e9283513SSascha Wildner.Fx 5.2 . 182*e9283513SSascha Wildner.Sh AUTHORS 183*e9283513SSascha Wildner.An -nosplit 184*e9283513SSascha WildnerThis software was written by 185*e9283513SSascha Wildner.An Poul-Henning Kamp Aq Mt phk@FreeBSD.org . 186*e9283513SSascha Wildner.Pp 187*e9283513SSascha WildnerThis manual page was written by 188*e9283513SSascha Wildner.An Sergey A. Osokin Aq Mt osa@FreeBSD.org 189*e9283513SSascha Wildnerand 190*e9283513SSascha Wildner.An Poul-Henning Kamp Aq Mt phk@FreeBSD.org . 191