D25018: Move ACPI battery information from /proc/acpi to /sys

Arjen Hiemstra noreply at phabricator.kde.org
Wed Nov 6 11:09:50 GMT 2019


ahiemstra added a comment.


  You are right, sorry. I was confusing /sys with /proc, which does have a lot of "put all of this information in a single file" stuff going on. It would still be nice if there was a better way of getting this information, but that is not related to this change. So then I mostly have style nitpicks as comment.

INLINE COMMENTS

> acpi.c:96
>  
> -  if ( ( d = opendir( "/proc/acpi/battery" ) ) == NULL ) {
> -	AcpiBatteryNum = -1;
> -	AcpiBatteryOk = 0;
> -	return;
> -  } else {
> -	AcpiBatteryNum = 0;
> -	AcpiBatteryOk = 1;
> -    while ( ( de = readdir( d ) ) )
> -      if ( ( strcmp( de->d_name, "." ) != 0 ) && ( strcmp( de->d_name, ".." ) != 0 ) ) {
> -		  strncpy( AcpiBatteryNames[ AcpiBatteryNum ], de->d_name, 8 );
> -		  snprintf( s, sizeof( s ), "acpi/battery/%d/batterycharge", AcpiBatteryNum );
> -		  registerMonitor( s, "integer", printAcpiBatFill, printAcpiBatFillInfo, sm );
> -		  snprintf( s, sizeof( s ), "acpi/battery/%d/batteryusage", AcpiBatteryNum );
> -		  registerMonitor( s, "integer", printAcpiBatUsage, printAcpiBatUsageInfo, sm);
> -		  AcpiBatteryCharge[ AcpiBatteryNum ] = 0;
> -		  AcpiBatteryNum++;
> -	  }
> +  d = opendir("/sys/class/power_supply/");
> +  if (d != NULL) {

Can you clean up the indentation of this function? It should use 4 spaces for indentation.

> acpi.c:112
>  
> -
> -int updateAcpiBattery( void )
> -{
> -  int i, fd;
> -  char s[ ACPIFILENAMELENGTHMAX ];
> -  size_t n;
> -  char AcpiBatInfoBuf[ ACPIBATTERYINFOBUFSIZE ];
> -  char AcpiBatStateBuf[ ACPIBATTERYSTATEBUFSIZE ];
> -  char *p;
> -  int AcpiBatCapacity = 1;
> -  int AcpiBatRemainingCapacity = 0;
> -
> -  if ( AcpiBatteryNum <= 0 )
> -    return -1;
> -
> -  for ( i = 0; i < AcpiBatteryNum; i++ ) {
> -    /* get total capacity */
> -    snprintf( s, sizeof( s ), "/proc/acpi/battery/%s/info", AcpiBatteryNames[ i ] );
> -    if ( ( fd = open( s, O_RDONLY ) ) < 0 ) {
> -      print_error( "Cannot open file \'%s\'!\n"
> -                   "Load the battery ACPI kernel module or\n"
> -                   "compile it into your kernel.\n", s );
> -      AcpiBatteryOk = 0;
> -      return -1;
> -    }
> -    if ( ( n = read( fd, AcpiBatInfoBuf, ACPIBATTERYINFOBUFSIZE - 1 ) ) ==
> -         ACPIBATTERYINFOBUFSIZE - 1 ) {
> -      log_error( "Internal buffer too small to read \'%s\'", s );
> -      close( fd );
> -      AcpiBatteryOk = 0;
> -      return -1;
> -    }
> -    close( fd );
> -    p = AcpiBatInfoBuf;
> -    if ( p && strstr(p, "ERROR: Unable to read battery") )
> -            return 0;  /* If we can't read the battery, reuse the last value */
> -    while ( ( p!= NULL ) && ( sscanf( p, "last full capacity: %d ",
> -                              &AcpiBatCapacity ) != 1 ) ) {
> -      p = strchr( p, '\n' );
> -      if ( p )
> -        p++;
> -    }
> -    /* get remaining capacity */
> -    snprintf( s, sizeof( s ), "/proc/acpi/battery/%s/state", AcpiBatteryNames[ i ] );
> -    if ( ( fd = open( s, O_RDONLY ) ) < 0 ) {
> -      print_error( "Cannot open file \'%s\'!\n"
> -                   "Load the battery ACPI kernel module or\n"
> -                   "compile it into your kernel.\n", s );
> -      AcpiBatteryOk = 0;
> -      return -1;
> +void printSysBatteryCharge(const char *cmd) {
> +    int zone = 0;

Braces on newline for function definitions please.

> acpi.c:151
> +    int state = 0;
> +    if (current > 0 && maximum > 0) {
> +        state = current * 100 / maximum;

I don't see why current needs to be >0 ? What if I have an empty battery?

> acpi.c:170
>  
> -void printAcpiBatUsage( const char* cmd)
> -{
> - int i;
> +void printSysBatteryRate(const char *cmd) {
> +    int zone = 0;

Braces on newline for function definitions please.

> acpi.c:328
>  
> -static int getSysFileValue(const char *group, int value, const char *file) {
> +static int getSysFileValue(const char *class, const char *group, int value, const char *file) {
>      static int shownError = 0;

Using `class` as name here seems a bit dangerous to me, if this code ever gets compiled with a C++ compiler it will trip over this name. Maybe use className instead?

> acpi.c:332
>      char input_buf[ 100 ];
> -    snprintf(th_file, sizeof(th_file), "/sys/class/thermal/%s%d/%s",group, value, file);
> +    snprintf(th_file, sizeof(th_file), "/sys/class/%s/%s%d/%s",class, group, value, file);
>      int fd = open(th_file, O_RDONLY);

Please add a space between , and class

REPOSITORY
  R106 KSysguard

REVISION DETAIL
  https://phabricator.kde.org/D25018

To: jjorge, davidedmundson, #plasma, ahiemstra
Cc: plasma-devel, LeGast00n, The-Feren-OS-Dev, jraleigh, fbampaloukas, GB_2, ragreen, ZrenBot, ngraham, alexeymin, himcesjf, lesliezhai, ali-mohamed, jensreuterberg, abetts, sebas, apol, ahiemstra, mart
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/plasma-devel/attachments/20191106/0f79ddb8/attachment-0001.html>


More information about the Plasma-devel mailing list