2021-02-18 22:25:36 +01:00
#include "fastfetch.h"
2021-03-03 21:03:12 +01:00
#include <dirent.h>
2021-04-15 18:59:26 +02:00
#define FF_BATTERY_MODULE_NAME "Battery"
#define FF_BATTERY_NUM_FORMAT_ARGS 5
2021-04-03 21:51:50 +02:00
2021-03-03 21:03:12 +01:00
static void printBattery ( FFinstance * instance , uint8_t index )
2021-02-18 22:25:36 +01:00
{
2021-03-21 16:52:17 +01:00
FF_STRBUF_CREATE ( manufactor );
2021-03-19 20:57:07 +01:00
char manufactorPath [ 42 ];
2021-04-03 11:39:59 +02:00
sprintf ( manufactorPath , "/sys/class/power_supply/BAT%hhu/manufacturer" , index );
2021-03-21 16:52:17 +01:00
ffGetFileContent ( manufactorPath , & manufactor );
2021-03-03 21:03:12 +01:00
2021-03-21 16:52:17 +01:00
FF_STRBUF_CREATE ( model );
2021-03-19 20:57:07 +01:00
char modelPath [ 40 ];
2021-04-03 11:39:59 +02:00
sprintf ( modelPath , "/sys/class/power_supply/BAT%hhu/model_name" , index );
2021-03-21 16:52:17 +01:00
ffGetFileContent ( modelPath , & model );
2021-03-03 21:03:12 +01:00
2021-03-21 16:52:17 +01:00
FF_STRBUF_CREATE ( technology );
2021-03-19 20:57:07 +01:00
char technologyPath [ 40 ];
2021-04-03 11:39:59 +02:00
sprintf ( technologyPath , "/sys/class/power_supply/BAT%hhu/technology" , index );
2021-03-21 16:52:17 +01:00
ffGetFileContent ( technologyPath , & technology );
2021-02-18 22:25:36 +01:00
2021-03-21 16:52:17 +01:00
FF_STRBUF_CREATE ( capacity );
2021-03-19 20:57:07 +01:00
char capacityPath [ 38 ];
2021-04-03 11:39:59 +02:00
sprintf ( capacityPath , "/sys/class/power_supply/BAT%hhu/capacity" , index );
2021-03-21 16:52:17 +01:00
ffGetFileContent ( capacityPath , & capacity );
2021-02-18 22:25:36 +01:00
2021-03-21 16:52:17 +01:00
FF_STRBUF_CREATE ( status );
2021-03-19 20:57:07 +01:00
char statusPath [ 36 ];
2021-04-03 11:39:59 +02:00
sprintf ( statusPath , "/sys/class/power_supply/BAT%hhu/status" , index );
2021-03-21 16:52:17 +01:00
ffGetFileContent ( statusPath , & status );
2021-03-03 21:03:12 +01:00
2021-04-15 18:59:26 +02:00
if ( manufactor . length == 0 && model . length == 0 && technology . length == 0 && capacity . length == 0 && status . length == 0 )
{
ffPrintError ( instance , FF_BATTERY_MODULE_NAME , index , & instance -> config . batteryKey , & instance -> config . batteryFormat , FF_BATTERY_NUM_FORMAT_ARGS , "No file in /sys/class/power_supply/BAT%hhu/ could be read or all battery options are disabled" , index );
2021-04-03 21:51:50 +02:00
return ;
2021-04-03 11:39:59 +02:00
}
2021-03-01 19:53:20 +01:00
2021-03-23 19:48:52 +01:00
if ( instance -> config . batteryFormat . length == 0 )
2021-03-04 20:49:12 +01:00
{
2021-03-27 15:39:56 +01:00
2021-04-15 18:59:26 +02:00
ffPrintLogoAndKey ( instance , FF_BATTERY_MODULE_NAME , index , & instance -> config . batteryKey );
2021-03-27 15:39:56 +01:00
2021-03-23 19:48:52 +01:00
if ( manufactor . length > 0 )
2021-03-21 16:52:17 +01:00
printf ( "%s " , manufactor . chars );
2021-03-01 19:53:20 +01:00
2021-03-23 19:48:52 +01:00
if ( model . length > 0 )
2021-04-03 23:25:01 +02:00
printf ( "%s " , model . chars );
2021-03-03 21:03:12 +01:00
2021-03-23 19:48:52 +01:00
if ( technology . length > 0 )
2021-03-21 16:52:17 +01:00
printf ( "(%s) " , technology . chars );
2021-02-18 22:25:36 +01:00
2021-03-23 19:48:52 +01:00
if ( capacity . length > 0 )
2021-03-19 20:57:07 +01:00
{
2021-03-21 16:52:17 +01:00
printf ( "[%s%%" , capacity . chars );
2021-03-27 18:14:19 +01:00
2021-03-23 19:48:52 +01:00
if ( status . length == 0 )
2021-03-19 20:57:07 +01:00
puts ( "]" );
else
2021-03-21 16:52:17 +01:00
printf ( "; %s] \n " , status . chars );
2021-03-19 20:57:07 +01:00
}
2021-03-01 19:53:20 +01:00
else
2021-03-19 20:57:07 +01:00
{
2021-03-23 19:48:52 +01:00
if ( status . length > 0 )
2021-03-21 16:52:17 +01:00
printf ( "[%s]" , status . chars );
2021-03-19 20:57:07 +01:00
else
putchar ( '\n' );
}
2021-02-19 16:23:41 +01:00
}
2021-03-01 19:53:20 +01:00
else
2021-02-19 16:23:41 +01:00
{
2021-04-15 18:59:26 +02:00
ffPrintFormatString ( instance , FF_BATTERY_MODULE_NAME , index , & instance -> config . batteryKey , & instance -> config . batteryFormat , NULL , FF_BATTERY_NUM_FORMAT_ARGS , ( FFformatarg []){
{ FF_FORMAT_ARG_TYPE_STRBUF , & manufactor },
{ FF_FORMAT_ARG_TYPE_STRBUF , & model },
{ FF_FORMAT_ARG_TYPE_STRBUF , & technology },
{ FF_FORMAT_ARG_TYPE_STRBUF , & capacity },
{ FF_FORMAT_ARG_TYPE_STRBUF , & status }
});
2021-02-19 16:23:41 +01:00
}
2021-03-21 16:52:17 +01:00
ffStrbufDestroy ( & manufactor );
ffStrbufDestroy ( & model );
ffStrbufDestroy ( & technology );
ffStrbufDestroy ( & capacity );
ffStrbufDestroy ( & status );
2021-03-03 21:03:12 +01:00
}
2021-02-18 22:25:36 +01:00
2021-04-15 18:59:26 +02:00
#define FF_BATTERY_MAX_INDEX 5
2021-03-03 21:03:12 +01:00
void ffPrintBattery ( FFinstance * instance )
{
2021-04-03 11:39:59 +02:00
uint8_t batteryCounter = 0 ;
2021-04-15 18:59:26 +02:00
uint8_t batteryIndicies [ FF_BATTERY_MAX_INDEX ];
for ( uint8_t i = 0 ; i < FF_BATTERY_MAX_INDEX ; i ++ )
2021-03-03 21:03:12 +01:00
{
char path [ 30 ];
sprintf ( path , "/sys/class/power_supply/BAT%i" , i );
DIR * dir = opendir ( path );
if ( dir != NULL )
{
2021-04-15 18:59:26 +02:00
batteryIndicies [ batteryCounter ++ ] = i ;
2021-03-03 21:03:12 +01:00
closedir ( dir );
}
}
2021-04-03 11:39:59 +02:00
if ( batteryCounter == 0 )
{
2021-04-15 18:59:26 +02:00
ffPrintError ( instance , FF_BATTERY_MODULE_NAME , 0 , & instance -> config . batteryKey , & instance -> config . batteryFormat , FF_BATTERY_NUM_FORMAT_ARGS , "/sys/class/power_supply/ doesn't contain any BAT* folder" );
return ;
}
2021-04-03 11:39:59 +02:00
2021-04-15 18:59:26 +02:00
for ( uint8_t i = 0 ; i < batteryCounter ; i ++ )
{
printBattery ( instance , batteryIndicies [ i ]);
2021-04-03 11:39:59 +02:00
}
2021-03-27 18:14:19 +01:00
}