diff options
author | Paul Kocialkowski | 2016-02-24 11:14:14 +0100 |
---|---|---|
committer | Paul Kocialkowski | 2016-02-24 11:14:48 +0100 |
commit | 21aced27f7af7447b19b2017b5afdefbb55b71b3 (patch) | |
tree | 13a7c8c1e43b7871025f599dceec4adc4c0a708b /src | |
parent | 9c8c5264252f98ffb8ad6a2285547d00dd242368 (diff) |
usb: Add Wait for device (-w) option
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
Diffstat (limited to 'src')
-rw-r--r-- | src/lg-downloader.c | 5 | ||||
-rw-r--r-- | src/lg-downloader.h | 1 | ||||
-rw-r--r-- | src/usb.c | 12 |
3 files changed, 15 insertions, 3 deletions
diff --git a/src/lg-downloader.c b/src/lg-downloader.c index fd71a65..827cc4b 100644 --- a/src/lg-downloader.c +++ b/src/lg-downloader.c @@ -34,7 +34,8 @@ static int usage_print(void) printf("Usage: lg-downloader [OPTIONS] [OPERATION]\n\n" "Options:\n" " -h help\n" - " -v verbose\n\n" + " -v verbose\n" + " -w wait for device\n\n" "Operations:\n" " reboot reboot device\n" " erase [partition] [filename] erase a partition\n" @@ -89,6 +90,8 @@ static int arguments_parse(struct context *context, int argc, char *argv[]) context->operation = 'h'; } else if (strcmp(argv[i], "-v") == 0) { context->verbose = 1; + } else if (strcmp(argv[i], "-w") == 0) { + context->wait = 1; } else { return -1; } diff --git a/src/lg-downloader.h b/src/lg-downloader.h index 9a7984b..4e7ff2a 100644 --- a/src/lg-downloader.h +++ b/src/lg-downloader.h @@ -28,6 +28,7 @@ struct context { struct libusb_device_handle *usb_handle; int verbose; + int wait; char operation; char *partition; @@ -18,6 +18,7 @@ #include <stdlib.h> #include <stdio.h> #include <stdint.h> +#include <unistd.h> #include <sys/types.h> #include <libusb.h> @@ -39,8 +40,15 @@ int usb_open(struct context *context) return -1; } - handle = libusb_open_device_with_vid_pid(NULL, USB_VENDOR_LG, USB_DEVICE_DOWNLOAD); - if (handle == NULL) { + do { + handle = libusb_open_device_with_vid_pid(NULL, USB_VENDOR_LG, USB_DEVICE_DOWNLOAD); + if (handle != NULL) + break; + + usleep(300000); + } while (context->wait); + + if (handle == NULL) { fprintf(stderr, "Finding and opening USB device failed\n"); fprintf(stderr, "\nDevice might be missing or you may not have the rights to do this\n"); goto error; |