lots of changes
diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index ce9144b..0190fdf 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -6,12 +6,12 @@
#include <unistd.h>
#include <sys/stat.h>
#include <sys/mman.h>
-#include "interfaces/control.h"
+#include "interfaces/openbmc_intf.h"
#include "openbmc.h"
#include "gpio.h"
/* ---------------------------------------------------------------------------------------------------- */
-static const gchar* dbus_object_path = "/org/openbmc/control/Power";
+static const gchar* dbus_object_path = "/org/openbmc/control";
static const gchar* dbus_name = "org.openbmc.control.Power";
GPIO power_pin = (GPIO){ "POWER_PIN" };
@@ -19,6 +19,9 @@
static GDBusObjectManagerServer *manager = NULL;
+guint tmp_pgood = 0;
+guint last_pgood = 0;
+
static gboolean poll_pgood(gpointer user_data)
{
ControlPower *control_power = object_get_control_power((Object*)user_data);
@@ -26,22 +29,32 @@
EventLog* event_log = object_get_event_log((Object*)user_data);
control_emit_heartbeat(control,dbus_name);
- //if (pgood.fd >= 0)
- //{
- uint8_t gpio = gpio_read(&pgood);
- //if changed, set property and emit signal
- if (gpio != control_power_get_pgood(control_power))
- {
- control_power_set_pgood(control_power,gpio);
- if (gpio==0)
- {
- control_power_emit_power_lost(control_power);
- }
- else
- {
- control_power_emit_power_good(control_power);
- }
+ //For simulation, remove
+ if (tmp_pgood!=last_pgood) {
+ if (tmp_pgood == 1) {
+ control_emit_goto_system_state(control,"POWERED_ON");
+ } else {
+ control_emit_goto_system_state(control,"POWERED_OFF");
}
+ }
+
+ last_pgood = tmp_pgood;
+ uint8_t gpio = gpio_read(&pgood);
+ //if changed, set property and emit signal
+ if (gpio != control_power_get_pgood(control_power))
+ {
+ control_power_set_pgood(control_power,gpio);
+ if (gpio==0)
+ {
+ control_power_emit_power_lost(control_power);
+ control_emit_goto_system_state(control,"POWERED_OFF");
+ }
+ else
+ {
+ control_power_emit_power_good(control_power);
+ control_emit_goto_system_state(control,"POWERED_ON");
+ }
+ }
return TRUE;
}
@@ -53,6 +66,7 @@
guint state,
gpointer user_data)
{
+ Control* control = object_get_control((Object*)user_data);
if (state > 1)
{
g_dbus_method_invocation_return_dbus_error (invocation,
@@ -69,10 +83,20 @@
else
{
g_print("Set power state: %d\n",state);
+ //temporary until real hardware works
+ tmp_pgood = state;
gpio_open(&power_pin);
gpio_write(&power_pin,!state);
gpio_close(&power_pin);
control_power_set_state(pwr,state);
+ if (state == 1)
+ {
+ control_emit_goto_system_state(control,"POWERING_ON");
+ }
+ else
+ {
+ control_emit_goto_system_state(control,"POWERING_OFF");
+ }
}
return TRUE;
}
@@ -104,7 +128,7 @@
gpointer user_data)
{
ObjectSkeleton *object;
- g_print ("Acquired a message bus connection: %s\n",name);
+ //g_print ("Acquired a message bus connection: %s\n",name);
cmdline *cmd = user_data;
if (cmd->argc < 2)
{
@@ -117,6 +141,7 @@
{
gchar *s;
s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[i]);
+ g_print("%s\n",s);
object = object_skeleton_new (s);
g_free (s);
@@ -136,7 +161,7 @@
g_signal_connect (control_power,
"handle-set-power-state",
G_CALLBACK (on_set_power_state),
- NULL); /* user_data */
+ object); /* user_data */
g_signal_connect (control_power,
"handle-get-power-state",
@@ -168,7 +193,7 @@
const gchar *name,
gpointer user_data)
{
- g_print ("Acquired the name %s\n", name);
+ //g_print ("Acquired the name %s\n", name);
}
static void
@@ -176,7 +201,7 @@
const gchar *name,
gpointer user_data)
{
- g_print ("Lost the name %s\n", name);
+ //g_print ("Lost the name %s\n", name);
}