This is a DiscontinuedProject. Currently, no effort is made for further work here.

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.

Trying to find the protocol

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.

Protocol analysis

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".

Device identification

The camera identifies itself as

idVendor=0x04a9 idProduct=0x3083

It has one configuration entry with one interface.

USB endpoints

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.


CategoryComputer CategoryPhotography


THIS DATA IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DATA, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

All product and brand names mentioned on there pages and in the source code are registered names and/or trademarks of the respective owner and are mentioned for identification purposes only.

For a full copyright notice, please see this link. For imprint and contact information, please see http://www.thiemo.net/.

CanonEOS10D (last edited 2009-07-08 13:34:30 by ThiemoNordenholz)