forked from enlightenment/evisum
sensors: not thread safe...fix.
This commit is contained in:
parent
fa3c1930ea
commit
2d021e921e
|
@ -58,6 +58,8 @@ typedef struct
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
|
char *vendor;
|
||||||
|
char *model;
|
||||||
double charge_full;
|
double charge_full;
|
||||||
double charge_current;
|
double charge_current;
|
||||||
uint8_t percent;
|
uint8_t percent;
|
||||||
|
|
|
@ -50,20 +50,6 @@ file_contents(const char *path)
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
|
||||||
strsli_printf(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
static char buf[4096];
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
buf[0] = 0x00;
|
|
||||||
va_start(ap, fmt);
|
|
||||||
vsnprintf(buf, sizeof(buf), fmt, ap);
|
|
||||||
va_end(ap);
|
|
||||||
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
strimmer(char *s)
|
strimmer(char *s)
|
||||||
{
|
{
|
||||||
|
|
|
@ -123,6 +123,7 @@ system_sensors_thermal_get(int *sensor_count)
|
||||||
#elif defined(__FreeBSD__) || defined(__DragonFly__)
|
#elif defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
sensor_t *sensor;
|
sensor_t *sensor;
|
||||||
int value;
|
int value;
|
||||||
|
char buf[256];
|
||||||
size_t len = sizeof(value);
|
size_t len = sizeof(value);
|
||||||
|
|
||||||
if ((sysctlbyname("hw.acpi.thermal.tz0.temperature", &value, &len, NULL, 0)) != -1)
|
if ((sysctlbyname("hw.acpi.thermal.tz0.temperature", &value, &len, NULL, 0)) != -1)
|
||||||
|
@ -139,13 +140,13 @@ system_sensors_thermal_get(int *sensor_count)
|
||||||
for (int i = 0; i < n; i++)
|
for (int i = 0; i < n; i++)
|
||||||
{
|
{
|
||||||
len = sizeof(value);
|
len = sizeof(value);
|
||||||
const char *mibname = strsli_printf("dev.cpu.%d.temperature", i);
|
snprintf(buf, sizeof(buf), "dev.cpu.%i.temperature", i);
|
||||||
if ((sysctlbyname(mibname, &value, &len, NULL, 0)) != -1)
|
if ((sysctlbyname(buf, &value, &len, NULL, 0)) != -1)
|
||||||
{
|
{
|
||||||
void *t = realloc(sensors, (1 + *sensor_count) * sizeof(sensor_t *));
|
void *t = realloc(sensors, (1 + *sensor_count) * sizeof(sensor_t *));
|
||||||
sensors = t;
|
sensors = t;
|
||||||
sensors[(*sensor_count)++] = sensor = calloc(1, sizeof(sensor_t));
|
sensors[(*sensor_count)++] = sensor = calloc(1, sizeof(sensor_t));
|
||||||
sensor->name = strdup(mibname);
|
sensor->name = strdup(buf);
|
||||||
sensor->value = (float) (value - 2732) / 10;
|
sensor->value = (float) (value - 2732) / 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -277,6 +278,7 @@ _power_battery_count_get(power_t *power)
|
||||||
}
|
}
|
||||||
#elif defined(__FreeBSD__) || defined(__DragonFly__)
|
#elif defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
int n_units, fd;
|
int n_units, fd;
|
||||||
|
char name[256];
|
||||||
|
|
||||||
fd = open("/dev/acpi", O_RDONLY);
|
fd = open("/dev/acpi", O_RDONLY);
|
||||||
if (fd != -1)
|
if (fd != -1)
|
||||||
|
@ -289,18 +291,22 @@ _power_battery_count_get(power_t *power)
|
||||||
power->batteries = malloc(power->battery_count * sizeof(bat_t **));
|
power->batteries = malloc(power->battery_count * sizeof(bat_t **));
|
||||||
for (int i = 0; i < power->battery_count; i++) {
|
for (int i = 0; i < power->battery_count; i++) {
|
||||||
power->batteries[i] = calloc(1, sizeof(bat_t));
|
power->batteries[i] = calloc(1, sizeof(bat_t));
|
||||||
|
snprintf(name, sizeof(name), "hw.acpi.battery.%i", i);
|
||||||
|
power->batteries[i]->name = strdup(name);
|
||||||
power->batteries[i]->present = true;
|
power->batteries[i]->present = true;
|
||||||
}
|
}
|
||||||
#elif defined(__linux__)
|
#elif defined(__linux__)
|
||||||
char *type;
|
char *type;
|
||||||
struct dirent **names;
|
struct dirent **names;
|
||||||
|
char path[PATH_MAX];
|
||||||
int i, n, id;
|
int i, n, id;
|
||||||
|
|
||||||
n = scandir("/sys/class/power_supply", &names, 0, alphasort);
|
n = scandir("/sys/class/power_supply", &names, 0, alphasort);
|
||||||
if (n < 0) return power->battery_count;
|
if (n < 0) return power->battery_count;
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
type = file_contents(strsli_printf("/sys/class/power_supply/%s/type", names[i]->d_name));
|
snprintf(path, sizeof(path), "/sys/class/power_supply/%s/type", names[i]->d_name);
|
||||||
|
type = file_contents(path);
|
||||||
if (type)
|
if (type)
|
||||||
{
|
{
|
||||||
if (!strncmp(type, "Battery", 7))
|
if (!strncmp(type, "Battery", 7))
|
||||||
|
@ -311,6 +317,10 @@ _power_battery_count_get(power_t *power)
|
||||||
power->batteries = t;
|
power->batteries = t;
|
||||||
power->batteries[id] = calloc(1, sizeof(bat_t));
|
power->batteries[id] = calloc(1, sizeof(bat_t));
|
||||||
power->batteries[id]->name = strdup(names[i]->d_name);
|
power->batteries[id]->name = strdup(names[i]->d_name);
|
||||||
|
snprintf(path, sizeof(path), "/sys/class/power_supply/%s/manufacturer", names[i]->d_name);
|
||||||
|
power->batteries[id]->vendor = file_contents(path);
|
||||||
|
snprintf(path, sizeof(path), "/sys/class/power_supply/%s/model_name", names[i]->d_name);
|
||||||
|
power->batteries[id]->model = file_contents(path);
|
||||||
power->batteries[id]->present = true;
|
power->batteries[id]->present = true;
|
||||||
power->battery_count++;
|
power->battery_count++;
|
||||||
}
|
}
|
||||||
|
@ -372,7 +382,6 @@ _battery_state_get(power_t *power)
|
||||||
#elif defined(__FreeBSD__) || defined(__DragonFly__)
|
#elif defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
int fd, i;
|
int fd, i;
|
||||||
union acpi_battery_ioctl_arg battio;
|
union acpi_battery_ioctl_arg battio;
|
||||||
char name[256];
|
|
||||||
|
|
||||||
if ((fd = open("/dev/acpi", O_RDONLY)) == -1) return;
|
if ((fd = open("/dev/acpi", O_RDONLY)) == -1) return;
|
||||||
|
|
||||||
|
@ -385,8 +394,8 @@ _battery_state_get(power_t *power)
|
||||||
else
|
else
|
||||||
power->batteries[i]->charge_full = battio.bif.lfcap;
|
power->batteries[i]->charge_full = battio.bif.lfcap;
|
||||||
}
|
}
|
||||||
snprintf(name, sizeof(name), "%s %s", battio.bif.oeminfo, battio.bif.model);
|
power->batteries[i]->vendor = strdup(battio.bix.oeminfo);
|
||||||
power->batteries[i]->name = strdup(name);
|
power->batteries[i]->model = strdup(battio.bix.model);
|
||||||
battio.unit = i;
|
battio.unit = i;
|
||||||
if (ioctl(fd, ACPIIO_BATT_GET_BST, &battio) != -1)
|
if (ioctl(fd, ACPIIO_BATT_GET_BST, &battio) != -1)
|
||||||
power->batteries[i]->charge_current = battio.bst.cap;
|
power->batteries[i]->charge_current = battio.bst.cap;
|
||||||
|
@ -397,7 +406,7 @@ _battery_state_get(power_t *power)
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
#elif defined(__linux__)
|
#elif defined(__linux__)
|
||||||
const char *path;
|
char path[PATH_MAX];
|
||||||
struct dirent *dh;
|
struct dirent *dh;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
|
@ -407,7 +416,7 @@ _battery_state_get(power_t *power)
|
||||||
for (int i = 0; i < power->battery_count; i++) {
|
for (int i = 0; i < power->battery_count; i++) {
|
||||||
naming = NULL;
|
naming = NULL;
|
||||||
|
|
||||||
path = strsli_printf("/sys/class/power_supply/%s", power->batteries[i]->name);
|
snprintf(path, sizeof(path), "/sys/class/power_supply/%s", power->batteries[i]->name);
|
||||||
|
|
||||||
if ((stat(path, &st) < 0) || (!S_ISDIR(st.st_mode)))
|
if ((stat(path, &st) < 0) || (!S_ISDIR(st.st_mode)))
|
||||||
continue;
|
continue;
|
||||||
|
@ -435,13 +444,15 @@ _battery_state_get(power_t *power)
|
||||||
if (!naming)
|
if (!naming)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
buf = file_contents(strsli_printf("%s/%s_full", link, naming));
|
snprintf(path, sizeof(path), "%s/%s_full", link, naming);
|
||||||
|
buf = file_contents(path);
|
||||||
if (buf)
|
if (buf)
|
||||||
{
|
{
|
||||||
power->batteries[i]->charge_full = atol(buf);
|
power->batteries[i]->charge_full = atol(buf);
|
||||||
free(buf);
|
free(buf);
|
||||||
}
|
}
|
||||||
buf = file_contents(strsli_printf("%s/%s_now", link, naming));
|
snprintf(path, sizeof(path), "%s/%s_now", link, naming);
|
||||||
|
buf = file_contents(path);
|
||||||
if (buf)
|
if (buf)
|
||||||
{
|
{
|
||||||
power->batteries[i]->charge_current = atol(buf);
|
power->batteries[i]->charge_current = atol(buf);
|
||||||
|
@ -508,6 +519,10 @@ system_power_state_free(power_t *power)
|
||||||
{
|
{
|
||||||
if (power->batteries[i]->name)
|
if (power->batteries[i]->name)
|
||||||
free(power->batteries[i]->name);
|
free(power->batteries[i]->name);
|
||||||
|
if (power->batteries[i]->model)
|
||||||
|
free(power->batteries[i]->model);
|
||||||
|
if (power->batteries[i]->vendor)
|
||||||
|
free(power->batteries[i]->vendor);
|
||||||
free(power->batteries[i]);
|
free(power->batteries[i]);
|
||||||
}
|
}
|
||||||
if (power->batteries)
|
if (power->batteries)
|
||||||
|
|
|
@ -140,7 +140,9 @@ _sensors_update_feedback_cb(void *data, Ecore_Thread *thread, void *msgdata)
|
||||||
{
|
{
|
||||||
Bat *bat = eina_list_data_get(l);
|
Bat *bat = eina_list_data_get(l);
|
||||||
elm_object_tooltip_text_set(bat->pb,
|
elm_object_tooltip_text_set(bat->pb,
|
||||||
msg->power.batteries[i]->name);
|
eina_slstr_printf("%s (%s)",
|
||||||
|
msg->power.batteries[i]->vendor,
|
||||||
|
msg->power.batteries[i]->model));
|
||||||
double perc = (double) msg->power.batteries[i]->percent / 100;
|
double perc = (double) msg->power.batteries[i]->percent / 100;
|
||||||
elm_progressbar_value_set(bat->pb, perc);
|
elm_progressbar_value_set(bat->pb, perc);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue