[gnome-color-manager] Add a status property to GcmSensor to help GUI applications



commit b0f77f0cb41a56f71b9664160462632598f4c2b6
Author: Richard Hughes <richard hughsie com>
Date:   Wed Jul 28 09:55:15 2010 +0100

    Add a status property to GcmSensor to help GUI applications

 libcolor-glib/gcm-sensor-huey.c |   15 +++++++++++++
 libcolor-glib/gcm-sensor.c      |   43 +++++++++++++++++++++++++++++++++++++++
 libcolor-glib/gcm-sensor.h      |   14 ++++++++++++
 3 files changed, 72 insertions(+), 0 deletions(-)
---
diff --git a/libcolor-glib/gcm-sensor-huey.c b/libcolor-glib/gcm-sensor-huey.c
index fd3f3eb..c54a0cc 100644
--- a/libcolor-glib/gcm-sensor-huey.c
+++ b/libcolor-glib/gcm-sensor-huey.c
@@ -574,6 +574,9 @@ gcm_sensor_huey_get_ambient (GcmSensor *sensor, gdouble *value, GError **error)
 		goto out;
 	}
 
+	/* set state */
+	gcm_sensor_set_state (sensor, GCM_SENSOR_STATE_MEASURING);
+
 	/* hit hardware */
 	request[2] = (output_type == GCM_SENSOR_OUTPUT_TYPE_LCD) ? 0x00 : 0x02;
 	ret = gcm_sensor_huey_send_data (sensor_huey, request, 8, reply, 8, &reply_read, error);
@@ -583,6 +586,8 @@ gcm_sensor_huey_get_ambient (GcmSensor *sensor, gdouble *value, GError **error)
 	/* parse the value */
 	*value = (gdouble) (reply[5] * 0xff + reply[6]) / HUEY_AMBIENT_UNITS_TO_LUX;
 out:
+	/* set state */
+	gcm_sensor_set_state (sensor, GCM_SENSOR_STATE_IDLE);
 	return ret;
 }
 
@@ -679,6 +684,9 @@ gcm_sensor_huey_sample (GcmSensor *sensor, GcmColorXYZ *value, GError **error)
 		goto out;
 	}
 
+	/* set state */
+	gcm_sensor_set_state (sensor, GCM_SENSOR_STATE_MEASURING);
+
 	/* set this to one value for a quick approximate value */
 	multiplier.R = 1;
 	multiplier.G = 1;
@@ -721,6 +729,8 @@ gcm_sensor_huey_sample (GcmSensor *sensor, GcmColorXYZ *value, GError **error)
 
 	egg_debug ("POST MULTIPLY: %s\n", gcm_vec3_to_string (output));
 out:
+	/* set state */
+	gcm_sensor_set_state (sensor, GCM_SENSOR_STATE_IDLE);
 	return ret;
 }
 
@@ -773,6 +783,9 @@ gcm_sensor_huey_startup (GcmSensor *sensor, GError **error)
 	if (!ret)
 		goto out;
 
+	/* set state */
+	gcm_sensor_set_state (sensor, GCM_SENSOR_STATE_STARTING);
+
 	/* unlock */
 	ret = gcm_sensor_huey_send_unlock (sensor_huey, error);
 	if (!ret)
@@ -814,6 +827,8 @@ gcm_sensor_huey_startup (GcmSensor *sensor, GError **error)
 		g_usleep (50000);
 	}
 out:
+	/* set state */
+	gcm_sensor_set_state (sensor, GCM_SENSOR_STATE_IDLE);
 	g_free (serial_number_tmp);
 	return ret;
 }
