added some error handling
diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index 0190fdf..3395502 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -9,11 +9,13 @@
 #include "interfaces/openbmc_intf.h"

 #include "openbmc.h"

 #include "gpio.h"

+#include "event_log.h"

 

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

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

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

 

+//This object will use these GPIOs

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

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

 

@@ -21,6 +23,7 @@
 

 guint tmp_pgood = 0;

 guint last_pgood = 0;

+guint pgood_timeout_count = 0;

 

 static gboolean poll_pgood(gpointer user_data)

 {

@@ -28,7 +31,17 @@
 	Control* control = object_get_control((Object*)user_data);

 	EventLog* event_log = object_get_event_log((Object*)user_data);

 	control_emit_heartbeat(control,dbus_name);

+	const gchar* obj_path = g_dbus_object_get_object_path((GDBusObject*)user_data);

 

+	guint pgood_timeout = control_power_get_pgood_timeout(control_power)/

+		control_get_poll_interval(control);

+

+	if (pgood_timeout_count > pgood_timeout)

+	{

+		event_log_emit_event_log(event_log, FATAL, "Pgood poll timeout");

+		control_power_set_pgood_timeout(control_power,0);

+		//return FALSE;

+	}

 	//For simulation, remove

 	if (tmp_pgood!=last_pgood) {

 		if (tmp_pgood == 1) {

@@ -39,21 +52,38 @@
 	}

 

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

+	uint8_t gpio;

+	int rc = gpio_read(&pgood,&gpio);

+	if (rc == GPIO_OK)

 	{

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

- 		}

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

+ 			}

+		}

+	} else {

+		event_log_emit_event_log(event_log, FATAL, "GPIO read error");

+		//return FALSE;

+	}

+	//pgood is not at desired state yet

+	if (gpio != control_power_get_state(control_power) &&

+		control_power_get_pgood_timeout(control_power) != 0)

+	{

+		pgood_timeout_count++;

+	}

+	else 

+	{

+		pgood_timeout_count = 0;

 	}

 	return TRUE;

 }

@@ -67,6 +97,8 @@
                 gpointer                user_data)

 {

 	Control* control = object_get_control((Object*)user_data);

+	EventLog* event_log = object_get_event_log((Object*)user_data);

+	const gchar* obj_path = g_dbus_object_get_object_path((GDBusObject*)user_data);

 	if (state > 1)

 	{

 		g_dbus_method_invocation_return_dbus_error (invocation,

@@ -85,17 +117,23 @@
 		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)

+		int error = 0;

+		do {

+			error = gpio_open(&power_pin);

+			if (error != GPIO_OK) {	break;	}

+			error = gpio_write(&power_pin,!state);

+			if (error != GPIO_OK) {	break;	}

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

+			}

+		} while(0);

+		if (error != GPIO_OK)

 		{

-			control_emit_goto_system_state(control,"POWERING_ON");

-		}

-		else

-		{

-			control_emit_goto_system_state(control,"POWERING_OFF");

+			event_log_emit_event_log(event_log, FATAL, "GPIO setup error");

 		}

 	}

 	return TRUE;

@@ -183,9 +221,15 @@
 	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);

+	do {

+		int rc = GPIO_OK;

+		rc = gpio_init(connection,&power_pin);

+		if (rc != GPIO_OK) { break; }

+		rc = gpio_init(connection,&pgood);

+		if (rc != GPIO_OK) { break; }

+		rc = gpio_open(&pgood);

+		if (rc != GPIO_OK) { break; }

+	} while(0);

 }

 

 static void