Skip to content

Commit

Permalink
lib/cmake: check for libusb_handle_events_timeout_completed()
Browse files Browse the repository at this point in the history
libusb < 1.0.9 doesn't have libusb_handle_events_timeout_completed(),
but libusb <= 1.0.8 doesn't have version.h, so we need to check
for the function.

The cmake-code was borrowed from UHD, which also checks
for libusb_error_name(), we add that as well since it might come
handy later on.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
  • Loading branch information
steve-m committed Jan 24, 2014
1 parent 929972f commit a2bc5b5
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
18 changes: 18 additions & 0 deletions cmake/Modules/FindLibUSB.cmake
Expand Up @@ -24,6 +24,24 @@ endif()
/usr/local/lib
)

include(CheckFunctionExists)
if(LIBUSB_INCLUDE_DIRS)
set(CMAKE_REQUIRED_INCLUDES ${LIBUSB_INCLUDE_DIRS})
endif()
if(LIBUSB_LIBRARIES)
set(CMAKE_REQUIRED_LIBRARIES ${LIBUSB_LIBRARIES})
endif()

CHECK_FUNCTION_EXISTS("libusb_handle_events_timeout_completed" HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED)
if(HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED)
add_definitions(-DHAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED=1)
endif(HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED)

CHECK_FUNCTION_EXISTS("libusb_error_name" HAVE_LIBUSB_ERROR_NAME)
if(HAVE_LIBUSB_ERROR_NAME)
add_definitions(-DHAVE_LIBUSB_ERROR_NAME=1)
endif(HAVE_LIBUSB_ERROR_NAME)

if(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES)
set(LIBUSB_FOUND TRUE CACHE INTERNAL "libusb-1.0 found")
message(STATUS "Found libusb-1.0: ${LIBUSB_INCLUDE_DIR}, ${LIBUSB_LIBRARIES}")
Expand Down
8 changes: 8 additions & 0 deletions src/librtlsdr.c
Expand Up @@ -1775,7 +1775,11 @@ int rtlsdr_read_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void *ctx,
}

while (RTLSDR_INACTIVE != dev->async_status) {
#ifdef HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED
r = libusb_handle_events_timeout_completed(dev->ctx, &tv, &dev->async_cancel);
#else
r = libusb_handle_events_timeout(dev->ctx, &tv);
#endif
if (r < 0) {
/*fprintf(stderr, "handle_events returned: %d\n", r);*/
if (r == LIBUSB_ERROR_INTERRUPTED) /* stray signal */
Expand Down Expand Up @@ -1807,7 +1811,11 @@ int rtlsdr_read_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void *ctx,
/* handle any events that still need to
* be handled before exiting after we
* just cancelled all transfers */
#ifdef HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED
libusb_handle_events_timeout_completed(dev->ctx, &zerotv, NULL);
#else
libusb_handle_events_timeout(dev->ctx, &zerotv);
#endif
break;
}
}
Expand Down

0 comments on commit a2bc5b5

Please sign in to comment.