lots of changes
diff --git a/objects/board_vpd_obj.c b/objects/board_vpd_obj.c
new file mode 100644
index 0000000..59eaca8
--- /dev/null
+++ b/objects/board_vpd_obj.c
@@ -0,0 +1,45 @@
+#include "interfaces/openbmc_intf.h"

+#include "openbmc.h"

+

+

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

+

+gint

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

+{

+	GMainLoop *loop;

+	GDBusConnection *c;

+	GDBusProxy *p;

+ 	GError *error;

+	GVariant *parm;

+	GVariant *result;

+

+	loop = g_main_loop_new (NULL, FALSE);

+

+	error = NULL;

+	c = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);

+

+	error = NULL;

+	p = g_dbus_proxy_new_sync (c,

+                             G_DBUS_PROXY_FLAGS_NONE,

+                             NULL,                      /* GDBusInterfaceInfo* */

+                             "org.openbmc.managers.Frus", /* name */

+                             "/org/openbmc/managers/Frus", /* object path */

+                             "org.openbmc.managers.Frus",        /* interface name */

+                             NULL,                      /* GCancellable */

+                             &error);

+	g_assert_no_error (error);

+	parm = g_variant_new("(isv)",21,"manufacturer",g_variant_new_string("ibmibm"));

+	result = g_dbus_proxy_call_sync (p,

+                                   "updateFruField",

+				   parm,

+                                   G_DBUS_CALL_FLAGS_NONE,

+                                   -1,

+                                   NULL,

+                                   &error);

+	g_assert_no_error (error);

+	//g_main_loop_run (loop);

+	//g_bus_unown_name (id);

+ 	g_main_loop_unref (loop);

+ 	return 0;

+}

diff --git a/objects/button_power_obj.c b/objects/button_power_obj.c
index 6dbd5c3..4cd9b8d 100644
--- a/objects/button_power_obj.c
+++ b/objects/button_power_obj.c
@@ -1,10 +1,10 @@
-#include "interfaces/button.h"

+#include "interfaces/openbmc_intf.h"

 #include "gpio.h"

 #include "openbmc.h"

 

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

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

-static const gchar* dbus_name        = "org.openbmc.buttons.ButtonPower";

+static const gchar* dbus_object_path = "/org/openbmc/buttons";

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

 

 static GDBusObjectManagerServer *manager = NULL;

 

@@ -37,7 +37,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)

 	{

@@ -81,7 +81,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

@@ -89,7 +89,7 @@
               const gchar     *name,

               gpointer         user_data)

 {

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

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

 }

 

 

diff --git a/objects/chassis_identify_obj.c b/objects/chassis_identify_obj.c
index b8d50e0..a747d36 100644
--- a/objects/chassis_identify_obj.c
+++ b/objects/chassis_identify_obj.c
@@ -1,9 +1,9 @@
-#include "interfaces/led.h"

+#include "interfaces/openbmc_intf.h"

 #include "openbmc.h"

 #include "gpio.h"

 

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

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

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

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

 

 static GDBusObjectManagerServer *manager = NULL;

@@ -46,7 +46,7 @@
 {

 	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)

 	{

@@ -95,7 +95,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

@@ -103,7 +103,7 @@
               const gchar     *name,

               gpointer         user_data)

 {

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

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

 }

 

 

diff --git a/objects/control_bmc_obj.c b/objects/control_bmc_obj.c
new file mode 100644
index 0000000..53e5c99
--- /dev/null
+++ b/objects/control_bmc_obj.c
@@ -0,0 +1,132 @@
+#include <stdint.h>

+#include <stdio.h>

+#include <stdlib.h>

+#include <string.h>

+#include <fcntl.h>

+#include <unistd.h>

+#include <sys/stat.h>

+#include <sys/mman.h>

+#include "interfaces/openbmc_intf.h"

+#include "openbmc.h"

+#include "gpio.h"

+

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

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

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

+

+

+static GDBusObjectManagerServer *manager = NULL;

+

+static gboolean

+on_init (Control          *control,

+         GDBusMethodInvocation  *invocation,

+         gpointer                user_data)

+{

+	g_print("BMC init\n");

+	// BMC init done here

+	// must be blocking

+	

+	control_complete_init(control,invocation);

+	control_emit_goto_system_state(control,"STANDBY");

+	

+	return TRUE;

+}

+

+static void 

