summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorMarcus Meissner <marcus@jet.franken.de>2016-12-20 08:43:11 +0100
committerMarcus Meissner <marcus@jet.franken.de>2016-12-20 08:43:11 +0100
commit3afe07dbfdc4f7b29c7830e43a09fb58ae20861d (patch)
tree6049822607b40b3df4ec479d41326f17d2925d28 /examples
parenteae8a13ac25851dbe1e1b2f2f043866a9bfeac64 (diff)
downloadlibgphoto2-3afe07dbfdc4f7b29c7830e43a09fb58ae20861d.tar.gz
wait_for_Event needs to be run multiple times to drain
the event queue better. otherwise e.g. Nikon DSLR will never get to the fileadded event.
Diffstat (limited to 'examples')
-rw-r--r--examples/sample-trigger-capture.c73
1 files changed, 43 insertions, 30 deletions
diff --git a/examples/sample-trigger-capture.c b/examples/sample-trigger-capture.c
index 0c563318a..7b61b9df7 100644
--- a/examples/sample-trigger-capture.c
+++ b/examples/sample-trigger-capture.c
@@ -33,41 +33,54 @@ wait_event_and_download (Camera *camera, int waittime, GPContext *context) {
CameraFilePath *path;
void *data;
int retval;
+ struct timeval start, curtime;
+ gettimeofday (&start, NULL);
data = NULL;
if (nrofqueue)
waittime = 10; /* just drain the event queue */
- retval = gp_camera_wait_for_event(camera, waittime, &evtype, &data, context);
- if (retval != GP_OK) {
- fprintf (stderr, "return from waitevent in trigger sample with %d\n", retval);
- return retval;
- }
- path = data;
- switch (evtype) {
- case GP_EVENT_CAPTURE_COMPLETE:
- fprintf (stderr, "wait for event CAPTURE_COMPLETE\n");
- break;
- case GP_EVENT_UNKNOWN:
- case GP_EVENT_TIMEOUT:
- break;
- case GP_EVENT_FOLDER_ADDED:
- fprintf (stderr, "wait for event FOLDER_ADDED\n");
- break;
- case GP_EVENT_FILE_ADDED:
- fprintf (stderr, "File %s / %s added to queue.\n", path->folder, path->name);
- if (nrofqueue) {
- struct queue_entry *q;
- q = realloc(queue, sizeof(struct queue_entry)*(nrofqueue+1));
- if (!q) return GP_ERROR_NO_MEMORY;
- queue = q;
- } else {
- queue = malloc (sizeof(struct queue_entry));
- if (!queue) return GP_ERROR_NO_MEMORY;
+
+ while (1) {
+ unsigned int timediff;
+
+ gettimeofday (&curtime, NULL);
+
+ timediff = ((curtime.tv_sec - start.tv_sec)*1000)+((curtime.tv_usec - start.tv_usec)/1000);
+ if (timediff >= waittime)
+ break;
+
+ retval = gp_camera_wait_for_event(camera, waittime - timediff, &evtype, &data, context);
+ if (retval != GP_OK) {
+ fprintf (stderr, "return from waitevent in trigger sample with %d\n", retval);
+ return retval;
+ }
+ path = data;
+ switch (evtype) {
+ case GP_EVENT_CAPTURE_COMPLETE:
+ fprintf (stderr, "wait for event CAPTURE_COMPLETE\n");
+ break;
+ case GP_EVENT_UNKNOWN:
+ case GP_EVENT_TIMEOUT:
+ break;
+ case GP_EVENT_FOLDER_ADDED:
+ fprintf (stderr, "wait for event FOLDER_ADDED\n");
+ break;
+ case GP_EVENT_FILE_ADDED:
+ fprintf (stderr, "File %s / %s added to queue.\n", path->folder, path->name);
+ if (nrofqueue) {
+ struct queue_entry *q;
+ q = realloc(queue, sizeof(struct queue_entry)*(nrofqueue+1));
+ if (!q) return GP_ERROR_NO_MEMORY;
+ queue = q;
+ } else {
+ queue = malloc (sizeof(struct queue_entry));
+ if (!queue) return GP_ERROR_NO_MEMORY;
+ }
+ memcpy (&queue[nrofqueue].path, path, sizeof(CameraFilePath));
+ queue[nrofqueue].offset = 0;
+ nrofqueue++;
+ break;
}
- memcpy (&queue[nrofqueue].path, path, sizeof(CameraFilePath));
- queue[nrofqueue].offset = 0;
- nrofqueue++;
- break;
}
if (nrofqueue) {
unsigned long size;