[gnome-color-manager] trivial: move the serial number to the GcmSensor object



commit 948560af8fa73fba24429a2cce355edbfc9fb1f2
Author: Richard Hughes <richard hughsie com>
Date:   Thu Jul 22 17:57:30 2010 +0100

    trivial: move the serial number to the GcmSensor object

 libcolor-glib/gcm-sensor.c    |   47 +++++++++++++++++++++++++++++++++++++++++
 libcolor-glib/gcm-sensor.h    |    3 ++
 tools/gcm-sensor-colormunki.c |   26 +++++++++++-----------
 3 files changed, 63 insertions(+), 13 deletions(-)
---
diff --git a/libcolor-glib/gcm-sensor.c b/libcolor-glib/gcm-sensor.c
index 81ab273..5ea0cc5 100644
--- a/libcolor-glib/gcm-sensor.c
+++ b/libcolor-glib/gcm-sensor.c
@@ -54,6 +54,7 @@ struct _GcmSensorPrivate
 	gboolean			 supports_spot;
 	gchar				*vendor;
 	gchar				*model;
+	gchar				*serial_number;
 	gchar				*device;
 };
 
@@ -62,6 +63,7 @@ enum {
 	PROP_NATIVE,
 	PROP_VENDOR,
 	PROP_MODEL,
+	PROP_SERIAL_NUMBER,
 	PROP_KIND,
 	PROP_SUPPORTS_DISPLAY,
 	PROP_SUPPORTS_PROJECTOR,
@@ -93,6 +95,35 @@ gcm_sensor_button_pressed (GcmSensor *sensor)
 }
 
 /**
+ * gcm_sensor_set_serial_number:
+ * @sensor: a valid #GcmSensor instance
+ * @serial_number: the serial number
+ *
+ * Sets the sensor serial number which can be used to uniquely identify
+ * the device.
+ **/
+void
+gcm_sensor_set_serial_number (GcmSensor *sensor, const gchar *serial_number)
+{
+	g_free (sensor->priv->serial_number);
+	sensor->priv->serial_number = g_strdup (serial_number);
+}
+
+/**
+ * gcm_sensor_get_serial_number:
+ * @sensor: a valid #GcmSensor instance
+ *
+ * Gets the sensor serial number.
+ *
+ * Return value: a string.
+ **/
+const gchar *
+gcm_sensor_get_serial_number (GcmSensor *sensor)
+{
+	return sensor->priv->serial_number;
+}
+
+/**
  * gcm_sensor_get_model:
  * @sensor: a valid #GcmSensor instance
  *
@@ -409,6 +440,7 @@ gcm_sensor_dump (GcmSensor *sensor, GString *data, GError **error)
 	g_string_append_printf (data, "kind:%s\n", gcm_sensor_kind_to_string (priv->kind));
 	g_string_append_printf (data, "vendor:%s\n", priv->vendor);
 	g_string_append_printf (data, "model:%s\n", priv->model);
+	g_string_append_printf (data, "serial-number:%s\n", priv->serial_number);
 	g_string_append_printf (data, "device:%s\n", priv->device);
 
 	/* dump sensor */
