lots of changes
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;

+}