diff options
author | Daniel Schulte <trilader@schroedingers-bit.net> | 2021-06-15 12:15:58 +0200 |
---|---|---|
committer | Marcus Meissner <marcus@jet.franken.de> | 2021-06-15 13:46:53 +0200 |
commit | 29ee7d74085314a00fd7fdc5c4d2bf98e24f2f7b (patch) | |
tree | dc594ce2dd2162368c2f062fb6fec672e380b0d2 /camlibs | |
parent | 606ac8bada74b08e52ce4e15d8838f55e68841d3 (diff) | |
download | libgphoto2-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.c | 42 |
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; } |