diff options
author | Nathan Hjelm <hjelmn@me.com> | 2016-07-21 22:26:19 -0600 |
---|---|---|
committer | Nathan Hjelm <hjelmn@me.com> | 2016-07-21 22:26:19 -0600 |
commit | 7dff2d35ca8ee7219e5e6cb39aee53fd9088a2d7 (patch) | |
tree | 62e67675c6e8e50828f94e24c8acfcd70d71daeb | |
parent | bcac08d60facba5f92d0ccfe548dea2da86f9113 (diff) | |
download | libusb-7dff2d35ca8ee7219e5e6cb39aee53fd9088a2d7.tar.gz |
examples: make dpfp_threaded work on OS X
OS X does not support unnamed semaphores so the example has been
updated to use a named semaphore instead.
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
-rw-r--r-- | examples/dpfp_threaded.c | 17 | ||||
-rw-r--r-- | libusb/version_nano.h | 2 |
2 files changed, 11 insertions, 8 deletions
diff --git a/examples/dpfp_threaded.c b/examples/dpfp_threaded.c index a7502a4..0c6b3e7 100644 --- a/examples/dpfp_threaded.c +++ b/examples/dpfp_threaded.c @@ -1,6 +1,7 @@ /* * libusb example program to manipulate U.are.U 4000B fingerprint scanner. * Copyright © 2007 Daniel Drake <dsd@gentoo.org> + * Copyright © 2016 Nathan Hjelm <hjelmn@mac.com> * * Basic image capture program only, does not consider the powerup quirks or * the fact that image encryption may be enabled. Not expected to work @@ -37,6 +38,7 @@ #define CTRL_OUT (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_OUT) #define USB_RQ 0x04 #define INTR_LENGTH 64 +#define SEM_NAME "/org.libusb.example.dpfp_threaded" enum { MODE_INIT = 0x00, @@ -68,12 +70,12 @@ static int img_idx = 0; static volatile sig_atomic_t do_exit = 0; static pthread_t poll_thread; -static sem_t exit_sem; +static sem_t *exit_sem; static void request_exit(sig_atomic_t code) { do_exit = code; - sem_post(&exit_sem); + sem_post(exit_sem); } static void *poll_thread_main(void *arg) @@ -446,16 +448,18 @@ int main(void) struct sigaction sigact; int r = 1; - r = sem_init(&exit_sem, 0, 0); - if (r) { + exit_sem = sem_open (SEM_NAME, O_CREAT, 0); + if (!exit_sem) { fprintf(stderr, "failed to initialise semaphore error %d", errno); exit(1); } + /* only using this semaphore in this process so go ahead and unlink it now */ + sem_unlink (SEM_NAME); + r = libusb_init(NULL); if (r < 0) { fprintf(stderr, "failed to initialise libusb\n"); - sem_destroy(&exit_sem); exit(1); } @@ -508,7 +512,7 @@ int main(void) } while (!do_exit) - sem_wait(&exit_sem); + sem_wait(exit_sem); printf("shutting down...\n"); pthread_join(poll_thread, NULL); @@ -544,6 +548,5 @@ out_release: out: libusb_close(devh); libusb_exit(NULL); - sem_destroy(&exit_sem); return r >= 0 ? r : -r; } diff --git a/libusb/version_nano.h b/libusb/version_nano.h index d9f9843..9fdf028 100644 --- a/libusb/version_nano.h +++ b/libusb/version_nano.h @@ -1 +1 @@ -#define LIBUSB_NANO 11117 +#define LIBUSB_NANO 11116 |