]> git.itanic.dy.fi Git - glucose/commitdiff
If no suitable devices are found, wait until one is found
authorTimo Kokkonen <kaapeli@itanic.dy.fi>
Sat, 30 Apr 2011 14:28:57 +0000 (17:28 +0300)
committerTimo Kokkonen <kaapeli@itanic.dy.fi>
Sat, 30 Apr 2011 14:28:57 +0000 (17:28 +0300)
This makes it more convenient to use this tool as it doesn't
immediately bail out if it can't find a device to talk to.

Signed-off-by: Timo Kokkonen <kaapeli@itanic.dy.fi>
hiddev.c
main.c

index 6d3d5d30e3afc13706e465addf00d1a45fedded7..81e29547da8c06435c6128d2b20de7fb114cd8d1 100644 (file)
--- a/hiddev.c
+++ b/hiddev.c
@@ -170,7 +170,7 @@ int hiddev_open_by_id(int vendor_id, int product_id, int *usage_code)
        dir = opendir(HIDDEV_PATH);
        if (dir == NULL) {
                error = errno;
-               printf("Failed to open directory %s: %s\n", HIDDEV_PATH,
+               trace(4, "Failed to open directory %s: %s\n", HIDDEV_PATH,
                        strerror(error));
                return -error;
        }
diff --git a/main.c b/main.c
index a97f6fa75fed1dea3542fb1df635abeba0aa4ac5..bfa15454d4aab570bac39006bd3d88539b0f4aa4 100644 (file)
--- a/main.c
+++ b/main.c
@@ -282,6 +282,27 @@ int communicate(int fd, int uc)
        return 0;
 }
 
+int wait_for_device(int vendor, int product, int *usage_code)
+{
+       int fd;
+
+       fd = hiddev_open_by_id(vendor, product, usage_code);
+
+       if (fd > 0)
+               return fd;
+
+       trace(0,
+              "No suitable device found. Please plug in your glucose meter\n");
+       do {
+               usleep(500 * 1000);
+               fd = hiddev_open_by_id(vendor, product, usage_code);
+       } while(fd < 0);
+
+       usleep(2000 * 1000);
+
+       return fd;
+}
+
 int main(int argc, char *argv[])
 {
        int fd, usage_code;
@@ -291,7 +312,7 @@ int main(int argc, char *argv[])
        trace_level = opts.trace_level;
 
        if (opts.usbdev == NULL)
-               fd = hiddev_open_by_id(CONTOUR_USB_VENDOR_ID,
+               fd = wait_for_device(CONTOUR_USB_VENDOR_ID,
                                CONTOUR_USB_PRODUCT_ID, &usage_code);
        else
                fd = hiddev_open(opts.usbdev, &usage_code);