История изменений
Исправление
Bizun,
(текущая версия)
:
Короче, я написал маленький патчик, но не до конца. Там нет проверок на ошибки, по этому в публичный доступ пока не выкладываю. И берет он инфу только из /sys/class/power_supply/BAT0/, что тоже не тру. Дальше буду работать над именно этими двумя недостатками.
А пока, вот что получилось:
#if defined __linux__
#define BAT_PATH "/sys/class/power_supply/BAT0"
#define BAT_DCAP "/sys/class/power_supply/BAT0/charge_full_design"
#define BAT_RCAP "/sys/class/power_supply/BAT0/charge_now"
#define BAT_STAT "/sys/class/power_supply/BAT0/status"
static void
battery_update_os(battery_priv *c)
{
gchar *buf;
gchar str[12];
gboolean ret = FALSE, charging;
int dcap, rcap;
ENTER;
c->exist = (ret = g_file_test(BAT_PATH, G_FILE_TEST_EXISTS));
ret = g_file_get_contents(BAT_DCAP, &buf, 0, NULL);
sscanf(buf, "%d", &dcap);
g_free(buf);
// Read remaing capacity
ret = g_file_get_contents(BAT_RCAP, &buf, 0, NULL);
sscanf(buf, "%d", &rcap);
g_free(buf);
// Read battery status
ret = g_file_get_contents(BAT_STAT, &buf, 0, NULL);
sscanf(buf, "%s", &str);
charging = (strcmp(str, "Charging") == 0);
g_free(buf);
// Set values
c->level = (int) ((gfloat) rcap * 100 / (gfloat) dcap);
c->charging = charging;
RET(ret);
}
#else
static void
battery_update_os(battery_priv *c)
{
c->exist = FALSE;
}
#endif
Буду рад любым советам.
П.С. Да, void возвращает значение, но это норм, это я знаю. Пофиксим.
Исходная версия Deleted, :
Новости с фронта №2
Короче, я написал маленький патчик, но не до конца. Там нет проверок на ошибки, по этому в публичный доступ пока не выкладываю. И берет он инфу только из /sys/class/power_supply/BAT0/, что тоже не тру. Дальше буду работать над именно этими двумя недостатками.
А пока, вот что получилось:
#if defined __linux__
#define BAT_PATH "/sys/class/power_supply/BAT0"
#define BAT_DCAP "/sys/class/power_supply/BAT0/charge_full_design"
#define BAT_RCAP "/sys/class/power_supply/BAT0/charge_now"
#define BAT_STAT "/sys/class/power_supply/BAT0/status"
static void
battery_update_os(battery_priv *c)
{
gchar *buf;
gchar str[12];
gboolean ret = FALSE, charging;
int dcap, rcap;
ENTER;
c->exist = (ret = g_file_test(BAT_PATH, G_FILE_TEST_EXISTS));
ret = g_file_get_contents(BAT_DCAP, &buf, 0, NULL);
sscanf(buf, "%d", &dcap);
g_free(buf);
// Read remaing capacity
ret = g_file_get_contents(BAT_RCAP, &buf, 0, NULL);
sscanf(buf, "%d", &rcap);
g_free(buf);
// Read battery status
ret = g_file_get_contents(BAT_STAT, &buf, 0, NULL);
sscanf(buf, "%s", &str);
charging = (strcmp(str, "Charging") == 0);
g_free(buf);
// Set values
c->level = (int) ((gfloat) rcap * 100 / (gfloat) dcap);
c->charging = charging;
RET(ret);
}
#else
static void
battery_update_os(battery_priv *c)
{
c->exist = FALSE;
}
#endif
Буду рад любым советам.