69
G_DEFINE_TYPE (PowerdSource, powerd_source, G_TYPE_OBJECT);
72
struct _PowerdSourcePrivate {
73
GDBusConnection * session;
75
ComCanonicalPowerd * skel;
79
#define POWERD_SOURCE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), POWERD_TYPE_SOURCE, PowerdSourcePrivate))
81
GSList *requests = NULL;
52
83
static const char *off_state = "mem";
53
84
static const char *on_state = "on";
109
static void powerd_source_class_init (PowerdSourceClass * klass);
110
static void powerd_source_init (PowerdSource * self);
111
static void powerd_source_dispose (GObject * object);
112
static void powerd_source_finalize (GObject * object);
113
static const gchar * state_to_string(int state);
78
115
static state button_state = BUTTON_UP;
119
powerd_source_init (PowerdSource *self)
121
self->priv = POWERD_SOURCE_GET_PRIVATE(self);
122
self->priv->session = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, NULL);
128
powerd_source_class_init (PowerdSourceClass *self)
130
GObjectClass *object_class = G_OBJECT_CLASS (self);
131
g_type_class_add_private (self, sizeof (PowerdSourcePrivate));
132
object_class->dispose = powerd_source_dispose;
133
object_class->finalize = powerd_source_finalize;
137
/* Clean up references */
139
powerd_source_dispose (GObject *object)
141
PowerdSource * self = POWERD_SOURCE(object);
142
if (self->priv->skel != NULL) {
143
g_dbus_interface_skeleton_unexport(G_DBUS_INTERFACE_SKELETON(self->priv->skel));
144
g_clear_object(&self->priv->skel);
146
g_clear_object(&self->priv->session);
152
powerd_source_finalize (GObject *object)
81
158
void get_brightness_path (void)
370
/* simple helper for debugging */
372
state_to_string(int state)
376
return "STATE_ACTIVE";
378
// you really shouldnt get this state since it's not requestable
381
return "STATE_SUSPEND";
390
handle_list_requests (PowerdSource *obj, GDBusMethodInvocation *invocation)
392
GSList *iterator = NULL;
394
g_message("no requests active");
397
for (iterator = requests; iterator; iterator = iterator->next) {
398
SysStateRequest *sr = (SysStateRequest *)iterator->data;
399
g_message("Owner: %s, Name: %s, State: %d (%s)",\
400
sr->owner->str, sr->name->str, sr->state,\
401
state_to_string(sr->state));
404
g_dbus_method_invocation_return_value(invocation, NULL);
296
410
int main(int argc, char** argv)
412
GError *error = NULL;
299
413
GMainLoop* main_loop = NULL;
301
415
main_loop = g_main_loop_new (NULL, FALSE);
417
PowerdSource *source = (PowerdSource *)g_object_new(POWERD_TYPE_SOURCE, NULL);
418
source->priv->skel = com_canonical_powerd_skeleton_new();
419
source->priv->path = "/com/canonical/powerd";
303
421
AndroidEventListener listener;
304
422
listener.on_new_event = on_new_event;
312
430
android_input_stack_initialize(&listener, &config);
313
431
android_input_stack_start();
316
433
get_brightness_path();
435
if (!g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(source->priv->skel),
436
source->priv->session, source->priv->path, &error)) {
437
g_error("Unable to export skeleton on path '%s': %s", source->priv->path, error->message);
443
// g_signal_connect(G_OBJECT(source->priv->skel), "handle-request-state",\
444
G_CALLBACK(handle_request_state), source);
445
g_signal_connect(G_OBJECT(source->priv->skel), "handle-list-requests",\
446
G_CALLBACK(handle_list_requests), source);
317
448
g_main_loop_run(main_loop);
319
450
android_input_stack_stop();
320
451
android_input_stack_shutdown();
453
// XXX - mfisch need to cleanup our list of active requests