lots of changes
diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index 4dacbe9..a290653 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -7,88 +7,59 @@
 #include <sys/stat.h>

 #include <sys/mman.h>

 #include "interfaces/power_control.h"

+#include "objects/openbmc_utilities.h"

 

 /* ---------------------------------------------------------------------------------------------------- */

 static const gchar* dbus_object_path = "/org/openbmc/control/Power";

 static const gchar* dbus_name        = "org.openbmc.control.Power";

 

-// Platform specific config

-

-#define FSI_CLK		4	//GPIOA4

-#define FSI_DAT		5	//GPIOA5

-#define CRONUS_SEL	6	//GPIOA6

-#define PCIE_RST_N	13	//GPIOB5

-#define PEX_PERST_N	14	//GPIOB6

-#define POWER		33    	//GPIOE1

-#define PGOOD		23    	//GPIOC7

-#define FSI_ENABLE      24      //GPIOD0

-

-/* Where to put the firmware image if booting from memory */

-#define MEM_IMG_BASE (0x54000000)

-

-/* Start of flash memory if booting from flash */

-#define FLASH_IMG_BASE (0x30000000)

-

-/* LPC registers */

-#define LPC_BASE		0x1e789000

-#define LPC_HICR6		0x80

-#define LPC_HICR7		0x88

-#define LPC_HICR8		0x8c

-

-

-

+GPIO power_pin    = (GPIO){ "POWER_PIN" };

+GPIO pgood        = (GPIO){ "PGOOD" };

 

 static GDBusObjectManagerServer *manager = NULL;

-static PowerControl *power_control = NULL;

-

-static guint tmp_pgood = 0;

+static ControlPower *control_power = NULL;

 

 static gboolean

-on_set_power_state (PowerControl          *pwr,

+on_set_power_state (ControlPower          *pwr,

                 GDBusMethodInvocation  *invocation,

                 guint                   state,

                 gpointer                user_data)

 {

-  if (state > 1)

-  {

-      g_dbus_method_invocation_return_dbus_error (invocation,

-                                                  "org.openbmc.PowerControl.Error.Failed",

-                                                  "Invalid power state");

-      return TRUE;

-  }

-  if (state == power_control_get_state(pwr))

-  {

-      g_dbus_method_invocation_return_dbus_error (invocation,

-                                                  "org.openbmc.PowerControl.Error.Failed",

-                                                  "Power Control is already at requested state");

-      return TRUE;     

-  }

+	if (state > 1)

+	{

+		g_dbus_method_invocation_return_dbus_error (invocation,

+                                                "org.openbmc.ControlPower.Error.Failed",

+                                                "Invalid power state");

+		return TRUE;

+	}

+	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;     

+	}

 

-  // TODO: Implement gpio toggling

-  g_print("Set power state: %d\n",state);

-  if (state==1)

-  {

-    g_print("Turn on\n");

-    tmp_pgood=1;

-  }

-  else

-  {

-    g_print("Turn off\n");

-    tmp_pgood=0;

-  }

-  power_control_set_state(pwr,state);

-  power_control_complete_set_power_state(pwr,invocation);

-  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);

+	return TRUE;

 }

 

 static gboolean

-on_get_power_state (PowerControl          *pwr,

+on_get_power_state (ControlPower          *pwr,

                 GDBusMethodInvocation  *invocation,

                 gpointer                user_data)

 {

-  guint pgood = power_control_get_pgood(pwr);

-  power_control_complete_get_power_state(pwr,invocation,pgood);

-  return TRUE;

+	guint pgood = control_power_get_pgood(pwr);

+	control_power_complete_get_power_state(pwr,invocation,pgood);

+	return TRUE;

 }

 

 static void 

@@ -96,39 +67,41 @@
                  const gchar     *name,

                  gpointer         user_data)

 {

-  ObjectSkeleton *object;

-  guint n;

+	ObjectSkeleton *object;

+	g_print ("Acquired a message bus connection: %s\n",name);

 

-  g_print ("Acquired a message bus connection: %s\n",name);

+	manager = g_dbus_object_manager_server_new (dbus_object_path);

+	gchar *s;

+  	s = g_strdup_printf ("%s/0",dbus_object_path);

+  	object = object_skeleton_new (s);

+  	g_free (s);

 

-  manager = g_dbus_object_manager_server_new (dbus_object_path);

+	control_power = control_power_skeleton_new ();

+	object_skeleton_set_control_power (object, control_power);

+	g_object_unref (control_power);

 

-  gchar *s;

-  s = g_strdup_printf ("%s/0",dbus_object_path);

-  object = object_skeleton_new (s);

-  g_free (s);

-

-  power_control = power_control_skeleton_new ();

-  object_skeleton_set_power_control (object, power_control);

-  g_object_unref (power_control);

-

-  //define method callbacks here

-  g_signal_connect (power_control,

+	//define method callbacks here

+	g_signal_connect (control_power,

                     "handle-set-power-state",

                     G_CALLBACK (on_set_power_state),

                     NULL); /* user_data */

 

-  g_signal_connect (power_control,

+	g_signal_connect (control_power,

                     "handle-get-power-state",

                     G_CALLBACK (on_get_power_state),

                     NULL); /* user_data */

 

-  /* Export the object (@manager takes its own reference to @object) */

-  g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));

-  g_object_unref (object);

+	/* Export the object (@manager takes its own reference to @object) */

+	g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));

+	g_object_unref (object);

 

-  /* Export all objects */

-  g_dbus_object_manager_server_set_connection (manager, connection);

+	/* Export all objects */

+	g_dbus_object_manager_server_set_connection (manager, connection);

+

+	// get gpio device paths

+	gpio_init(connection,&power_pin);

+	gpio_init(connection,&pgood);

+	gpio_open(&pgood);

 }

 

 static void

@@ -150,28 +123,37 @@
 static gboolean

 poll_pgood()

 {

-  guint pgood = power_control_get_pgood(power_control);

-  //TOOD:  Change to actually read gpio

-  guint gpio = tmp_pgood;

+	if (pgood.fd >= 0)

+	{

+		uint8_t gpio = gpio_read(&pgood);

 

-  g_print("Polling pgood:  %d\n",gpio);

-

-  //if changed, set property and emit signal

-  if (gpio != power_control_get_pgood(power_control))

-  {

-     power_control_set_pgood(power_control,gpio);

-     if (gpio==0)

-     {

-       power_control_emit_power_lost(power_control);

-     }

-     else

-     {

-       power_control_emit_power_good(power_control);

-     }

-  }

-  return TRUE;

+		//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);

+ 			}

+		}

+	}

+	else

+	{

+		//TODO: error handling

+		printf("Unable to read pgood\n");

+	}

+	return TRUE;

 }

 

+

+

+/*----------------------------------------------------------------*/

+/* Main Event Loop                                                */

+

 gint

 main (gint argc, gchar *argv[])

 {