root/lm-sensors/trunk/lib/sensors.h @ 5844

Revision 5844, 9.7 KB (checked in by khali, 4 years ago)

Change libsensors license from GPL to LGPL.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
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        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#ifndef LIB_SENSORS_SENSORS_H
23#define LIB_SENSORS_SENSORS_H
24
25#include <stdio.h>
26#include <limits.h>
27
28/* Publicly accessible library functions */
29
30/* libsensors API version define, first digit is the major version (changed
31   when the API + ABI breaks), the third digit is incremented to track small
32   API additions like new flags / enum values. The second digit is for tracking
33   larger additions like new methods. */
34#define SENSORS_API_VERSION             0x421
35
36#define SENSORS_CHIP_NAME_PREFIX_ANY    NULL
37#define SENSORS_CHIP_NAME_ADDR_ANY      (-1)
38
39#define SENSORS_BUS_TYPE_ANY            (-1)
40#define SENSORS_BUS_TYPE_I2C            0
41#define SENSORS_BUS_TYPE_ISA            1
42#define SENSORS_BUS_TYPE_PCI            2
43#define SENSORS_BUS_TYPE_SPI            3
44#define SENSORS_BUS_TYPE_VIRTUAL        4
45#define SENSORS_BUS_TYPE_ACPI           5
46#define SENSORS_BUS_TYPE_HID            6
47#define SENSORS_BUS_NR_ANY              (-1)
48#define SENSORS_BUS_NR_IGNORE           (-2)
49
50#ifdef __cplusplus
51extern "C" {
52#endif /* __cplusplus */
53
54extern const char *libsensors_version;
55
56typedef struct sensors_bus_id {
57        short type;
58        short nr;
59} sensors_bus_id;
60
61/* A chip name is encoded in this structure */
62typedef struct sensors_chip_name {
63        char *prefix;
64        sensors_bus_id bus;
65        int addr;
66        char *path;
67} sensors_chip_name;
68
69/* Load the configuration file and the detected chips list. If this
70   returns a value unequal to zero, you are in trouble; you can not
71   assume anything will be initialized properly. If you want to
72   reload the configuration file, call sensors_cleanup() below before
73   calling sensors_init() again. */
74int sensors_init(FILE *input);
75
76/* Clean-up function: You can't access anything after
77   this, until the next sensors_init() call! */
78void sensors_cleanup(void);
79
80/* Parse a chip name to the internal representation. Return 0 on success, <0
81   on error. */
82int sensors_parse_chip_name(const char *orig_name, sensors_chip_name *res);
83
84/* Free memory allocated for the internal representation of a chip name. */
85void sensors_free_chip_name(sensors_chip_name *chip);
86
87/* Print a chip name from its internal representation. Note that chip should
88   not contain wildcard values! Return the number of characters printed on
89   success (same as snprintf), <0 on error. */
90int sensors_snprintf_chip_name(char *str, size_t size,
91                               const sensors_chip_name *chip);
92
93/* This function returns the adapter name of a bus,
94   as used within the sensors_chip_name structure. If it could not be found,
95   it returns NULL */
96const char *sensors_get_adapter_name(const sensors_bus_id *bus);
97
98typedef struct sensors_feature sensors_feature;
99
100/* Look up the label for a given feature. Note that chip should not
101   contain wildcard values! The returned string is newly allocated (free it
102   yourself). On failure, NULL is returned.
103   If no label exists for this feature, its name is returned itself. */
104char *sensors_get_label(const sensors_chip_name *name,
105                        const sensors_feature *feature);
106
107/* Read the value of a subfeature of a certain chip. Note that chip should not
108   contain wildcard values! This function will return 0 on success, and <0
109   on failure.  */
110int sensors_get_value(const sensors_chip_name *name, int subfeat_nr,
111                      double *value);
112
113/* Set the value of a subfeature of a certain chip. Note that chip should not
114   contain wildcard values! This function will return 0 on success, and <0
115   on failure. */
116int sensors_set_value(const sensors_chip_name *name, int subfeat_nr,
117                      double value);
118
119/* Execute all set statements for this particular chip. The chip may contain
120   wildcards!  This function will return 0 on success, and <0 on failure. */
121int sensors_do_chip_sets(const sensors_chip_name *name);
122
123/* This function returns all detected chips that match a given chip name,
124   one by one. If no chip name is provided, all detected chips are returned.
125   To start at the beginning of the list, use 0 for nr; NULL is returned if
126   we are at the end of the list. Do not try to change these chip names, as
127   they point to internal structures! */
128const sensors_chip_name *sensors_get_detected_chips(const sensors_chip_name
129                                                    *match, int *nr);
130
131/* These defines are used in the flags field of sensors_subfeature */
132#define SENSORS_MODE_R                  1
133#define SENSORS_MODE_W                  2
134#define SENSORS_COMPUTE_MAPPING         4
135
136typedef enum sensors_feature_type {
137        SENSORS_FEATURE_IN              = 0x00,
138        SENSORS_FEATURE_FAN             = 0x01,
139        SENSORS_FEATURE_TEMP            = 0x02,
140        SENSORS_FEATURE_POWER           = 0x03,
141        SENSORS_FEATURE_ENERGY          = 0x04,
142        SENSORS_FEATURE_CURR            = 0x05,
143        SENSORS_FEATURE_VID             = 0x10,
144        SENSORS_FEATURE_BEEP_ENABLE     = 0x18,
145        SENSORS_FEATURE_UNKNOWN         = INT_MAX,
146} sensors_feature_type;
147
148/* All the sensor types (in, fan, temp, vid) are a multiple of 0x100 apart,
149   and sensor subfeatures which have no compute mapping have bit 7 set. */
150typedef enum sensors_subfeature_type {
151        SENSORS_SUBFEATURE_IN_INPUT = SENSORS_FEATURE_IN << 8,
152        SENSORS_SUBFEATURE_IN_MIN,
153        SENSORS_SUBFEATURE_IN_MAX,
154        SENSORS_SUBFEATURE_IN_ALARM = (SENSORS_FEATURE_IN << 8) | 0x80,
155        SENSORS_SUBFEATURE_IN_MIN_ALARM,
156        SENSORS_SUBFEATURE_IN_MAX_ALARM,
157        SENSORS_SUBFEATURE_IN_BEEP,
158
159        SENSORS_SUBFEATURE_FAN_INPUT = SENSORS_FEATURE_FAN << 8,
160        SENSORS_SUBFEATURE_FAN_MIN,
161        SENSORS_SUBFEATURE_FAN_ALARM = (SENSORS_FEATURE_FAN << 8) | 0x80,
162        SENSORS_SUBFEATURE_FAN_FAULT,
163        SENSORS_SUBFEATURE_FAN_DIV,
164        SENSORS_SUBFEATURE_FAN_BEEP,
165
166        SENSORS_SUBFEATURE_TEMP_INPUT = SENSORS_FEATURE_TEMP << 8,
167        SENSORS_SUBFEATURE_TEMP_MAX,
168        SENSORS_SUBFEATURE_TEMP_MAX_HYST,
169        SENSORS_SUBFEATURE_TEMP_MIN,
170        SENSORS_SUBFEATURE_TEMP_CRIT,
171        SENSORS_SUBFEATURE_TEMP_CRIT_HYST,
172        SENSORS_SUBFEATURE_TEMP_ALARM = (SENSORS_FEATURE_TEMP << 8) | 0x80,
173        SENSORS_SUBFEATURE_TEMP_MAX_ALARM,
174        SENSORS_SUBFEATURE_TEMP_MIN_ALARM,
175        SENSORS_SUBFEATURE_TEMP_CRIT_ALARM,
176        SENSORS_SUBFEATURE_TEMP_FAULT,
177        SENSORS_SUBFEATURE_TEMP_TYPE,
178        SENSORS_SUBFEATURE_TEMP_OFFSET,
179        SENSORS_SUBFEATURE_TEMP_BEEP,
180
181        SENSORS_SUBFEATURE_POWER_AVERAGE = SENSORS_FEATURE_POWER << 8,
182        SENSORS_SUBFEATURE_POWER_AVERAGE_HIGHEST,
183        SENSORS_SUBFEATURE_POWER_AVERAGE_LOWEST,
184        SENSORS_SUBFEATURE_POWER_INPUT,
185        SENSORS_SUBFEATURE_POWER_INPUT_HIGHEST,
186        SENSORS_SUBFEATURE_POWER_INPUT_LOWEST,
187        SENSORS_SUBFEATURE_POWER_AVERAGE_INTERVAL = (SENSORS_FEATURE_POWER << 8) | 0x80,
188
189        SENSORS_SUBFEATURE_ENERGY_INPUT = SENSORS_FEATURE_ENERGY << 8,
190
191        SENSORS_SUBFEATURE_CURR_INPUT = SENSORS_FEATURE_CURR << 8,
192        SENSORS_SUBFEATURE_CURR_MIN,
193        SENSORS_SUBFEATURE_CURR_MAX,
194        SENSORS_SUBFEATURE_CURR_ALARM = (SENSORS_FEATURE_CURR << 8) | 0x80,
195        SENSORS_SUBFEATURE_CURR_MIN_ALARM,
196        SENSORS_SUBFEATURE_CURR_MAX_ALARM,
197        SENSORS_SUBFEATURE_CURR_BEEP,
198
199        SENSORS_SUBFEATURE_VID = SENSORS_FEATURE_VID << 8,
200
201        SENSORS_SUBFEATURE_BEEP_ENABLE = SENSORS_FEATURE_BEEP_ENABLE << 8,
202
203        SENSORS_SUBFEATURE_UNKNOWN = INT_MAX,
204} sensors_subfeature_type;
205
206/* Data about a single chip feature (or category leader) */
207struct sensors_feature {
208        char *name;
209        int number;
210        sensors_feature_type type;
211        /* Members below are for libsensors internal use only */
212        int first_subfeature;
213        int padding1;
214};
215
216/* Data about a single chip subfeature:
217   name is the string name used to refer to this subfeature (in config files)
218   number is the internal subfeature number, used in many functions to refer
219     to this subfeature
220   type is the subfeature type
221   mapping is the number of a main feature this subfeature belongs to
222     (for example subfeatures fan1_input, fan1_min, fan1_div and fan1_alarm
223      are mapped to main feature fan1)
224   flags is a bitfield, its value is a combination of SENSORS_MODE_R (readable),
225     SENSORS_MODE_W (writable) and SENSORS_COMPUTE_MAPPING (affected by the
226     computation rules of the main feature) */
227typedef struct sensors_subfeature {
228        char *name;
229        int number;
230        sensors_subfeature_type type;
231        int mapping;
232        unsigned int flags;
233} sensors_subfeature;
234
235/* This returns all main features of a specific chip. nr is an internally
236   used variable. Set it to zero to start at the begin of the list. If no
237   more features are found NULL is returned.
238   Do not try to change the returned structure; you will corrupt internal
239   data structures. */
240const sensors_feature *
241sensors_get_features(const sensors_chip_name *name, int *nr);
242
243/* This returns all subfeatures of a given main feature. nr is an internally
244   used variable. Set it to zero to start at the begin of the list. If no
245   more features are found NULL is returned.
246   Do not try to change the returned structure; you will corrupt internal
247   data structures. */
248const sensors_subfeature *
249sensors_get_all_subfeatures(const sensors_chip_name *name,
250                            const sensors_feature *feature, int *nr);
251
252/* This returns the subfeature of the given type for a given main feature,
253   if it exists, NULL otherwise.
254   Do not try to change the returned structure; you will corrupt internal
255   data structures. */
256const sensors_subfeature *
257sensors_get_subfeature(const sensors_chip_name *name,
258                       const sensors_feature *feature,
259                       sensors_subfeature_type type);
260
261#ifdef __cplusplus
262}
263#endif /* __cplusplus */
264
265#endif /* def LIB_SENSORS_ERROR_H */
Note: See TracBrowser for help on using the browser.