lots of changes
diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index 835ed7a..53df62d 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -21,9 +21,9 @@
 

 static GDBusObjectManagerServer *manager = NULL;

 

-guint tmp_pgood = 0;

-guint last_pgood = 0;

-guint pgood_timeout_count = 0;

+//guint tmp_pgood = 0;

+//guint last_pgood = 0;

+time_t pgood_timeout_start = 0;

 

 static gboolean poll_pgood(gpointer user_data)

 {

@@ -38,21 +38,22 @@
 	guint poll_int = control_get_poll_interval(control);

 	if (poll_int == 0)

 	{

-		event_log_emit_event_log(event_log, LOG_ALERT, "Poll interval cannot be 0");

+		event_log_emit_event_log(event_log, LOG_ALERT, "Poll interval cannot be 0",0);

 		return FALSE;

 	}

-	//calculate timeout count

-	guint pgood_timeout = control_power_get_pgood_timeout(control_power)/poll_int;

-

-	if (pgood_timeout_count > pgood_timeout)

+	//handle timeout

+	time_t current_time = time(NULL);

+	if (difftime(current_time,pgood_timeout_start) > control_power_get_pgood_timeout(control_power)

+		&& pgood_timeout_start != 0)

 	{

-		event_log_emit_event_log(event_log, LOG_ALERT, "Pgood poll timeout");

+		event_log_emit_event_log(event_log, LOG_ALERT, "Pgood poll timeout",0);

 		// set timeout to 0 so timeout doesn't happen again

 		control_power_set_pgood_timeout(control_power,0);

-		pgood_timeout_count = 0;

+		pgood_timeout_start = 0;

 		return TRUE;

 	}

 	//For simulation, remove

+	/*

 	if (tmp_pgood!=last_pgood) {

 		if (tmp_pgood == 1) {

 			control_emit_goto_system_state(control,"POWERED_ON");

@@ -60,10 +61,14 @@
 			control_emit_goto_system_state(control,"POWERED_OFF");

 		}

 	}

-

+	

 	last_pgood = tmp_pgood;

+	*/

 	uint8_t gpio;

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

+	

+	int rc = gpio_open(&pgood);

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

+	gpio_close(&pgood);	

 	if (rc == GPIO_OK)

 	{

 		//if changed, set property and emit signal

@@ -82,18 +87,21 @@
  			}

 		}

 	} else {

-		event_log_emit_event_log(event_log, LOG_ALERT, "GPIO read error");

+		event_log_emit_event_log(event_log, LOG_ALERT, "GPIO read error",rc);

 		//return FALSE;

 	}

 	//pgood is not at desired state yet

+	g_print("GPIO: %d;  %d\n",gpio,control_power_get_state(control_power));

 	if (gpio != control_power_get_state(control_power) &&

-		control_power_get_pgood_timeout(control_power) != 0)

+		control_power_get_pgood_timeout(control_power) > 0)

 	{

-		pgood_timeout_count++;

+		if (pgood_timeout_start == 0 ) {

+			pgood_timeout_start = current_time;

+		}

 	}

 	else 

 	{

-		pgood_timeout_count = 0;

+		pgood_timeout_start = 0;

 	}

 	return TRUE;

 }

@@ -126,13 +134,13 @@
 	{

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

 		//temporary until real hardware works

-		tmp_pgood = state;

+		//tmp_pgood = state;

 		int error = 0;

 		do {

 			error = gpio_open(&power_pin);

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

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

 			error = gpio_write(&power_pin,!state);

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

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

 			gpio_close(&power_pin);

 			control_power_set_state(pwr,state);

 			if (state == 1) {

@@ -143,7 +151,7 @@
 		} while(0);

 		if (error != GPIO_OK)

 		{

-			event_log_emit_event_log(event_log, LOG_ALERT, "GPIO setup error");

+			event_log_emit_event_log(event_log, LOG_ALERT, "GPIO set power state error",error);

 		}

 	}

 	return TRUE;

@@ -154,6 +162,7 @@
          GDBusMethodInvocation  *invocation,

          gpointer                user_data)

 {

+	pgood_timeout_start = 0;

 	guint poll_interval = control_get_poll_interval(control);

 	g_timeout_add(poll_interval, poll_pgood, user_data);

 	control_complete_init(control,invocation);

@@ -184,49 +193,45 @@
 		return;

 	}	

   	manager = g_dbus_object_manager_server_new (dbus_object_path);

-  	int i=0;

-  	for (i=1;i<cmd->argc;i++)

-  	{

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

+	gchar *s;

+  	s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[1]);

+	g_print("%s\n",s);

+  	object = object_skeleton_new (s);

+  	g_free (s);

 

-		ControlPower* control_power = control_power_skeleton_new ();

-		object_skeleton_set_control_power (object, control_power);

-		g_object_unref (control_power);

+	ControlPower* control_power = control_power_skeleton_new ();

+	object_skeleton_set_control_power (object, control_power);

+	g_object_unref (control_power);

+	

+	Control* control = control_skeleton_new ();

+	object_skeleton_set_control (object, control);

+	g_object_unref (control);

 

-		Control* control = control_skeleton_new ();

-		object_skeleton_set_control (object, control);

-		g_object_unref (control);

+	EventLog* event_log = event_log_skeleton_new ();

+	object_skeleton_set_event_log (object, event_log);

+	g_object_unref (event_log);

 

-		EventLog* event_log = event_log_skeleton_new ();

-		object_skeleton_set_event_log (object, event_log);

-		g_object_unref (event_log);

+	//define method callbacks here

+	g_signal_connect (control_power,

+       	            "handle-set-power-state",

+               	    G_CALLBACK (on_set_power_state),

+               	    object); /* user_data */

 

-		//define method callbacks here

-		g_signal_connect (control_power,

-        	            "handle-set-power-state",

-                	    G_CALLBACK (on_set_power_state),

-                	    object); /* user_data */

+	g_signal_connect (control_power,

+               	    "handle-get-power-state",

+               	    G_CALLBACK (on_get_power_state),

+               	    NULL); /* user_data */

 

-		g_signal_connect (control_power,

-                	    "handle-get-power-state",

-                	    G_CALLBACK (on_get_power_state),

-                	    NULL); /* user_data */

-

-		g_signal_connect (control,

-                	    "handle-init",

-                	    G_CALLBACK (on_init),

-                	    object); /* user_data */

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

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

 

@@ -239,12 +244,21 @@
 		rc = gpio_init(connection,&pgood);

 		if (rc != GPIO_OK) { break; }

 		rc = gpio_open(&pgood);

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

+

 	} while(0);

 	if (rc != GPIO_OK)

 	{

-		//event_log_emit_event_log(event_log, LOG_ALERT, "GPIO setup error");

+		event_log_emit_event_log(event_log, LOG_ALERT, "GPIO setup error",rc);

 	}

+	int rc = gpio_open(&pgood);

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

+	gpio_close(&pgood);	

+	if (rc == GPIO_OK) {

+		control_power_set_pgood(control_power,gpio);

+

+	} else {

+	}

+

 }

 

 static void