Exemple #1
0
static gboolean poll_occ(gpointer user_data)
{
	//g_dbus_object_get_object_path(G_DBUS_OBJECT(user_data)),
	Occ* occ = object_get_occ((Object*)user_data);

	gchar *s;
	s = g_strdup_printf ("%s/Temperature/P8_%s_Core_%d",
			dbus_object_path,occ_get_instance_name(occ),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;
}
Exemple #2
0
static gboolean
poll_hwmon(gpointer user_data)
{
	Hwmon *hwmon = object_get_hwmon((Object*)user_data);
	SensorValue *sensor = object_get_sensor_value((Object*)user_data);
	const gchar* filename = hwmon_get_sysfs_path(hwmon);

	int fd = open(filename, O_RDONLY);
	if(fd != -1)
	{
		char buf[255];
		if(read(fd,&buf,255) == -1)
		{
			g_print("ERROR: Unable to read value: %s\n",filename);
		} else {
			guint32 scale = hwmon_get_scale(hwmon);
			if(scale == 0)
			{
				g_print("ERROR: Invalid scale value of 0\n");
				scale = 1;

			}
			guint32 value = atoi(buf)/scale;
			GVariant* v = NEW_VARIANT_U(value);
			GVariant* old_value = sensor_value_get_value(sensor);
			bool do_set = false;
			if(old_value == NULL)
			{
				do_set = true;
			}
			else
			{
				if(GET_VARIANT_U(old_value) != value) { do_set = true; }
			}
			if(do_set)
			{
				g_print("Sensor changed: %s,%d\n",filename,value);
				GVariant* v = NEW_VARIANT_U(value);
				const gchar* units = sensor_value_get_units(sensor);
				sensor_value_set_value(sensor,v);
				sensor_value_emit_changed(sensor,v,units);
			}
		}
		close(fd);
	} else {
		g_print("ERROR - hwmons: File %s doesn't exist\n",filename);
	}

	return TRUE;
}
Exemple #3
0
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);
		occ_set_instance_name(occ,cmd->argv[i]);

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