…ingly
In libusb-win32 1.2.5.0, the developers changed their header from usb.h to
lusb0_usb.h to avoid a name conflict with the WDK usb.h header, which
apparently causes issues with MinGW-w64.
Signed-off-by: Drew Fisher <drew.m.fisher@gmail.com>

Fix the missing dependency of fakenect on the math lib and remove the
unecessary one of record. On the way centralizes definition of MATH_LIB
since several wrappers and examples uses it.
Signed-off-by: Nicolas Bourdaud <nicolas.bourdaud@gmail.com>

This is in order to make the printouts in the error path of the callers
of fnusb_bulk() show a saner value when libusb does not touch the
variable (i.e. when a transfer fails).
Signed-off-by: Antonio Ospite <ospite@studenti.unina.it>

Maybe this is more a theoretical issue than an actual one, I am not sure
in which case fnusb_init() —and hence libusb_init()— is supposed to
fail, but let's handle that once I noticed it.
Signed-off-by: Antonio Ospite <ospite@studenti.unina.it>

This is mostly useful when using tools like valgrind, which may report
possibly lost memory even if the operating systems is going to get it
back anyway on the actual process exit.
Signed-off-by: Antonio Ospite <ospite@studenti.unina.it>

Adjust cmake test for libusb library so that the compatible libusb for
freebsd can be found. Since freebsd's libusb header are located in a
different place from libusb-1.0, the includes in the source code must be
adjusted using #include <libusb.h>. Actually those new include statements
are those that libusb-1.0 really expects to be used (see libusb-1.0.pc
cflags to verify this). With this commit, libfreenect is buildable on
freebsd.
Signed-off-by: Nicolas Bourdaud <nicolas.bourdaud@gmail.com>

typedef freenect_usb_context as void, as it is already for win32. That way,
we drop the need to have a properly installed developpement files of libusb
when we don't use it directly. This fix also partly the problem of
discrepancy between the include paths of libusb on freebsd and libusb-1.0
Signed-off-by: Nicolas Bourdaud <nicolas.bourdaud@gmail.com>

Mark all non static internal functions with visibility hidden on
ELF platform. Declare some internal symbols that were meant to have
static linkage as such. On win32 the hidden visibility is no op since
it is the default behavior.
Signed-off-by: Nicolas Bourdaud <nicolas.bourdaud@gmail.com>

On big endian, fn_le32() is actually a function, not an empty preprocessor
macro, so we can't take the address of its return value when doing the C
equivalent of reinterpret_cast.
Signed-off-by: Drew Fisher <drew.m.fisher@gmail.com>

…ng endianness.
The new registration structs are not aligned to 4-byte boundaries in the
buffers that we get back from the Kinect. This might have been causing
breakage on ARM, where nonaligned access is prohibited.
Signed-off-by: Drew Fisher <drew.m.fisher@gmail.com>

libusb_handle_events is thread-safe, but not reentrant. Which means that we
can't call fnusb_stop_iso which calls libusb_handle_events from inside the
isochronous callback function.
Instead, we add a member to fnusb_dev that tracks if the device is permanently
dead, and set it to true when we get a LIBUSB_TRANSFER_NO_DEVICE (or on resubmission,
LIBUSB_ERROR_NO_DEVICE).
Then, in freenect_process_events, after calling libusb_handle_events
internally, we check to see if any of the devices in the context have this flag
set. If they do, then we should return some nonzero error value, which is
currently -1.
In the future, we intend to provide callbacks so that clients can receive
explicit notifications when a device has disappeared, so the code can robustly
handle that situation. Future work.
Fixes #229 (I think)
Signed-off-by: Drew Fisher <drew.m.fisher@gmail.com>

We failed to catch if the resubmission of a transfer failed in the transfer's
isochronous callback. This is bad because this is a very likely failure mode
if we accidentally unplug the Kinect - the last set of transfers complete
successfully, but the device is no longer there when we resubmit them.
It's okay for us to not know which particular transfers are dead, since
libusb_cancel_transfer() will handle transfers that don't exist by returning
LIBUSB_ERROR_NOT_FOUND if the transfer isn't pending.
This is related to #229, but I'm not sure if this is sufficient to fix it.
libusb on OSX doesn't always return what I expect it to.
Signed-off-by: Drew Fisher <drew.m.fisher@gmail.com>

Apparently this has been wrong for months. Oops. Presumably, people figured
out where else they could put the firmware to have it get found, but it's good
to fix these things.
Signed-off-by: Drew Fisher <drew.m.fisher@gmail.com>

This is essential for making wrappers that can work properly with
both versions of libfreenect with audio support and versions of
libfreenect without audio support.
Signed-off-by: Drew Fisher <drew.m.fisher@gmail.com>