lots of changes
diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index c0047bd..ce9144b 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -42,23 +42,6 @@
control_power_emit_power_good(control_power);
}
}
- //}
- //else
- //{
- //TODO: error handling
- /* GVariantBuilder *b;
- GVariant *dict;
- b = g_variant_builder_new (G_VARIANT_TYPE ("a{ss}"));
- g_variant_builder_add (b, "{ss}", "object",dbus_object_path);
- g_variant_builder_add (b, "{ss}", "message", "Unable to read pgood gpio");
- char buf[254];
- sprintf(buf,"%s/gpio%d",pgood.dev,pgood.num);
- g_variant_builder_add (b, "{ss}", "gpio",buf);
-
- dict = g_variant_builder_end (b);
- event_log_emit_event_log(event_log,dict);
-
- }*/
return TRUE;
}
@@ -77,23 +60,31 @@
"Invalid power state");
return TRUE;
}
+ // return from method call
+ control_power_complete_set_power_state(pwr,invocation);
if (state == control_power_get_state(pwr))
{
- g_dbus_method_invocation_return_dbus_error (invocation,
- "org.openbmc.ControlPower.Error.Failed",
- "Power Control is already at requested state");
- return TRUE;
+ g_print("Power already at requested state: %d\n",state);
}
+ else
+ {
+ g_print("Set power state: %d\n",state);
+ gpio_open(&power_pin);
+ gpio_write(&power_pin,!state);
+ gpio_close(&power_pin);
+ control_power_set_state(pwr,state);
+ }
+ return TRUE;
+}
- //go ahead and return from method call
- control_power_complete_set_power_state(pwr,invocation);
-
- g_print("Set power state: %d\n",state);
- gpio_open(&power_pin);
- gpio_write(&power_pin,!state);
- gpio_close(&power_pin);
-
- control_power_set_state(pwr,state);
+static gboolean
+on_init (Control *control,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ guint poll_interval = control_get_poll_interval(control);
+ g_timeout_add(poll_interval, poll_pgood, user_data);
+ control_complete_init(control,invocation);
return TRUE;
}
@@ -152,7 +143,12 @@
G_CALLBACK (on_get_power_state),
NULL); /* user_data */
- g_timeout_add(5000, poll_pgood, object);
+ g_signal_connect (control,
+ "handle-init",
+ G_CALLBACK (on_init),
+ object); /* user_data */
+
+
/* Export the object (@manager takes its own reference to @object) */
g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));