Blame lib/data.h

Packit 53d5b6
/*
Packit 53d5b6
    data.h - Part of libsensors, a Linux library for reading sensor data.
Packit 53d5b6
    Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl>
Packit 53d5b6
    Copyright (C) 2007-2010   Jean Delvare <jdelvare@suse.de>
Packit 53d5b6
Packit 53d5b6
    This library is free software; you can redistribute it and/or
Packit 53d5b6
    modify it under the terms of the GNU Lesser General Public
Packit 53d5b6
    License as published by the Free Software Foundation; either
Packit 53d5b6
    version 2.1 of the License, or (at your option) any later version.
Packit 53d5b6
Packit 53d5b6
    This library is distributed in the hope that it will be useful,
Packit 53d5b6
    but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 53d5b6
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 53d5b6
    GNU Lesser General Public License for more details.
Packit 53d5b6
Packit 53d5b6
    You should have received a copy of the GNU General Public License
Packit 53d5b6
    along with this program; if not, write to the Free Software
Packit 53d5b6
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
Packit 53d5b6
    MA 02110-1301 USA.
Packit 53d5b6
*/
Packit 53d5b6
Packit 53d5b6
#ifndef LIB_SENSORS_DATA_H
Packit 53d5b6
#define LIB_SENSORS_DATA_H
Packit 53d5b6
Packit 53d5b6
#include "sensors.h"
Packit 53d5b6
#include "general.h"
Packit 53d5b6
Packit 53d5b6
/* This header file contains all kinds of data structures which are used
Packit 53d5b6
   for the representation of the config file data and the sensors
Packit 53d5b6
   data. */
Packit 53d5b6
Packit 53d5b6
/* Kinds of expression operators recognized */
Packit 53d5b6
typedef enum sensors_operation {
Packit 53d5b6
	sensors_add, sensors_sub, sensors_multiply, sensors_divide,
Packit 53d5b6
	sensors_negate, sensors_exp, sensors_log,
Packit 53d5b6
} sensors_operation;
Packit 53d5b6
Packit 53d5b6
/* An expression can have several forms */
Packit 53d5b6
typedef enum sensors_expr_kind {
Packit 53d5b6
	sensors_kind_val, sensors_kind_source, sensors_kind_var,
Packit 53d5b6
	sensors_kind_sub
Packit 53d5b6
} sensors_expr_kind;
Packit 53d5b6
Packit 53d5b6
/* An expression. It is either a floating point value, a variable name,
Packit 53d5b6
   an operation on subexpressions, or the special value 'sub' } */
Packit 53d5b6
struct sensors_expr;
Packit 53d5b6
Packit 53d5b6
typedef struct sensors_subexpr {
Packit 53d5b6
	sensors_operation op;
Packit 53d5b6
	struct sensors_expr *sub1;
Packit 53d5b6
	struct sensors_expr *sub2;
Packit 53d5b6
} sensors_subexpr;
Packit 53d5b6
Packit 53d5b6
typedef struct sensors_expr {
Packit 53d5b6
	sensors_expr_kind kind;
Packit 53d5b6
	union {
Packit 53d5b6
		double val;
Packit 53d5b6
		char *var;
Packit 53d5b6
		sensors_subexpr subexpr;
Packit 53d5b6
	} data;
Packit 53d5b6
} sensors_expr;
Packit 53d5b6
Packit 53d5b6
/* Config file line reference */
Packit 53d5b6
typedef struct sensors_config_line {
Packit 53d5b6
	const char *filename;
Packit 53d5b6
	int lineno;
Packit 53d5b6
} sensors_config_line;
Packit 53d5b6
Packit 53d5b6
/* Config file label declaration: a feature name, combined with the label
Packit 53d5b6
   value */
Packit 53d5b6
typedef struct sensors_label {
Packit 53d5b6
	char *name;
Packit 53d5b6
	char *value;
Packit 53d5b6
	sensors_config_line line;
Packit 53d5b6
} sensors_label;
Packit 53d5b6
Packit 53d5b6
/* Config file set declaration: a subfeature name, combined with an
Packit 53d5b6
   expression */
Packit 53d5b6
typedef struct sensors_set {
Packit 53d5b6
	char *name;
Packit 53d5b6
	sensors_expr *value;
Packit 53d5b6
	sensors_config_line line;
Packit 53d5b6
} sensors_set;
Packit 53d5b6
Packit 53d5b6
/* Config file compute declaration: a feature name, combined with two
Packit 53d5b6
   expressions */
