tizen 2.4 release
[profile/mobile/platform/kernel/linux-3.10-sc7730.git] / tools / gator / daemon / libsensors / sensors.h
1 /*
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>
5
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.
10
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.
15
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,
19     MA 02110-1301 USA.
20 */
21
22 /*** This file modified by ARM on Jan 23, 2013 to read non-scaled values. ***/
23
24 #ifndef LIB_SENSORS_SENSORS_H
25 #define LIB_SENSORS_SENSORS_H
26
27 #include <stdio.h>
28 #include <limits.h>
29
30 /* Publicly accessible library functions */
31
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
37
38 #define SENSORS_CHIP_NAME_PREFIX_ANY    NULL
39 #define SENSORS_CHIP_NAME_ADDR_ANY      (-1)
40
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)
51
52 #ifdef __cplusplus
53 extern "C" {
54 #endif /* __cplusplus */
55
56 extern const char *libsensors_version;
57
58 extern int sensors_sysfs_no_scaling;
59
60 typedef struct sensors_bus_id {
61         short type;
62         short nr;
63 } sensors_bus_id;
64
65 /* A chip name is encoded in this structure */
66 typedef struct sensors_chip_name {
67         char *prefix;
68         sensors_bus_id bus;
69         int addr;
70         char *path;
71 } sensors_chip_name;
72
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);
79
80 /* Clean-up function: You can't access anything after
81    this, until the next sensors_init() call! */
82 void sensors_cleanup(void);
83
84 /* Parse a chip name to the internal representation. Return 0 on success, <0
85    on error. */
86 int sensors_parse_chip_name(const char *orig_name, sensors_chip_name *res);
87
88 /* Free memory allocated for the internal representation of a chip name. */
89 void sensors_free_chip_name(sensors_chip_name *chip);
90
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);
96
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,
99    it returns NULL */
100 const char *sensors_get_adapter_name(const sensors_bus_id *bus);
101
102 typedef struct sensors_feature sensors_feature;
103
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);
110
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
113    on failure.  */
114 int sensors_get_value(const sensors_chip_name *name, int subfeat_nr,
115                       double *value);
116
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
119    on failure. */
120 int sensors_set_value(const sensors_chip_name *name, int subfeat_nr,
121                       double value);
122
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);
126
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
133                                                     *match, int *nr);
134
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
139
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;
155
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,
173
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,
184
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,
206
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,
222
223         SENSORS_SUBFEATURE_ENERGY_INPUT = SENSORS_FEATURE_ENERGY << 8,
224
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,
239
240         SENSORS_SUBFEATURE_HUMIDITY_INPUT = SENSORS_FEATURE_HUMIDITY << 8,
241
242         SENSORS_SUBFEATURE_VID = SENSORS_FEATURE_VID << 8,
243
244         SENSORS_SUBFEATURE_INTRUSION_ALARM = SENSORS_FEATURE_INTRUSION << 8,
245         SENSORS_SUBFEATURE_INTRUSION_BEEP,
246
247         SENSORS_SUBFEATURE_BEEP_ENABLE = SENSORS_FEATURE_BEEP_ENABLE << 8,
248
249         SENSORS_SUBFEATURE_UNKNOWN = INT_MAX,
250 } sensors_subfeature_type;
251
252 /* Data about a single chip feature (or category leader) */
253 struct sensors_feature {
254         char *name;
255         int number;
256         sensors_feature_type type;
257         /* Members below are for libsensors internal use only */
258         int first_subfeature;
259         int padding1;
260 };
261
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
265      to this subfeature
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 {
274         char *name;
275         int number;
276         sensors_subfeature_type type;
277         int mapping;
278         unsigned int flags;
279 } sensors_subfeature;
280
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
285    data structures. */
286 const sensors_feature *
287 sensors_get_features(const sensors_chip_name *name, int *nr);
288
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
293    data structures. */
294 const sensors_subfeature *
295 sensors_get_all_subfeatures(const sensors_chip_name *name,
296                             const sensors_feature *feature, int *nr);
297
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
301    data structures. */
302 const sensors_subfeature *
303 sensors_get_subfeature(const sensors_chip_name *name,
304                        const sensors_feature *feature,
305                        sensors_subfeature_type type);
306
307 #ifdef __cplusplus
308 }
309 #endif /* __cplusplus */
310
311 #endif /* def LIB_SENSORS_ERROR_H */