diff --git a/libcolor-glib/gcm-sensor.c b/libcolor-glib/gcm-sensor.c
index 5ea0cc5..01e10e4 100644
--- a/libcolor-glib/gcm-sensor.c
+++ b/libcolor-glib/gcm-sensor.c
@@ -45,6 +45,7 @@ static void     gcm_sensor_finalize	(GObject     *object);
 struct _GcmSensorPrivate
 {
 	gboolean			 native;
+	GcmSensorState			 state;
 	gboolean			 done_startup;
 	GcmSensorKind			 kind;
 	GcmSensorOutputType		 output_type;
@@ -61,6 +62,7 @@ struct _GcmSensorPrivate
 enum {
 	PROP_0,
 	PROP_NATIVE,
+	PROP_STATE,
 	PROP_VENDOR,
 	PROP_MODEL,
 	PROP_SERIAL_NUMBER,
@@ -124,6 +126,33 @@ gcm_sensor_get_serial_number (GcmSensor *sensor)
 }
 
 /**
+ * gcm_sensor_set_state:
+ * @sensor: a valid #GcmSensor instance
+ * @state: the sensor state, e.g %GCM_SENSOR_STATE_IDLE
+ *
+ * Sets the device state.
+ **/
+void
+gcm_sensor_set_state (GcmSensor *sensor, GcmSensorState state)
+{
+	sensor->priv->state = state;
+}
+
+/**
+ * gcm_sensor_get_state:
+ * @sensor: a valid #GcmSensor instance
+ *
+ * Gets if the sensor is state taking a measurement.
+ *
+ * Return value: %TRUE for state.
+ **/
+GcmSensorState
+gcm_sensor_get_state (GcmSensor *sensor)
+{
+	return sensor->priv->state;
+}
+
+/**
  * gcm_sensor_get_model:
  * @sensor: a valid #GcmSensor instance
  *
@@ -617,6 +646,9 @@ gcm_sensor_get_property (GObject *object, guint prop_id, GValue *value, GParamSp
 	case PROP_NATIVE:
 		g_value_set_boolean (value, priv->native);
 		break;
+	case PROP_STATE:
+		g_value_set_uint (value, priv->state);
+		break;
 	case PROP_VENDOR:
 		g_value_set_string (value, priv->vendor);
 		break;
@@ -663,6 +695,9 @@ gcm_sensor_set_property (GObject *object, guint prop_id, const GValue *value, GP
 	case PROP_NATIVE:
 		priv->native = g_value_get_boolean (value);
 		break;
+	case PROP_STATE:
+		priv->state = g_value_get_uint (value);
+		break;
 	case PROP_KIND:
 		priv->kind = g_value_get_uint (value);
 		break;
@@ -696,6 +731,14 @@ gcm_sensor_class_init (GcmSensorClass *klass)
 	g_object_class_install_property (object_class, PROP_NATIVE, pspec);
 
 	/**
+	 * GcmSensor:state:
+	 */
+	pspec = g_param_spec_uint ("state", NULL, NULL,
+				   0, G_MAXUINT, GCM_SENSOR_STATE_STARTING,
+				   G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+	g_object_class_install_property (object_class, PROP_STATE, pspec);
+
+	/**
 	 * GcmSensor:vendor:
 	 */
 	pspec = g_param_spec_string ("vendor", NULL, NULL,
diff --git a/libcolor-glib/gcm-sensor.h b/libcolor-glib/gcm-sensor.h
index 2115489..ba5844d 100644
--- a/libcolor-glib/gcm-sensor.h
+++ b/libcolor-glib/gcm-sensor.h
@@ -121,6 +121,17 @@ typedef enum {
 	GCM_SENSOR_KIND_UNKNOWN
 } GcmSensorKind;
 
+/**
+ * GcmSensorState:
+ *
+ * The state of the sensor.
+ **/
+typedef enum {
+	GCM_SENSOR_STATE_STARTING,
+	GCM_SENSOR_STATE_IDLE,
+	GCM_SENSOR_STATE_MEASURING
+} GcmSensorState;
+
 /* dummy */
 #define GCM_SENSOR_ERROR	1
 
@@ -128,6 +139,9 @@ GType			 gcm_sensor_get_type		(void);
 GcmSensor		*gcm_sensor_new			(void);
 
 void			 gcm_sensor_button_pressed	(GcmSensor		*sensor);
+void			 gcm_sensor_set_state		(GcmSensor		*sensor,
+							 GcmSensorState		 state);
+GcmSensorState		 gcm_sensor_get_state		(GcmSensor		*sensor);
 gboolean		 gcm_sensor_dump		(GcmSensor		*sensor,
 							 GString		*data,
 							 GError			**error);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]