diff options
Diffstat (limited to 'src/dkp-wakeups.c')
-rw-r--r-- | src/dkp-wakeups.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/dkp-wakeups.c b/src/dkp-wakeups.c index 019c136..c081ae3 100644 --- a/src/dkp-wakeups.c +++ b/src/dkp-wakeups.c @@ -68,6 +68,12 @@ struct DkpWakeupsPrivate guint poll_kernel_id; guint disable_id; gboolean polling_enabled; + gboolean has_capability; +}; + +enum { + PROP_0, + PROP_HAS_CAPABILITY, }; enum { @@ -165,6 +171,12 @@ dkp_wakeups_get_total (DkpWakeups *wakeups, guint *value, GError **error) { gboolean ret; + /* no capability */ + if (!wakeups->priv->has_capability) { + *error = g_error_new (DKP_DAEMON_ERROR, DKP_DAEMON_ERROR_GENERAL, "no hardware support"); + return FALSE; + } + /* start if not already started */ ret = dkp_wakeups_timerstats_enable (wakeups); @@ -189,6 +201,12 @@ dkp_wakeups_get_data (DkpWakeups *wakeups, GPtrArray **data, GError **error) GPtrArray *array; DkpWakeupsObj *obj; + /* no capability */ + if (!wakeups->priv->has_capability) { + *error = g_error_new (DKP_DAEMON_ERROR, DKP_DAEMON_ERROR_GENERAL, "no hardware support"); + return FALSE; + } + /* start if not already started */ dkp_wakeups_timerstats_enable (wakeups); @@ -637,6 +655,28 @@ dkp_wakeups_timerstats_enable (DkpWakeups *wakeups) } /** + * dkp_wakeups_get_property: + **/ +static void +dkp_wakeups_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +{ + DkpWakeups *wakeups; + + wakeups = DKP_WAKEUPS (object); + + switch (prop_id) { + + case PROP_HAS_CAPABILITY: + g_value_set_boolean (value, wakeups->priv->has_capability); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +/** * dkp_wakeups_class_init: **/ static void @@ -644,6 +684,7 @@ dkp_wakeups_class_init (DkpWakeupsClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = dkp_wakeups_finalize; + object_class->get_property = dkp_wakeups_get_property; signals [TOTAL_CHANGED] = g_signal_new ("total-changed", @@ -658,6 +699,14 @@ dkp_wakeups_class_init (DkpWakeupsClass *klass) NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + g_object_class_install_property (object_class, + PROP_HAS_CAPABILITY, + g_param_spec_boolean ("has-capability", + "Has capability", + "If wakeups functionality is available", + FALSE, + G_PARAM_READABLE)); + /* introspection */ dbus_g_object_type_install_info (DKP_TYPE_WAKEUPS, &dbus_glib_dkp_wakeups_object_info); @@ -678,6 +727,7 @@ dkp_wakeups_init (DkpWakeups *wakeups) wakeups->priv->total_ave = 0; wakeups->priv->poll_userspace_id = 0; wakeups->priv->poll_kernel_id = 0; + wakeups->priv->has_capability = FALSE; wakeups->priv->polling_enabled = FALSE; wakeups->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); @@ -687,6 +737,12 @@ dkp_wakeups_init (DkpWakeups *wakeups) return; } + /* test if we have an interface */ + if (g_file_test (DKP_WAKEUPS_SOURCE_KERNEL, G_FILE_TEST_EXISTS) || + g_file_test (DKP_WAKEUPS_SOURCE_KERNEL, G_FILE_TEST_EXISTS)) { + wakeups->priv->has_capability = TRUE; + } + /* register on the bus */ dbus_g_connection_register_g_object (wakeups->priv->connection, "/org/freedesktop/DeviceKit/Power/Wakeups", G_OBJECT (wakeups)); } |