43
43
#define HAL_BATTERY_GET_PRIVATE(o) \
44
44
(G_TYPE_INSTANCE_GET_PRIVATE((o), HAL_TYPE_BATTERY, HalBatteryPrivate))
46
#define FREE_STR_PROP(str) \
46
51
struct HalBatteryPrivate
48
53
/* Properties read-only */
98
99
G_DEFINE_TYPE(HalBattery, hal_battery, HAL_TYPE_DEVICE)
102
hal_battery_get_info_string (HalBattery *battery, const gchar *key)
106
if ( hal_device_has_key (HAL_DEVICE (battery), key) )
108
val = hal_device_get_property_string (HAL_DEVICE(battery), key);
101
115
hal_battery_class_init(HalBatteryClass *klass)
231
245
battery->priv->is_charging = FALSE;
232
246
battery->priv->is_discharging = FALSE;
234
battery->priv->unit = NULL;
235
battery->priv->vendor = NULL;
236
battery->priv->technology = NULL;
237
battery->priv->model = NULL;
238
248
battery->priv->type = HAL_DEVICE_TYPE_UNKNOWN;
240
250
battery->priv->percentage = 0;
245
255
battery->priv->reporting_last_full = 0;
258
static const gchar * G_GNUC_PURE
259
_translate_technology (const gchar *tech)
261
if ( !g_strcmp0 (tech, "lithium-ion") )
263
return _("Lithium ion");
265
else if ( !g_strcmp0 (tech, "lead-acid") )
267
return _("Lead acid");
269
else if ( !g_strcmp0 (tech, "lithium-polymer") )
271
return _("Lithium polymer");
273
else if ( !g_strcmp0 (tech, "nickel-metal-hydride") )
275
return _("Nickel metal hydride");
281
static const gchar * G_GNUC_PURE
282
_translate_unit (const gchar *unit)
284
if ( !g_strcmp0 (unit, "mWh") )
288
else if ( !g_strcmp0 (unit, "mAh") )
293
return _("Unknown unit");
248
296
static void hal_battery_get_property(GObject *object,
267
315
case PROP_IS_DISCHARGING:
268
316
g_value_set_boolean (value, battery->priv->is_discharging);
271
g_value_set_string (value, battery->priv->unit);
323
val = hal_battery_get_info_string (battery, "battery.reporting.unit");
326
unit = g_strdup(_translate_unit (val));
329
g_value_set_string (value, unit);
273
332
case PROP_TECHNOLOGY:
274
g_value_set_string (value, battery->priv->technology);
335
gchar *technology = NULL;
336
val = hal_battery_get_info_string (battery, "battery.technology");
339
technology = g_strdup (_translate_technology (val));
343
g_value_set_string (value, technology);
276
347
case PROP_VENDOR:
277
g_value_set_string (value, battery->priv->vendor);
349
gchar *vendor = NULL;
350
vendor = hal_battery_get_info_string (battery, "battery.vendor");
351
g_value_set_string (value, vendor);
280
g_value_set_string (value, battery->priv->model);
358
model = hal_battery_get_info_string (battery, "battery.model");
359
g_value_set_string (value, model);
282
363
case PROP_PERCENTAGE:
283
364
g_value_set_uint (value, battery->priv->percentage);
311
392
battery = HAL_BATTERY(object);
313
if ( battery->priv->technology )
314
g_free (battery->priv->technology);
316
if ( battery->priv->vendor )
317
g_free (battery->priv->vendor);
319
if ( battery->priv->model )
320
g_free (battery->priv->model);
322
if ( battery->priv->unit )
323
g_free (battery->priv->unit);
325
394
G_OBJECT_CLASS(hal_battery_parent_class)->finalize(object);
427
496
battery->priv->time = 0;
429
//FIXME: calculate the percentage if it is not found on HAL
430
498
if ( hal_device_has_key(HAL_DEVICE(battery), "battery.charge_level.percentage") )
431
499
battery->priv->percentage =
432
500
hal_device_get_property_int(HAL_DEVICE(battery), "battery.charge_level.percentage");
435
503
if ( hal_device_has_key(HAL_DEVICE(battery), "battery.reporting.last_full") )
436
504
battery->priv->reporting_last_full =
437
505
hal_device_get_property_int(HAL_DEVICE(battery), "battery.reporting.last_full");
441
static const gchar * G_GNUC_PURE
442
_translate_technology (const gchar *tech)
444
if ( !g_strcmp0 (tech, "lithium-ion") )
446
return _("Lithium ion");
448
else if ( !g_strcmp0 (tech, "lead-acid") )
450
return _("Lead acid");
452
else if ( !g_strcmp0 (tech, "lithium-polymer") )
454
return _("Lithium polymer");
456
else if ( !g_strcmp0 (tech, "nickel-metal-hydride") )
458
return _("Nickel metal hydride");
464
static const gchar * G_GNUC_PURE
465
_translate_unit (const gchar *unit)
467
if ( !g_strcmp0 (unit, "mWh") )
471
else if ( !g_strcmp0 (unit, "mAh") )
476
return _("Unknown unit");
480
hal_battery_get_battery_info (HalBattery *battery)
482
if ( hal_device_has_key (HAL_DEVICE(battery), "battery.technology") )
484
gchar *tech = hal_device_get_property_string (HAL_DEVICE(battery), "battery.technology");
487
battery->priv->technology = g_strdup (_translate_technology (tech));
492
if ( hal_device_has_key (HAL_DEVICE(battery), "battery.vendor") )
494
gchar *vendor = hal_device_get_property_string (HAL_DEVICE(battery), "battery.vendor");
497
battery->priv->vendor = g_strdup ( vendor);
502
if ( hal_device_has_key (HAL_DEVICE(battery), "battery.model") )
504
gchar *model = hal_device_get_property_string (HAL_DEVICE(battery), "battery.model");
507
battery->priv->model = g_strdup (model);
512
507
battery->priv->reporting_design = hal_device_get_property_int (HAL_DEVICE(battery),
513
"battery.reporting.design");
515
if ( hal_device_has_key (HAL_DEVICE(battery), "battery.reporting.unit") )
517
gchar *unit = hal_device_get_property_string (HAL_DEVICE(battery), "battery.reporting.unit");
521
battery->priv->unit = g_strdup(_translate_unit(unit));
508
"battery.reporting.design");