USB Host controller

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"
);