The goal of this project is to connect the Canon EOS 10D digital single lense reflex camera to a computer running FreeBSD using the USB connector.
This might finally lead to a gphoto plugin or self-contained executable to work on the CF card file system in the camera over the USB bus. Currently I plan to write this for FreeBSD, and then extend it to also work on Solaris.
A first mail from Canon support told me that the camera would support both the PTP (Picture Transfer Protocol) standard and a proprietary Canon protocol. I therefore tried connecting the camera and speaking PTP, but without any success. The camera did not respond.
A second mail to them, stating the efforts of my testing, caused Canon to react really nicely: They called me, gave me some phone numbers which I also called, and then finally I was told to register somewhere on a developer web site. Technical outcome of this so far is that the 10D does not support the PTP but only the Canon internal protocol.
Canon has responded that they were not going to disclose their internal camera protocol to me. I will try and investigate myself then.
I have sniffed the USB driver on a Windows machine and connected the camera with Canons driver and download tools. Now I am analyzing the data I have got from this. Here is a summary of my findings, ordered by "layer".
The camera identifies itself as
It has one configuration entry with one interface.
There are three endpoints for communication with the camera.
descriptor 0: bEndpointAddress=1-in wMaxPacketSize=64 bmAttributes=2 (bulk) bInterval=0 descriptor 1: bEndpointAddress=2-out wMaxPacketSize=64 bmAttributes=2 (bulk) bInterval=0 descriptor 2: bEndpointAddress=3-in wMaxPacketSize=64 bmAttributes=3 (interrupt) bInterval=96
In my dump, the following associations exist:
EndpointAddress descriptor PipeHandle 0x000000081 0 0x809e2f60 0x000000002 1 0x809e2f7c 0x000000083 2 0x809e2f98
The interrupt endpoint is not seen throughout the whole dump.