Packit 53d5b6
typedef struct sensors_compute {
Packit 53d5b6
	char *name;
Packit 53d5b6
	sensors_expr *from_proc;
Packit 53d5b6
	sensors_expr *to_proc;
Packit 53d5b6
	sensors_config_line line;
Packit 53d5b6
} sensors_compute;
Packit 53d5b6
Packit 53d5b6
/* Config file ignore declaration: a feature name */
Packit 53d5b6
typedef struct sensors_ignore {
Packit 53d5b6
	char *name;
Packit 53d5b6
	sensors_config_line line;
Packit 53d5b6
} sensors_ignore;
Packit 53d5b6
Packit 53d5b6
/* A list of chip names, used to represent a config file chips declaration */
Packit 53d5b6
typedef struct sensors_chip_name_list {
Packit 53d5b6
	sensors_chip_name *fits;
Packit 53d5b6
	int fits_count;
Packit 53d5b6
	int fits_max;
Packit 53d5b6
} sensors_chip_name_list;
Packit 53d5b6
Packit 53d5b6
/* A config file chip block */
Packit 53d5b6
typedef struct sensors_chip {
Packit 53d5b6
	sensors_chip_name_list chips;
Packit 53d5b6
	sensors_label *labels;
Packit 53d5b6
	int labels_count;
Packit 53d5b6
	int labels_max;
Packit 53d5b6
	sensors_set *sets;
Packit 53d5b6
	int sets_count;
Packit 53d5b6
	int sets_max;
Packit 53d5b6
	sensors_compute *computes;
Packit 53d5b6
	int computes_count;
Packit 53d5b6
	int computes_max;
Packit 53d5b6
	sensors_ignore *ignores;
Packit 53d5b6
	int ignores_count;
Packit 53d5b6
	int ignores_max;
Packit 53d5b6
	sensors_config_line line;
Packit 53d5b6
} sensors_chip;
Packit 53d5b6
Packit 53d5b6
/* Config file bus declaration: the bus type and number, combined with adapter
Packit 53d5b6
   name */
Packit 53d5b6
typedef struct sensors_bus {
Packit 53d5b6
	char *adapter;
Packit 53d5b6
	sensors_bus_id bus;
Packit 53d5b6
	sensors_config_line line;
Packit 53d5b6
} sensors_bus;
Packit 53d5b6
Packit 53d5b6
/* Internal data about all features and subfeatures of a chip */
Packit 53d5b6
typedef struct sensors_chip_features {
Packit 53d5b6
	struct sensors_chip_name chip;
Packit 53d5b6
	struct sensors_feature *feature;
Packit 53d5b6
	struct sensors_subfeature *subfeature;
Packit 53d5b6
	int feature_count;
Packit 53d5b6
	int subfeature_count;
Packit 53d5b6
} sensors_chip_features;
Packit 53d5b6
Packit 53d5b6
extern char **sensors_config_files;
Packit 53d5b6
extern int sensors_config_files_count;
Packit 53d5b6
extern int sensors_config_files_max;
Packit 53d5b6
Packit 53d5b6
#define sensors_add_config_files(el) sensors_add_array_el( \
Packit 53d5b6
	(el), &sensors_config_files, &sensors_config_files_count, \
Packit 53d5b6
	&sensors_config_files_max, sizeof(char *))
Packit 53d5b6
Packit 53d5b6
extern sensors_chip *sensors_config_chips;
Packit 53d5b6
extern int sensors_config_chips_count;
Packit 53d5b6
extern int sensors_config_chips_subst;
Packit 53d5b6
extern int sensors_config_chips_max;
Packit 53d5b6
Packit 53d5b6
extern sensors_bus *sensors_config_busses;
Packit 53d5b6
extern int sensors_config_busses_count;
Packit 53d5b6
extern int sensors_config_busses_max;
Packit 53d5b6
Packit 53d5b6
extern sensors_chip_features *sensors_proc_chips;
Packit 53d5b6
extern int sensors_proc_chips_count;
Packit 53d5b6
extern int sensors_proc_chips_max;
Packit 53d5b6
Packit 53d5b6
#define sensors_add_proc_chips(el) sensors_add_array_el( \
Packit 53d5b6
	(el), &sensors_proc_chips, &sensors_proc_chips_count,\
Packit 53d5b6
	&sensors_proc_chips_max, sizeof(struct sensors_chip_features))
Packit 53d5b6
Packit 53d5b6
extern sensors_bus *sensors_proc_bus;
Packit 53d5b6
extern int sensors_proc_bus_count;
Packit 53d5b6
extern int sensors_proc_bus_max;
Packit 53d5b6
Packit 53d5b6
#define sensors_add_proc_bus(el) sensors_add_array_el( \
Packit 53d5b6
	(el), &sensors_proc_bus, &sensors_proc_bus_count,\
Packit 53d5b6
	&sensors_proc_bus_max, sizeof(struct sensors_bus))
Packit 53d5b6
Packit 53d5b6
/* Substitute configuration bus numbers with real-world bus numbers
Packit 53d5b6
   in the chips lists */
Packit 53d5b6
int sensors_substitute_busses(void);
Packit 53d5b6
Packit 53d5b6
Packit 53d5b6
/* Parse a bus id into its components. Returns 0 on success, a value from
Packit 53d5b6
   error.h on failure. */
Packit 53d5b6
int sensors_parse_bus_id(const char *name, sensors_bus_id *bus);
Packit 53d5b6
Packit 53d5b6
#endif /* def LIB_SENSORS_DATA_H */