[argyllcms/f20] Add experimental ColorHug2 driver

Richard Hughes rhughes at fedoraproject.org
Fri Oct 24 20:00:46 UTC 2014


commit 609dbc260f513c402eacd339f14866827f2d6729
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Oct 24 17:53:28 2014 +0100

    Add experimental ColorHug2 driver

 0001-Add-support-for-the-ColorHug2-sensor.patch |  220 +++++++++++++++++++++++
 argyllcms.spec                                  |    9 +-
 2 files changed, 228 insertions(+), 1 deletions(-)
---
diff --git a/0001-Add-support-for-the-ColorHug2-sensor.patch b/0001-Add-support-for-the-ColorHug2-sensor.patch
new file mode 100644
index 0000000..0490d5e
--- /dev/null
+++ b/0001-Add-support-for-the-ColorHug2-sensor.patch
@@ -0,0 +1,220 @@
+From 0680d52f503248658e334b7bc73cde1c92619ed1 Mon Sep 17 00:00:00 2001
+From: Richard Hughes <richard at hughsie.com>
+Date: Sun, 19 Oct 2014 22:57:29 +0100
+Subject: [PATCH] Add support for the ColorHug2 sensor
+
+---
+ spectro/colorhug.c  | 52 ++++++++++++++++++++++++++++++++++++++++++----------
+ spectro/colorhug.h  |  5 +++--
+ spectro/inst.c      |  3 ++-
+ spectro/insttypes.c | 13 +++++++++++++
+ spectro/insttypes.h |  1 +
+ 10 files changed, 71 insertions(+), 13 deletions(-)
+
+diff --git a/spectro/colorhug.c b/spectro/colorhug.c
+index 0152000..528f62e 100644
+--- a/spectro/colorhug.c
++++ b/spectro/colorhug.c
+@@ -6,10 +6,10 @@
+  * Hughski ColorHug related functions
+  *
+  * Author: Richard Hughes
+- * Date:   30/11/2011
++ * Date:   30/11/2011 - 19/10/2014
+  *
+  * Copyright 2006 - 2014, Graeme W. Gill
+- * Copyright 2011, Richard Hughes
++ * Copyright 2011 - 2014, Richard Hughes
+  * All rights reserved.
+  *
+  * (Based on huey.c)
+@@ -53,6 +53,7 @@ typedef enum {
+ 	ch_set_mult		        = 0x04,		/* Set multiplier value */
+ 	ch_set_integral	        = 0x06,		/* Set integral time */
+ 	ch_get_firmware_version	= 0x07,		/* Get the Firmware version number */
++	ch_get_hardware_version	= 0x30,		/* Get the hardware version number */
+ 	ch_get_serial	        = 0x0b,		/* Gets the serial number */
+ 	ch_set_leds		        = 0x0e,		/* Sets the LEDs */
+ 	ch_take_reading         = 0x22,		/* Takes a raw reading minus dark offset */
+@@ -487,6 +488,26 @@ colorhug_get_firmwareversion (colorhug *p)
+ 	return ev;
+ }
+ 
++/* Get the hardware version */
++static inst_code
++colorhug_get_hardwareversion (colorhug *p)
++{
++	inst_code ev;
++	unsigned char obuf;
++
++	ev = colorhug_command(p, ch_get_firmware_version,
++						  NULL, 0,
++						  &obuf, 1,
++						  2.0);
++	if (ev != inst_ok)
++		return ev;
++
++	p->hwrev = obuf;
++	a1logd(p->log,2,"colorhug: Hardware version = %u\n", p->hwrev);
++
++	return ev;
++}
++
+ /* Get the serial number */
+ static inst_code
+ colorhug_get_serialnumber (colorhug *p)
+@@ -577,6 +598,11 @@ colorhug_init_inst(inst *pp)
+ 	if (ev != inst_ok)
+ 		return ev;
+ 
++	/* Get the hardware version */
++	ev = colorhug_get_hardwareversion(p);
++	if (ev != inst_ok)
++		return ev;
++
+ 	/* Get the serial number */
+ 	ev = colorhug_get_serialnumber(p);
+ 	if (ev != inst_ok)
+@@ -588,16 +614,21 @@ colorhug_init_inst(inst *pp)
+ 		return ev;
+ 
+ 	/* Turn the sensor on */
+-	ev = colorhug_set_multiplier(p, 0x03);
+-	if (ev != inst_ok)
+-		return ev;
++	if (p->itype == instColorHug) {
++		ev = colorhug_set_multiplier(p, 0x03);
++		if (ev != inst_ok)
++			return ev;
++	}
+ 
+ 	/* Set the integral time to maximum precision */
+-	ev = colorhug_set_integral(p, 0xffff);
+-	if (ev != inst_ok)
+-		return ev;
++	if (p->itype == instColorHug) {
++		ev = colorhug_set_integral(p, 0xffff);
++		if (ev != inst_ok)
++			return ev;
++	}
+ 
+-	if (p->maj <= 1 && p->min <= 1 && p->uro <= 4) {
++	if (p->itype == instColorHug &&
++	    p->maj <= 1 && p->min <= 1 && p->uro <= 4) {
+ 
+ 		/* Get the post scale factor */
+ 		ev = colorhug_get_postscale(p, &p->postscale);
+@@ -621,8 +652,9 @@ colorhug_init_inst(inst *pp)
+ 	a1logd(p->log, 2, "colorhug_init: inited coms OK\n");
+ 
+ 	a1logv(p->log,1,"Serial Number:     %06u\n"
++	                "Hardware Version:  %u\n"
+ 	                "Firmware Version:  %d.%d.%d\n"
+-	                ,p->ser_no,p->maj,p->min,p->uro);
++	                ,p->ser_no,p->hwrev,p->maj,p->min,p->uro);
+ 
+ 	/* Flash the LEDs */
+ 	ev = colorhug_set_LEDs(p, 0x1);
+diff --git a/spectro/colorhug.h b/spectro/colorhug.h
+index a591608..46460a3 100644
+--- a/spectro/colorhug.h
++++ b/spectro/colorhug.h
+@@ -6,10 +6,10 @@
+  * Hughski ColorHug related defines
+  *
+  * Author: Richard Hughes
+- * Date:   30/11/2011
++ * Date:   30/11/2011 - 19/10/2014
+  *
+  * Copyright 2006 - 2013, Graeme W. Gill
+- * Copyright 2011, Richard Hughes
++ * Copyright 2011 - 2014, Richard Hughes
+  * All rights reserved.
+  *
+  * (Based on huey.h)
+@@ -68,6 +68,7 @@ struct _colorhug {
+ 	inst_opt_type trig;			/* Reading trigger mode */
+ 
+ 	int maj, min, uro;			/* Version number */
++	int hwrev;					/* Hardware revision */
+ 	int ser_no;					/* Serial number */
+ 
+ 	inst_disptypesel *dtlist;	/* Display Type list */
+diff --git a/spectro/inst.c b/spectro/inst.c
+index a910750..7c216f2 100644
+--- a/spectro/inst.c
++++ b/spectro/inst.c
+@@ -600,7 +600,8 @@ void *cntx			/* Context for callback */
+ 		p = (inst *)new_huey(icom, itype);
+ 	else if (itype == instSmile)
+ 		p = (inst *)new_i1disp(icom, itype);
+-	else if (itype == instColorHug)
++	else if (itype == instColorHug ||
++	         itype == instColorHug2)
+ 		p = (inst *)new_colorhug(icom, itype);
+ #endif /* ENABLE_USB */
+ 
+diff --git a/spectro/insttypes.c b/spectro/insttypes.c
+index d70bc71..235ae5e 100644
+--- a/spectro/insttypes.c
++++ b/spectro/insttypes.c
+@@ -92,6 +92,8 @@ char *inst_sname(instType itype) {
+ 			return "specbos";
+ 		case instColorHug:
+ 			return "ColorHug";
++		case instColorHug2:
++			return "ColorHug2";
+ 		default:
+ 			break;
+ 	}
+@@ -153,6 +155,8 @@ char *inst_name(instType itype) {
+ 			return "JETI specbos";
+ 		case instColorHug:
+ 			return "Hughski ColorHug";
++		case instColorHug2:
++			return "Hughski ColorHug2";
+ 		default:
+ 			break;
+ 	}
+@@ -219,6 +223,8 @@ instType inst_enum(char *name) {
+ 		return instSpecbos;
+ 	else if (strcmp(name, "Hughski ColorHug") == 0)
+ 		return instColorHug;
++	else if (strcmp(name, "Hughski ColorHug2") == 0)
++		return instColorHug2;
+ 
+ 
+ 	return instUnknown;
+@@ -297,6 +303,12 @@ int nep) {					/* Number of end points */
+ 	 || (idVendor == 0x273f && idProduct == 0x1001)) {		/* Hughski & ColorHug Fmw. >= 0.1.20 */
+ 		return instColorHug;
+ 	}
++
++	if (idVendor == 0x273f && idProduct == 0x1004) {
++		/* Hughski ColorHug */
++		return instColorHug2;
++	}
++
+ 	/* Add other instruments here */
+ 
+ 
+@@ -391,6 +403,7 @@ int inst_illuminant(xspect *sp, instType itype) {
+ 			return 1;										/* Not applicable */
+ 
+ 		case instColorHug:
++		case instColorHug2:
+ 			return 1;										/* Not applicable */
+ 
+ 
+diff --git a/spectro/insttypes.h b/spectro/insttypes.h
+index ff86cc5..6b0c787 100644
+--- a/spectro/insttypes.h
++++ b/spectro/insttypes.h
+@@ -52,6 +52,7 @@ typedef enum {
+ 	instSpecbos1201,			/* JETI specbos 1201 */
+ 	instSpecbos,				/* JETI specbos XXXX */
+ 	instColorHug,				/* Hughski ColorHug */
++	instColorHug2,				/* Hughski ColorHug2 */
+ 
+ 
+ 	instFakeDisp = 9998,		/* Fake display & instrument device id */
diff --git a/argyllcms.spec b/argyllcms.spec
index 948923c..5a1c05b 100644
--- a/argyllcms.spec
+++ b/argyllcms.spec
@@ -1,12 +1,15 @@
 Name:    argyllcms
 Version: 1.6.3
-Release: 1%{?dist}
+Release: 4%{?dist}
 Summary: ICC compatible color management system
 Group:   User Interface/X
 License: GPLv3 and MIT
 URL:     http://gitorious.org/hargyllcms
 Source0: http://people.freedesktop.org/~hughsient/releases/hargyllcms-%{version}.tar.xz
 
+# already sent upstream; pending a new release
+Patch0:  0001-Add-support-for-the-ColorHug2-sensor.patch
+
 BuildRequires: autoconf
 BuildRequires: automake
 BuildRequires: libtool
@@ -51,6 +54,7 @@ This package contains the Argyll color management system documentation.
 
 %prep
 %setup -q -n hargyllcms-%{version}
+%patch0 -p1 -b .colorhug2
 # we're not allowed to refer to acquisition devices as scanners
 ./legal.sh
 autoreconf --force --install
@@ -89,6 +93,9 @@ rm -f $RPM_BUILD_ROOT/lib/udev/rules.d/55-Argyll.rules
 %doc doc/*.html doc/*.jpg doc/*.txt
 
 %changelog
+* Fri Oct 24 2014 Richard Hughes <rhughes at redhat.com> - 1.6.3-4
+- Add experimental ColorHug2 driver, which has already been sent upstream.
+
 * Sun Feb 02 2014 Richard Hughes <rhughes at redhat.com> - 1.6.3-1
 - Update to 1.6.3
 - Added code to minimize ICC rounding error white point accuracy


More information about the scm-commits mailing list