summaryrefslogtreecommitdiff
path: root/camlibs
diff options
context:
space:
mode:
authorDaniel Schulte <trilader@schroedingers-bit.net>2021-06-15 12:15:58 +0200
committerMarcus Meissner <marcus@jet.franken.de>2021-06-15 13:46:53 +0200
commit29ee7d74085314a00fd7fdc5c4d2bf98e24f2f7b (patch)
treedc594ce2dd2162368c2f062fb6fec672e380b0d2 /camlibs
parent606ac8bada74b08e52ce4e15d8838f55e68841d3 (diff)
downloadlibgphoto2-29ee7d74085314a00fd7fdc5c4d2bf98e24f2f7b.tar.gz
camlibs/ptp2: Fuji: When connecting via PTP/IP try to connect twice
The official XAcquire App also does this on MacOS and Windows. The first attempt always fails and retrying after 500ms works.
Diffstat (limited to 'camlibs')
-rw-r--r--camlibs/ptp2/fujiptpip.c42
1 files changed, 27 insertions, 15 deletions
diff --git a/camlibs/ptp2/fujiptpip.c b/camlibs/ptp2/fujiptpip.c
index efd1e3b4c..1aeefb48f 100644
--- a/camlibs/ptp2/fujiptpip.c
+++ b/camlibs/ptp2/fujiptpip.c
@@ -905,7 +905,7 @@ ptp_fujiptpip_jpeg (PTPParams* params, unsigned char** xdata, unsigned int *xsiz
int
ptp_fujiptpip_connect (PTPParams* params, const char *address) {
char *addr, *s, *p;
- int port, eventport;
+ int port, eventport, connect_tries;
struct sockaddr_in saddr;
uint16_t ret;
@@ -1000,20 +1000,32 @@ ptp_fujiptpip_connect (PTPParams* params, const char *address) {
PTPSOCK_CLOSE (params->jpgfd);
return GP_ERROR_IO;
}
- ret = ptp_fujiptpip_init_command_request (params);
- if (ret != PTP_RC_OK) {
- PTPSOCK_CLOSE (params->cmdfd);
- PTPSOCK_CLOSE (params->evtfd);
- PTPSOCK_CLOSE (params->jpgfd);
- return translate_ptp_result (ret);
- }
- ret = ptp_fujiptpip_init_command_ack (params);
- if (ret != PTP_RC_OK) {
- PTPSOCK_CLOSE (params->cmdfd);
- PTPSOCK_CLOSE (params->evtfd);
- PTPSOCK_CLOSE (params->jpgfd);
- return translate_ptp_result (ret);
- }
+ connect_tries = 0;
+ do {
+ ret = ptp_fujiptpip_init_command_request (params);
+ if (ret != PTP_RC_OK) {
+ PTPSOCK_CLOSE (params->cmdfd);
+ PTPSOCK_CLOSE (params->evtfd);
+ PTPSOCK_CLOSE (params->jpgfd);
+ return translate_ptp_result (ret);
+ }
+ connect_tries++;
+ ret = ptp_fujiptpip_init_command_ack (params);
+ if (ret == PTP_RC_AccessDenied && connect_tries < 2) {
+#ifdef WIN32
+ Sleep(500);
+#else
+ usleep(500*1000);
+#endif
+ continue;
+ }
+ if (ret != PTP_RC_OK) {
+ PTPSOCK_CLOSE (params->cmdfd);
+ PTPSOCK_CLOSE (params->evtfd);
+ PTPSOCK_CLOSE (params->jpgfd);
+ return translate_ptp_result (ret);
+ }
+ } while(connect_tries < 2);
GP_LOG_D ("fujiptpip connected!");
return GP_OK;
}