summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Meissner <marcus@jet.franken.de>2012-04-15 15:19:35 +0000
committerMarcus Meissner <marcus@jet.franken.de>2012-04-15 15:19:35 +0000
commitba975a736cb98701ea2e9197aaee88d02449d73e (patch)
treedb35b78c0bd66f6f345e392ab92408cbedbd965b
parentda3607738dbfa4d06623a6badb2d1adaad3dbca9 (diff)
downloadlibgphoto2-ba975a736cb98701ea2e9197aaee88d02449d73e.tar.gz
new canon requestobject transfer from trunk
git-svn-id: https://svn.code.sf.net/p/gphoto/code/branches/libgphoto2-2_4/libgphoto2@13994 67ed7778-7388-44ab-90cf-0a291f65f57c
-rw-r--r--camlibs/ptp2/library.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/camlibs/ptp2/library.c b/camlibs/ptp2/library.c
index 6a9ea73d6..c5e3b59c4 100644
--- a/camlibs/ptp2/library.c
+++ b/camlibs/ptp2/library.c
@@ -2900,6 +2900,42 @@ camera_wait_for_event (Camera *camera, int timeout,
CPR (context, ptp_check_event (params));
if (ptp_get_one_event(params, &event)) {
gp_log (GP_LOG_DEBUG, "ptp","canon event: nparam=0x%X, C=0x%X, trans_id=0x%X, p1=0x%X, p2=0x%X, p3=0x%X", event.Nparam,event.Code,event.Transaction_ID, event.Param1, event.Param2, event.Param3);
+ switch (event.Code) {
+ case PTP_EC_CANON_RequestObjectTransfer: {
+ CameraFilePath *path;
+ PTPObjectInfo oi;
+
+ newobject = event.Param1;
+ gp_log (GP_LOG_DEBUG, "ptp", "PTP_EC_CANON_RequestObjectTransfer, object handle=0x%X.",newobject);
+ /* FIXME: handle multiple images (as in BurstMode) */
+ ret = ptp_getobjectinfo (params, newobject, &oi);
+ if (ret != PTP_RC_OK) return translate_ptp_result (ret);
+
+ if (oi.ParentObject != 0) {
+ ret = add_object (camera, newobject, context);
+ if (ret != GP_OK)
+ return ret;
+ path = malloc (sizeof(CameraFilePath));
+ strcpy (path->name, oi.Filename);
+ sprintf (path->folder,"/"STORAGE_FOLDER_PREFIX"%08lx/",(unsigned long)oi.StorageID);
+ get_folder_from_handle (camera, oi.StorageID, oi.ParentObject, path->folder);
+ /* delete last / or we get confused later. */
+ path->folder[ strlen(path->folder)-1 ] = '\0';
+ gp_filesystem_append (camera->fs, path->folder, path->name, context);
+
+ } else {
+ path = malloc (sizeof(CameraFilePath));
+ sprintf (path->folder,"/"STORAGE_FOLDER_PREFIX"%08lx",(unsigned long)oi.StorageID);
+ sprintf (path->name, "capt%04d.jpg", capcnt++);
+ add_objectid_and_upload (camera, path, context, newobject, &oi);
+ }
+ *eventdata = path;
+ *eventtype = GP_EVENT_FILE_ADDED;
+ return GP_OK;
+ }
+ default:
+ break;
+ }
goto handleregular;
}
if (_timeout_passed (&event_start, timeout))