feature: add voltage property of a power device

This commit is contained in:
Richard Hughes 2008-11-07 10:40:11 +00:00
parent 75e202c097
commit f5ea862a06
7 changed files with 33 additions and 70 deletions

View file

@ -40,6 +40,7 @@ dkp_object_clear_internal (DkpObject *obj)
obj->energy_full = -1;
obj->energy_full_design = -1;
obj->energy_rate = -1;
obj->voltage = -1;
obj->percentage = -1;
obj->capacity = -1;
obj->time_to_empty = -1;
@ -94,6 +95,8 @@ dkp_object_collect_props (const char *key, const GValue *value, DkpObject *obj)
obj->energy_full_design = g_value_get_double (value);
else if (egg_strequal (key, "energy-rate"))
obj->energy_rate = g_value_get_double (value);
else if (egg_strequal (key, "voltage"))
obj->voltage = g_value_get_double (value);
else if (egg_strequal (key, "time-to-full"))
obj->time_to_full = g_value_get_int64 (value);
else if (egg_strequal (key, "time-to-empty"))
@ -144,6 +147,7 @@ dkp_object_copy (const DkpObject *cobj)
obj->energy_full = cobj->energy_full;
obj->energy_full_design = cobj->energy_full_design;
obj->energy_rate = cobj->energy_rate;
obj->voltage = cobj->voltage;
obj->percentage = cobj->percentage;
obj->capacity = cobj->capacity;
obj->time_to_empty = cobj->time_to_empty;
@ -175,6 +179,7 @@ dkp_object_equal (const DkpObject *obj1, const DkpObject *obj2)
obj1->energy == obj2->energy &&
obj1->energy_full == obj2->energy_full &&
obj1->energy_full_design == obj2->energy_full_design &&
obj1->voltage == obj2->voltage &&
obj1->energy_rate == obj2->energy_rate &&
obj1->percentage == obj2->percentage &&
obj1->has_history == obj2->has_history &&
@ -279,6 +284,10 @@ dkp_object_print (const DkpObject *obj)
if (obj->type == DKP_DEVICE_TYPE_BATTERY ||
obj->type == DKP_DEVICE_TYPE_MONITOR)
g_print (" energy-rate: %g W\n", obj->energy_rate);
if (obj->type == DKP_DEVICE_TYPE_UPS ||
obj->type == DKP_DEVICE_TYPE_BATTERY ||
obj->type == DKP_DEVICE_TYPE_MONITOR)
g_print (" voltage: %g V\n", obj->voltage);
if (obj->type == DKP_DEVICE_TYPE_BATTERY ||
obj->type == DKP_DEVICE_TYPE_UPS) {
if (obj->time_to_full >= 0) {
@ -376,6 +385,12 @@ dkp_object_diff (const DkpObject *old, const DkpObject *obj)
if (old->energy_rate != obj->energy_rate)
g_print (" energy-rate: %g -> %g W\n",
old->energy_rate, obj->energy_rate);
if (obj->type == DKP_DEVICE_TYPE_UPS ||
obj->type == DKP_DEVICE_TYPE_BATTERY ||
obj->type == DKP_DEVICE_TYPE_MONITOR)
if (old->voltage != obj->voltage)
g_print (" voltage: %g -> %g V\n",
old->voltage, obj->voltage);
if (obj->type == DKP_DEVICE_TYPE_BATTERY ||
obj->type == DKP_DEVICE_TYPE_UPS) {
if (old->time_to_full != obj->time_to_full) {

View file

@ -47,6 +47,7 @@ typedef struct {
gdouble energy_full; /* Watt Hours */
gdouble energy_full_design; /* Watt Hours */
gdouble energy_rate; /* Watts */
gdouble voltage; /* Volts */
gint64 time_to_empty; /* seconds */
gint64 time_to_full; /* seconds */
gdouble percentage; /* percent */

View file

@ -84,6 +84,7 @@ enum
PROP_BATTERY_ENERGY_FULL,
PROP_BATTERY_ENERGY_FULL_DESIGN,
PROP_BATTERY_ENERGY_RATE,
PROP_BATTERY_VOLTAGE,
PROP_BATTERY_TIME_TO_EMPTY,
PROP_BATTERY_TIME_TO_FULL,
PROP_BATTERY_PERCENTAGE,
@ -210,6 +211,9 @@ dkp_device_get_property (GObject *object, guint prop_id, GValue *value, GParamSp
case PROP_BATTERY_ENERGY_RATE:
g_value_set_double (value, obj->energy_rate);
break;
case PROP_BATTERY_VOLTAGE:
g_value_set_double (value, obj->voltage);
break;
case PROP_BATTERY_TIME_TO_EMPTY:
g_value_set_int64 (value, obj->time_to_empty);
break;
@ -738,6 +742,10 @@ dkp_device_class_init (DkpDeviceClass *klass)
object_class,
PROP_BATTERY_ENERGY_RATE,
g_param_spec_double ("energy-rate", NULL, NULL, -G_MAXDOUBLE, G_MAXDOUBLE, 0, G_PARAM_READABLE));
g_object_class_install_property (
object_class,
PROP_BATTERY_VOLTAGE,
g_param_spec_double ("voltage", NULL, NULL, -G_MAXDOUBLE, G_MAXDOUBLE, 0, G_PARAM_READABLE));
g_object_class_install_property (
object_class,
PROP_BATTERY_TIME_TO_EMPTY,

View file

@ -315,6 +315,8 @@ dkp_supply_refresh_battery (DkpSupply *supply)
obj->energy_rate =
fabs (sysfs_get_double (obj->native_path, "current_now") / 1000000.0);
obj->voltage =
sysfs_get_double (obj->native_path, "voltage_now") / 1000000.0;
/* ACPI gives out the special 'Ones' value for rate when it's unable
* to calculate the true rate. We should set the rate zero, and wait

View file

@ -325,7 +325,7 @@ dkp_wup_parse_command (DkpWup *wup, const gchar *data)
/* update the command fields */
if (command == 'd' && subcommand == '-') {
obj->energy_rate = strtod (tokens[offset+DKP_WUP_RESPONSE_HEADER_WATTS], NULL) / 10.0f;
// obj->volts = strtod (tokens[offset+DKP_WUP_RESPONSE_HEADER_VOLTS], NULL) / 10.0f;
obj->voltage = strtod (tokens[offset+DKP_WUP_RESPONSE_HEADER_VOLTS], NULL) / 10.0f;
ret = TRUE;
} else {
egg_debug ("ignoring command '%c'", command);

View file

@ -1,69 +0,0 @@
Unused constants:
#define DKP_WUP_COMMAND_READ_CAL "#F,R,0"
/* Response:
* 0x0 flags
* 0x1 sample count
* 0x2 volts gain
* 0x3 volts bias
* 0x4 amps gain
* 0x5 amps bias
* 0x6 amps offset
* 0x7 low amps gain
* 0x8 low amps bias
* 0x9 low amps offset
* 0xa watts gain
* 0xb watts offset
* 0xc low watts gain
* 0xd low watts offset
*/
#define DKP_WUP_COMMAND_START_LOG "#L,W,3,E,1,1"
#define DKP_WUP_COMMAND_STOP_LOG "#L,R,0"
/* Response:
* 0x0 time stamp
* 0x1 interval
*/
#define DKP_WUP_COMMAND_READ_INTERVAL "#S,R,0"
/* Response:
* 0x0 reserved
* 0x1 interval
*/
#define DKP_WUP_COMMAND_WRITE_INTERVAL "#S,W,2," /* {seconds},{interval} */
#define DKP_WUP_COMMAND_READ_MODE "#M,R,0"
/* Response:
* 0x0 display mode
*/
#define DKP_WUP_COMMAND_WRITE_MODE "#M,W,1," /* {mode} */
#define DKP_WUP_COMMAND_READ_USER "#U,R,0"
/* Response:
* 0x0 cost per kWh
* 0x1 2nd tier cost
* 0x2 2nd tier threshold
* 0x3 duty cycle threshold
*/
#define DKP_WUP_COMMAND_WRITE_USER "#U,W,0"
/* Response:
* 0x0 kwh_cost
* 0x1 2nd_tier_cost
* 0x2 2nd_tier_threshold
* 0x3 duty_cycle_threshold
*/
#define DKP_WUP_COMMAND_READ_HEADER "#H,R,0"
/* Response:
* 0x? One of the DKP_WUP_RESPONSE_HEADER_x constants */
#define DKP_WUP_RESPONSE_HEADER_AMPS 0x2
#define DKP_WUP_RESPONSE_HEADER_KWH 0x3
#define DKP_WUP_RESPONSE_HEADER_COST 0x4
#define DKP_WUP_RESPONSE_HEADER_MONTHLY_KWH 0x5
#define DKP_WUP_RESPONSE_HEADER_MONTHLY_COST 0x6
#define DKP_WUP_RESPONSE_HEADER_MAX_WATTS 0x7
#define DKP_WUP_RESPONSE_HEADER_MAX_VOLTS 0x8
#define DKP_WUP_RESPONSE_HEADER_MAX_AMPS 0x9
#define DKP_WUP_RESPONSE_HEADER_MIN_WATTS 0xa
#define DKP_WUP_RESPONSE_HEADER_MIN_VOLTS 0xb
#define DKP_WUP_RESPONSE_HEADER_MIN_AMPS 0xc
#define DKP_WUP_RESPONSE_HEADER_POWER_FACTOR 0xd
#define DKP_WUP_RESPONSE_HEADER_DUTY_CYCLE 0xe
#define DKP_WUP_RESPONSE_HEADER_POWER_CYCLE 0xf

View file

@ -259,6 +259,12 @@
</doc:para></doc:description></doc:doc>
</property>
<property name="voltage" type="d" access="read">
<doc:doc><doc:description><doc:para>
Voltage in the Cell or being recorded by the meter.
</doc:para></doc:description></doc:doc>
</property>
<property name="time-to-empty" type="x" access="read">
<doc:doc><doc:description><doc:para>
Number of seconds until the power source is considered empty.