+on_bus_acquired (GDBusConnection *connection,

+                 const gchar     *name,

+                 gpointer         user_data)

+{

+	ObjectSkeleton *object;

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

+  		object = object_skeleton_new (s);

+  		g_free (s);

+

+		ControlBmc* control_bmc = control_bmc_skeleton_new ();

+		object_skeleton_set_control_bmc (object, control_bmc);

+		g_object_unref (control_bmc);

+

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

+

+		//define method callbacks here

+		g_signal_connect (control,

+        	            "handle-init",

+                	    G_CALLBACK (on_init),

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

+}

+

+

+

+

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

+/* Main Event Loop                                                */

+

+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 (G_BUS_TYPE_SESSION,

+                       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_host_obj.c b/objects/control_host_obj.c
index 8722619..857f300 100644
--- a/objects/control_host_obj.c
+++ b/objects/control_host_obj.c
@@ -5,13 +5,13 @@
 #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/Host";

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

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

 

 static GDBusObjectManagerServer *manager = NULL;

@@ -21,15 +21,22 @@
 GPIO fsi_enable   = (GPIO){ "FSI_ENABLE" };

 GPIO cronus_sel   = (GPIO){ "CRONUS_SEL" };

 

-

+static gboolean

+on_init         (Control       *control,

+                GDBusMethodInvocation  *invocation,

+                gpointer                user_data)

+{

+	control_complete_init(control,invocation);

+	return TRUE;

+}

 static gboolean

 on_boot         (ControlHost        *host,

                 GDBusMethodInvocation  *invocation,

                 gpointer                user_data)

 {

-	// TODO: Implement gpio toggling

+	// TODO: Add error checking

 	g_print("Boot\n");

-

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

 	control_host_complete_boot(host,invocation);

 	

 	gpio_open(&fsi_clk);

@@ -76,6 +83,8 @@
 	gpio_close(&fsi_enable);

 	gpio_close(&cronus_sel);

 

+	control_emit_goto_system_state(control,"BOOTING");

+	

 	control_host_emit_booted(host);

 	return TRUE;

 }

@@ -86,7 +95,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)

 	{

@@ -105,10 +114,19 @@
 		object_skeleton_set_control_host (object, control_host);

 		g_object_unref (control_host);

 

+		Control* control = control_skeleton_new ();

+		object_skeleton_set_control (object, control);

+		g_object_unref (control);

+

 		//define method callbacks here

 		g_signal_connect (control_host,

                   "handle-boot",

                   G_CALLBACK (on_boot),

+                  object); /* user_data */

+

+		g_signal_connect (control,

+                  "handle-init",

+                  G_CALLBACK (on_init),

                   NULL); /* user_data */

 

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

@@ -130,7 +148,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

@@ -138,7 +156,7 @@
               const gchar     *name,

               gpointer         user_data)

 {

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

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

 }

 

 gint

diff --git a/objects/fan_generic_obj.c b/objects/fan_generic_obj.c
index 4c2ca35..990a5e9 100644
--- a/objects/fan_generic_obj.c
+++ b/objects/fan_generic_obj.c
@@ -1,12 +1,11 @@
-#include "interfaces/fru.h"

+#include "interfaces/openbmc_intf.h"

 #include "openbmc.h"

 

 

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

 

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

-static const gchar* dbus_name        = "org.openbmc.frus.Fan";

-static const guint poll_interval = 5000;

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

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

 static guint heartbeat = 0;

 

 static GDBusObjectManagerServer *manager = NULL;

@@ -21,23 +20,23 @@
 

 

 static gboolean

-on_set_speed    (FruFan  *fan,

+on_set_speed    (Fan  *fan,

                 GDBusMethodInvocation  *invocation,

 		guint                  speed,

                 gpointer                user_data)

 {

-  fru_fan_set_speed(fan,speed);

-  fru_fan_complete_set_speed(fan,invocation);

+  fan_set_speed(fan,speed);

+  fan_complete_set_speed(fan,invocation);

   return TRUE;

 }

 

 static gboolean

-on_get_speed (FruFan                 *fan,

+on_get_speed (Fan                 *fan,

                 GDBusMethodInvocation  *invocation,

                 gpointer                user_data)

 {

-  guint reading = fru_fan_get_speed(fan);

-  fru_fan_complete_get_speed(fan,invocation,reading);

+  guint reading = fan_get_speed(fan);

+  fan_complete_get_speed(fan,invocation,reading);

   return TRUE;

 }

 

@@ -46,7 +45,7 @@
                  const gchar     *name,

                  gpointer         user_data)

 {

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

@@ -63,13 +62,9 @@
 		ObjectSkeleton *object = object_skeleton_new (s);

 		g_free (s);

 

-		FruFan *fan = fru_fan_skeleton_new ();

-  		object_skeleton_set_fru_fan (object, fan);

+		Fan *fan = fan_skeleton_new ();

+  		object_skeleton_set_fan (object, fan);

   		g_object_unref (fan);

-

-		Fru *fru = fru_skeleton_new ();

-  		object_skeleton_set_fru (object, fru);

-  		g_object_unref (fru);

 		

   		//define method callbacks here

   		g_signal_connect (fan,

@@ -97,7 +92,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

@@ -105,7 +100,7 @@
               const gchar     *name,

               gpointer         user_data)

 {

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

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

 }

 

 

diff --git a/objects/flash_bios_obj.c b/objects/flash_bios_obj.c
index 04821f6..bb95d17 100644
--- a/objects/flash_bios_obj.c
+++ b/objects/flash_bios_obj.c
@@ -1,9 +1,9 @@
-#include "interfaces/flash.h"

+#include "interfaces/openbmc_intf.h"

 #include "pflash/pflash.c"

 #include "openbmc.h"

 

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

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

+static const gchar* dbus_object_path = "/org/openbmc/flash";

 static const gchar* dbus_name        = "org.openbmc.flash.BIOS";

 

 static GDBusObjectManagerServer *manager = NULL;

@@ -47,7 +47,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)

 	{

@@ -93,7 +93,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

@@ -101,7 +101,7 @@
               const gchar     *name,

               gpointer         user_data)

 {

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

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

 }

 

 gint

diff --git a/objects/fru_board_obj.c b/objects/fru_board_obj.c
deleted file mode 100644
index 47683db..0000000
--- a/objects/fru_board_obj.c
+++ /dev/null
@@ -1,121 +0,0 @@
-#include "interfaces/fru.h"

-#include "openbmc.h"

-

-

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

-

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

-static const gchar* dbus_name        = "org.openbmc.frus.Board";

-static const guint poll_interval = 5000;

-static guint heartbeat = 0;

-

-static GDBusObjectManagerServer *manager = NULL;

-

-static gboolean

-on_init         (Fru *fru,

-                GDBusMethodInvocation  *invocation,

-                gpointer                user_data)

-{

-

-	FruEeprom *eeprom = object_get_fru_eeprom((Object*)user_data);

-

-	const gchar* dev_path = fru_eeprom_get_i2c_dev_path(eeprom);

-	const gchar* addr = fru_eeprom_get_i2c_address(eeprom);

-	g_print("Reading VPD EERPROM at: %s, %s\n",dev_path, addr);

-	fru_complete_init(fru,invocation);

-	fru_set_part_num(fru,"test part num");

-	

-	// add eeprom read code here

-	fru_emit_cache_me(fru,dbus_name);

-

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

-

-		Fru *fru = fru_skeleton_new ();

-  		object_skeleton_set_fru (object, fru);

-  		g_object_unref (fru);

-

-		FruEeprom *eeprom = fru_eeprom_skeleton_new ();

-  		object_skeleton_set_fru_eeprom (object, eeprom);

-  		g_object_unref (eeprom);

-

-		g_signal_connect (fru,

-                    "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 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 (G_BUS_TYPE_SESSION,

-                       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/fru_generic_obj.c b/objects/fru_generic_obj.c
deleted file mode 100644
index 742ec9e..0000000
--- a/objects/fru_generic_obj.c
+++ /dev/null
@@ -1,92 +0,0 @@
-#include "interfaces/fru.h"

-#include "openbmc.h"

-

-

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

-

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

-static const gchar* dbus_name        = "org.openbmc.frus.Fru";

-static const guint poll_interval = 5000;

-static guint heartbeat = 0;

-

-static GDBusObjectManagerServer *manager = NULL;

-

-

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

-

-		Fru *fru = fru_skeleton_new ();

-  		object_skeleton_set_fru (object, fru);

-  		g_object_unref (fru);

-		

-  		/* 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 (G_BUS_TYPE_SESSION,

-                       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/host_watchdog_obj.c b/objects/host_watchdog_obj.c
index 6396658..d038e15 100644
--- a/objects/host_watchdog_obj.c
+++ b/objects/host_watchdog_obj.c
@@ -1,11 +1,11 @@
-#include "interfaces/watchdog.h"

+#include "interfaces/openbmc_intf.h"

 #include "openbmc.h"

 

 

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

 

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

-static const gchar* dbus_name        = "org.openbmc.watchdog.HostWatchdog";

+static const gchar* dbus_object_path = "/org/openbmc/watchdog";

+static const gchar* dbus_name        = "org.openbmc.watchdog.Host";

 

 static GDBusObjectManagerServer *manager = NULL;

 

@@ -20,7 +20,9 @@
 	

 	if (count == 0)

 	{

+		//watchdog error, emit error and stop watchdog

 		watchdog_emit_watchdog_error(watchdog);

+		return FALSE;

 	}

 

 	//reset watchdog

@@ -33,6 +35,7 @@
                 GDBusMethodInvocation  *invocation,

                 gpointer                user_data)

 {

+  	watchdog_set_watchdog(wd,1);

 	guint poll_interval = watchdog_get_poll_interval(wd);

   	g_timeout_add(poll_interval, poll_watchdog, user_data);

 	watchdog_complete_start(wd,invocation);

@@ -56,7 +59,7 @@
                  const gchar     *name,

                  gpointer         user_data)

 {

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

@@ -106,7 +109,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

@@ -114,7 +117,7 @@
               const gchar     *name,

               gpointer         user_data)

 {

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

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

 }

 

 

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

 }

 

 

diff --git a/objects/sensor_host_status_obj.c b/objects/sensor_host_status_obj.c
index bd16935..57357d9 100644
--- a/objects/sensor_host_status_obj.c
+++ b/objects/sensor_host_status_obj.c
@@ -1,10 +1,10 @@
-#include "interfaces/sensor.h"

+#include "interfaces/openbmc_intf.h"

 #include "openbmc.h"

 

 #define BOOTED 100

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

 

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

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

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

 static guint heartbeat = 0;

 

@@ -17,6 +17,8 @@
                 gpointer                user_data)

 {

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

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

+

 	sensor_value_set_value(sen,value);

 	sensor_value_emit_changed(sen,value,"");

 	// Important host status values

@@ -26,6 +28,7 @@
 	{

 		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;

@@ -40,12 +43,21 @@
 	return TRUE;

 }

 

+static gboolean

+on_init_control         (Control  *control,

+                GDBusMethodInvocation  *invocation,

+                gpointer                user_data)

+{

+	control_complete_init(control,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);

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

 

   	cmdline *cmd = user_data;

 	if (cmd->argc < 2)

@@ -69,6 +81,10 @@
 		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);

@@ -77,13 +93,21 @@
 		// 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,"");

 

   		//define method callbacks here

   		g_signal_connect (sensor,

                     "handle-init",

                     G_CALLBACK (on_init),

                     NULL); /* user_data */

-  		g_signal_connect (sensor,

+  

+ 		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 */

@@ -102,7 +126,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

@@ -110,7 +134,7 @@
               const gchar     *name,

               gpointer         user_data)

 {

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

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

 }

 

 

diff --git a/objects/sensor_occ_obj.c b/objects/sensor_occ_obj.c
new file mode 100644
index 0000000..bd68382
--- /dev/null
+++ b/objects/sensor_occ_obj.c
@@ -0,0 +1,182 @@
+#include "interfaces/openbmc_intf.h"

+#include "openbmc.h"

+

+

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

+

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

+static const gchar* dbus_name        = "org.openbmc.sensors.Occ";

+static guint heartbeat = 0;

+

+static GDBusObjectManagerServer *manager = NULL;

+static gchar *instance_name = NULL;

+

+static gboolean poll_occ(gpointer user_data)

+{

+/*

+	gchar *s;

+	s = g_strdup_printf ("%s/Temperature/%d",g_dbus_object_get_object_path(G_DBUS_OBJECT(user_data)), 1);

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

+

+	GDBusInterface* interface = g_dbus_object_manager_get_interface((GDBusObjectManager*)manager,s,

+		"org.openbmc.SensorValue");

+

+	if (interface != NULL)

+	{

+		SensorValue* sensor = (SensorValue*) interface;

+		GVariant *value = NEW_VARIANT_U(10);

+		sensor_value_set_value(sensor,value);

+		const gchar* units = sensor_value_get_units(sensor);

+		sensor_value_emit_changed(sensor,sensor_value_get_value(sensor),units);

+	}

+	g_free (s);

+	//g_free(interface);

+*/

+	return TRUE;

+}

+

+

+

+static gboolean

+on_init (Occ         *occ,

+         GDBusMethodInvocation  *invocation,

+         gpointer                user_data)

+{

+	guint poll_interval = occ_get_poll_interval(occ);

+	g_timeout_add(poll_interval, poll_occ, user_data);

+	occ_complete_init(occ,invocation);

+	return TRUE;

+}

+static gboolean

+on_init_sensor (SensorValue         *sensor,

+         GDBusMethodInvocation  *invocation,

+         gpointer                user_data)

+{

+	//must implement init method

+	sensor_value_complete_init(sensor,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);

+

+		Occ *occ = occ_skeleton_new ();

+  		object_skeleton_set_occ (object, occ);

+  		g_object_unref (occ);

+

+		SensorI2c *i2c = sensor_i2c_skeleton_new ();

+  		object_skeleton_set_sensor_i2c (object, i2c);

+  		g_object_unref (i2c);

+

+		g_signal_connect (occ,

+               	    "handle-init",

+               	    G_CALLBACK (on_init),

+               	    object); /* user_data */

+	

+		//g_timeout_add(3000, poll_occ, 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);

+	

+		int c;	

+		for (c=0;c<12;c++)

+		{

+ 			s = g_strdup_printf ("%s/Temperature/P8_%s_Core_%d",dbus_object_path,cmd->argv[i],c);

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

+			GVariant* v_new_value = NEW_VARIANT_U(c);

+			sensor_value_set_value(sensor,v_new_value);

+			sensor_value_set_units(sensor,"C");

+

+			g_signal_connect (sensor,

+        	       	    "handle-init",

+               		    G_CALLBACK (on_init_sensor),

+               	    	    NULL); /* user_data */

+

+			//emit changed signal so sensor manager sees initial value

+			sensor_value_emit_changed(sensor,sensor_value_get_value(sensor),sensor_value_get_units(sensor));

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

+	g_print("shutting down: %s\n",name);

+	cmdline *cmd = user_data;

+	g_main_loop_quit(cmd->loop);	

+}

+

+

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

+  cmd.loop = loop;

+

+  id = g_bus_own_name (G_BUS_TYPE_SESSION,

+                       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/sensor_temperature_ambient_obj.c b/objects/sensor_temperature_ambient_obj.c
index 4f1b32a..fab2f1a 100644
--- a/objects/sensor_temperature_ambient_obj.c
+++ b/objects/sensor_temperature_ambient_obj.c
@@ -1,11 +1,11 @@
-#include "interfaces/sensor.h"

+#include "interfaces/openbmc_intf.h"

 #include "openbmc.h"

 #include "sensor_threshold.h"

 

 

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

 

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

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

 static const gchar* dbus_name        = "org.openbmc.sensors.Temperature.Ambient";

 static guint heartbeat = 0;

 

@@ -23,12 +23,12 @@
 

 	//TODO:  Change to actually read sensor

 	double value = GET_VARIANT_D(v_value);

-	g_print("Reading I2C = %s; Address = %s; %f\n",

-		sensor_i2c_get_dev_path(i2c),sensor_i2c_get_address(i2c),value);

+	//g_print("Reading I2C = %s; Address = %s; %f\n",

+	//	sensor_i2c_get_dev_path(i2c),sensor_i2c_get_address(i2c),value);

 

 	value = value+1;

 

-	if (heartbeat > 10000)

+	if (heartbeat > 4000)

 	{

 		heartbeat = 0;

 		sensor_value_emit_heartbeat(sensor,dbus_name);

@@ -71,7 +71,7 @@
                  const gchar     *name,

                  gpointer         user_data)

 {

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

@@ -84,7 +84,7 @@
   	for (i=1;i<cmd->argc;i++)

   	{

 		gchar *s;

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

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

 		ObjectSkeleton *object = object_skeleton_new (s);

 		g_free (s);

 

@@ -145,7 +145,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

@@ -153,7 +153,7 @@
               const gchar     *name,

               gpointer         user_data)

 {

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

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

 }