[argyllcms] Datacolor 1005 spectro reverse-engineering

  • From: Philip Pemberton <philpem@xxxxxxxxxxxxx>
  • To: argyllcms@xxxxxxxxxxxxx
  • Date: Thu, 15 Jul 2010 03:10:55 +0100

Hi guys,

I'm having a play with my Datacolor 1005 -- specifically, I'm trying to reverse-engineer the USB protocol so I can use it with something other than the Spyder software.

I've hooked the 1005 up through a USB protocol analyser and grabbed a couple of traces -- the good news is that it doesn't appear to need a firmware download (unlike the spyder2 and spyder3), and the protocol seems to be fairly simple.

It's essentially a command-response protocol, where the PC sends an OUT request with a given 'tag', and the 1005 responds with an IN response with the same tag. Packet structure is:


  TAG is a byte which starts at 0x00 and increments with every packet sent.
LEN is the length of the packet, including TAG and LEN. So if you have 8 payload bytes, then LEN=10.
  PAYLOAD is the payload data

The exception to this is polling -- while the 1005 is idle, the PC attempts to read one byte from the USB bus every 100ms. If it receives a 0xFA byte, then the spectro button has been pressed. If the transaction times out (returns no data), then there was no button press.

As far as payload data goes, it seems the first byte of the OUTgoing payload is a command byte, and the first byte of INcoming payload data is a status byte. It looks like measurements are initiated with a 0x0A command, which returns 15 bytes of data:

  Out: 13 03 0A    [tag=0x13, cmd=0x0a, 3 bytes data]
  In: 13 0F 00     [tag=0x13, 15 bytes data, response code 0x00]
      00 6A 3E
      60 FF FE
      AA 34 FF
      FF 10 28

This correlates to L = 90.25, a = -1.34, b = -0.94, Density = 0.11, and was sampled from the 1005's calibration tile. I have no idea how the data payload correlates to a set of L*a*b and density values. The calibration sequence is even more complex...

Has anyone else been working on reverse engineering this beast (or the Spyder series)? I'd be interested in comparing notes and maybe working to get this thing supported in Argyll (or at least putting together a driver library to use it for other things).


Other related posts:

  • » [argyllcms] Datacolor 1005 spectro reverse-engineering - Philip Pemberton