Blame lib/sensors.h

Packit 53d5b6
/*
Packit 53d5b6
    sensors.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-2014   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_SENSORS_H
Packit 53d5b6
#define LIB_SENSORS_SENSORS_H
Packit 53d5b6
Packit 53d5b6
#include <stdio.h>
Packit 53d5b6
#include <limits.h>
Packit 53d5b6
Packit 53d5b6
/* Publicly accessible library functions */
Packit 53d5b6
Packit 53d5b6
/* libsensors API version define, first digit is the major version (changed
Packit 53d5b6
   when the API + ABI breaks), the third digit is incremented to track small
Packit 53d5b6
   API additions like new flags / enum values. The second digit is for tracking
Packit 53d5b6
   larger additions like new methods. */
Packit 53d5b6
#define SENSORS_API_VERSION		0x440
Packit 53d5b6
Packit 53d5b6
#define SENSORS_CHIP_NAME_PREFIX_ANY	NULL
Packit 53d5b6
#define SENSORS_CHIP_NAME_ADDR_ANY	(-1)
Packit 53d5b6
Packit 53d5b6
#define SENSORS_BUS_TYPE_ANY		(-1)
Packit 53d5b6
#define SENSORS_BUS_TYPE_I2C		0
Packit 53d5b6
#define SENSORS_BUS_TYPE_ISA		1
Packit 53d5b6
#define SENSORS_BUS_TYPE_PCI		2
Packit 53d5b6
#define SENSORS_BUS_TYPE_SPI		3
Packit 53d5b6
#define SENSORS_BUS_TYPE_VIRTUAL	4
Packit 53d5b6
#define SENSORS_BUS_TYPE_ACPI		5
Packit 53d5b6
#define SENSORS_BUS_TYPE_HID		6
Packit 53d5b6
#define SENSORS_BUS_TYPE_MDIO		7
Packit 53d5b6
#define SENSORS_BUS_NR_ANY		(-1)
Packit 53d5b6
#define SENSORS_BUS_NR_IGNORE		(-2)
Packit 53d5b6
Packit 53d5b6
#ifdef __cplusplus
Packit 53d5b6
extern "C" {
Packit 53d5b6
#endif /* __cplusplus */
Packit 53d5b6
Packit 53d5b6
extern const char *libsensors_version;
Packit 53d5b6
Packit 53d5b6
typedef struct sensors_bus_id {
Packit 53d5b6
	short type;
Packit 53d5b6
	short nr;
Packit 53d5b6
} sensors_bus_id;
Packit 53d5b6
Packit 53d5b6
/* A chip name is encoded in this structure */
Packit 53d5b6
typedef struct sensors_chip_name {
Packit 53d5b6
	char *prefix;
Packit 53d5b6
	sensors_bus_id bus;
Packit 53d5b6
	int addr;
Packit 53d5b6
	char *path;
Packit 53d5b6
} sensors_chip_name;
Packit 53d5b6
Packit 53d5b6
/* Load the configuration file and the detected chips list. If this
Packit 53d5b6
   returns a value unequal to zero, you are in trouble; you can not
Packit 53d5b6
   assume anything will be initialized properly. If you want to
Packit 53d5b6
   reload the configuration file, call sensors_cleanup() below before
Packit 53d5b6
   calling sensors_init() again. */
Packit 53d5b6
int sensors_init(FILE *input);
Packit 53d5b6
Packit 53d5b6
/* Clean-up function: You can't access anything after
Packit 53d5b6
   this, until the next sensors_init() call! */
Packit 53d5b6
void sensors_cleanup(void);
Packit 53d5b6
Packit 53d5b6
/* Parse a chip name to the internal representation. Return 0 on success, <0
Packit 53d5b6
   on error. */
Packit 53d5b6
int sensors_parse_chip_name(const char *orig_name, sensors_chip_name *res);
Packit 53d5b6
Packit 53d5b6
/* Free memory allocated for the internal representation of a chip name. */
Packit 53d5b6
void sensors_free_chip_name(sensors_chip_name *chip);
Packit 53d5b6
Packit 53d5b6
/* Print a chip name from its internal representation. Note that chip should
Packit 53d5b6
   not contain wildcard values! Return the number of characters printed on
Packit 53d5b6
   success (same as snprintf), <0 on error. */
Packit 53d5b6
int sensors_snprintf_chip_name(char *str, size_t size,
Packit 53d5b6
			       const sensors_chip_name *chip);
Packit 53d5b6
Packit 53d5b6
/* This function returns the adapter name of a bus,
Packit 53d5b6
   as used within the sensors_chip_name structure. If it could not be found,
Packit 53d5b6
   it returns NULL */
Packit 53d5b6
const char *sensors_get_adapter_name(const sensors_bus_id *bus);
Packit 53d5b6
Packit 53d5b6
typedef struct sensors_feature sensors_feature;
Packit 53d5b6
Packit 53d5b6
/* Look up the label for a given feature. Note that chip should not
Packit 53d5b6
   contain wildcard values! The returned string is newly allocated (free it
Packit 53d5b6
   yourself). On failure, NULL is returned.
Packit 53d5b6
   If no label exists for this feature, its name is returned itself. */
Packit 53d5b6
char *sensors_get_label(const sensors_chip_name *name,
Packit 53d5b6
			const sensors_feature *feature);
Packit 53d5b6
Packit 53d5b6
/* Read the value of a subfeature of a certain chip. Note that chip should not
Packit 53d5b6
   contain wildcard values! This function will return 0 on success, and <0
Packit 53d5b6
   on failure.  */
Packit 53d5b6
int sensors_get_value(const sensors_chip_name *name, int subfeat_nr,
Packit 53d5b6
		      double *value);
Packit 53d5b6
Packit 53d5b6
/* Set the value of a subfeature of a certain chip. Note that chip should not
Packit 53d5b6
   contain wildcard values! This function will return 0 on success, and <0
Packit 53d5b6
   on failure. */
Packit 53d5b6
int sensors_set_value(const sensors_chip_name *name, int subfeat_nr,
Packit 53d5b6
		      double value);
Packit 53d5b6
Packit 53d5b6
/* Execute all set statements for this particular chip. The chip may contain
Packit 53d5b6
   wildcards!  This function will return 0 on success, and <0 on failure. */
Packit 53d5b6
int sensors_do_chip_sets(const sensors_chip_name *name);
Packit 53d5b6
Packit 53d5b6
/* This function returns all detected chips that match a given chip name,
Packit 53d5b6
   one by one. If no chip name is provided, all detected chips are returned.
Packit 53d5b6
   To start at the beginning of the list, use 0 for nr; NULL is returned if
Packit 53d5b6
   we are at the end of the list. Do not try to change these chip names, as
Packit 53d5b6
   they point to internal structures! */
Packit 53d5b6
const sensors_chip_name *sensors_get_detected_chips(const sensors_chip_name
Packit 53d5b6
						    *match, int *nr);
Packit 53d5b6
Packit 53d5b6
/* These defines are used in the flags field of sensors_subfeature */
Packit 53d5b6
#define SENSORS_MODE_R			1
Packit 53d5b6
#define SENSORS_MODE_W			2
Packit 53d5b6
#define SENSORS_COMPUTE_MAPPING		4
Packit 53d5b6
Packit 53d5b6
typedef enum sensors_feature_type {
Packit 53d5b6
	SENSORS_FEATURE_IN		= 0x00,
Packit 53d5b6
	SENSORS_FEATURE_FAN		= 0x01,
Packit 53d5b6
	SENSORS_FEATURE_TEMP		= 0x02,
Packit 53d5b6
	SENSORS_FEATURE_POWER		= 0x03,
Packit 53d5b6
	SENSORS_FEATURE_ENERGY		= 0x04,
Packit 53d5b6
	SENSORS_FEATURE_CURR		= 0x05,
Packit 53d5b6
	SENSORS_FEATURE_HUMIDITY	= 0x06,
Packit 53d5b6
	SENSORS_FEATURE_MAX_MAIN,
Packit 53d5b6
	SENSORS_FEATURE_VID		= 0x10,
Packit 53d5b6
	SENSORS_FEATURE_INTRUSION	= 0x11,
Packit 53d5b6
	SENSORS_FEATURE_MAX_OTHER,
Packit 53d5b6
	SENSORS_FEATURE_BEEP_ENABLE	= 0x18,
Packit 53d5b6
	SENSORS_FEATURE_MAX,
Packit 53d5b6
	SENSORS_FEATURE_UNKNOWN		= INT_MAX,
Packit 53d5b6
} sensors_feature_type;
Packit 53d5b6
Packit 53d5b6
/* All the sensor types (in, fan, temp, vid) are a multiple of 0x100 apart,
Packit 53d5b6
   and sensor subfeatures which have no compute mapping have bit 7 set. */
Packit 53d5b6
typedef enum sensors_subfeature_type {
Packit 53d5b6
	SENSORS_SUBFEATURE_IN_INPUT = SENSORS_FEATURE_IN << 8,
Packit 53d5b6
	SENSORS_SUBFEATURE_IN_MIN,
Packit 53d5b6
	SENSORS_SUBFEATURE_IN_MAX,
Packit 53d5b6
	SENSORS_SUBFEATURE_IN_LCRIT,
Packit 53d5b6
	SENSORS_SUBFEATURE_IN_CRIT,
Packit 53d5b6
	SENSORS_SUBFEATURE_IN_AVERAGE,
Packit 53d5b6
	SENSORS_SUBFEATURE_IN_LOWEST,
Packit 53d5b6
	SENSORS_SUBFEATURE_IN_HIGHEST,
Packit 53d5b6
	SENSORS_SUBFEATURE_IN_ALARM = (SENSORS_FEATURE_IN << 8) | 0x80,
Packit 53d5b6
	SENSORS_SUBFEATURE_IN_MIN_ALARM,
Packit 53d5b6
	SENSORS_SUBFEATURE_IN_MAX_ALARM,
Packit 53d5b6
	SENSORS_SUBFEATURE_IN_BEEP,
Packit 53d5b6
	SENSORS_SUBFEATURE_IN_LCRIT_ALARM,
Packit 53d5b6
	SENSORS_SUBFEATURE_IN_CRIT_ALARM,
Packit 53d5b6
Packit 53d5b6
	SENSORS_SUBFEATURE_FAN_INPUT = SENSORS_FEATURE_FAN << 8,
Packit 53d5b6
	SENSORS_SUBFEATURE_FAN_MIN,
Packit 53d5b6
	SENSORS_SUBFEATURE_FAN_MAX,
Packit 53d5b6
	SENSORS_SUBFEATURE_FAN_ALARM = (SENSORS_FEATURE_FAN << 8) | 0x80,
Packit 53d5b6
	SENSORS_SUBFEATURE_FAN_FAULT,
Packit 53d5b6
	SENSORS_SUBFEATURE_FAN_DIV,
Packit 53d5b6
	SENSORS_SUBFEATURE_FAN_BEEP,
Packit 53d5b6
	SENSORS_SUBFEATURE_FAN_PULSES,
Packit 53d5b6
	SENSORS_SUBFEATURE_FAN_MIN_ALARM,
Packit 53d5b6
	SENSORS_SUBFEATURE_FAN_MAX_ALARM,
Packit 53d5b6
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_INPUT = SENSORS_FEATURE_TEMP << 8,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_MAX,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_MAX_HYST,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_MIN,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_CRIT,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_CRIT_HYST,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_LCRIT,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_EMERGENCY,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_EMERGENCY_HYST,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_LOWEST,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_HIGHEST,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_MIN_HYST,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_LCRIT_HYST,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_ALARM = (SENSORS_FEATURE_TEMP << 8) | 0x80,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_MAX_ALARM,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_MIN_ALARM,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_CRIT_ALARM,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_FAULT,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_TYPE,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_OFFSET,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_BEEP,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_EMERGENCY_ALARM,
Packit 53d5b6
	SENSORS_SUBFEATURE_TEMP_LCRIT_ALARM,
Packit 53d5b6
Packit 53d5b6
	SENSORS_SUBFEATURE_POWER_AVERAGE = SENSORS_FEATURE_POWER << 8,
Packit 53d5b6
	SENSORS_SUBFEATURE_POWER_AVERAGE_HIGHEST,
Packit 53d5b6
	SENSORS_SUBFEATURE_POWER_AVERAGE_LOWEST,
Packit 53d5b6
	SENSORS_SUBFEATURE_POWER_INPUT,
Packit 53d5b6
	SENSORS_SUBFEATURE_POWER_INPUT_HIGHEST,
Packit 53d5b6
	SENSORS_SUBFEATURE_POWER_INPUT_LOWEST,
Packit 53d5b6
	SENSORS_SUBFEATURE_POWER_CAP,
Packit 53d5b6
	SENSORS_SUBFEATURE_POWER_CAP_HYST,
Packit 53d5b6
	SENSORS_SUBFEATURE_POWER_MAX,
Packit 53d5b6
	SENSORS_SUBFEATURE_POWER_CRIT,
Packit 53d5b6
	SENSORS_SUBFEATURE_POWER_AVERAGE_INTERVAL = (SENSORS_FEATURE_POWER << 8) | 0x80,
Packit 53d5b6
	SENSORS_SUBFEATURE_POWER_ALARM,
Packit 53d5b6
	SENSORS_SUBFEATURE_POWER_CAP_ALARM,
Packit 53d5b6
	SENSORS_SUBFEATURE_POWER_MAX_ALARM,
Packit 53d5b6
	SENSORS_SUBFEATURE_POWER_CRIT_ALARM,
Packit 53d5b6
Packit 53d5b6
	SENSORS_SUBFEATURE_ENERGY_INPUT = SENSORS_FEATURE_ENERGY << 8,
Packit 53d5b6
Packit 53d5b6
	SENSORS_SUBFEATURE_CURR_INPUT = SENSORS_FEATURE_CURR << 8,
Packit 53d5b6
	SENSORS_SUBFEATURE_CURR_MIN,
Packit 53d5b6
	SENSORS_SUBFEATURE_CURR_MAX,
Packit 53d5b6
	SENSORS_SUBFEATURE_CURR_LCRIT,
Packit 53d5b6
	SENSORS_SUBFEATURE_CURR_CRIT,
Packit 53d5b6
	SENSORS_SUBFEATURE_CURR_AVERAGE,
Packit 53d5b6
	SENSORS_SUBFEATURE_CURR_LOWEST,
Packit 53d5b6
	SENSORS_SUBFEATURE_CURR_HIGHEST,
Packit 53d5b6
	SENSORS_SUBFEATURE_CURR_ALARM = (SENSORS_FEATURE_CURR << 8) | 0x80,
Packit 53d5b6
	SENSORS_SUBFEATURE_CURR_MIN_ALARM,
Packit 53d5b6
	SENSORS_SUBFEATURE_CURR_MAX_ALARM,
Packit 53d5b6
	SENSORS_SUBFEATURE_CURR_BEEP,
Packit 53d5b6
	SENSORS_SUBFEATURE_CURR_LCRIT_ALARM,
Packit 53d5b6
	SENSORS_SUBFEATURE_CURR_CRIT_ALARM,
Packit 53d5b6
Packit 53d5b6
	SENSORS_SUBFEATURE_HUMIDITY_INPUT = SENSORS_FEATURE_HUMIDITY << 8,
Packit 53d5b6
Packit 53d5b6
	SENSORS_SUBFEATURE_VID = SENSORS_FEATURE_VID << 8,
Packit 53d5b6
Packit 53d5b6
	SENSORS_SUBFEATURE_INTRUSION_ALARM = SENSORS_FEATURE_INTRUSION << 8,
Packit 53d5b6
	SENSORS_SUBFEATURE_INTRUSION_BEEP,
Packit 53d5b6
Packit 53d5b6
	SENSORS_SUBFEATURE_BEEP_ENABLE = SENSORS_FEATURE_BEEP_ENABLE << 8,
Packit 53d5b6
Packit 53d5b6
	SENSORS_SUBFEATURE_UNKNOWN = INT_MAX,
Packit 53d5b6
} sensors_subfeature_type;
Packit 53d5b6
Packit 53d5b6
/* Data about a single chip feature (or category leader) */
Packit 53d5b6
struct sensors_feature {
Packit 53d5b6
	char *name;
Packit 53d5b6
	int number;
Packit 53d5b6
	sensors_feature_type type;
Packit 53d5b6
	/* Members below are for libsensors internal use only */
Packit 53d5b6
	int first_subfeature;
Packit 53d5b6
	int padding1;
Packit 53d5b6
};
Packit 53d5b6
Packit 53d5b6
/* Data about a single chip subfeature:
Packit 53d5b6
   name is the string name used to refer to this subfeature (in config files)
Packit 53d5b6
   number is the internal subfeature number, used in many functions to refer
Packit 53d5b6
     to this subfeature
Packit 53d5b6
   type is the subfeature type
Packit 53d5b6
   mapping is the number of a main feature this subfeature belongs to
Packit 53d5b6
     (for example subfeatures fan1_input, fan1_min, fan1_div and fan1_alarm
Packit 53d5b6
      are mapped to main feature fan1)
Packit 53d5b6
   flags is a bitfield, its value is a combination of SENSORS_MODE_R (readable),
Packit 53d5b6
     SENSORS_MODE_W (writable) and SENSORS_COMPUTE_MAPPING (affected by the
Packit 53d5b6
     computation rules of the main feature) */
Packit 53d5b6
typedef struct sensors_subfeature {
Packit 53d5b6
	char *name;
Packit 53d5b6
	int number;
Packit 53d5b6
	sensors_subfeature_type type;
Packit 53d5b6
	int mapping;
Packit 53d5b6
	unsigned int flags;
Packit 53d5b6
} sensors_subfeature;
Packit 53d5b6
Packit 53d5b6
/* This returns all main features of a specific chip. nr is an internally
Packit 53d5b6
   used variable. Set it to zero to start at the begin of the list. If no
Packit 53d5b6
   more features are found NULL is returned.
Packit 53d5b6
   Do not try to change the returned structure; you will corrupt internal
Packit 53d5b6
   data structures. */
Packit 53d5b6
const sensors_feature *
Packit 53d5b6
sensors_get_features(const sensors_chip_name *name, int *nr);
Packit 53d5b6
Packit 53d5b6
/* This returns all subfeatures of a given main feature. nr is an internally
Packit 53d5b6
   used variable. Set it to zero to start at the begin of the list. If no
Packit 53d5b6
   more features are found NULL is returned.
Packit 53d5b6
   Do not try to change the returned structure; you will corrupt internal
Packit 53d5b6
   data structures. */
Packit 53d5b6
const sensors_subfeature *
Packit 53d5b6
sensors_get_all_subfeatures(const sensors_chip_name *name,
Packit 53d5b6
			    const sensors_feature *feature, int *nr);
Packit 53d5b6
Packit 53d5b6
/* This returns the subfeature of the given type for a given main feature,
Packit 53d5b6
   if it exists, NULL otherwise.
Packit 53d5b6
   Do not try to change the returned structure; you will corrupt internal
Packit 53d5b6
   data structures. */
Packit 53d5b6
const sensors_subfeature *
Packit 53d5b6
sensors_get_subfeature(const sensors_chip_name *name,
Packit 53d5b6
		       const sensors_feature *feature,
Packit 53d5b6
		       sensors_subfeature_type type);
Packit 53d5b6
Packit 53d5b6
#ifdef __cplusplus
Packit 53d5b6
}
Packit 53d5b6
#endif /* __cplusplus */
Packit 53d5b6
Packit 53d5b6
#endif /* def LIB_SENSORS_SENSORS_H */