$ svn diff
Index: gphoto2/main.c
===================================================================
--- gphoto2/main.c (revision 9721)
+++ gphoto2/main.c (working copy)
@@ -86,7 +86,10 @@
GPParams gp_params;
+/* flag for SIGUSR1 handler */
+int capture_now = 0;
+
/*! \brief Copy string almost like strncpy, converting to lower case.
*
* This function behaves like strncpy, but
@@ -567,6 +570,12 @@
return (GP_OK);
}
+void
+sig_handler_capture_now(int sig_num)
+{
+ signal(SIGUSR1, sig_handler_capture_now);
+ capture_now = 1;
+}
int
capture_generic (CameraCaptureType type, const char __unused__ *name)
@@ -584,6 +593,8 @@
printf (_("Time-lapse mode enabled (interval: %ds).\n"),
glob_interval);
}
+ capture_now = 0;
+ signal(SIGUSR1, sig_handler_capture_now);
while(++frames) {
if (!(gp_params.flags & FLAGS_QUIET) && glob_interval) {
@@ -700,14 +711,20 @@
if (waittime > 0) {
if (!(gp_params.flags & FLAGS_QUIET) && glob_interval)
printf (_("Sleeping for %d second(s)...\n"), glob_interval);
- sleep (waittime);
+ int i;
+ for (i=0; (!capture_now) && (i<waittime); i++)
+ sleep(1);
+ if(capture_now && !(gp_params.flags & FLAGS_QUIET) && glob_interval)
+ printf (_("Awakened by SIGUSR1...\n"));
} else {
if (!(gp_params.flags & FLAGS_QUIET) && glob_interval)
printf (_("not sleeping (%d seconds behind schedule)\n"), - waittime);
}
- next_pic_time += glob_interval;
+ if(!(gp_params.flags & FLAGS_RESET_CAPTURE_INTERVAL))
+ next_pic_time += glob_interval;
}
+ signal(SIGUSR1, SIG_DFL);
return (GP_OK);
}
Index: gphoto2/main.h
===================================================================
--- gphoto2/main.h (revision 9721)
+++ gphoto2/main.h (working copy)
@@ -41,6 +41,7 @@
const char *folder, const char *filename,
CameraFileType type);
int save_camera_file_to_file (const char *folder, CameraFile *file, const char *tmpname);
+void sig_handler_capture_now (int sig_num);
int capture_generic (CameraCaptureType type, const char *name);
#endif /* __MAIN_H__ */
Index: doc/gphoto2.1
===================================================================
--- doc/gphoto2.1 (revision 9721)
+++ doc/gphoto2.1 (working copy)
@@ -259,7 +259,7 @@
Number of frames to capture in one run. Default is infinite number of frames.
.TP
\fB\-I \fR\fB\fISECONDS\fR\fR, \fB\-\-interval \fR\fB\fISECONDS\fR\fR
-Time between capture of multiple frames.
+Time between capture of multiple frames. If SIGUSR1 is received a picture is taken immediately and the interval is reset (see \fBSIGNALS\fR).
.TP
\fB\-\-capture\-image\fR
Capture an image.
@@ -354,6 +354,10 @@
libusb
library will print messages. In order to get some debug output, set it to
\fI1\fR.
+.SH "SIGNALS"
+.TP
+\fBSIGUSR1\fR
+When in time-lapse capture mode, if a SIGUSR1 is received a picture is taken immediately and the time counter is reset. Note that the camera will need some time (from 50ms to a few seconds) to actually capture the image.
.SH "SEE ALSO"
.PP
libgphoto2(3),