forked from enlightenment/enlightenment
Enlightenment: Factor all sysctl battery code for bsd into e_mod_sysctl.c
This commit should now allow battery to support OpenBSD, FreeBSD, Dragonfly BSD, and NetBSD
This commit is contained in:
parent
485f250880
commit
b4f3a8da0a
10
configure.ac
10
configure.ac
|
@ -597,6 +597,8 @@ AC_DEFINE(E_INTERNAL, 1, "This define can be used to wrap internal E stuff, as c
|
||||||
|
|
||||||
have_openbsd="no"
|
have_openbsd="no"
|
||||||
have_freebsd="no"
|
have_freebsd="no"
|
||||||
|
have_dragonfly="no"
|
||||||
|
have_netbsd="no"
|
||||||
BATTERY_LDFLAGS=
|
BATTERY_LDFLAGS=
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
darwin*)
|
darwin*)
|
||||||
|
@ -606,15 +608,23 @@ case "$host_os" in
|
||||||
openbsd*)
|
openbsd*)
|
||||||
have_openbsd="yes"
|
have_openbsd="yes"
|
||||||
;;
|
;;
|
||||||
|
netbsd*)
|
||||||
|
have_netbsd="yes"
|
||||||
|
;;
|
||||||
freebsd*)
|
freebsd*)
|
||||||
have_freebsd="yes"
|
have_freebsd="yes"
|
||||||
;;
|
;;
|
||||||
|
dragonfly*)
|
||||||
|
have_dragonfly="yes"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
AC_SUBST([BATTERY_CFLAGS])
|
AC_SUBST([BATTERY_CFLAGS])
|
||||||
AC_SUBST([BATTERY_LDFLAGS])
|
AC_SUBST([BATTERY_LDFLAGS])
|
||||||
AM_CONDITIONAL([HAVE_OPENBSD], [test "x${have_openbsd}" = "xyes"])
|
AM_CONDITIONAL([HAVE_OPENBSD], [test "x${have_openbsd}" = "xyes"])
|
||||||
|
AM_CONDITIONAL([HAVE_NETBSD], [test "x${have_netbsd}" = "xyes"])
|
||||||
AM_CONDITIONAL([HAVE_FREEBSD], [test "x${have_freebsd}" = "xyes"])
|
AM_CONDITIONAL([HAVE_FREEBSD], [test "x${have_freebsd}" = "xyes"])
|
||||||
|
AM_CONDITIONAL([HAVE_DRAGONFLY], [test "x${have_dragonfly}" = "xyes"])
|
||||||
|
|
||||||
##have_exchange=no
|
##have_exchange=no
|
||||||
##AC_ARG_ENABLE(exchange,
|
##AC_ARG_ENABLE(exchange,
|
||||||
|
|
|
@ -18,11 +18,23 @@ if HAVE_EEZE
|
||||||
src_modules_battery_module_la_SOURCES += src/modules/battery/e_mod_udev.c
|
src_modules_battery_module_la_SOURCES += src/modules/battery/e_mod_udev.c
|
||||||
else
|
else
|
||||||
if HAVE_OPENBSD
|
if HAVE_OPENBSD
|
||||||
src_modules_battery_module_la_SOURCES += src/modules/battery/e_mod_openbsd.c
|
src_modules_battery_module_la_SOURCES += src/modules/battery/e_mod_sysctl.c
|
||||||
|
else
|
||||||
|
if HAVE_NETBSD
|
||||||
|
src_modules_battery_module_la_SOURCES += src/modules/battery/e_mod_sysctl.c
|
||||||
|
else
|
||||||
|
if HAVE_DRAGONFLY
|
||||||
|
src_modules_battery_module_la_SOURCES += src/modules/battery/e_mod_sysctl.c
|
||||||
|
else
|
||||||
|
if HAVE_FREEBSD
|
||||||
|
src_modules_battery_module_la_SOURCES += src/modules/battery/e_mod_sysctl.c
|
||||||
else
|
else
|
||||||
src_modules_battery_module_la_SOURCES += src/modules/battery/e_mod_upower.c
|
src_modules_battery_module_la_SOURCES += src/modules/battery/e_mod_upower.c
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
src_modules_battery_module_la_LIBADD = $(MOD_LIBS)
|
src_modules_battery_module_la_LIBADD = $(MOD_LIBS)
|
||||||
src_modules_battery_module_la_LDFLAGS = $(MOD_LDFLAGS)
|
src_modules_battery_module_la_LDFLAGS = $(MOD_LDFLAGS)
|
||||||
|
|
|
@ -1,12 +1,5 @@
|
||||||
#include "e.h"
|
#include "e.h"
|
||||||
|
|
||||||
#ifdef __FreeBSD__
|
|
||||||
# include <sys/ioctl.h>
|
|
||||||
# include <sys/sysctl.h>
|
|
||||||
# ifdef __i386__
|
|
||||||
# include <machine/apm_bios.h>
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_CFBASE_H
|
#ifdef HAVE_CFBASE_H
|
||||||
# include <CFBase.h>
|
# include <CFBase.h>
|
||||||
# include <CFNumber.h>
|
# include <CFNumber.h>
|
||||||
|
@ -145,177 +138,7 @@ file_str_entry_get(FILE *f,
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __FreeBSD__
|
#if defined(HAVE_CFBASE_H) /* OS X */
|
||||||
|
|
||||||
#define BATTERY_STATE_NONE 0
|
|
||||||
#define BATTERY_STATE_DISCHARGING 1
|
|
||||||
#define BATTERY_STATE_CHARGING 2
|
|
||||||
#define BATTERY_STATE_REMOVED 7
|
|
||||||
|
|
||||||
/***---***/
|
|
||||||
static void
|
|
||||||
bsd_acpi_init(void)
|
|
||||||
{
|
|
||||||
/* nothing to do */
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
bsd_acpi_check(void)
|
|
||||||
{
|
|
||||||
int bat_val = 0;
|
|
||||||
int mib_state[4];
|
|
||||||
int mib_life[4];
|
|
||||||
int mib_time[4];
|
|
||||||
int mib_units[4];
|
|
||||||
size_t len;
|
|
||||||
int state = 0;
|
|
||||||
int level = 0;
|
|
||||||
int time_min = 0;
|
|
||||||
int life = 0;
|
|
||||||
int batteries = 0;
|
|
||||||
|
|
||||||
time_left = -1;
|
|
||||||
battery_full = -1;
|
|
||||||
have_battery = 0;
|
|
||||||
have_power = 0;
|
|
||||||
|
|
||||||
/* Read some information on first run. */
|
|
||||||
len = 4;
|
|
||||||
sysctlnametomib("hw.acpi.battery.state", mib_state, &len);
|
|
||||||
len = sizeof(state);
|
|
||||||
if (sysctl(mib_state, 4, &state, &len, NULL, 0) == -1)
|
|
||||||
/* ERROR */
|
|
||||||
state = -1;
|
|
||||||
|
|
||||||
len = 4;
|
|
||||||
sysctlnametomib("hw.acpi.battery.life", mib_life, &len);
|
|
||||||
len = sizeof(life);
|
|
||||||
if (sysctl(mib_life, 4, &life, &len, NULL, 0) == -1)
|
|
||||||
/* ERROR */
|
|
||||||
level = -1;
|
|
||||||
bat_val = life;
|
|
||||||
|
|
||||||
len = 4;
|
|
||||||
sysctlnametomib("hw.acpi.battery.time", mib_time, &len);
|
|
||||||
len = sizeof(time);
|
|
||||||
if (sysctl(mib_time, 4, &time_min, &len, NULL, 0) == -1)
|
|
||||||
/* ERROR */
|
|
||||||
time_min = -1;
|
|
||||||
|
|
||||||
len = 4;
|
|
||||||
sysctlnametomib("hw.acpi.battery.units", mib_units, &len);
|
|
||||||
len = sizeof(batteries);
|
|
||||||
if (sysctl(mib_time, 4, &batteries, &len, NULL, 0) == -1)
|
|
||||||
/* ERROR */
|
|
||||||
batteries = 1;
|
|
||||||
|
|
||||||
if (time_min >= 0) time_left = time_min * 60;
|
|
||||||
|
|
||||||
if (batteries == 1) /* hw.acpi.battery.units = 1 means NO BATTS */
|
|
||||||
time_left = -1;
|
|
||||||
else if ((state == BATTERY_STATE_CHARGING) ||
|
|
||||||
(state == BATTERY_STATE_DISCHARGING))
|
|
||||||
{
|
|
||||||
have_battery = 1;
|
|
||||||
if (state == BATTERY_STATE_CHARGING) have_power = 1;
|
|
||||||
else if (state == BATTERY_STATE_DISCHARGING)
|
|
||||||
have_power = 0;
|
|
||||||
if (level == -1) time_left = -1;
|
|
||||||
else if (time_min == -1)
|
|
||||||
{
|
|
||||||
time_left = -1;
|
|
||||||
battery_full = bat_val;
|
|
||||||
}
|
|
||||||
else battery_full = bat_val;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
have_battery = 1;
|
|
||||||
battery_full = 100;
|
|
||||||
time_left = -1;
|
|
||||||
have_power = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/***---***/
|
|
||||||
# ifdef __i386__
|
|
||||||
static void
|
|
||||||
bsd_apm_init(void)
|
|
||||||
{
|
|
||||||
/* nothing to do */
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
bsd_apm_check(void)
|
|
||||||
{
|
|
||||||
int ac_stat, bat_stat, bat_val, time_val;
|
|
||||||
int apm_fd = -1;
|
|
||||||
struct apm_info info;
|
|
||||||
|
|
||||||
time_left = -1;
|
|
||||||
battery_full = -1;
|
|
||||||
have_battery = 0;
|
|
||||||
have_power = 0;
|
|
||||||
|
|
||||||
apm_fd = open("/dev/apm", O_RDONLY);
|
|
||||||
if ((apm_fd != -1) && (ioctl(apm_fd, APMIO_GETINFO, &info) != -1))
|
|
||||||
{
|
|
||||||
/* set values */
|
|
||||||
ac_stat = info.ai_acline;
|
|
||||||
bat_stat = info.ai_batt_stat;
|
|
||||||
bat_val = info.ai_batt_life;
|
|
||||||
time_val = info.ai_batt_time;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (apm_fd != -1) close(apm_fd);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
close(apm_fd);
|
|
||||||
if (info.ai_batteries == 1) /* ai_batteries == 1 means NO battery,
|
|
||||||
* ai_batteries == 2 means 1 battery */
|
|
||||||
{
|
|
||||||
have_power = 1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ac_stat) /* Wallpowered */
|
|
||||||
{
|
|
||||||
have_power = 1;
|
|
||||||
have_battery = 1;
|
|
||||||
switch (bat_stat) /* On FreeBSD the time_val is -1 when AC ist plugged
|
|
||||||
* in. This means we don't know how long the battery
|
|
||||||
* will recharge */
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
battery_full = 100;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
battery_full = 50;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
battery_full = 25;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
battery_full = 100;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else /* Running on battery */
|
|
||||||
{
|
|
||||||
have_battery = 1;
|
|
||||||
battery_full = bat_val;
|
|
||||||
time_left = time_val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#elif defined(HAVE_CFBASE_H) /* OS X */
|
|
||||||
/***---***/
|
/***---***/
|
||||||
static void darwin_init(void);
|
static void darwin_init(void);
|
||||||
static void darwin_check(void);
|
static void darwin_check(void);
|
||||||
|
@ -1404,33 +1227,7 @@ dir_has_contents(const char *dir)
|
||||||
static void
|
static void
|
||||||
init(void)
|
init(void)
|
||||||
{
|
{
|
||||||
#ifdef __FreeBSD__
|
#if defined(HAVE_CFBASE_H) /* OS X */
|
||||||
int acline;
|
|
||||||
size_t len;
|
|
||||||
|
|
||||||
len = sizeof(acline);
|
|
||||||
if (!sysctlbyname("hw.acpi.acline", &acline, &len, NULL, 0))
|
|
||||||
{
|
|
||||||
int acline_mib[3] = {-1};
|
|
||||||
|
|
||||||
len = 3;
|
|
||||||
if (!sysctlnametomib("hw.acpi.acline", acline_mib, &len))
|
|
||||||
{
|
|
||||||
mode = CHECK_ACPI;
|
|
||||||
bsd_acpi_init();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#ifdef __i386__
|
|
||||||
if (ecore_file_exists("/dev/apm"))
|
|
||||||
{
|
|
||||||
mode = CHECK_APM;
|
|
||||||
bsd_apm_init();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#elif defined(HAVE_CFBASE_H) /* OS X */
|
|
||||||
darwin_init();
|
darwin_init();
|
||||||
#else
|
#else
|
||||||
if ((ecore_file_is_dir(sys_power_dir)) && (dir_has_contents(sys_power_dir)))
|
if ((ecore_file_is_dir(sys_power_dir)) && (dir_has_contents(sys_power_dir)))
|
||||||
|
@ -1469,27 +1266,7 @@ poll_cb(void *data EINA_UNUSED)
|
||||||
phave_battery = have_battery;
|
phave_battery = have_battery;
|
||||||
phave_power = have_power;
|
phave_power = have_power;
|
||||||
|
|
||||||
#ifdef __FreeBSD__
|
#if defined(HAVE_CFBASE_H) /* OS X */
|
||||||
switch (mode)
|
|
||||||
{
|
|
||||||
case CHECK_ACPI:
|
|
||||||
bsd_acpi_check();
|
|
||||||
break;
|
|
||||||
|
|
||||||
#ifdef __i386__
|
|
||||||
case CHECK_APM:
|
|
||||||
bsd_apm_check();
|
|
||||||
break;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
battery_full = -1;
|
|
||||||
time_left = -1;
|
|
||||||
have_battery = 0;
|
|
||||||
have_power = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#elif defined(HAVE_CFBASE_H) /* OS X */
|
|
||||||
darwin_check();
|
darwin_check();
|
||||||
return ECORE_CALLBACK_RENEW;
|
return ECORE_CALLBACK_RENEW;
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -368,8 +368,8 @@ _battery_config_updated(void)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_EEZE
|
#ifdef HAVE_EEZE
|
||||||
ok = _battery_udev_start();
|
ok = _battery_udev_start();
|
||||||
#elif defined __OpenBSD__
|
#elif defined __OpenBSD__ || defined __DragonFly__ || defined __FreeBSD__ || defined __NetBSD__
|
||||||
ok = _battery_openbsd_start();
|
ok = _battery_sysctl_start();
|
||||||
#else
|
#else
|
||||||
ok = _battery_upower_start();
|
ok = _battery_upower_start();
|
||||||
#endif
|
#endif
|
||||||
|
@ -738,7 +738,7 @@ e_modapi_init(E_Module *m)
|
||||||
E_CONFIG_VAL(D, T, alert_timeout, INT);
|
E_CONFIG_VAL(D, T, alert_timeout, INT);
|
||||||
E_CONFIG_VAL(D, T, suspend_below, INT);
|
E_CONFIG_VAL(D, T, suspend_below, INT);
|
||||||
E_CONFIG_VAL(D, T, force_mode, INT);
|
E_CONFIG_VAL(D, T, force_mode, INT);
|
||||||
#if defined HAVE_EEZE || defined __OpenBSD__
|
#if defined HAVE_EEZE || defined __OpenBSD__ || defined __NetBSD__
|
||||||
E_CONFIG_VAL(D, T, fuzzy, INT);
|
E_CONFIG_VAL(D, T, fuzzy, INT);
|
||||||
#endif
|
#endif
|
||||||
E_CONFIG_VAL(D, T, desktop_notifications, INT);
|
E_CONFIG_VAL(D, T, desktop_notifications, INT);
|
||||||
|
@ -753,7 +753,7 @@ e_modapi_init(E_Module *m)
|
||||||
battery_config->alert_timeout = 0;
|
battery_config->alert_timeout = 0;
|
||||||
battery_config->suspend_below = 0;
|
battery_config->suspend_below = 0;
|
||||||
battery_config->force_mode = 0;
|
battery_config->force_mode = 0;
|
||||||
#if defined HAVE_EEZE || defined __OpenBSD__
|
#if defined HAVE_EEZE || defined __OpenBSD__ || defined __NetBSD__
|
||||||
battery_config->fuzzy = 0;
|
battery_config->fuzzy = 0;
|
||||||
#endif
|
#endif
|
||||||
battery_config->desktop_notifications = 0;
|
battery_config->desktop_notifications = 0;
|
||||||
|
@ -826,8 +826,8 @@ e_modapi_shutdown(E_Module *m EINA_UNUSED)
|
||||||
|
|
||||||
#ifdef HAVE_EEZE
|
#ifdef HAVE_EEZE
|
||||||
_battery_udev_stop();
|
_battery_udev_stop();
|
||||||
#elif defined __OpenBSD__
|
#elif defined __OpenBSD__ || defined __DragonFly__ || defined __FreeBSD__ || defined __NetBSD__
|
||||||
_battery_openbsd_stop();
|
_battery_sysctl_stop();
|
||||||
#else
|
#else
|
||||||
_battery_upower_stop();
|
_battery_upower_stop();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -53,7 +53,7 @@ struct _Config
|
||||||
Eeze_Udev_Watch *acwatch;
|
Eeze_Udev_Watch *acwatch;
|
||||||
Eeze_Udev_Watch *batwatch;
|
Eeze_Udev_Watch *batwatch;
|
||||||
#endif
|
#endif
|
||||||
#if defined HAVE_EEZE || defined __OpenBSD__
|
#if defined HAVE_EEZE || defined __OpenBSD__ || defined __NetBSD__
|
||||||
Eina_Bool fuzzy;
|
Eina_Bool fuzzy;
|
||||||
int fuzzcount;
|
int fuzzcount;
|
||||||
#endif
|
#endif
|
||||||
|
@ -65,12 +65,12 @@ typedef struct _Ac_Adapter Ac_Adapter;
|
||||||
struct _Battery
|
struct _Battery
|
||||||
{
|
{
|
||||||
const char *udi;
|
const char *udi;
|
||||||
#if defined HAVE_EEZE || defined __OpenBSD__
|
#if defined HAVE_EEZE || defined __OpenBSD__ || defined __DragonFly__ || defined __FreeBSD__ || defined __NetBSD__
|
||||||
Ecore_Poller *poll;
|
Ecore_Poller *poll;
|
||||||
#endif
|
#endif
|
||||||
Eina_Bool present:1;
|
Eina_Bool present:1;
|
||||||
Eina_Bool charging:1;
|
Eina_Bool charging:1;
|
||||||
#if defined HAVE_EEZE || defined __OpenBSD__
|
#if defined HAVE_EEZE || defined __OpenBSD__ || defined __DragonFly__ || defined __FreeBSD__ || defined __NetBSD__
|
||||||
double last_update;
|
double last_update;
|
||||||
double percent;
|
double percent;
|
||||||
double current_charge;
|
double current_charge;
|
||||||
|
@ -95,8 +95,13 @@ struct _Battery
|
||||||
const char *vendor;
|
const char *vendor;
|
||||||
Eina_Bool got_prop:1;
|
Eina_Bool got_prop:1;
|
||||||
Eldbus_Proxy *proxy;
|
Eldbus_Proxy *proxy;
|
||||||
#ifdef __OpenBSD__
|
|
||||||
int * mib;
|
int * mib;
|
||||||
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
|
int * mib_state;
|
||||||
|
int * mib_units;
|
||||||
|
int * mib_time;
|
||||||
|
int batteries;
|
||||||
|
int time_min;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -106,9 +111,7 @@ struct _Ac_Adapter
|
||||||
Eina_Bool present:1;
|
Eina_Bool present:1;
|
||||||
const char *product;
|
const char *product;
|
||||||
Eldbus_Proxy *proxy;
|
Eldbus_Proxy *proxy;
|
||||||
#ifdef __OpenBSD__
|
|
||||||
int * mib;
|
int * mib;
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Battery *_battery_battery_find(const char *udi);
|
Battery *_battery_battery_find(const char *udi);
|
||||||
|
@ -119,16 +122,16 @@ void _battery_device_update(void);
|
||||||
int _battery_udev_start(void);
|
int _battery_udev_start(void);
|
||||||
void _battery_udev_stop(void);
|
void _battery_udev_stop(void);
|
||||||
/* end e_mod_udev.c */
|
/* end e_mod_udev.c */
|
||||||
#elif !defined __OpenBSD__
|
#elif !defined __OpenBSD__ && !defined __DragonFly__ && !defined __FreeBSD__ && !defined __NetBSD__
|
||||||
/* in e_mod_dbus.c */
|
/* in e_mod_dbus.c */
|
||||||
int _battery_upower_start(void);
|
int _battery_upower_start(void);
|
||||||
void _battery_upower_stop(void);
|
void _battery_upower_stop(void);
|
||||||
/* end e_mod_dbus.c */
|
/* end e_mod_dbus.c */
|
||||||
#else
|
#else
|
||||||
/* in e_mod_openbsd.c */
|
/* in e_mod_sysctl.c */
|
||||||
int _battery_openbsd_start(void);
|
int _battery_sysctl_start(void);
|
||||||
void _battery_openbsd_stop(void);
|
void _battery_sysctl_stop(void);
|
||||||
/* end e_mod_openbsd.c */
|
/* end e_mod_sysctl.c */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
E_API extern E_Module_Api e_modapi;
|
E_API extern E_Module_Api e_modapi;
|
||||||
|
|
|
@ -1,15 +1,18 @@
|
||||||
|
|
||||||
#include <err.h>
|
#include <err.h>
|
||||||
|
#include <sys/types.h>
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
|
|
||||||
|
#if defined(__OpenBSD__) || defined(__NetBSD__)
|
||||||
|
#include <sys/param.h>
|
||||||
#include <sys/sensors.h>
|
#include <sys/sensors.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "e.h"
|
#include "e.h"
|
||||||
#include "e_mod_main.h"
|
#include "e_mod_main.h"
|
||||||
|
|
||||||
static Eina_Bool _battery_openbsd_battery_update_poll(void *data);
|
static Eina_Bool _battery_sysctl_battery_update_poll(void *data);
|
||||||
static void _battery_openbsd_battery_update();
|
static int _battery_sysctl_battery_update();
|
||||||
|
|
||||||
extern Eina_List *device_batteries;
|
extern Eina_List *device_batteries;
|
||||||
extern Eina_List *device_ac_adapters;
|
extern Eina_List *device_ac_adapters;
|
||||||
|
@ -19,13 +22,19 @@ Ac_Adapter *ac = NULL;
|
||||||
Battery *bat = NULL;
|
Battery *bat = NULL;
|
||||||
|
|
||||||
int
|
int
|
||||||
_battery_openbsd_start(void)
|
_battery_sysctl_start(void)
|
||||||
{
|
{
|
||||||
|
#if defined(__OpenBSD__) || defined(__NetBSD__)
|
||||||
int mib[] = {CTL_HW, HW_SENSORS, 0, 0, 0};
|
int mib[] = {CTL_HW, HW_SENSORS, 0, 0, 0};
|
||||||
int devn;
|
int devn;
|
||||||
struct sensordev snsrdev;
|
struct sensordev snsrdev;
|
||||||
size_t sdlen = sizeof(struct sensordev);
|
size_t sdlen = sizeof(struct sensordev);
|
||||||
|
#elif defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
|
int result;
|
||||||
|
size_t len;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__OpenBSD__) || defined(__NetBSD__)
|
||||||
for (devn = 0;; devn++) {
|
for (devn = 0;; devn++) {
|
||||||
mib[2] = devn;
|
mib[2] = devn;
|
||||||
if (sysctl(mib, 3, &snsrdev, &sdlen, NULL, 0) == -1)
|
if (sysctl(mib, 3, &snsrdev, &sdlen, NULL, 0) == -1)
|
||||||
|
@ -46,13 +55,12 @@ _battery_openbsd_start(void)
|
||||||
bat->mib[0] = mib[0];
|
bat->mib[0] = mib[0];
|
||||||
bat->mib[1] = mib[1];
|
bat->mib[1] = mib[1];
|
||||||
bat->mib[2] = mib[2];
|
bat->mib[2] = mib[2];
|
||||||
bat->technology = eina_stringshare_add("Unknow");
|
bat->technology = eina_stringshare_add("Unknown");
|
||||||
bat->model = eina_stringshare_add("Unknow");
|
bat->model = eina_stringshare_add("Unknown");
|
||||||
bat->vendor = eina_stringshare_add("Unknow");
|
bat->vendor = eina_stringshare_add("Unknown");
|
||||||
bat->last_update = ecore_time_get();
|
|
||||||
bat->poll = ecore_poller_add(ECORE_POLLER_CORE,
|
bat->poll = ecore_poller_add(ECORE_POLLER_CORE,
|
||||||
battery_config->poll_interval,
|
battery_config->poll_interval,
|
||||||
_battery_openbsd_battery_update_poll, NULL);
|
_battery_sysctl_battery_update_poll, NULL);
|
||||||
device_batteries = eina_list_append(device_batteries, bat);
|
device_batteries = eina_list_append(device_batteries, bat);
|
||||||
}
|
}
|
||||||
else if (!strcmp("acpiac0", snsrdev.xname))
|
else if (!strcmp("acpiac0", snsrdev.xname))
|
||||||
|
@ -68,17 +76,72 @@ _battery_openbsd_start(void)
|
||||||
device_ac_adapters = eina_list_append(device_ac_adapters, ac);
|
device_ac_adapters = eina_list_append(device_ac_adapters, ac);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#elif defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
|
if ((sysctlbyname("hw.acpi.battery.life", NULL, &len, NULL, 0)) != -1)
|
||||||
|
{
|
||||||
|
if (!(bat = E_NEW(Battery, 1)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
bat->mib = malloc(sizeof(int) * 4);
|
||||||
|
if (!bat->mib) return 0;
|
||||||
|
sysctlnametomib("hw.acpi.battery.life", bat->mib, &len);
|
||||||
|
|
||||||
_battery_openbsd_battery_update();
|
bat->mib_state = malloc(sizeof(int) * 4);
|
||||||
|
if (!bat->mib_state) return 0;
|
||||||
|
sysctlnametomib("hw.acpi.battery.state", bat->mib_state, &len);
|
||||||
|
|
||||||
|
bat->mib_time = malloc(sizeof(int) * 4);
|
||||||
|
if (!bat->mib_time) return 0;
|
||||||
|
sysctlnametomib("hw.acpi.battery.time", bat->mib_time, &len);
|
||||||
|
|
||||||
|
bat->mib_units = malloc(sizeof(int) * 4);
|
||||||
|
if(!bat->mib_units) return 0;
|
||||||
|
sysctlnametomib("hw.acpi.battery.units", bat->mib_units, &len);
|
||||||
|
|
||||||
|
bat->udi = eina_stringshare_add("hw.acpi.battery");
|
||||||
|
bat->technology = eina_stringshare_add("Unknown");
|
||||||
|
bat->model = eina_stringshare_add("Unknown");
|
||||||
|
bat->vendor = eina_stringshare_add("Unknown");
|
||||||
|
|
||||||
|
bat->poll = ecore_poller_add(ECORE_POLLER_CORE,
|
||||||
|
battery_config->poll_interval,
|
||||||
|
_battery_sysctl_battery_update_poll, NULL);
|
||||||
|
|
||||||
|
device_batteries = eina_list_append(device_batteries, bat);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((sysctlbyname("hw.acpi.acline", NULL, &len, NULL, 0)) != -1)
|
||||||
|
{
|
||||||
|
if (!(ac = E_NEW(Ac_Adapter, 1)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
ac->mib = malloc(sizeof(int) * 3);
|
||||||
|
if (!ac->mib) return 0;
|
||||||
|
len = sizeof(ac->mib);
|
||||||
|
sysctlnametomib("hw.acpi.acline", ac->mib, &len);
|
||||||
|
|
||||||
|
ac->udi = eina_stringshare_add("hw.acpi.acline");
|
||||||
|
|
||||||
|
device_ac_adapters = eina_list_append(device_ac_adapters, ac);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
_battery_sysctl_battery_update();
|
||||||
|
|
||||||
|
bat->last_update = ecore_time_get();
|
||||||
|
|
||||||
init_time = ecore_time_get();
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_battery_openbsd_stop(void)
|
_battery_sysctl_stop(void)
|
||||||
{
|
{
|
||||||
free(ac);
|
if (ac)
|
||||||
|
{
|
||||||
|
eina_stringshare_del(ac->udi);
|
||||||
|
free(ac->mib);
|
||||||
|
free(ac);
|
||||||
|
}
|
||||||
|
|
||||||
if (bat)
|
if (bat)
|
||||||
{
|
{
|
||||||
eina_stringshare_del(bat->udi);
|
eina_stringshare_del(bat->udi);
|
||||||
|
@ -86,31 +149,41 @@ _battery_openbsd_stop(void)
|
||||||
eina_stringshare_del(bat->model);
|
eina_stringshare_del(bat->model);
|
||||||
eina_stringshare_del(bat->vendor);
|
eina_stringshare_del(bat->vendor);
|
||||||
ecore_poller_del(bat->poll);
|
ecore_poller_del(bat->poll);
|
||||||
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
|
free(bat->mib_state);
|
||||||
|
free(bat->mib_time);
|
||||||
|
free(bat->mib_units);
|
||||||
|
#endif
|
||||||
free(bat->mib);
|
free(bat->mib);
|
||||||
free(bat);
|
free(bat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_battery_openbsd_battery_update_poll(void *data)
|
_battery_sysctl_battery_update_poll(void *data)
|
||||||
{
|
{
|
||||||
_battery_openbsd_battery_update();
|
_battery_sysctl_battery_update();
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static int
|
||||||
_battery_openbsd_battery_update()
|
_battery_sysctl_battery_update()
|
||||||
{
|
{
|
||||||
double _time, charge;
|
double _time, charge;
|
||||||
|
#if defined(__OpenBSD__) || defined(__NetBSD__)
|
||||||
struct sensor s;
|
struct sensor s;
|
||||||
size_t slen = sizeof(struct sensor);
|
size_t slen = sizeof(struct sensor);
|
||||||
|
#elif defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
|
int value;
|
||||||
|
size_t len;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (bat)
|
if (bat)
|
||||||
{
|
{
|
||||||
/* update the poller interval */
|
/* update the poller interval */
|
||||||
ecore_poller_poller_interval_set(bat->poll,
|
ecore_poller_poller_interval_set(bat->poll,
|
||||||
battery_config->poll_interval);
|
battery_config->poll_interval);
|
||||||
|
#if defined(__OpenBSD__) || defined(__NetBSD__)
|
||||||
/* last full capacity */
|
/* last full capacity */
|
||||||
bat->mib[3] = 7;
|
bat->mib[3] = 7;
|
||||||
bat->mib[4] = 0;
|
bat->mib[4] = 0;
|
||||||
|
@ -191,20 +264,68 @@ _battery_openbsd_battery_update()
|
||||||
else
|
else
|
||||||
bat->charging = 0;
|
bat->charging = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
|
len = sizeof(value);
|
||||||
|
if ((sysctl(bat->mib, 4, &value, &len, NULL, 0)) == -1)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bat->percent = value;
|
||||||
|
|
||||||
|
_time = ecore_time_get();
|
||||||
|
bat->last_update = _time;
|
||||||
|
|
||||||
|
len = sizeof(value);
|
||||||
|
if ((sysctl(bat->mib_state, 4, &value, &len, NULL, 0)) == -1)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bat->charging = !value;
|
||||||
|
bat->got_prop = 1;
|
||||||
|
|
||||||
|
bat->time_full = -1;
|
||||||
|
bat->time_left = -1;
|
||||||
|
|
||||||
|
len = sizeof(bat->time_min);
|
||||||
|
if ((sysctl(bat->mib_time, 4, &bat->time_min, &len, NULL, 0)) == -1)
|
||||||
|
{
|
||||||
|
bat->time_min = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
len = sizeof(bat->batteries);
|
||||||
|
if ((sysctl(bat->mib_units, 4, &bat->batteries, &len, NULL, 0)) == -1)
|
||||||
|
{
|
||||||
|
bat->batteries = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bat->time_min >= 0) bat->time_left = bat->time_min * 60;
|
||||||
|
if (bat->batteries == 1) bat->time_left = -1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ac)
|
if (ac)
|
||||||
{
|
{
|
||||||
|
#if defined(__OpenBSD__) || defined(__NetBSD__)
|
||||||
/* AC State */
|
/* AC State */
|
||||||
ac->mib[3] = 9;
|
ac->mib[3] = 9;
|
||||||
ac->mib[4] = 0;
|
ac->mib[4] = 0;
|
||||||
if (sysctl(ac->mib, 5, &s, &slen, NULL, 0) == -1)
|
if (sysctl(ac->mib, 5, &s, &slen, NULL, 0) != -1)
|
||||||
{
|
{
|
||||||
if (s.value)
|
if (s.value)
|
||||||
ac->present = 1;
|
ac->present = 1;
|
||||||
else
|
else
|
||||||
ac->present = 0;
|
ac->present = 0;
|
||||||
}
|
}
|
||||||
|
#elif defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
|
len = sizeof(value);
|
||||||
|
if ((sysctl(ac->mib, 3, &value, &len, NULL, 0)) != -1)
|
||||||
|
{
|
||||||
|
ac->present = value;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bat)
|
if (bat)
|
||||||
|
@ -214,3 +335,6 @@ _battery_openbsd_battery_update()
|
||||||
bat->got_prop = 1;
|
bat->got_prop = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue