aboutsummaryrefslogtreecommitdiff
path: root/tools/gator/daemon/libsensors/data.h
blob: 4a23eabe14141b5e79451ea0be40c191adc07fac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
/*
    data.h - Part of libsensors, a Linux library for reading sensor data.
    Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl>
    Copyright (C) 2007, 2009  Jean Delvare <khali@linux-fr.org>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library 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 Lesser 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., 51 Franklin Street, Fifth Floor, Boston,
    MA 02110-1301 USA.
*/

#ifndef LIB_SENSORS_DATA_H
#define LIB_SENSORS_DATA_H

#include "sensors.h"
#include "general.h"

/* This header file contains all kinds of data structures which are used
   for the representation of the config file data and the sensors
   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 line reference */
typedef struct sensors_config_line {
	const char *filename;
	int lineno;
} sensors_config_line;

/* Config file label declaration: a feature name, combined with the label
   value */
typedef struct sensors_label {
	char *name;
	char *value;
	sensors_config_line line;
} sensors_label;

/* Config file set declaration: a subfeature name, combined with an
   expression */
typedef struct sensors_set {
	char *name;
	sensors_expr *value;
	sensors_config_line line;
} 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;
	sensors_config_line line;
} sensors_compute;

/* Config file ignore declaration: a feature name */
typedef struct sensors_ignore {
	char *name;
	sensors_config_line line;
} 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;
	sensors_config_line line;
} 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;
	sensors_config_line line;
} sensors_bus;

/* Internal data about all features and subfeatures of a chip */
typedef struct sensors_chip_features {
	struct sensors_chip_name chip;
	struct sensors_feature *feature;
	struct sensors_subfeature *subfeature;
	int feature_count;
	int subfeature_count;
} sensors_chip_features;

extern char **sensors_config_files;
extern int sensors_config_files_count;
extern int sensors_config_files_max;

#define sensors_add_config_files(el) sensors_add_array_el( \
	(el), &sensors_config_files, &sensors_config_files_count, \
	&sensors_config_files_max, sizeof(char *))

extern sensors_chip *sensors_config_chips;
extern int sensors_config_chips_count;
extern int sensors_config_chips_subst;
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 bus numbers
   in the chips lists */
int sensors_substitute_busses(void);


/* Parse a bus id into its components. Returns 0 on success, 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 */