void
is_temperature_sensor_set_celsius_value(IsTemperatureSensor *self,
                                        gdouble value)
{
  IsTemperatureSensorPrivate *priv;

  g_return_if_fail(IS_IS_TEMPERATURE_SENSOR(self));

  priv = self->priv;

  switch (priv->scale)
  {
    case IS_TEMPERATURE_SENSOR_SCALE_CELSIUS:
      break;

    case IS_TEMPERATURE_SENSOR_SCALE_FAHRENHEIT:
      value = celcius_to_fahrenheit(value);
      break;

    case IS_TEMPERATURE_SENSOR_SCALE_INVALID:
    case NUM_IS_TEMPERATURE_SENSOR_SCALE:
    default:
      g_assert_not_reached();
  }
  is_sensor_set_value(IS_SENSOR(self), value);
}
IsTemperatureSensorScale
is_temperature_sensor_get_scale(IsTemperatureSensor *self)
{
  g_return_val_if_fail(IS_IS_TEMPERATURE_SENSOR(self), 0);

  return self->priv->scale;
}
static void
update_sensor_value(IsSensor *sensor,
		    IsATIConfigPlugin *self)
{
	const gchar *path;
	gint gpu;
	gdouble value = 0.0;
	gboolean ret = FALSE;
	GError *error = NULL;

	path = is_sensor_get_path(sensor);
	gpu = g_ascii_strtoll(path + strlen(ATICONFIG_PATH_PREFIX), NULL, 10);

	if (IS_IS_TEMPERATURE_SENSOR(sensor)) {
		ret = aticonfig_get_temperature(self, gpu, &value, &error);
		if (ret) {
			is_temperature_sensor_set_celsius_value(IS_TEMPERATURE_SENSOR(sensor),
								value);
		}
	} else {
		/* is a fan sensor */
		ret = aticonfig_get_fanspeed(self, gpu, &value, &error);
		if (ret) {
			is_sensor_set_value(sensor, value);
		}
	}
	/* emit any error which may have occurred */
	if (error) {
		is_sensor_emit_error(sensor, error);
		g_error_free(error);
	}
}
Esempio n. 4
0
static void
on_sensor_disabled(IsManager *manager,
                   IsSensor *sensor,
                   gpointer data)
{
  IsMaxPlugin *self = (IsMaxPlugin *)data;
  IsMaxPluginPrivate *priv = self->priv;

  // don't bother monitoring non-temperature sensors
  if (IS_IS_TEMPERATURE_SENSOR(sensor))
  {
    is_debug("max", "sensor disabled: %s", is_sensor_get_label(sensor));
    g_signal_handlers_disconnect_by_func(sensor,
                                         G_CALLBACK(on_sensor_value_notify),
                                         self);
    if (priv->max == sensor)
    {
      // get all sensors and find the one with the maximum value and switch to
      // this
      GSList *sensors, *_list;

      priv->max = NULL;
      priv->max_value = 0.0;

      is_sensor_set_label(priv->sensor, "Δ");
      is_sensor_set_icon(priv->sensor, IS_STOCK_CHIP);
      is_sensor_set_value(priv->sensor, 0.0);
      is_sensor_set_units(priv->sensor, "");
      is_sensor_set_digits(priv->sensor, 1);

      sensors = is_manager_get_enabled_sensors_list(manager);
      for (_list = sensors;
           _list != NULL;
           _list = _list->next)
      {
        if (IS_IS_TEMPERATURE_SENSOR(_list->data))
        {
          on_sensor_value_notify(IS_SENSOR(_list->data),
                                 NULL,
                                 self);
        }
      }
    }
  }
}
void is_temperature_sensor_set_scale(IsTemperatureSensor *self,
                                     IsTemperatureSensorScale scale)
{
  IsTemperatureSensorPrivate *priv;

  g_return_if_fail(IS_IS_TEMPERATURE_SENSOR(self));
  g_return_if_fail(scale == IS_TEMPERATURE_SENSOR_SCALE_CELSIUS ||
                   scale == IS_TEMPERATURE_SENSOR_SCALE_FAHRENHEIT);

  priv = self->priv;

  if (scale != priv->scale)
  {
    gdouble value = is_sensor_get_value(IS_SENSOR(self));
    gdouble alarm_value = is_sensor_get_alarm_value(IS_SENSOR(self));
    gdouble low_value = is_sensor_get_low_value(IS_SENSOR(self));
    gdouble high_value = is_sensor_get_high_value(IS_SENSOR(self));

    /* convert from current scale to new */
    switch (priv->scale)
    {
      case IS_TEMPERATURE_SENSOR_SCALE_CELSIUS:
        value = celcius_to_fahrenheit(value);
        alarm_value = celcius_to_fahrenheit(alarm_value);
        low_value = celcius_to_fahrenheit(low_value);
        high_value = celcius_to_fahrenheit(high_value);
        break;
      case IS_TEMPERATURE_SENSOR_SCALE_FAHRENHEIT:
        value = fahrenheit_to_celcius(value);
        alarm_value = fahrenheit_to_celcius(alarm_value);
        low_value = fahrenheit_to_celcius(low_value);
        high_value = fahrenheit_to_celcius(high_value);
        break;
      case IS_TEMPERATURE_SENSOR_SCALE_INVALID:
      case NUM_IS_TEMPERATURE_SENSOR_SCALE:
      default:
        g_assert_not_reached();
        break;
    }
    priv->scale = scale;
    is_sensor_set_units(IS_SENSOR(self),
                        is_temperature_sensor_scale_to_string(priv->scale));
    /* set all in one go */
    g_object_set(self,
                 "value", value,
                 "alarm-value", alarm_value,
                 "low-value", low_value,
                 "high-value", high_value,
                 NULL);
  }

}
static void
update_sensor_value(IsSensor *sensor,
		    IsNvidiaPlugin *self)
{
	IsNvidiaPluginPrivate *priv;
	const gchar *path;
	guint i;

	priv = self->priv;

	path = is_sensor_get_path(sensor);

	for (i = 0; i < G_N_ELEMENTS(map); i++) {
		Bool ret;
		int value;
		int idx;
		if (g_strrstr(path, map[i].description) == NULL) {
			continue;
		}
		idx = g_ascii_strtoll(g_strrstr(path, map[i].description) +
				      strlen(map[i].description), NULL, 10);

		ret = XNVCTRLQueryTargetAttribute(priv->display,
						  map[i].target,
						  idx,
						  0,
						  map[i].attribute,
						  &value);
		if (!ret) {
			GError *error = g_error_new(g_quark_from_string("nvidia-plugin-error-quark"),
						    0,
						    /* first placeholder is
						     * sensor name */
						    _("Error getting sensor value for sensor %s"),
						    path);
			is_sensor_emit_error(sensor, error);
			g_error_free(error);
			continue;
		}
		if (IS_IS_TEMPERATURE_SENSOR(sensor)) {
			is_temperature_sensor_set_celsius_value(IS_TEMPERATURE_SENSOR(sensor),
								value);
		} else {
			is_sensor_set_value(sensor, value);
		}
	}
}
Esempio n. 7
0
static void
on_sensor_enabled(IsManager *manager,
                  IsSensor *sensor,
                  gint index,
                  gpointer data)
{
  IsMaxPlugin *self = (IsMaxPlugin *)data;

  // don't bother monitoring non-temperature sensors
  if (IS_IS_TEMPERATURE_SENSOR(sensor))
  {
    is_debug("max", "sensor enabled: %s", is_sensor_get_label(sensor));
    on_sensor_value_notify(sensor, NULL, self);
    g_signal_connect(sensor, "notify::value",
                     G_CALLBACK(on_sensor_value_notify), self);
  }
}