Annotation of sys/sys/sensors.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: sensors.h,v 1.24 2007/06/24 05:34:35 dlg Exp $ */
2:
3: /*
4: * Copyright (c) 2003, 2004 Alexander Yurchenko <grange@openbsd.org>
5: * Copyright (c) 2006 Constantine A. Murenin <cnst+openbsd@bugmail.mojo.ru>
6: * All rights reserved.
7: *
8: * Redistribution and use in source and binary forms, with or without
9: * modification, are permitted provided that the following conditions
10: * are met:
11: * 1. Redistributions of source code must retain the above copyright
12: * notice, this list of conditions and the following disclaimer.
13: * 2. Redistributions in binary form must reproduce the above copyright
14: * notice, this list of conditions and the following disclaimer in the
15: * documentation and/or other materials provided with the distribution.
16: *
17: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27: */
28:
29: #ifndef _SYS_SENSORS_H_
30: #define _SYS_SENSORS_H_
31:
32: /* Sensor types */
33: enum sensor_type {
34: SENSOR_TEMP, /* temperature (muK) */
35: SENSOR_FANRPM, /* fan revolution speed */
36: SENSOR_VOLTS_DC, /* voltage (muV DC) */
37: SENSOR_VOLTS_AC, /* voltage (muV AC) */
38: SENSOR_OHMS, /* resistance */
39: SENSOR_WATTS, /* power */
40: SENSOR_AMPS, /* current (muA) */
41: SENSOR_WATTHOUR, /* power capacity */
42: SENSOR_AMPHOUR, /* power capacity */
43: SENSOR_INDICATOR, /* boolean indicator */
44: SENSOR_INTEGER, /* generic integer value */
45: SENSOR_PERCENT, /* percent */
46: SENSOR_LUX, /* illuminance (mulx) */
47: SENSOR_DRIVE, /* disk */
48: SENSOR_TIMEDELTA, /* system time error (nSec) */
49: SENSOR_MAX_TYPES
50: };
51:
52: #ifndef _KERNEL
53: static const char * const sensor_type_s[SENSOR_MAX_TYPES + 1] = {
54: "temp",
55: "fan",
56: "volt",
57: "acvolt",
58: "resistance",
59: "power",
60: "current",
61: "watthour",
62: "amphour",
63: "indicator",
64: "raw",
65: "percent",
66: "illuminance",
67: "drive",
68: "timedelta",
69: "undefined"
70: };
71: #endif /* !_KERNEL */
72:
73: #define SENSOR_DRIVE_EMPTY 1
74: #define SENSOR_DRIVE_READY 2
75: #define SENSOR_DRIVE_POWERUP 3
76: #define SENSOR_DRIVE_ONLINE 4
77: #define SENSOR_DRIVE_IDLE 5
78: #define SENSOR_DRIVE_ACTIVE 6
79: #define SENSOR_DRIVE_REBUILD 7
80: #define SENSOR_DRIVE_POWERDOWN 8
81: #define SENSOR_DRIVE_FAIL 9
82: #define SENSOR_DRIVE_PFAIL 10
83:
84: /* Sensor states */
85: enum sensor_status {
86: SENSOR_S_UNSPEC, /* status is unspecified */
87: SENSOR_S_OK, /* status is ok */
88: SENSOR_S_WARN, /* status is warning */
89: SENSOR_S_CRIT, /* status is critical */
90: SENSOR_S_UNKNOWN /* status is unknown */
91: };
92:
93: /* Sensor data:
94: * New fields should be added at the end to encourage backwards compat
95: */
96: struct sensor {
97: char desc[32]; /* sensor description, may be empty */
98: struct timeval tv; /* sensor value last change time */
99: int64_t value; /* current value */
100: enum sensor_type type; /* sensor type */
101: enum sensor_status status; /* sensor status */
102: int numt; /* sensor number of .type type */
103: int flags; /* sensor flags */
104: #define SENSOR_FINVALID 0x0001 /* sensor is invalid */
105: #define SENSOR_FUNKNOWN 0x0002 /* sensor value is unknown */
106: };
107:
108: /* Sensor device data:
109: * New fields should be added at the end to encourage backwards compat
110: */
111: struct sensordev {
112: int num; /* sensordev number */
113: char xname[16]; /* unix device name */
114: int maxnumt[SENSOR_MAX_TYPES];
115: int sensors_count;
116: };
117:
118: #define MAXSENSORDEVICES 32
119:
120: #ifdef _KERNEL
121:
122: /* Sensor data */
123: struct ksensor {
124: SLIST_ENTRY(ksensor) list; /* device-scope list */
125: char desc[32]; /* sensor description, may be empty */
126: struct timeval tv; /* sensor value last change time */
127: int64_t value; /* current value */
128: enum sensor_type type; /* sensor type */
129: enum sensor_status status; /* sensor status */
130: int numt; /* sensor number of .type type */
131: int flags; /* sensor flags, ie. SENSOR_FINVALID */
132: };
133: SLIST_HEAD(ksensors_head, ksensor);
134:
135: /* Sensor device data */
136: struct ksensordev {
137: SLIST_ENTRY(ksensordev) list;
138: int num; /* sensordev number */
139: char xname[16]; /* unix device name */
140: int maxnumt[SENSOR_MAX_TYPES];
141: int sensors_count;
142: struct ksensors_head sensors_list;
143: };
144:
145: /* struct ksensordev */
146: void sensordev_install(struct ksensordev *);
147: void sensordev_deinstall(struct ksensordev *);
148: struct ksensordev *sensordev_get(int);
149:
150: /* struct ksensor */
151: void sensor_attach(struct ksensordev *, struct ksensor *);
152: void sensor_detach(struct ksensordev *, struct ksensor *);
153: struct ksensor *sensor_find(int, enum sensor_type, int);
154:
155: /* task scheduling */
156: struct sensor_task;
157: struct sensor_task *sensor_task_register(void *, void (*)(void *), int);
158: void sensor_task_unregister(struct sensor_task *);
159:
160: #endif /* _KERNEL */
161:
162: #endif /* !_SYS_SENSORS_H_ */
CVSweb