libacpi(3)
NAME
libacpi - general purpose library for ACPI
SYNOPSIS
#include <libacpi.h>
DESCRIPTION
The libacpi library routines provide its users a method of reading ACPI
values in a comfortable way. This includes battery information, fan
states, thermal zones and AC states.
A program using these routines must be linked with -lacpi option.
- To initialize this functionality you have to first allocate space for a
global_t structure
- global_t *global = malloc (sizeof (global_t));
- Now use the check_acpi_support() function to check if the system actually supports ACPI. In case it does the function will return SUCCESS or NOT_SUPPORTED on failure.
- Now you can use the following functions to initialize the values you get from the ACPI interface:
init_acpi_batt(global);
init_acpi_acadapt(global);
init_acpi_fan(global);
init_acpi_thermal(global);- To know if some of the features is not supported it is a good idea to store the return values in some variable.
- If you want to read non-static values the ACPI interface provides (for example battery percentage), use the following functions to do this:
read_acpi_batt(int num) read_acpi_zone(int num, global_t *globals);
read_acpi_fan(int num)
read_acpi_acstate(global_t *globals);- Since you can have more than one battery, fan and thermal zone, num is the number you want to read, for example in a loop.
thermal_t *tp;
....
for(i=0; i<global->thermal_count; i++){read_acpi_zone(i, global);
tp = &thermals[i];- ...
} - Structures
- struct fan_t
fan data
- struct battery_t
information found about battery
- struct thermal_t
information about thermal zone
- struct adapter_t
information about ac adapater
- struct global_t
global acpi structure
- Functions
- int init_acpi_batt (global_t *globals)
int init_acpi_acadapt (global_t *globals)
int init_acpi_thermal (global_t *globals)
int init_acpi_fan (global_t *globals)
int check_acpi_support (void)
int read_acpi_batt (const int num)
void read_acpi_acstate (global_t *globals) int read_acpi_zone (const int num, global_t *globals) int read_acpi_fan (const int num) - Variables
- battery_t batteries [MAX_ITEMS]
thermal_t thermals [MAX_ITEMS]
fan_t fans [MAX_ITEMS] - Enumerations
- enum { ITEM_EXCEED = -5, DISABLED = -4, NOT_PRESENT = -3, ALLOC_ERR
= -2, NOT_SUPPORTED = -1, SUCCESS }
- enum power_state_t { P_AC, P_BATT, P_ERR }
enum thermal_state_t { T_CRIT, T_HOT, T_PASS, T_ACT, T_OK, T_ERR }
enum charge_state_t { C_CHARGE, C_DISCHARGE, C_CHARGED, C_NOINFO, C_ERR
}
- enum batt_state_t { B_HIGH, B_MED, B_LOW, B_CRIT, B_HARD_CRIT, B_ERR } enum thermal_mode_t { CO_ACT, CO_PASS, CO_CRIT, CO_ERR } enum fan_state_t { F_ON, F_OFF, F_ERR }
Detailed Description
Now follows a more detailed description of functions, structures and
enums.
Definition in file libacpi.h.
Function Documentation
- int check_acpi_support (void)
- Checks if the system does support ACPI or not.
- Returns:
SUCCESS if the system supports ACPI or, NOT_SUPPORTED.
- int init_acpi_acadapt (global_t * globals)
- Finds existing ac adapter and fills the adapt (in globa struct) structure with the paths of the important files to parse.
- Parameters:
globals pointer to global acpi structureReturns: SUCCESS if everything is ok, NOT_SUPPORTED if no information can be found, ALLOC_ERR on allocation errors.
- int init_acpi_batt (global_t * globals)
- Finds existing batteries and fills the corresponding batteries structures with the paths of the important files to parse.
- Parameters:
globals pointer to global acpi structureReturns: SUCCESS if everything is ok, NOT_SUPPORTED if no information can be found, ALLOC_ERR on allocation errors and ITEM_EXCEED if there are more batteries found than MAX_ITEMS, this should never happen.
- int init_acpi_fan (global_t * globals)
- Finds existing fans and fills corresponding fan structures with the paths of the important files to parse for fan information.
- Parameters:
globals pointer to global acpi structureReturns: SUCCESS if everything is ok, NOT_SUPPORTED if no information can be found, ALLOC_ERR on allocation errors and ITEM_EXCEED if there are more fans found than MAX_ITEMS, this should never happen.
- int init_acpi_thermal (global_t * globals)
- Finds existing thermal zones and fills corresponding thermal structures with the paths of the important files to parse for thermal information.
- Parameters:
globals pointer to global acpi structureReturns: SUCCESS if everything is ok, NOT_SUPPORTED if no information can be found, ALLOC_ERR on allocation errors and ITEM_EXCEED if there are more thermal zones found than MAX_ITEMS, this should never happen.
- void read_acpi_acstate (global_t * globals)
- Looks up if the ac adapter is plugged in or not and sets the values in a struct
- Parameters:
globals pointer to the global acpi structure
- Referenced by init_acpi_acadapt().
- int read_acpi_batt (const int num)
- Gathers all information of a given battery and filling a struct with it.
- Parameters:
num number of batteryReturns: SUCCESS if everything is ok or ITEM_EXCEED if there is not battery num.
- int read_acpi_fan (const int num)
- Gathers all information about given fan and sets the corresponding values in a struct.
- Parameters:
num number for the fan to readReturns: SUCCESS if everything is ok, ITEM_EXCEED if there is not fan num or NOT_SUPPORTED if the values can't be read. This should not happen if the init function returned SUCCESS if the ACPI implementation.
- int read_acpi_zone (const int num, global_t * globals)
- Gathers all information of a given thermal zone and sets the corresponding values in a struct.
- Parameters:
num zone
globals pointer to global acpi struct, needed if there is just one zoneReturns: SUCCESS if everything is ok, ITEM_EXCEED if there is not thermal zone num or NOT_SUPPORTED if the values can't be read. This should not happen if the init function returned SUCCESS if the ACPI implementation.
Enumeration Type Documentation
- possible function return values
- Enumerator:
- ITEM_EXCEED
maximum item count reached
- DISABLED
features is disabled
- NOT_PRESENT
something is not present
- ALLOC_ERR
an error occurred while allocating space
- NOT_SUPPORTED
a feature is not supported
- SUCCESS
everything was fine
- enum batt_state_t
- Enumerator:
- B_HIGH remaining battery life is high
- B_MED remaining battery life is medium
- B_LOW remaining battery life is low
- B_CRIT remaining battery life is critical
- B_HARD_CRIT
remaining battery life is hard critical, you have a few minutes to charge
- B_ERR some error occurred while reading the battery state
- enum charge_state_t
- Enumerator:
- C_CHARGE
battery is currently charging
- C_DISCHARGE
battery is currently discharging
- C_CHARGED
battery is charged
- C_NOINFO
hardware doesn't give information about the state
- C_ERR some error occurred while reading the charge state
- enum fan_state_t
- fan states
- Enumerator:
- F_ON fan is on
- F_OFF fan is off
- F_ERR some error occurred with this fan
- enum power_state_t
- Enumerator:
- P_AC if computer runs on AC
- P_BATT if computer runs on battery
- P_ERR no information can be found
- enum thermal_mode_t
- Enumerator:
- CO_ACT fans will be turned after the temperature passes a critical
point
- CO_PASS
devices will be put in a lower power state after a critical point
- CO_CRIT
system goes into suspend to disk if possible after a critical temperature
- CO_ERR some error occurred while reading the cooling mode
- enum thermal_state_t
- Enumerator:
- T_CRIT zone reports critical temperature, will cause system to go to S4
- T_HOT zone reports high temperature, will cause system to shutdown
immediately
- T_PASS zone is on passive cooling
- T_ACT zone is on active cooling, more power consumption
- T_OK zone is ok
- T_ERR some error occurred while reading the state of the zone
Variable Documentation
- battery_t batteries[MAX_ITEMS]
- Array for existing batteries, loop until globals->battery_count
- fan_t fans[MAX_ITEMS]
- Array for existing fans, loop until globals->fan_count
- thermal_t thermals[MAX_ITEMS]
- Array for existing thermal zones, loop until globals->thermal_count
Additional information
The package ships a test-libacpi.c file which should be pretty self
explanatory. Also have a look into libacpi.h file and the doxygen documentation in the doc/ directory.
Homepage
See http://www.ngolde.de/libacpi.html
Author
- Write to nico (at) ngolde (dot) de for suggestions, hardware donations (very welcome, my notebook doesn't support all features and I could need a second battery), questions, fixes, bug reports, thanks, etc. :)