2
0
mirror of https://github.com/lm-sensors/lm-sensors synced 2025-09-05 08:45:26 +00:00
Files
lm-sensors/lib/data.h
Jean Delvare b836fc0b53 Now that we can deduce the scaling factor required for each feature
from its type, there's no need to store this scaling factor. We can
instead compute it at runtime. This saves some memory (about 10 kB
in my real-world test), and the runtime overhead is totally
negligible.


git-svn-id: http://lm-sensors.org/svn/lm-sensors/branches/lm-sensors-3.0.0@4762 7894878c-1315-0410-8ee3-d5d059ff63e0
2007-09-05 08:21:19 +00:00

180 lines
5.4 KiB
C

/*
data.h - Part of libsensors, a Linux library for reading sensor data.
Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef LIB_SENSORS_DATA_H
#define LIB_SENSORS_DATA_H
#include "sensors.h"
/* This header file contains all kinds of data structures which are used
for the representation of the config file data and the /proc/...
data. */
/* Kinds of expression operators recognized */
typedef enum sensors_operation {
sensors_add, sensors_sub, sensors_multiply, sensors_divide,
sensors_negate, sensors_exp, sensors_log,
} sensors_operation;
/* An expression can have several forms */
typedef enum sensors_expr_kind {
sensors_kind_val, sensors_kind_source, sensors_kind_var,
sensors_kind_sub
} sensors_expr_kind;
/* An expression. It is either a floating point value, a variable name,
an operation on subexpressions, or the special value 'sub' } */
struct sensors_expr;
typedef struct sensors_subexpr {
sensors_operation op;
struct sensors_expr *sub1;
struct sensors_expr *sub2;
} sensors_subexpr;
typedef struct sensors_expr {
sensors_expr_kind kind;
union {
double val;
char *var;
sensors_subexpr subexpr;
} data;
} sensors_expr;
/* Config file label declaration: a feature name, combined with the label
value */
typedef struct sensors_label {
char *name;
char *value;
int lineno;
} sensors_label;
/* Config file set declaration: a feature name, combined with an expression */
typedef struct sensors_set {
char *name;
sensors_expr *value;
int lineno;
} sensors_set;
/* Config file compute declaration: a feature name, combined with two
expressions */
typedef struct sensors_compute {
char *name;
sensors_expr *from_proc;
sensors_expr *to_proc;
int lineno;
} sensors_compute;
/* Config file ignore declaration: a feature name */
typedef struct sensors_ignore {
char *name;
int lineno;
} sensors_ignore;
/* A list of chip names, used to represent a config file chips declaration */
typedef struct sensors_chip_name_list {
sensors_chip_name *fits;
int fits_count;
int fits_max;
} sensors_chip_name_list;
/* A config file chip block */
typedef struct sensors_chip {
sensors_chip_name_list chips;
sensors_label *labels;
int labels_count;
int labels_max;
sensors_set *sets;
int sets_count;
int sets_max;
sensors_compute *computes;
int computes_count;
int computes_max;
sensors_ignore *ignores;
int ignores_count;
int ignores_max;
int lineno;
} sensors_chip;
/* Config file bus declaration: the bus type and number, combined with adapter
name */
typedef struct sensors_bus {
char *adapter;
sensors_bus_id bus;
int lineno;
} sensors_bus;
/* Internal data about a single chip feature.
name is the string name used to refer to this feature (both in config
files and through user functions);
number is the internal feature number, used in many functions to refer
to this feature
mapping is either SENSORS_NO_MAPPING if this is feature is the
main element of category; or it is the number of a feature with which
this feature is logically grouped (a group could be fan, fan_max and
fan_div)
flags is a bitfield, its value is a combination of SENSORS_MODE_R (readable),
SENSORS_MODE_W (writable) and SENSORS_COMPUTE_MAPPING (affected by the
computation rules of the main feature). */
typedef struct sensors_chip_feature {
sensors_feature_data data;
} sensors_chip_feature;
/* Internal data about all features of a type of chip */
typedef struct sensors_chip_features {
struct sensors_chip_name chip;
struct sensors_chip_feature *feature;
int feature_count;
} sensors_chip_features;
extern sensors_chip *sensors_config_chips;
extern int sensors_config_chips_count;
extern int sensors_config_chips_max;
extern sensors_bus *sensors_config_busses;
extern int sensors_config_busses_count;
extern int sensors_config_busses_max;
extern sensors_chip_features *sensors_proc_chips;
extern int sensors_proc_chips_count;
extern int sensors_proc_chips_max;
#define sensors_add_proc_chips(el) sensors_add_array_el( \
(el), &sensors_proc_chips, &sensors_proc_chips_count,\
&sensors_proc_chips_max, sizeof(struct sensors_chip_features))
extern sensors_bus *sensors_proc_bus;
extern int sensors_proc_bus_count;
extern int sensors_proc_bus_max;
#define sensors_add_proc_bus(el) sensors_add_array_el( \
(el), &sensors_proc_bus, &sensors_proc_bus_count,\
&sensors_proc_bus_max, sizeof(struct sensors_bus))
/* Substitute configuration bus numbers with real-world /proc bus numbers
in the chips lists */
int sensors_substitute_busses(void);
/* Parse a bus id into its components. Returns 0 on succes, a value from
error.h on failure. */
int sensors_parse_bus_id(const char *name, sensors_bus_id *bus);
#endif /* def LIB_SENSORS_DATA_H */