Go Down

Topic: USB Host controller (Read 13 times) previous topic - next topic


Sorry, I don't mean libgphoto as program itself. Crosscompiling should be a little bit to difficult, but I think they have found a lot of codes for calling camera functions, so libgphoto could be a look up reference.


Im working on a similar project to control my Canon DSLR. I have an Arduino Duemilenova connected to a FTDI Host Controller which then sends commands to the camera via USB. But I can't figure out at the moment how to format the information to the camera. I've been looking at the libgphoto as an example, but no dice so far.

I figure its gotta be sent in ascii, in a format such as

Camera Device ID , command , subcommand

Have you made any progress?

The following are codes for a canon camera:

my %canon_cmd = (
   "0x01 0x11 0x202" => "Get picture/thumbnail",
   "0x01 0x12 0x201" => "Identify camera",
   "0x03 0x12 0x201" => "Get time",
   "0x03 0x11 0x403" => "Upload data block",
   "0x04 0x12 0x201" => "Set time",
   "0x05 0x11 0x201" => "Make directory",
   "0x05 0x12 0x201" => "Change owner (old) or get owner (new)",
   "0x06 0x11 0x201" => "Remove directory",
   "0x06 0x12 0x201" => "Change owner (new)",
   "0x09 0x11 0x201" => "Disk info request",
   "0x0a 0x11 0x202" => "Flash device ID",
   "0x0a 0x11 0x201" => "Delete file (new)",
   "0x0a 0x12 0x201" => "Power supply status",
   "0x0b 0x11 0x202" => "Get directory",
   "0x0d 0x11 0x201" => "Delete file (old) or Disk info request (new)",
   "0x0e 0x11 0x201" => "Set file attribute",
   "0x0e 0x11 0x202" => "Flash Device ID (new)",
   "0x0f 0x11 0x201" => "Set file time",
   "0x13 0x12 0x201" => "Remote Camera control",
   "0x17 0x12 0x202" => "Download captured image",
   "0x18 0x12 0x202" => "Download captured preview",
   "0x1a 0x12 0x201" => "Unknown EOS D30 command",
   "0x1b 0x12 0x201" => "EOS lock keys",
   "0x1c 0x12 0x201" => "EOS unlock keys",
   "0x1d 0x12 0x201" => "EOS get body ID (old) or Get Custom Functions (new)",
   "0x1f 0x12 0x201" => "Get camera abilities",
   "0x20 0x12 0x201" => "Lock keys, turn off LCD",
   "0x21 0x12 0x201" => "Unknown newer command",
   "0x22 0x12 0x201" => "Unknown newer command",
   "0x23 0x12 0x201" => "Get EOS Body ID (new)",
   "0x24 0x12 0x201" => "Get camera abilities (new)",
   "0x25 0x12 0x201" => "Remote Camera control (new)",
   "0x26 0x12 0x202" => "Get captured image (new)",
   "0x35 0x12 0x201" => "Unknown newer command",
   "0x36 0x12 0x201" => "Unknown newer command"

my %control_subcmd = ( "0x00" => "Camera control init",
                  "0x01" => "Exit release control",
                  "0x02" => "Start viewfinder",
                  "0x03" => "Stop viewfinder",
                  "0x04" => "Release shutter",
                  "0x07" => "Set release params",
                  "0x09" => "Set transfer mode",
                  "0x0a" => "Get release params",
                  "0x0b" => "Get zoom position",
                  "0x0c" => "Set zoom position",
                  "0x0d" => "Get available shot",
                  "0x0e" => "Set custom func.",
                  "0x0f" => "Get custom func.",
                  "0x10" => "Get extended release params size",
                  "0x11" => "Get extended params version",
                  "0x12" => "Get extended release params",
                  "0x13" => "Set extended params",
                  "0x14" => "Select camera output",
                  "0x15" => "Do AE, AF, and AWB"


You need to follow PTP - open/close session, get object handle, and stuff. Commands, such as shutter release, are put in a data block, parameters, such as aperture/shutter speed change, go into data block. I'm planning on posting some camera control code for Canons (EOS and PS) in next couple of weeks.

Martin S

Feb 25, 2010, 09:50 am Last Edit: Feb 25, 2010, 09:55 am by schmart Reason: 1
have you seen this post:


for nikon cameras (D50/D80/D90) it has been done and it is working (for me)

edit: i mean this post



Go Up