/**************************************************************************** * * File: usb.h * ****************************************************************************/ #ifndef _CANON_USB_H #define _CANON_USB_H /** * USB_BULK_READ_SIZE * * Maximum size to be used for a USB "bulk read" operation * */ #define USB_BULK_READ_SIZE 0x1400 /** * USB_BULK_WRITE_SIZE * * Maximum size to be used for a USB "bulk write" operation * */ /* #define USB_BULK_WRITE_SIZE 0xC000 */ #define USB_BULK_WRITE_SIZE 0x1400 /** * canonCommandIndex: * @CANON_USB_FUNCTION_GET_FILE: Command to download a file from the camera. * @CANON_USB_FUNCTION_IDENTIFY_CAMERA: Command to read the firmware version and * strings with the camera type and owner from the camera. * @CANON_USB_FUNCTION_GET_TIME: Command to get the time in Unix time format from the camera. * @CANON_USB_FUNCTION_SET_TIME: Command to set the camera's internal time. * @CANON_USB_FUNCTION_MKDIR: Command to create a directory on the camera storage device. * @CANON_USB_FUNCTION_CAMERA_CHOWN: Change "owner" string on camera * @CANON_USB_FUNCTION_RMDIR: Command to delete a directory from camera storage. * @CANON_USB_FUNCTION_DISK_INFO: Command to get disk information from * the camera, given a disk designator (e.g. "D:"). Returns total * capacity and free space. * @CANON_USB_FUNCTION_FLASH_DEVICE_IDENT: Command to request the disk specifier * (drive letter) for the storage device being used. * @CANON_USB_FUNCTION_POWER_STATUS: Command to query the camera for its power status: * battery vs. mains, and whether the battery is low. * @CANON_USB_FUNCTION_GET_DIRENT: Get directory entries * @CANON_USB_FUNCTION_DELETE_FILE: Delete file * @CANON_USB_FUNCTION_DISK_INFO_2: get disk info for newer protocol * (capacity and free space) * @CANON_USB_FUNCTION_SET_ATTR: Command to set the attributes of a * file on the camera (e.g. downloaded, protect from delete). * @CANON_USB_FUNCTION_GET_PIC_ABILITIES: Command to "get picture * abilities", which seems to be a list of the different sizes and * quality of images that are available on this camera. Not * implemented (and will cause an error) on the EOS cameras or on * newer PowerShot cameras such as S45, G3, G5. * @CANON_USB_FUNCTION_GENERIC_LOCK_KEYS: Command to lock keys (and * turn on "PC" indicator) on non-EOS cameras. * @CANON_USB_FUNCTION_EOS_LOCK_KEYS: Lock keys (EOS cameras) * @CANON_USB_FUNCTION_EOS_UNLOCK_KEYS: Unlock keys (EOS cameras) * @CANON_USB_FUNCTION_RETRIEVE_CAPTURE: Command to retrieve the last * image captured, depending on the transfer mode set via * %CANON_USB_FUNCTION_CONTROL_CAMERA with subcommand * %CANON_USB_CONTROL_SET_TRANSFER_MODE. * @CANON_USB_FUNCTION_RETRIEVE_PREVIEW: Command to retrieve a preview * image. * @CANON_USB_FUNCTION_CONTROL_CAMERA: Remote camera control (with * many subcodes) * @CANON_USB_FUNCTION_FLASH_DEVICE_IDENT_2: Command to request the * disk specifier (drive letter) for the storage device being * used. Used with the "newer" protocol, e.g. with EOS 20D. * @CANON_USB_FUNCTION_POWER_STATUS_2: Command to query the camera for * its power status: battery vs. mains, and whether the battery is * low. Used in the "newer" protocol, e.g. with EOS 20D. * @CANON_USB_FUNCTION_UNKNOWN_FUNCTION: Don't know what this is for; * it has been sighted in USB trace logs for an EOS D30, but not for * a D60 or for any PowerShot camera. * @CANON_USB_FUNCTION_EOS_GET_BODY_ID: Command to read the body ID (serial number) * from an EOS camera. * @CANON_USB_FUNCTION_SET_FILE_TIME: Set file time * @CANON_USB_FUNCTION_20D_UNKNOWN_1: First seen with EOS 20D, not yet understood. * @CANON_USB_FUNCTION_20D_UNKNOWN_2: First seen with EOS 20D, not yet understood. * @CANON_USB_FUNCTION_EOS_GET_BODY_ID_2: Same function as * %CANON_USB_FUNCTION_EOS_GET_BODY_ID, but first seen on EOS 20D. * @CANON_USB_FUNCTION_GET_PIC_ABILITIES_2: Same function as * %CANON_USB_FUNCTION_GET_PIC_ABILITIES, but first seen on EOS 20D. * @CANON_USB_FUNCTION_CONTROL_CAMERA_2: Replacement for * %CANON_USB_FUNCTION_CONTROL_CAMERA, with many similarities, first * seen with EOS 20D. * @CANON_USB_FUNCTION_RETRIEVE_CAPTURE_2: Same function as * %CANON_USB_FUNCTION_RETRIEVE_CAPTURE, but first seen on EOS 20D. * @CANON_USB_FUNCTION_LOCK_KEYS_2: Same as %CANON_USB_FUNCTION_EOS_LOCK_KEYS, * but for newer protocol. * @CANON_USB_FUNCTION_UNLOCK_KEYS_2: Same as %CANON_USB_FUNCTION_EOS_UNLOCK_KEYS, * but for newer protocol. * @CANON_USB_FUNCTION_SET_ATTR_2: Presumed code to set attribute bits * for a file on an EOS 20D and its ilk. * @CANON_USB_FUNCTION_CAMERA_CHOWN_2: Same as %CANON_USB_FUNCTION_CAMERA_CHOWN, * but for newer protocol. * @CANON_USB_FUNCTION_GET_OWNER: Gets just the owner name, in newer protocol. * * Codes to give to canon_usb_dialogue() or canon_usb_long_dialogue() * to select which command to issue to the camera. See the protocol * document for details. */ typedef enum { CANON_USB_FUNCTION_GET_FILE = 1, CANON_USB_FUNCTION_IDENTIFY_CAMERA, CANON_USB_FUNCTION_GET_TIME, CANON_USB_FUNCTION_SET_TIME, CANON_USB_FUNCTION_MKDIR, CANON_USB_FUNCTION_CAMERA_CHOWN, CANON_USB_FUNCTION_RMDIR, CANON_USB_FUNCTION_DISK_INFO, CANON_USB_FUNCTION_FLASH_DEVICE_IDENT, CANON_USB_FUNCTION_POWER_STATUS, CANON_USB_FUNCTION_GET_DIRENT, CANON_USB_FUNCTION_DELETE_FILE, CANON_USB_FUNCTION_SET_ATTR, CANON_USB_FUNCTION_GET_PIC_ABILITIES, CANON_USB_FUNCTION_GENERIC_LOCK_KEYS, CANON_USB_FUNCTION_EOS_LOCK_KEYS, CANON_USB_FUNCTION_EOS_UNLOCK_KEYS, CANON_USB_FUNCTION_RETRIEVE_CAPTURE, CANON_USB_FUNCTION_RETRIEVE_PREVIEW, CANON_USB_FUNCTION_CONTROL_CAMERA, CANON_USB_FUNCTION_DISK_INFO_2, CANON_USB_FUNCTION_FLASH_DEVICE_IDENT_2, CANON_USB_FUNCTION_POWER_STATUS_2, CANON_USB_FUNCTION_UNKNOWN_FUNCTION, CANON_USB_FUNCTION_EOS_GET_BODY_ID, CANON_USB_FUNCTION_SET_FILE_TIME, CANON_USB_FUNCTION_20D_UNKNOWN_1, CANON_USB_FUNCTION_20D_UNKNOWN_2, CANON_USB_FUNCTION_EOS_GET_BODY_ID_2, CANON_USB_FUNCTION_GET_PIC_ABILITIES_2, CANON_USB_FUNCTION_CONTROL_CAMERA_2, CANON_USB_FUNCTION_RETRIEVE_CAPTURE_2, CANON_USB_FUNCTION_LOCK_KEYS_2, CANON_USB_FUNCTION_UNLOCK_KEYS_2, CANON_USB_FUNCTION_DELETE_FILE_2, CANON_USB_FUNCTION_SET_ATTR_2, CANON_USB_FUNCTION_CAMERA_CHOWN_2, CANON_USB_FUNCTION_GET_OWNER, } canonCommandIndex; /** * canonSubcommandIndex: * @CANON_USB_CONTROL_INIT: Enter camera control mode * @CANON_USB_CONTROL_SHUTTER_RELEASE: Release camera shutter (capture still) * @CANON_USB_CONTROL_SET_PARAMS: Set release parameters (AE mode, beep, etc.) * @CANON_USB_CONTROL_SET_TRANSFER_MODE: Set transfer mode for next image * capture. Either the full image, a thumbnail or both may be either * stored on the camera, downloaded to the host, or both. * @CANON_USB_CONTROL_GET_PARAMS: Read the same parameters set by * @CANON_USB_CONTROL_SET_PARAMS. * @CANON_USB_CONTROL_GET_ZOOM_POS: Get the position of the zoom lens * @CANON_USB_CONTROL_SET_ZOOM_POS: Set the position of the zoom lens * @CANON_USB_CONTROL_GET_EXT_PARAMS_SIZE: Get the size of the "extended * release parameters". * @CANON_USB_CONTROL_GET_EXT_PARAMS: Get the "extended release parameters". * @CANON_USB_CONTROL_EXIT: Leave camera control mode; opposite of * @CANON_USB_CONTROL_INIT. * @CANON_USB_CONTROL_VIEWFINDER_START: Switch video viewfinder on. * @CANON_USB_CONTROL_VIEWFINDER_STOP: Swictch video viewfinder off. * @CANON_USB_CONTROL_GET_AVAILABLE_SHOT: Get estimated number of images * that can be captured in current mode before filling flash card. * @CANON_USB_CONTROL_SET_CUSTOM_FUNC: Not yet seen in USB trace. * @CANON_USB_CONTROL_GET_CUSTOM_FUNC: Read custom functions from an EOS camera * @CANON_USB_CONTROL_GET_EXT_PARAMS_VER: Not yet seen in USB trace. * @CANON_USB_CONTROL_SET_EXT_PARAMS: Not yet seen in USB trace. * @CANON_USB_CONTROL_SELECT_CAM_OUTPUT: Not yet seen in USB trace. * @CANON_USB_CONTROL_DO_AE_AF_AWB: Not yet seen in USB trace. * @CANON_USB_CONTROL_UNKNOWN_1: part of new protocol, function unknown. * @CANON_USB_CONTROL_UNKNOWN_2: part of new protocol, function unknown. * * CANON_USB_FUNCTION_CONTROL_CAMERA commands are used for a wide range * of remote camera control actions. A control_cmdstruct is defined * below for the following remote camera control options. */ typedef enum { CANON_USB_CONTROL_INIT = 1, CANON_USB_CONTROL_SHUTTER_RELEASE, CANON_USB_CONTROL_SET_PARAMS, CANON_USB_CONTROL_SET_TRANSFER_MODE, CANON_USB_CONTROL_GET_PARAMS, CANON_USB_CONTROL_GET_ZOOM_POS, CANON_USB_CONTROL_SET_ZOOM_POS, CANON_USB_CONTROL_GET_EXT_PARAMS_SIZE, CANON_USB_CONTROL_GET_EXT_PARAMS, CANON_USB_CONTROL_EXIT, CANON_USB_CONTROL_VIEWFINDER_START, CANON_USB_CONTROL_VIEWFINDER_STOP, CANON_USB_CONTROL_GET_AVAILABLE_SHOT, CANON_USB_CONTROL_SET_CUSTOM_FUNC, /* Not yet seen in USB trace */ CANON_USB_CONTROL_GET_CUSTOM_FUNC, CANON_USB_CONTROL_GET_EXT_PARAMS_VER, /* Not yet seen in USB trace */ CANON_USB_CONTROL_SET_EXT_PARAMS, /* Not yet seen in USB trace */ CANON_USB_CONTROL_SELECT_CAM_OUTPUT, /* Not yet seen in USB trace */ CANON_USB_CONTROL_DO_AE_AF_AWB, /* Not yet seen in USB trace */ CANON_USB_CONTROL_UNKNOWN_1, CANON_USB_CONTROL_UNKNOWN_2 } canonSubcommandIndex; 00206 struct canon_usb_control_cmdstruct { canonSubcommandIndex num; char *description; char subcmd; int cmd_length; int additional_return_length; }; /** * MAX_INTERRUPT_TRIES * * Maximum number of times to try a read from the interrupt pipe. We * will keep reading until an error, a read of non-zero length, or for * a maximum of this many times. */ #define MAX_INTERRUPT_TRIES 12000 00226 struct canon_usb_cmdstruct { canonCommandIndex num; char *description; char cmd1, cmd2; int cmd3; int return_length; }; /* USB command data structures defined in usb.c */ /*extern const struct canon_usb_cmdstruct canon_usb_cmd[];*/ extern const struct canon_usb_control_cmdstruct canon_usb_control_cmd[]; /* For mapping status codes to intelligible messages */ 00243 struct canon_usb_status { int code; char *message; }; /**************************************************************************** * * prototypes * ****************************************************************************/ int canon_usb_init (Camera *camera, GPContext *context); int canon_usb_set_file_time ( Camera *camera, char *camera_filename, time_t time, GPContext *context); int canon_usb_put_file (Camera *camera, CameraFile *file, char *destname, char *destpath, GPContext *context); unsigned char *canon_usb_capture_dialogue (Camera *camera, unsigned int *return_length, int *photo_status, GPContext *context ); unsigned char *canon_usb_dialogue_full (Camera *camera, canonCommandIndex canon_funct, unsigned int *return_length, const unsigned char *payload, unsigned int payload_length); unsigned char *canon_usb_dialogue (Camera *camera, canonCommandIndex canon_funct, unsigned int *return_length, const unsigned char *payload, unsigned int payload_length); int canon_usb_long_dialogue (Camera *camera, canonCommandIndex canon_funct, unsigned char **data, unsigned int *data_length, unsigned int max_data_size, const unsigned char *payload, unsigned int payload_length, int display_status, GPContext *context); int canon_usb_get_file (Camera *camera, const char *name, unsigned char **data, unsigned int *length, GPContext *context); int canon_usb_get_thumbnail (Camera *camera, const char *name, unsigned char **data, unsigned int *length, GPContext *context); int canon_usb_get_captured_image (Camera *camera, const int key, unsigned char **data, unsigned int *length, GPContext *context); int canon_usb_get_captured_secondary_image (Camera *camera, const int key, unsigned char **data, unsigned int *length, GPContext *context); int canon_usb_get_captured_thumbnail (Camera *camera, const int key, unsigned char **data, unsigned int *length, GPContext *context); int canon_usb_lock_keys(Camera *camera, GPContext *context); int canon_usb_unlock_keys(Camera *camera, GPContext *context); int canon_usb_get_dirents (Camera *camera, unsigned char **dirent_data, unsigned int *dirents_length, const char *path, GPContext *context); int canon_usb_list_all_dirs (Camera *camera, unsigned char **dirent_data, unsigned int *dirents_length, GPContext *context); int canon_usb_set_file_attributes (Camera *camera, unsigned int attr_bits, const char *dir, const char *file, GPContext *context); int canon_usb_ready (Camera *camera, GPContext *context); int canon_usb_wait_for_event (Camera *camera, int timeout, CameraEventType *eventtype, void **eventdata, GPContext *context); #endif /* _CANON_USB_H */ /**************************************************************************** * * End of file: usb.h * ****************************************************************************/ /* * Local Variables: * c-file-style:"linux" * indent-tabs-mode:t * End: */