logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

libacpi - general purpose library for ACPI

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.

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. :)

                                                     LIBACPI                                          libacpi(3)

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(intnum)read_acpi_zone(intnum,global_t*globals);read_acpi_fan(intnum)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_tfandata
       struct battery_tinformationfoundaboutbattery
       struct thermal_tinformationaboutthermalzone
       struct adapter_tinformationaboutacadapter
       struct global_tglobalacpistructureFunctions
       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)

   Variablesbattery_tbatteries [MAX_ITEMS]
       thermal_tthermals [MAX_ITEMS]
       fan_tfans [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.

Enumeration Type Documentation

possiblefunctionreturnvaluesEnumerator: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

   enumbatt_state_tEnumerator: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

   enumcharge_state_tEnumerator: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

   enumfan_state_t
       fan states

       Enumerator:F_ON   fan is on

       F_OFF  fan is off

       F_ERR  some error occurred with this fan

   enumpower_state_tEnumerator:P_AC   if computer runs on AC

       P_BATT if computer runs on battery

       P_ERR  no information can be found

   enumthermal_mode_tEnumerator: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

   enumthermal_state_tEnumerator: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

Function Documentation

intcheck_acpi_support(void)
       Checks if the system does support ACPI or not.

       Returns:
           SUCCESS if the system supports ACPI or, NOT_SUPPORTED.

   intinit_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 structure

           Returns:
               SUCCESS  if  everything  is  ok,  NOT_SUPPORTED  if  no  information  can  be found, ALLOC_ERR on
               allocation errors.

   intinit_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 structure

           Returns:
               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.

   intinit_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 structure

           Returns:
               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.

   intinit_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 structure

           Returns:
               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.

   voidread_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().

   intread_acpi_batt(constintnum)
       Gathers all information of a given battery and filling a struct with it.

       Parameters:num number of battery

           Returns:
               SUCCESS if everything is ok or ITEM_EXCEED if there is not battery num.

   intread_acpi_fan(constintnum)
       Gathers all information about given fan and sets the corresponding values in a struct.

       Parameters:num number for the fan to read

           Returns:
               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.

   intread_acpi_zone(constintnum,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 zone

           Returns:
               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.

Homepage

Name

libacpi - general purpose library for ACPI

Synopsis

#include<libacpi.h>

Variable Documentation

battery_tbatteries[MAX_ITEMS]
       Array for existing batteries, loop until globals->battery_count

   fan_tfans[MAX_ITEMS]
       Array for existing fans, loop until globals->fan_count

   thermal_tthermals[MAX_ITEMS]
       Array for existing thermal zones, loop until globals->thermal_count

See Also