OpenDingux Beta: Fix reporting of battery level
This commit is contained in:
parent
23d22a1471
commit
d8f08f8177
|
@ -31,6 +31,10 @@
|
||||||
#define DINGUX_SHARPNESS_DOWNSCALING_FILE "/sys/devices/platform/jz-lcd.0/sharpness_downscaling"
|
#define DINGUX_SHARPNESS_DOWNSCALING_FILE "/sys/devices/platform/jz-lcd.0/sharpness_downscaling"
|
||||||
#define DINGUX_BATTERY_CAPACITY_FILE "/sys/class/power_supply/battery/capacity"
|
#define DINGUX_BATTERY_CAPACITY_FILE "/sys/class/power_supply/battery/capacity"
|
||||||
|
|
||||||
|
/* OpenDingux Beta defines */
|
||||||
|
#define DINGUX_BATTERY_VOLTAGE_MIN "/sys/class/power_supply/jz-battery/voltage_min_design"
|
||||||
|
#define DINGUX_BATTERY_VOLTAGE_MAX "/sys/class/power_supply/jz-battery/voltage_max_design"
|
||||||
|
#define DINGUX_BATTERY_VOLTAGE_NOW "/sys/class/power_supply/jz-battery/voltage_now"
|
||||||
#define DINGUX_SCALING_MODE_ENVAR "SDL_VIDEO_KMSDRM_SCALING_MODE"
|
#define DINGUX_SCALING_MODE_ENVAR "SDL_VIDEO_KMSDRM_SCALING_MODE"
|
||||||
#define DINGUX_SCALING_SHARPNESS_ENVAR "SDL_VIDEO_KMSDRM_SCALING_SHARPNESS"
|
#define DINGUX_SCALING_SHARPNESS_ENVAR "SDL_VIDEO_KMSDRM_SCALING_SHARPNESS"
|
||||||
|
|
||||||
|
@ -172,13 +176,11 @@ bool dingux_ipu_reset(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Fetches internal battery level */
|
static int dingux_read_battery_sys_file(const char *path)
|
||||||
int dingux_get_battery_level(void)
|
|
||||||
{
|
{
|
||||||
const char *path = DINGUX_BATTERY_CAPACITY_FILE;
|
int64_t file_len = 0;
|
||||||
int64_t file_len = 0;
|
char *file_buf = NULL;
|
||||||
char *file_buf = NULL;
|
int sys_file_value = 0;
|
||||||
int battery_level = 0;
|
|
||||||
|
|
||||||
/* Check whether file exists */
|
/* Check whether file exists */
|
||||||
if (!path_is_valid(path))
|
if (!path_is_valid(path))
|
||||||
|
@ -186,19 +188,16 @@ int dingux_get_battery_level(void)
|
||||||
|
|
||||||
/* Read file */
|
/* Read file */
|
||||||
if (!filestream_read_file(path, (void**)&file_buf, &file_len) ||
|
if (!filestream_read_file(path, (void**)&file_buf, &file_len) ||
|
||||||
(file_len == 0))
|
(file_len == 0) ||
|
||||||
|
!file_buf)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
/* Convert to integer */
|
/* Convert to integer */
|
||||||
if (file_buf)
|
sys_file_value = atoi(file_buf);
|
||||||
{
|
free(file_buf);
|
||||||
battery_level = atoi(file_buf);
|
file_buf = NULL;
|
||||||
|
|
||||||
free(file_buf);
|
return sys_file_value;
|
||||||
file_buf = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return battery_level;
|
|
||||||
|
|
||||||
error:
|
error:
|
||||||
if (file_buf)
|
if (file_buf)
|
||||||
|
@ -209,3 +208,37 @@ error:
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Fetches internal battery level */
|
||||||
|
int dingux_get_battery_level(void)
|
||||||
|
{
|
||||||
|
#if defined(DINGUX_BETA)
|
||||||
|
/* Taken from https://github.com/OpenDingux/gmenu2x/blob/master/src/battery.cpp
|
||||||
|
* No 'capacity' file in sysfs - Do a dumb approximation of the capacity
|
||||||
|
* using the current voltage reported and the min/max voltages of the
|
||||||
|
* battery */
|
||||||
|
int voltage_min = 0;
|
||||||
|
int voltage_max = 0;
|
||||||
|
int voltage_now = 0;
|
||||||
|
|
||||||
|
voltage_min = dingux_read_battery_sys_file(DINGUX_BATTERY_VOLTAGE_MIN);
|
||||||
|
if (voltage_min < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
voltage_max = dingux_read_battery_sys_file(DINGUX_BATTERY_VOLTAGE_MAX);
|
||||||
|
if (voltage_max < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
voltage_now = dingux_read_battery_sys_file(DINGUX_BATTERY_VOLTAGE_NOW);
|
||||||
|
if (voltage_now < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if ((voltage_max <= voltage_min) ||
|
||||||
|
(voltage_now < voltage_min))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return (int)(((voltage_now - voltage_min) * 100) / (voltage_max - voltage_min));
|
||||||
|
#else
|
||||||
|
return dingux_read_battery_sys_file(DINGUX_BATTERY_CAPACITY_FILE);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue