lots of changes
diff --git a/objects/chassis_identify_obj.c b/objects/chassis_identify_obj.c
deleted file mode 100644
index 1206d17..0000000
--- a/objects/chassis_identify_obj.c
+++ /dev/null
@@ -1,151 +0,0 @@
-#include "interfaces/openbmc_intf.h"

-#include <stdio.h>

-#include "openbmc.h"

-#include "gpio.h"

-

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

-static const gchar* dbus_object_path = "/org/openbmc/leds";

-static const gchar* dbus_name        = "org.openbmc.leds.ChassisIdentify";

-

-static GDBusObjectManagerServer *manager = NULL;

-

-GPIO led_gpio = (GPIO){"IDENTIFY"};

-

-static gboolean

-on_set_on       (Led          *led,

-                GDBusMethodInvocation  *invocation,

-                gpointer                user_data)

-{

-	printf("Turn on chassis identify led\n");

-	led_complete_set_on(led,invocation);

-	int rc = GPIO_OK;

-	do {

-		rc = gpio_open(&led_gpio);

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

-		rc = gpio_write(&led_gpio,1); 

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

-	} while(0);

-	gpio_close(&led_gpio);

-	if (rc != GPIO_OK)

-	{

-		printf("ERROR ChassisIdentify: GPIO error %s (rc=%d)\n",led_gpio.name,rc);

-	}

-

-	return TRUE;

-

-}

-

-static gboolean

-on_set_off       (Led          *led,

-                GDBusMethodInvocation  *invocation,

-                gpointer                user_data)

-{

-	g_print("Turn off chassis identify led\n");

-	led_complete_set_off(led,invocation);

-	int rc = GPIO_OK;

-	do {

-		rc = gpio_open(&led_gpio);

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

-		rc = gpio_write(&led_gpio,0); 

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

-	} while(0);

-	gpio_close(&led_gpio);

-	if (rc != GPIO_OK)

-	{

-		printf("ERROR ChassisIdentify: GPIO error %s (rc=%d)\n",led_gpio.name,rc);

-	}

-	return TRUE;

-}

-

-static void 

-on_bus_acquired (GDBusConnection *connection,

-                 const gchar     *name,

-                 gpointer         user_data)

-{

-	ObjectSkeleton *object;

-

-	cmdline *cmd = user_data;

-	if (cmd->argc < 2)

-	{

-		g_print("No objects created.  Put object name(s) on command line\n");

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

-		object = object_skeleton_new (s);

-		g_free (s);

-

-		Led *led = led_skeleton_new ();

-		object_skeleton_set_led (object, led);

-		g_object_unref (led);

-

-		//define method callbacks

-		g_signal_connect (led,

-                    "handle-set-on",

-                    G_CALLBACK (on_set_on),

-                    NULL); /* user_data */

-		g_signal_connect (led,

-                    "handle-set-off",

-                    G_CALLBACK (on_set_off),

-                    NULL);

-

-		led_set_color(led,0);

-		led_set_function(led,"CHASSIS_IDENTIFY");

- 

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

-	gpio_init(connection,&led_gpio);

-

-}

-

-static void

-on_name_acquired (GDBusConnection *connection,

-                  const gchar     *name,

-                  gpointer         user_data)

-{

-}

-

-static void

-on_name_lost (GDBusConnection *connection,

-              const gchar     *name,

-              gpointer         user_data)

-{

-}

-

-

-gint

-main (gint argc, gchar *argv[])

-{

-  GMainLoop *loop;

-  cmdline cmd;

-  cmd.argc = argc;

-  cmd.argv = argv;

-

-  guint id;

-  loop = g_main_loop_new (NULL, FALSE);

-

-  id = g_bus_own_name (DBUS_TYPE,

-                       dbus_name,

-                       G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |

-                       G_BUS_NAME_OWNER_FLAGS_REPLACE,

-                       on_bus_acquired,

-                       on_name_acquired,

-                       on_name_lost,

-                       &cmd,

-                       NULL);

-

-  g_main_loop_run (loop);

-  

-  g_bus_unown_name (id);

-  g_main_loop_unref (loop);

-  return 0;

-}

diff --git a/objects/control_bmc_obj.c b/objects/control_bmc_obj.c
index 4355f63..caba185 100644
--- a/objects/control_bmc_obj.c
+++ b/objects/control_bmc_obj.c
@@ -108,7 +108,7 @@
 	reg_init();

 	#endif

 	control_complete_init(control,invocation);

-	control_emit_goto_system_state(control,"STANDBY");

+	control_emit_goto_system_state(control,"BMC_STARTING");

 	

 	return TRUE;

 }

diff --git a/objects/flash_bios_obj.c b/objects/flash_bios_obj.c
index 928d11b..ebc71aa 100644
--- a/objects/flash_bios_obj.c
+++ b/objects/flash_bios_obj.c
@@ -24,10 +24,10 @@
 		const gchar* name = flash_get_flasher_name(flash);

 		const gchar* inst = flash_get_flasher_instance(flash);

 		const gchar* filename = flash_get_filename(flash);

-

 		status = execl(path, name, inst, filename, NULL);

+		return status;

 	}

-	return status;

+	return 0;

 }

 

 static gboolean

@@ -53,9 +53,18 @@
 		gchar*                  name,

                 gpointer                user_data)

 {

-	printf("Locking BIOS Flash: %s\n",name);

-	shared_resource_set_lock(lock,true);

-	shared_resource_set_name(lock,name);

+	gboolean locked = shared_resource_get_lock(lock);

+	if (locked)

+	{

+		const gchar* name = shared_resource_get_name(lock);

+		printf("ERROR: BIOS Flash is already locked: %s\n",name);

+	}

+	else

+	{	

+		printf("Locking BIOS Flash: %s\n",name);

+		shared_resource_set_lock(lock,true);

+		shared_resource_set_name(lock,name);

+	}

 	shared_resource_complete_lock(lock,invocation);

 	return TRUE;

 }

@@ -347,7 +356,7 @@
                                    object,

                                    NULL );

 		g_free(s);

-		s = g_strdup_printf ("/org/openbmc/control/%s\0",cmd->argv[i]);

+		s = g_strdup_printf ("/org/openbmc/control/%s",cmd->argv[i]);

 		g_dbus_connection_signal_subscribe(connection,

                                    NULL,

                                    "org.openbmc.FlashControl",

diff --git a/objects/pcie_slot_present_obj.c b/objects/pcie_slot_present_obj.c
index cceb637..f1f882b 100644
--- a/objects/pcie_slot_present_obj.c
+++ b/objects/pcie_slot_present_obj.c
@@ -2,6 +2,7 @@
 #include "openbmc.h"

 #include <stdio.h>

 #include <stdbool.h>

+#include <string.h>

 #include "gpio.h"

 

 #define NUM_SLOTS 4

@@ -48,7 +49,7 @@
 

 	g_variant_get(v_result,"(sss)",&obj_info->bus_name,&obj_info->path,&obj_info->intf_name);

 int rc=0;

-	if (strcmp(obj_info->bus_name,"") == 0) {

+	if (strlen(obj_info->bus_name) == 0) {

 		rc = 1;

 	}

 	g_variant_unref(v_result);

@@ -78,7 +79,7 @@
 	return rc; 

 }

 

-void update_fru_obj(GDBusConnection* connection, object_info* obj_info, bool present)

+void update_fru_obj(GDBusConnection* connection, object_info* obj_info, const char* present)

 {

 	GDBusProxy *proxy;

  	GError *error;

@@ -97,7 +98,7 @@
 	g_assert_no_error (error);

 

 	error = NULL;

-	parm = g_variant_new("(b)",present);

+	parm = g_variant_new("(s)",present);

 	

 	result = g_dbus_proxy_call_sync (proxy,

                                    "setPresent",

@@ -142,15 +143,18 @@
 	{

 		object_info obj_info;

 		uint8_t present;

-		bool b_present=false;

+		char* chr_present;

 		do {

 			rc = get_object(sys_proxy,&slots[i],&obj_info);

 			if (rc) { break; }

 			rc = get_presence(c,&slots[i],&present);

-			if (present==1) { b_present=true; }

 			//if (rc) { break; }

 			// TODO: send correct state

-			update_fru_obj(c,&obj_info,b_present);

+			if (present == 1) {

+				update_fru_obj(c,&obj_info,"PRESENT");

+			} else {

+				update_fru_obj(c,&obj_info,"NOT PRESENT");

+			}

 		} while(0);

 	}

 

diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index a943b5e..bdb7c9a 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -64,16 +64,18 @@
  			if (gpio==0)

  			{

  				control_power_emit_power_lost(control_power);

-				control_emit_goto_system_state(control,"POWERED_OFF");

+				control_emit_goto_system_state(control,"HOST_POWERED_OFF");

  			}

  			else

  			{

  				control_power_emit_power_good(control_power);

-				control_emit_goto_system_state(control,"POWERED_ON");

+				control_emit_goto_system_state(control,"HOST_POWERED_ON");

  			}

 		}

 	} else {

 		printf("ERROR PowerControl: GPIO read error (gpio=%s,rc=%d)\n",pgood.name,rc);

+		//return false so poll won't get called anymore

+		return FALSE;

 	}

 	//pgood is not at desired state yet

 	if (gpio != control_power_get_state(control_power) &&

@@ -118,9 +120,9 @@
 		int error = 0;

 		do {

 			if (state == 1) {

-				control_emit_goto_system_state(control,"POWERING_ON");

+				control_emit_goto_system_state(control,"HOST_POWERING_ON");

 			} else {

-				control_emit_goto_system_state(control,"POWERING_OFF");

+				control_emit_goto_system_state(control,"HOST_POWERING_OFF");

 			}

 			error = gpio_open(&power_pin);

 			if (error != GPIO_OK) { break;	}

diff --git a/objects/sensor_host_status_obj.c b/objects/sensor_host_status_obj.c
deleted file mode 100644
index d631200..0000000
--- a/objects/sensor_host_status_obj.c
+++ /dev/null
@@ -1,181 +0,0 @@
-#include "interfaces/openbmc_intf.h"

-#include "openbmc.h"

-

-#define BOOTED 100

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

-

-static const gchar* dbus_object_path = "/org/openbmc/sensors";

-static const gchar* dbus_name        = "org.openbmc.sensors.HostStatus";

-static guint heartbeat = 0;

-

-static GDBusObjectManagerServer *manager = NULL;

-

-static gboolean

-on_init         (SensorValue  *sen,

-                GDBusMethodInvocation  *invocation,

-                gpointer                user_data)

-{

-	sensor_value_complete_init(sen,invocation);

-	return TRUE;

-}

-

-static gboolean

-on_init_control         (Control *control,

-                GDBusMethodInvocation  *invocation,

-                gpointer                user_data)

-{

-	control_complete_init(control,invocation);

-	return TRUE;

-}

-static gboolean

-on_set_value    (SensorValue *sen,

-                GDBusMethodInvocation  *invocation,

-		guchar                  host_status,

-                gpointer                user_data)

-{

-	SensorValue *v = object_get_sensor_value((Object*)user_data);

-	SensorMatch *match = object_get_sensor_match((Object*)user_data);

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

-	

-	GVariant *old_value = sensor_value_get_value(sen);

-	GVariant *value = NEW_VARIANT_B(host_status);

-	if (VARIANT_COMPARE(old_value,value) != 0)

-	{

-		sensor_value_set_value(sen, value);

-		sensor_value_emit_changed(sen, value, "");

-		if (host_status == BOOTED)

-		{

-			sensor_match_set_state(match,host_status);

-			sensor_match_emit_sensor_match(match,host_status);

-			control_emit_goto_system_state(control,"BOOTED");

-		}

-	}

-	sensor_value_complete_set_value(sen,invocation);

-	return TRUE;

-}

-

-static void 

-on_bus_acquired (GDBusConnection *connection,

-                 const gchar     *name,

-                 gpointer         user_data)

-{

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

-

-  	cmdline *cmd = user_data;

-	if (cmd->argc < 2)

-	{

-		g_print("No objects created.  Put object name(s) on command line\n");

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

-		ObjectSkeleton *object = object_skeleton_new (s);

-		g_free (s);

-

-		SensorValue *sensor = sensor_value_skeleton_new ();

-  		object_skeleton_set_sensor_value (object, sensor);

-  		g_object_unref (sensor);

-

-		SensorMatch *match = sensor_match_skeleton_new ();

-  		object_skeleton_set_sensor_match (object, match);

-  		g_object_unref (match);

-

-		Control *control = control_skeleton_new ();

-  		object_skeleton_set_control (object, control);

-  		g_object_unref (control);

-

-		//must init variant

-		GVariant* v = NEW_VARIANT_B(0);

-		sensor_value_set_value(sensor,v);

-	

-		// set units

-  		sensor_value_set_units(sensor,"");

-  		sensor_value_set_settable(sensor,TRUE);

-		//must emit change so sensor manager sees initial value

-		sensor_value_emit_changed(sensor,v,"");

-

-		//signal handlers

-		/*g_dbus_connection_signal_subscribe(connection,

-                                   "org.openbmc.sensors.IpmiBt",

-                                   "org.openbmc.sensors.IpmiBt",

-                                   "SetSensor",

-                                   "/org/openbmc/sensors/IpmiBt",

-                                   NULL,

-                                   G_DBUS_SIGNAL_FLAGS_NONE,

-                                   (GDBusSignalCallback) on_set_ipmi,

-                                   object,

-                                   NULL );

-		*/

-  		//define method callbacks here

-  		g_signal_connect (sensor,

-                    "handle-init",

-                    G_CALLBACK (on_init),

-                    NULL); /* user_data */

-  

- 		g_signal_connect (control,

-                    "handle-init",

-                    G_CALLBACK (on_init_control),

-                    NULL); /* user_data */

-

-		g_signal_connect (sensor,

-                    "handle-set-value",

-                    G_CALLBACK (on_set_value),

-                    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 all objects */

-  g_dbus_object_manager_server_set_connection (manager, connection);

-}

-

-static void

-on_name_acquired (GDBusConnection *connection,

-                  const gchar     *name,

-                  gpointer         user_data)

-{

-  //g_print ("Acquired the name %s\n", name);

-}

-

-static void

-on_name_lost (GDBusConnection *connection,

-              const gchar     *name,

-              gpointer         user_data)

-{

-  //g_print ("Lost the name %s\n", name);

-}

-

-

-gint

-main (gint argc, gchar *argv[])

-{

-  GMainLoop *loop;

-  cmdline cmd;

-  cmd.argc = argc;

-  cmd.argv = argv;

-  guint id;

-  loop = g_main_loop_new (NULL, FALSE);

-

-  id = g_bus_own_name (DBUS_TYPE,

-                       dbus_name,

-                       G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |

-                       G_BUS_NAME_OWNER_FLAGS_REPLACE,

-                       on_bus_acquired,

-                       on_name_acquired,

-                       on_name_lost,

-                       &cmd,

-                       NULL);

-

-  g_main_loop_run (loop);

-  

-  g_bus_unown_name (id);

-  g_main_loop_unref (loop);

-  return 0;

-}