1*5dfee228Sschwarze.\" $OpenBSD: sensor_attach.9,v 1.13 2015/09/14 15:14:55 schwarze Exp $ 2a01a9410Sderaadt.\" 3a01a9410Sderaadt.\" Copyright (c) 2006 Michael Knudsen <mk@openbsd.org> 4a01a9410Sderaadt.\" Copyright (c) 2006 Constantine A. Murenin <cnst+openbsd@bugmail.mojo.ru> 5a01a9410Sderaadt.\" All rights reserved. 6a01a9410Sderaadt.\" 7a01a9410Sderaadt.\" Redistribution and use in source and binary forms, with or without 8a01a9410Sderaadt.\" modification, are permitted provided that the following conditions 9a01a9410Sderaadt.\" are met: 10a01a9410Sderaadt.\" 11a01a9410Sderaadt.\" 1. Redistributions of source code must retain the above copyright 12a01a9410Sderaadt.\" notice, this list of conditions and the following disclaimer. 13a01a9410Sderaadt.\" 2. The name of the author may not be used to endorse or promote products 14a01a9410Sderaadt.\" derived from this software without specific prior written permission. 15a01a9410Sderaadt.\" 16a01a9410Sderaadt.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 17a01a9410Sderaadt.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 18a01a9410Sderaadt.\" AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 19a01a9410Sderaadt.\" THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20a01a9410Sderaadt.\" EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21a01a9410Sderaadt.\" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22a01a9410Sderaadt.\" OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23a01a9410Sderaadt.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24a01a9410Sderaadt.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25a01a9410Sderaadt.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26a01a9410Sderaadt.\" 27*5dfee228Sschwarze.Dd $Mdocdate: September 14 2015 $ 28dc2c3c7eSderaadt.Dt SENSOR_ATTACH 9 29a01a9410Sderaadt.Os 30a01a9410Sderaadt.Sh NAME 31a01a9410Sderaadt.Nm sensor_attach , 32a01a9410Sderaadt.Nm sensor_detach , 33a01a9410Sderaadt.Nm sensor_find , 34a01a9410Sderaadt.Nm sensordev_install , 35a01a9410Sderaadt.Nm sensordev_deinstall , 36a01a9410Sderaadt.Nm sensordev_get , 37a01a9410Sderaadt.Nm sensor_task_register , 38a01a9410Sderaadt.Nm sensor_task_unregister 39a01a9410Sderaadt.Nd sensors framework 40a01a9410Sderaadt.Sh SYNOPSIS 41dddd2645Sschwarze.In sys/sensors.h 42a01a9410Sderaadt.Ft void 43*5dfee228Sschwarze.Fn sensordev_install "struct ksensordev *sensdev" 44a01a9410Sderaadt.Ft void 45*5dfee228Sschwarze.Fn sensordev_deinstall "struct ksensordev *sensdev" 46991c0036Scnst.Ft struct ksensordev * 47*5dfee228Sschwarze.Fn sensordev_get "int devnum" 48a01a9410Sderaadt.Pp 49a01a9410Sderaadt.Ft void 50*5dfee228Sschwarze.Fn sensor_attach "struct ksensordev *sensdev" "struct ksensor *sens" 51a01a9410Sderaadt.Ft void 52*5dfee228Sschwarze.Fn sensor_detach "struct ksensordev *sensdev" "struct ksensor *sens" 53991c0036Scnst.Ft struct ksensor * 54*5dfee228Sschwarze.Fn sensor_find "int devnum" "enum sensor_type stype" "int numt" 55a01a9410Sderaadt.Pp 562f4ab089Sdlg.Ft struct sensor_task * 57*5dfee228Sschwarze.Fn sensor_task_register "void *arg" "void (*func)(void *)" "int period" 58a01a9410Sderaadt.Ft void 59*5dfee228Sschwarze.Fn sensor_task_unregister "struct sensor_task *st" 60a01a9410Sderaadt.Sh DESCRIPTION 61a01a9410SderaadtThe 62a01a9410Sderaadtsensors 63a01a9410Sderaadtframework API provides a mechanism for manipulation of hardware sensors 64a01a9410Sderaadtthat are available under the 65a01a9410Sderaadt.Va hw.sensors 66a01a9410Sderaadt.Xr sysctl 8 67a01a9410Sderaadttree. 68a01a9410Sderaadt.Pp 69a01a9410Sderaadt.Fn sensor_attach 70b411c5edSjmcadds the sensor specified by the 71369bef3aSschwarze.Fa sens 72b411c5edSjmcargument to the sensor device specified by the 73369bef3aSschwarze.Fa sensdev 74a01a9410Sderaadtargument. 75a01a9410Sderaadt.Fn sensor_detach 76a01a9410Sderaadtcan be used to remove sensors previously added by 77a01a9410Sderaadt.Fn sensor_attach . 78a01a9410Sderaadt.Pp 79a01a9410Sderaadt.Fn sensordev_install 80b411c5edSjmcregisters the sensor device specified by the 81369bef3aSschwarze.Fa sensdev 82a01a9410Sderaadtargument so that all sensors that are attached to the device become 83a01a9410Sderaadtaccessible via the sysctl interface. 84a01a9410Sderaadt.Fn sensordev_deinstall 85a01a9410Sderaadtcan be used to remove sensor devices previously registered by 86a01a9410Sderaadt.Fn sensordev_install . 87a01a9410Sderaadt.Pp 88a01a9410Sderaadt.Fn sensordev_get 89a01a9410Sderaadttakes ordinal number 90369bef3aSschwarze.Fa devnum 91b411c5edSjmcspecifying a sensor device and 92a01a9410Sderaadtreturns a pointer to the corresponding 93275cbf62Sderaadt.Vt struct ksensordev , 94a01a9410Sderaadtor 95a01a9410Sderaadt.Dv NULL 96a01a9410Sderaadtif no such sensor device exists. 97a01a9410Sderaadt.Pp 98a01a9410Sderaadt.Fn sensor_find 99a01a9410Sderaadttakes ordinal number 100369bef3aSschwarze.Fa devnum 101b411c5edSjmcspecifying a sensor device, sensor type 102369bef3aSschwarze.Fa stype 103a01a9410Sderaadtand ordinal number of sensor of such type 104369bef3aSschwarze.Fa numt , 105a01a9410Sderaadtand returns a pointer to the corresponding 106275cbf62Sderaadt.Vt struct ksensor , 107a01a9410Sderaadtor 108a01a9410Sderaadt.Dv NULL 109a01a9410Sderaadtif no such sensor exists. 110a01a9410Sderaadt.Fn sensor_find 111a01a9410Sderaadtwill always return 112a01a9410Sderaadt.Dv NULL 113a01a9410Sderaadtif the corresponding sensor devices are not registered by 114a01a9410Sderaadt.Fn sensordev_install . 115a01a9410Sderaadt.Pp 116a01a9410SderaadtDrivers are responsible for retrieving, interpreting, and normalising 117a01a9410Sderaadtsensor values and updating the sensor struct periodically. 118a01a9410SderaadtIf the driver needs process context, for example to sleep, it can 119a01a9410Sderaadtregister a task with the sensor framework. 120a01a9410Sderaadt.Pp 121a01a9410Sderaadt.Fn sensor_task_register 122a01a9410Sderaadtis used to register a periodic task to update sensors. 123a01a9410SderaadtThe 124a01a9410Sderaadt.Fa func 125a01a9410Sderaadtargument is a pointer to the function to run with an interval of 126a01a9410Sderaadt.Fa period 127a01a9410Sderaadtseconds. 128a01a9410SderaadtThe 129a01a9410Sderaadt.Fa arg 130a01a9410Sderaadtparameter is the argument given to the 131a01a9410Sderaadt.Fa func 132a01a9410Sderaadtfunction. 133a01a9410Sderaadt.Fn sensor_task_unregister 134dc5e9e21Scnstensures that the task specified by the 1352f4ab089Sdlg.Fa st 136dc5e9e21Scnstargument is no longer running, and then removes it from the queue. 137a01a9410Sderaadt.Pp 138a01a9410SderaadtAll the functions in the sensor framework must be called during 139a01a9410Sderaadt.Xr autoconf 9 140a01a9410Sderaadtor from a process context. 141a01a9410SderaadtAdditionally, 142a01a9410Sderaadt.Fn sensor_task_unregister 143dc5e9e21Scnstmust not be called from the sensor task that it is about to remove. 144a01a9410Sderaadt.Sh SEE ALSO 145a01a9410Sderaadt.Xr sysctl 8 , 146a01a9410Sderaadt.Xr autoconf 9 147a01a9410Sderaadt.Sh HISTORY 148a01a9410SderaadtThe sensor framework was written by 149f0641c22Sschwarze.An Alexander Yurchenko Aq Mt grange@openbsd.org 150a01a9410Sderaadtand first appeared in 151a01a9410Sderaadt.Ox 3.4 . 152f0641c22Sschwarze.An David Gwynne Aq Mt dlg@openbsd.org 153a01a9410Sderaadtlater extended it for 154a01a9410Sderaadt.Ox 3.8 . 155f0641c22Sschwarze.An Constantine A. Murenin Aq Mt cnst+openbsd@bugmail.mojo.ru 156a01a9410Sderaadtextended it even further by introducing the concept of sensor devices in 157a01a9410Sderaadt.Ox 4.1 . 158