2 sensors.h - Part of libsensors, a Linux library for reading sensor data.
3 Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl>
4 Copyright (C) 2007, 2010 Jean Delvare <khali@linux-fr.org>
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU Lesser General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
22 /*** This file modified by ARM on Jan 23, 2013 to read non-scaled values. ***/
24 #ifndef LIB_SENSORS_SENSORS_H
25 #define LIB_SENSORS_SENSORS_H
30 /* Publicly accessible library functions */
32 /* libsensors API version define, first digit is the major version (changed
33 when the API + ABI breaks), the third digit is incremented to track small
34 API additions like new flags / enum values. The second digit is for tracking
35 larger additions like new methods. */
36 #define SENSORS_API_VERSION 0x432
38 #define SENSORS_CHIP_NAME_PREFIX_ANY NULL
39 #define SENSORS_CHIP_NAME_ADDR_ANY (-1)
41 #define SENSORS_BUS_TYPE_ANY (-1)
42 #define SENSORS_BUS_TYPE_I2C 0
43 #define SENSORS_BUS_TYPE_ISA 1
44 #define SENSORS_BUS_TYPE_PCI 2
45 #define SENSORS_BUS_TYPE_SPI 3
46 #define SENSORS_BUS_TYPE_VIRTUAL 4
47 #define SENSORS_BUS_TYPE_ACPI 5
48 #define SENSORS_BUS_TYPE_HID 6
49 #define SENSORS_BUS_NR_ANY (-1)
50 #define SENSORS_BUS_NR_IGNORE (-2)
54 #endif /* __cplusplus */
56 extern const char *libsensors_version;
58 extern int sensors_sysfs_no_scaling;
60 typedef struct sensors_bus_id {
65 /* A chip name is encoded in this structure */
66 typedef struct sensors_chip_name {
73 /* Load the configuration file and the detected chips list. If this
74 returns a value unequal to zero, you are in trouble; you can not
75 assume anything will be initialized properly. If you want to
76 reload the configuration file, call sensors_cleanup() below before
77 calling sensors_init() again. */
78 int sensors_init(FILE *input);
80 /* Clean-up function: You can't access anything after
81 this, until the next sensors_init() call! */
82 void sensors_cleanup(void);
84 /* Parse a chip name to the internal representation. Return 0 on success, <0
86 int sensors_parse_chip_name(const char *orig_name, sensors_chip_name *res);
88 /* Free memory allocated for the internal representation of a chip name. */
89 void sensors_free_chip_name(sensors_chip_name *chip);
91 /* Print a chip name from its internal representation. Note that chip should
92 not contain wildcard values! Return the number of characters printed on
93 success (same as snprintf), <0 on error. */
94 int sensors_snprintf_chip_name(char *str, size_t size,
95 const sensors_chip_name *chip);
97 /* This function returns the adapter name of a bus,
98 as used within the sensors_chip_name structure. If it could not be found,
100 const char *sensors_get_adapter_name(const sensors_bus_id *bus);
102 typedef struct sensors_feature sensors_feature;
104 /* Look up the label for a given feature. Note that chip should not
105 contain wildcard values! The returned string is newly allocated (free it
106 yourself). On failure, NULL is returned.
107 If no label exists for this feature, its name is returned itself. */
108 char *sensors_get_label(const sensors_chip_name *name,
109 const sensors_feature *feature);
111 /* Read the value of a subfeature of a certain chip. Note that chip should not
112 contain wildcard values! This function will return 0 on success, and <0
114 int sensors_get_value(const sensors_chip_name *name, int subfeat_nr,
117 /* Set the value of a subfeature of a certain chip. Note that chip should not
118 contain wildcard values! This function will return 0 on success, and <0
120 int sensors_set_value(const sensors_chip_name *name, int subfeat_nr,
123 /* Execute all set statements for this particular chip. The chip may contain
124 wildcards! This function will return 0 on success, and <0 on failure. */
125 int sensors_do_chip_sets(const sensors_chip_name *name);
127 /* This function returns all detected chips that match a given chip name,
128 one by one. If no chip name is provided, all detected chips are returned.
129 To start at the beginning of the list, use 0 for nr; NULL is returned if
130 we are at the end of the list. Do not try to change these chip names, as
131 they point to internal structures! */
132 const sensors_chip_name *sensors_get_detected_chips(const sensors_chip_name
135 /* These defines are used in the flags field of sensors_subfeature */
136 #define SENSORS_MODE_R 1
137 #define SENSORS_MODE_W 2
138 #define SENSORS_COMPUTE_MAPPING 4
140 typedef enum sensors_feature_type {
141 SENSORS_FEATURE_IN = 0x00,
142 SENSORS_FEATURE_FAN = 0x01,
143 SENSORS_FEATURE_TEMP = 0x02,
144 SENSORS_FEATURE_POWER = 0x03,
145 SENSORS_FEATURE_ENERGY = 0x04,
146 SENSORS_FEATURE_CURR = 0x05,
147 SENSORS_FEATURE_HUMIDITY = 0x06,
148 SENSORS_FEATURE_MAX_MAIN,
149 SENSORS_FEATURE_VID = 0x10,
150 SENSORS_FEATURE_INTRUSION = 0x11,
151 SENSORS_FEATURE_MAX_OTHER,
152 SENSORS_FEATURE_BEEP_ENABLE = 0x18,
153 SENSORS_FEATURE_UNKNOWN = INT_MAX,
154 } sensors_feature_type;
156 /* All the sensor types (in, fan, temp, vid) are a multiple of 0x100 apart,
157 and sensor subfeatures which have no compute mapping have bit 7 set. */
158 typedef enum sensors_subfeature_type {
159 SENSORS_SUBFEATURE_IN_INPUT = SENSORS_FEATURE_IN << 8,
160 SENSORS_SUBFEATURE_IN_MIN,
161 SENSORS_SUBFEATURE_IN_MAX,
162 SENSORS_SUBFEATURE_IN_LCRIT,
163 SENSORS_SUBFEATURE_IN_CRIT,
164 SENSORS_SUBFEATURE_IN_AVERAGE,
165 SENSORS_SUBFEATURE_IN_LOWEST,
166 SENSORS_SUBFEATURE_IN_HIGHEST,
167 SENSORS_SUBFEATURE_IN_ALARM = (SENSORS_FEATURE_IN << 8) | 0x80,
168 SENSORS_SUBFEATURE_IN_MIN_ALARM,
169 SENSORS_SUBFEATURE_IN_MAX_ALARM,
170 SENSORS_SUBFEATURE_IN_BEEP,
171 SENSORS_SUBFEATURE_IN_LCRIT_ALARM,
172 SENSORS_SUBFEATURE_IN_CRIT_ALARM,
174 SENSORS_SUBFEATURE_FAN_INPUT = SENSORS_FEATURE_FAN << 8,
175 SENSORS_SUBFEATURE_FAN_MIN,
176 SENSORS_SUBFEATURE_FAN_MAX,
177 SENSORS_SUBFEATURE_FAN_ALARM = (SENSORS_FEATURE_FAN << 8) | 0x80,
178 SENSORS_SUBFEATURE_FAN_FAULT,
179 SENSORS_SUBFEATURE_FAN_DIV,
180 SENSORS_SUBFEATURE_FAN_BEEP,
181 SENSORS_SUBFEATURE_FAN_PULSES,
182 SENSORS_SUBFEATURE_FAN_MIN_ALARM,
183 SENSORS_SUBFEATURE_FAN_MAX_ALARM,
185 SENSORS_SUBFEATURE_TEMP_INPUT = SENSORS_FEATURE_TEMP << 8,
186 SENSORS_SUBFEATURE_TEMP_MAX,
187 SENSORS_SUBFEATURE_TEMP_MAX_HYST,
188 SENSORS_SUBFEATURE_TEMP_MIN,
189 SENSORS_SUBFEATURE_TEMP_CRIT,
190 SENSORS_SUBFEATURE_TEMP_CRIT_HYST,
191 SENSORS_SUBFEATURE_TEMP_LCRIT,
192 SENSORS_SUBFEATURE_TEMP_EMERGENCY,
193 SENSORS_SUBFEATURE_TEMP_EMERGENCY_HYST,
194 SENSORS_SUBFEATURE_TEMP_LOWEST,
195 SENSORS_SUBFEATURE_TEMP_HIGHEST,
196 SENSORS_SUBFEATURE_TEMP_ALARM = (SENSORS_FEATURE_TEMP << 8) | 0x80,
197 SENSORS_SUBFEATURE_TEMP_MAX_ALARM,
198 SENSORS_SUBFEATURE_TEMP_MIN_ALARM,
199 SENSORS_SUBFEATURE_TEMP_CRIT_ALARM,
200 SENSORS_SUBFEATURE_TEMP_FAULT,
201 SENSORS_SUBFEATURE_TEMP_TYPE,
202 SENSORS_SUBFEATURE_TEMP_OFFSET,
203 SENSORS_SUBFEATURE_TEMP_BEEP,
204 SENSORS_SUBFEATURE_TEMP_EMERGENCY_ALARM,
205 SENSORS_SUBFEATURE_TEMP_LCRIT_ALARM,
207 SENSORS_SUBFEATURE_POWER_AVERAGE = SENSORS_FEATURE_POWER << 8,
208 SENSORS_SUBFEATURE_POWER_AVERAGE_HIGHEST,
209 SENSORS_SUBFEATURE_POWER_AVERAGE_LOWEST,
210 SENSORS_SUBFEATURE_POWER_INPUT,
211 SENSORS_SUBFEATURE_POWER_INPUT_HIGHEST,
212 SENSORS_SUBFEATURE_POWER_INPUT_LOWEST,
213 SENSORS_SUBFEATURE_POWER_CAP,
214 SENSORS_SUBFEATURE_POWER_CAP_HYST,
215 SENSORS_SUBFEATURE_POWER_MAX,
216 SENSORS_SUBFEATURE_POWER_CRIT,
217 SENSORS_SUBFEATURE_POWER_AVERAGE_INTERVAL = (SENSORS_FEATURE_POWER << 8) | 0x80,
218 SENSORS_SUBFEATURE_POWER_ALARM,
219 SENSORS_SUBFEATURE_POWER_CAP_ALARM,
220 SENSORS_SUBFEATURE_POWER_MAX_ALARM,
221 SENSORS_SUBFEATURE_POWER_CRIT_ALARM,
223 SENSORS_SUBFEATURE_ENERGY_INPUT = SENSORS_FEATURE_ENERGY << 8,
225 SENSORS_SUBFEATURE_CURR_INPUT = SENSORS_FEATURE_CURR << 8,
226 SENSORS_SUBFEATURE_CURR_MIN,
227 SENSORS_SUBFEATURE_CURR_MAX,
228 SENSORS_SUBFEATURE_CURR_LCRIT,
229 SENSORS_SUBFEATURE_CURR_CRIT,
230 SENSORS_SUBFEATURE_CURR_AVERAGE,
231 SENSORS_SUBFEATURE_CURR_LOWEST,
232 SENSORS_SUBFEATURE_CURR_HIGHEST,
233 SENSORS_SUBFEATURE_CURR_ALARM = (SENSORS_FEATURE_CURR << 8) | 0x80,
234 SENSORS_SUBFEATURE_CURR_MIN_ALARM,
235 SENSORS_SUBFEATURE_CURR_MAX_ALARM,
236 SENSORS_SUBFEATURE_CURR_BEEP,
237 SENSORS_SUBFEATURE_CURR_LCRIT_ALARM,
238 SENSORS_SUBFEATURE_CURR_CRIT_ALARM,
240 SENSORS_SUBFEATURE_HUMIDITY_INPUT = SENSORS_FEATURE_HUMIDITY << 8,
242 SENSORS_SUBFEATURE_VID = SENSORS_FEATURE_VID << 8,
244 SENSORS_SUBFEATURE_INTRUSION_ALARM = SENSORS_FEATURE_INTRUSION << 8,
245 SENSORS_SUBFEATURE_INTRUSION_BEEP,
247 SENSORS_SUBFEATURE_BEEP_ENABLE = SENSORS_FEATURE_BEEP_ENABLE << 8,
249 SENSORS_SUBFEATURE_UNKNOWN = INT_MAX,
250 } sensors_subfeature_type;
252 /* Data about a single chip feature (or category leader) */
253 struct sensors_feature {
256 sensors_feature_type type;
257 /* Members below are for libsensors internal use only */
258 int first_subfeature;
262 /* Data about a single chip subfeature:
263 name is the string name used to refer to this subfeature (in config files)
264 number is the internal subfeature number, used in many functions to refer
266 type is the subfeature type
267 mapping is the number of a main feature this subfeature belongs to
268 (for example subfeatures fan1_input, fan1_min, fan1_div and fan1_alarm
269 are mapped to main feature fan1)
270 flags is a bitfield, its value is a combination of SENSORS_MODE_R (readable),
271 SENSORS_MODE_W (writable) and SENSORS_COMPUTE_MAPPING (affected by the
272 computation rules of the main feature) */
273 typedef struct sensors_subfeature {
276 sensors_subfeature_type type;
279 } sensors_subfeature;
281 /* This returns all main features of a specific chip. nr is an internally
282 used variable. Set it to zero to start at the begin of the list. If no
283 more features are found NULL is returned.
284 Do not try to change the returned structure; you will corrupt internal
286 const sensors_feature *
287 sensors_get_features(const sensors_chip_name *name, int *nr);
289 /* This returns all subfeatures of a given main feature. nr is an internally
290 used variable. Set it to zero to start at the begin of the list. If no
291 more features are found NULL is returned.
292 Do not try to change the returned structure; you will corrupt internal
294 const sensors_subfeature *
295 sensors_get_all_subfeatures(const sensors_chip_name *name,
296 const sensors_feature *feature, int *nr);
298 /* This returns the subfeature of the given type for a given main feature,
299 if it exists, NULL otherwise.
300 Do not try to change the returned structure; you will corrupt internal
302 const sensors_subfeature *
303 sensors_get_subfeature(const sensors_chip_name *name,
304 const sensors_feature *feature,
305 sensors_subfeature_type type);
309 #endif /* __cplusplus */
311 #endif /* def LIB_SENSORS_ERROR_H */