@@ -591,6 +623,9 @@ gcm_sensor_get_property (GObject *object, guint prop_id, GValue *value, GParamSp
 	case PROP_MODEL:
 		g_value_set_string (value, priv->model);
 		break;
+	case PROP_SERIAL_NUMBER:
+		g_value_set_string (value, priv->serial_number);
+		break;
 	case PROP_KIND:
 		g_value_set_uint (value, priv->kind);
 		break;
@@ -631,6 +666,9 @@ gcm_sensor_set_property (GObject *object, guint prop_id, const GValue *value, GP
 	case PROP_KIND:
 		priv->kind = g_value_get_uint (value);
 		break;
+	case PROP_SERIAL_NUMBER:
+		gcm_sensor_set_serial_number (sensor, g_value_get_string (value));
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;
@@ -674,6 +712,14 @@ gcm_sensor_class_init (GcmSensorClass *klass)
 	g_object_class_install_property (object_class, PROP_MODEL, pspec);
 
 	/**
+	 * GcmSensor:serial-number:
+	 */
+	pspec = g_param_spec_string ("serial-number", NULL, NULL,
+				     NULL,
+				     G_PARAM_READWRITE);
+	g_object_class_install_property (object_class, PROP_SERIAL_NUMBER, pspec);
+
+	/**
 	 * GcmSensor:kind:
 	 */
 	pspec = g_param_spec_uint ("kind", NULL, NULL,
@@ -758,6 +804,7 @@ gcm_sensor_finalize (GObject *object)
 	g_free (priv->device);
 	g_free (priv->vendor);
 	g_free (priv->model);
+	g_free (priv->serial_number);
 
 	G_OBJECT_CLASS (gcm_sensor_parent_class)->finalize (object);
 }
diff --git a/libcolor-glib/gcm-sensor.h b/libcolor-glib/gcm-sensor.h
index 2a3c81e..2115489 100644
--- a/libcolor-glib/gcm-sensor.h
+++ b/libcolor-glib/gcm-sensor.h
@@ -148,6 +148,9 @@ gboolean		 gcm_sensor_set_from_device	(GcmSensor		*sensor,
 void			 gcm_sensor_set_output_type	(GcmSensor		*sensor,
 							 GcmSensorOutputType	 output_type);
 GcmSensorOutputType	 gcm_sensor_get_output_type	(GcmSensor		*sensor);
+void			 gcm_sensor_set_serial_number	(GcmSensor		*sensor,
+							 const gchar		*serial_number);
+const gchar		*gcm_sensor_get_serial_number	(GcmSensor		*sensor);
 const gchar		*gcm_sensor_get_model		(GcmSensor		*sensor);
 const gchar		*gcm_sensor_get_vendor		(GcmSensor		*sensor);
 GcmSensorKind		 gcm_sensor_get_kind		(GcmSensor		*sensor);
diff --git a/tools/gcm-sensor-colormunki.c b/tools/gcm-sensor-colormunki.c
index 9b3b94d..557c3d1 100644
--- a/tools/gcm-sensor-colormunki.c
+++ b/tools/gcm-sensor-colormunki.c
@@ -61,7 +61,6 @@ struct _GcmSensorColormunkiPrivate
 	struct libusb_transfer		*transfer_state;
 	GcmUsb				*usb;
 	GcmSensorColormunkiDialPosition	 dial_position;
-	gchar				*serial_number;
 	gchar				*version_string;
 	gchar				*chip_id;
 	gchar				*firmware_revision;
@@ -288,7 +287,8 @@ gcm_sensor_colormunki_submit_transfer (GcmSensorColormunki *sensor_colormunki)
  **/
 static gboolean
 gcm_sensor_colormunki_get_eeprom_data (GcmSensorColormunki *sensor_colormunki,
-				       guint16 address, guchar *data, guint16 size, GError **error)
+				       guint32 address, guchar *data,
+				       guint32 size, GError **error)
 {
 	gint retval;
 	libusb_device_handle *handle;
@@ -299,7 +299,7 @@ gcm_sensor_colormunki_get_eeprom_data (GcmSensorColormunki *sensor_colormunki,
 
 	/* do EEPROM request
 	 *
-	 *   address     length (in LE)
+	 *   address     length (LE)
 	 *  ____|____   ____|____
 	 * /         \ /         \
 	 * 04 00 00 00 04 00 00 00
@@ -405,11 +405,13 @@ gcm_sensor_colormunki_startup (GcmSensor *sensor, GError **error)
 			     libusb_strerror (retval));
 		goto out;
 	}
-	priv->firmware_revision = g_strdup_printf ("%i.%i", gcm_buffer_read_uint16_le (buffer), gcm_buffer_read_uint16_le (buffer+4));
-	priv->tick_duration = gcm_buffer_read_uint16_le (buffer+8);
-	priv->min_int = gcm_buffer_read_uint16_le (buffer+0x0c);
-	priv->eeprom_blocks = gcm_buffer_read_uint16_le (buffer+0x10);
-	priv->eeprom_blocksize = gcm_buffer_read_uint16_le (buffer+0x14);
+	priv->firmware_revision = g_strdup_printf ("%i.%i",
+						   gcm_buffer_read_uint32_le (buffer),
+						   gcm_buffer_read_uint32_le (buffer+4));
+	priv->tick_duration = gcm_buffer_read_uint32_le (buffer+8);
+	priv->min_int = gcm_buffer_read_uint32_le (buffer+0x0c);
+	priv->eeprom_blocks = gcm_buffer_read_uint32_le (buffer+0x10);
+	priv->eeprom_blocksize = gcm_buffer_read_uint32_le (buffer+0x14);
 
 	/* get chip ID */
 	retval = libusb_control_transfer (handle,
@@ -440,17 +442,16 @@ gcm_sensor_colormunki_startup (GcmSensor *sensor, GError **error)
 	}
 
 	/* get serial number */
-	priv->serial_number = g_new0 (gchar, 10);
 	ret = gcm_sensor_colormunki_get_eeprom_data (sensor_colormunki,
 						     COLORMUNKI_EEPROM_OFFSET_SERIAL_NUMBER,
-						     (guchar*)priv->serial_number,
-						     10, error);
+						     buffer, 10, error);
 	if (!ret)
 		goto out;
+	gcm_sensor_set_serial_number (sensor, (const gchar*) buffer);
 
 	/* print details */
 	egg_debug ("Chip ID\t%s", priv->chip_id);
-	egg_debug ("Serial number\t%s", priv->serial_number);
+	egg_debug ("Serial number\t%s", gcm_sensor_get_serial_number (sensor));
 	egg_debug ("Version\t%s", priv->version_string);
 	egg_debug ("Firmware\tfirmware_revision=%s, tick_duration=%i, min_int=%i, eeprom_blocks=%i, eeprom_blocksize=%i",
 		   priv->firmware_revision, priv->tick_duration, priv->min_int, priv->eeprom_blocks, priv->eeprom_blocksize);
@@ -595,7 +596,6 @@ gcm_sensor_colormunki_finalize (GObject *object)
 	g_free (priv->version_string);
 	g_free (priv->chip_id);
 	g_free (priv->firmware_revision);
-	g_free (priv->serial_number);
 
 	G_OBJECT_CLASS (gcm_sensor_colormunki_parent_class)->finalize (object);
 }



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