LINUX.ORG.RU

История изменений

Исправление 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

Буду рад любым советам.