Pino Toscano [Fri, 27 Dec 2019 17:50:27 +0000 (18:50 +0100)]
core: include sys/time.h on any GNU libc OS
GNU libc provides sys/time.h, so unconditionally include it when using
that libc.
Since sys/time.h is already included on a number of OSes, include it to
minimize the differences between OSes when using libusb. Arguably,
sources using functions from sys/time.h (such as gettimeofday) ought to
already include it on their own; OTOH, let's avoid making such issues
OS-specific.
Pino Toscano [Fri, 27 Dec 2019 17:41:28 +0000 (18:41 +0100)]
Add Null POSIX backend
Add a simple null backend for POSIX platforms that reports no available
devices, and provides no capabilities. Make use of this new backend on
all the OSes without an existing backend, so libusb can be built even on
OSes without USB support.
Aleksandr Mezin [Sun, 22 Dec 2019 03:39:11 +0000 (09:39 +0600)]
Set project name for doxygen
Currently, generated documentation shows `My Project` as the title: see http://libusb.sourceforge.net/api-1.0/index.html
Set it to `libusb`.
Signed-off-by: Aleksandr Mezin <mezin.alexander@gmail.com>
John Keeping [Tue, 12 Nov 2019 14:01:40 +0000 (14:01 +0000)]
linux_udev: silently ignore "bind" action
When a driver is bound to a device, udev emits a "bind" action that
causes libusb to log an error message:
libusb: error [udev_hotplug_event] ignoring udev action bind
Since we know this action is not relevant for libusb, silently ignore it
to avoid people thinking there is something wrong.
There is already a debug log entry for the action, so there is no need
to add a duplicate here.
Signed-off-by: John Keeping <john@metanate.com>
Slash Gordon [Tue, 3 Dec 2019 11:47:38 +0000 (12:47 +0100)]
Linux: Improved system out of memory handling
Maps ENOMEM system error to LIBUSB_ERROR_NO_MEM.
Ludovic Rousseau [Fri, 1 Nov 2019 15:04:02 +0000 (16:04 +0100)]
Linux backend: fix ressource leak
Issue detected by Coverity:
22. leaked_handle: Handle variable fd going out of scope leaks the handle.
Signed-off-by: Ludovic Rousseau <ludovic.rousseau@free.fr>
Ludovic Rousseau [Fri, 1 Nov 2019 15:29:38 +0000 (16:29 +0100)]
Xcode: add tests/stress target
Also build tests/stress
Ludovic Rousseau [Fri, 1 Nov 2019 15:13:09 +0000 (16:13 +0100)]
Xcode: apply suggested changes from Xcode 11.2
Enable code signing.
Frank Li [Thu, 15 Aug 2019 15:21:17 +0000 (10:21 -0500)]
windows: workaround WaitForMultipleObjects max 64 events limitation.
WaitForMultiObjects have limiation. Only can wait max 64 events.
but usbi_poll may pass more than 64 fds. In previous implement,
only wait for first 64 events. if previous 64 events were not trigger
usbi_poll will wait for about 10s timemout eventhough other event triggered.
This patch workaround this limitation.
If max events less than 64, call WaitforMultiObjects directly.
If max events more than 64, group every 63 events into one work thread.
This thread call waitformulitobjects wait for this groug events and one
addtional thread exit events.
If any events trigger, this thread will trigger main notify events.
The main usbi_poll thread call waitforsingleobject wait for notify
events. If this events trigger, that means any of work threads get events.
Then call exit notify events let all working thread exit safely.
Return value changed, 0 means timeout. 1 - N means which event
triggered.
Closes #612
Signed-off-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Vinicius Tinti [Mon, 7 Oct 2019 11:24:17 +0000 (08:24 -0300)]
Fix linux_scan_devices() in Android
Use linux_default_scan_devices() in Android platform.
When building for Android the USE_UDEV is false and __ANDROID__ is true
resulting in no implementation for linux_scan_devices(). This commit fix
it by using linux_default_scan_devices() for Android.
Closes #637
Signed-off-by: Vinicius Tinti <vinicius.tinti@almg.gov.br>
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Kenjiro Tsuji [Fri, 11 Oct 2019 02:46:28 +0000 (19:46 -0700)]
Solaris: format mismatch in some usbi_dbg()
In sunos_usb.c, some usbi_dbg() calls have format mismatch. For example, "%d"
is specified for a size_t variable and "%llx" is specified for a uint64_t
variable. In LP64 mode, they are format mismatch. For those specifications
that are incompatible between ILP32 and LP64, format macros defined in
<inttypes.h>, such as PRIuPTR and PRIx64 should be used.
Closes #640
Closes #638
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Ludovic Rousseau [Wed, 30 Oct 2019 12:03:36 +0000 (13:03 +0100)]
Doxygen: do not hardcode the sourceforge.net username
The username to use to login to web.sourceforge.net should be configured
in ~/.ssh/config so that different developers (with different login
names) can update the documentation.
Ludovic Rousseau [Wed, 30 Oct 2019 11:56:47 +0000 (12:56 +0100)]
Doxygen: add libusb_wrap_sys_device() in the API list
Ludovic Rousseau [Wed, 30 Oct 2019 11:49:08 +0000 (12:49 +0100)]
Doxygen: update config file from 1.8.8 to 1.8.16
Kenjiro Tsuji [Wed, 25 Sep 2019 23:40:11 +0000 (16:40 -0700)]
Solaris backend depends on Solaris private symbols
Solaris backend depends on the following double-linked list operation functions
from libcmdutils:
list_insert_tail, list_create, list_remote_head, list_head, list_next
However, they are private symbols in libcmdutils library and moreover libcmdutils
library is also a private library. libusb should not directly refer those symbols.
Due to this issue, linking a program with libusb fails on the SPARC platform.
This issue has been reported as #586.
Since the code using those functions is just to build the argument list for execv,
the double-linked list operation functions do not need to be used.
Closes #627
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Kenjiro Tsuji [Thu, 26 Sep 2019 00:11:12 +0000 (17:11 -0700)]
Solaris: fails to find USB devices on SPARC platform
On SPARC platform, libusb fails to find USB devices. sunos_fill_in_dev_info()
reads the usb-dev-descriptor property and stores idVendor and idProduct to
the dev_sesc structure in little endian. However, when creating a device name
for 'match_str' to be specified to sunos_physpath_to_devlink(), it's using the
idVendor and idProduct in dev_descr as is without converting them to the host
endian, that is big endian for SPARC. As a result, 'match_str' has a wrong
device name and sunos_physpath_to_devlink() fails to find the device path
corresponding to the USB device. idVendor and idProduct need to be converted
to the host endian when creating 'match_str'.
This is a fix for #587.
Closes #628
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Kenjiro Tsuji [Thu, 26 Sep 2019 00:51:43 +0000 (17:51 -0700)]
Solaris backend is not correctly setting the one transfer mode for Interrupt-In pipe
In sunos_check_device_and_status_open() function, if the target is an Interrupt-In
pipe, it opens the status endpoint first and writes USB_EP_INTR_ONE_XFER control
to the status endpoint to enable the one transfer mode. And it then closes the
status endpoint. After that, it opens the xfer endpoint and re-opens the status
endpoint. This is not correct, because closing the status endpoint is implicitly
disables the one tranfer mode. As a result, an event notification won't be
delivered to the client in timely manner. According to the comment in the source,
closing the status endpoint first and opening the xfer endpoint and status endpoint
in this order is intentional to avoit an issue that may happen if the USB device
has multiple configurations, which may be due to a ugen driver issue. To address
both issues, it can open the xfer endpoint first and immediately close it, which
will take care of the switch of configurations, if necessary. Then, it can open
the status endpoint, enable the one transfer mode, and re-open the xfer endpoint.
This is a fix of libusb#620.
Closes #629
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
mrstock [Fri, 20 Sep 2019 12:36:07 +0000 (14:36 +0200)]
fix constant not in range of enumerated type
fix "Integer constant not in range of enumerated type 'enum libusb_transfer_status'"
LIBUSB_ERROR_NO_DEVICE doesn't exist on enum libusb_transfer_status
Ludovic Rousseau [Sun, 15 Sep 2019 15:50:37 +0000 (17:50 +0200)]
Xcode: apply suggested changes from Xcode 10.3
Nathan Hjelm [Wed, 28 Aug 2019 20:56:18 +0000 (13:56 -0700)]
on to 1.0.23
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
winterrace [Wed, 21 Aug 2019 05:59:11 +0000 (07:59 +0200)]
Update poll_windows.c
Set fd_size to 0 when freeing the fd_table array.
Closes #614
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
winterrace [Tue, 20 Aug 2019 21:34:00 +0000 (23:34 +0200)]
Fix NULL pointer dereference crashes
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Nathan Hjelm [Wed, 14 Aug 2019 23:20:57 +0000 (16:20 -0700)]
move on to 1.0.23-rc3
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Nathan Hjelm [Wed, 14 Aug 2019 23:05:10 +0000 (16:05 -0700)]
windows: fix build
Make code compliant with C89 so it will compile.
References #609
Closes #611
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Frank Li [Tue, 13 Aug 2019 18:17:00 +0000 (13:17 -0500)]
windows: Fix libusb_get_device_list failure if virual usb host installled
If a virtual usb host driver install, but no port on that.
libusb_get_device_list will return failure.
but it should skip this host devices.
the below is virtual host control information
============USB Host Controller =======================
+++++++++++++++++ Device Information ++++++++++++++++++
Device Description : Leostream Corporation Virtual USB
Host Controller
Device Path :
\\?\root#system#0004#{
3abf6f2d-71c4-462a-8a92-
1e6861e6af27}
Device ID : ROOT\SYSTEM\0004
Hardware IDs : *lsusbdhcDevice
Driver KeyName :
{
4d36e97d-e325-11ce-bfc1-
08002be10318}\0049
(GUID_DEVCLASS_SYSTEM)
Driver :
\SystemRoot\System32\drivers\lsusbdbus.sys (Version: 6.3.2.2570
Date: 2018-11-12)
Driver Inf : C:\WINDOWS\inf\oem25.inf
Legacy BusType : Internal
Class : System
Class GUID :
{
4d36e97d-e325-11ce-bfc1-
08002be10318} (GUID_DEVCLASS_SYSTEM)
Interface GUID :
{
3abf6f2d-71c4-462a-8a92-
1e6861e6af27}
(GUID_DEVINTERFACE_USB_HOST_CONTROLLER)
Service : lsusbdbus
Enumerator : ROOT
Location Info : -
Manufacturer Info : Leostream Corporation
Capabilities : 0x00 (-)
Status : 0x0180200B (DN_ROOT_ENUMERATED,
DN_DRIVER_LOADED, DN_STARTED, DN_DISABLEABLE, DN_NT_ENUMERATOR,
DN_NT_DRIVER)
Problem Code : 0
Power State : D0 (supported: D0, D3)
HcInfo0 Error : ERROR_INVALID_FUNCTION
Roothub Symbolic Link : LSUSBDBUS
BusStatistics Error : ERROR_INVALID_FUNCTION
DriverVersion Error : ERROR_INVALID_FUNCTION
BandwidthInfo Error : ERROR_INVALID_FUNCTION
PowerInfo Error : ERROR_INVALID_FUNCTION
Closes #608
Signed-off-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Nathan Hjelm [Wed, 14 Aug 2019 21:00:41 +0000 (14:00 -0700)]
core: protect against changes to the pollfd list during handle_events
It is possible a file descriptor to be removed due to a close and the
same file descriptor value to be added during the same event loop. This
can cause the backend to get a stale revent and incorrectly remove the
file descriptor.
This commit addresses the issue by delaying the actual removal of the
ipollfds entry until just before the backend handle_events is called.
handle_events then goes through the list of closed fds and clears out
the revents associated with the closed file descriptor.
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Nathan Hjelm [Wed, 14 Aug 2019 04:11:15 +0000 (21:11 -0700)]
core: abandon sync transfers after libusb_close()
This commit adds an additional check to synchronous transfer
progression to prevent accessing a potentially deleted context. This
access can occur if a code calls libusb_close() then libusb_exit()
from one thread while another thread is in a synchronous transfer.
Note that this is likely a user error. The application should wait
for all transfers to complete before calling libusb_close(). This
commit is being offered as a best-effort attempt to prevent the
invalid access and return a useful error to the application.
There may still be a window where an invalid access is possible.
This commit is a work around until a better fix is available.
References #610
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Nathan Hjelm [Fri, 9 Aug 2019 16:26:41 +0000 (09:26 -0700)]
update to 1.0.23-rc2
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Harry Mallon [Thu, 7 Feb 2019 15:15:03 +0000 (15:15 +0000)]
windows_winusb: Add support for reporting super speed plus devices
Closes #531
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Josh Gao [Mon, 8 Jul 2019 21:12:14 +0000 (14:12 -0700)]
windows_winusb: fix pedantic format string warnings.
clang is pedantic about requiring the l prefix for DWORD, which is a
typedef to unsigned long.
Closes #590
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Josh Gao [Mon, 8 Jul 2019 21:14:28 +0000 (14:14 -0700)]
windows_winusb: fix size_t format strings.
Use %zu to print size_t for 64-bit compatibility.
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Frank Li [Fri, 12 Jul 2019 19:29:12 +0000 (14:29 -0500)]
windows: remove total fds (256) limitations
When queue more usb requests, and more devices working at the same time
256's limitation is easy to reach.
This patch remove such limitation of windows version.
dymatic allocate map fd_table.
each time increase 256 entry if request more fds.
Closes #592
Signed-off-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
William Orr [Fri, 12 Jul 2019 21:23:32 +0000 (23:23 +0200)]
Use `%zu` for sizes instead of `%d`
Closes #593
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
William Orr [Fri, 12 Jul 2019 21:18:27 +0000 (23:18 +0200)]
Remove infinite recursion in OpenBSD backend
`usbi_dbg` calls `usbi_backend.clock_gettime`, so `obsd_clock_gettime` should
not call `usbi_dbg`
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
William Orr [Fri, 12 Jul 2019 21:15:17 +0000 (23:15 +0200)]
Use a designated initializer for openbsd backend
At some point `wrap_sys_device` was added to the `usbi_backend` struct, and
OpenBSD's backend was never updated along with it. Use a designated initializer
for this, so that we can avoid this class of error.
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Axel Gembe [Fri, 2 Aug 2019 06:32:21 +0000 (13:32 +0700)]
Windows: Workaround for composite devices with U2F on Win10 1903
On Windows 10 version 1903 and later Windows blocks attempts to open
HID devices with a U2F usage unless running as administrator. This
patch makes the composite_open function ignore when opening the HID
part of a composite device fails.
Closes #603
Signed-off-by: Axel Gembe <derago@gmail.com>
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Axel Gembe [Sat, 3 Aug 2019 02:15:41 +0000 (09:15 +0700)]
Windows: Fix detection of Windows 10 when manifest declares support
On Windows 10 GetVersionEx will return version 10.0 when the running
application has a manifest that declares Windows 10 compatibility.
https://docs.microsoft.com/en-us/windows/win32/sbscs/application-manifests#supportedOS
When no such manifest is found, the call will report version 6.2,
which is Windows 8.
The 6.4 version is returned by early Windows 10 Insider Previews
and Windows Server 2017 Technical Preview 1.
Closes #604
Signed-off-by: Axel Gembe <derago@gmail.com>
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Nathan Hjelm [Fri, 9 Aug 2019 15:59:27 +0000 (08:59 -0700)]
darwin: fix bugs in the reenumeration of devices
This commit fixes two bugs in device re-enumeration (enumeration after
init):
- The internal device object (cached device) was being re-used but the
user-visible one was not. This would cause the user to get stale data
when using the device afer reset. Now the (per libusb spec) the
user-visible device object is re-used and updated.
- If multiple libusb contexts were active then only the first context
was handled correctly. Fixed by moving the cached device search
out of process_new_device().
Signed-off-by: Nathan Hjelm <hjelmn@google.com>
Ludovic Rousseau [Wed, 7 Aug 2019 22:13:17 +0000 (00:13 +0200)]
Unix: fix library version for next release
https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
says:
4. If any interfaces have been added, removed, or changed since the last
update, increment current, and set revision to 0.
5. If any interfaces have been added since the last public release, then
increment age.
So both current and age must be incremented. The patch in
fde20bb9b7cba0ea6e96db920d0a0169c361ca92 was not complete.
Signed-off-by: Ludovic Rousseau <ludovic.rousseau@free.fr>
Adrien Destugues [Tue, 30 Apr 2019 17:41:57 +0000 (19:41 +0200)]
Various fixes for the Haiku port
- Use native API for getting full configuration descriptors instead of
using a raw request
- Implement some callbacks that are mandatory and result in crashes if
not available
Closes #565
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Josh Gao [Wed, 17 Apr 2019 23:01:52 +0000 (16:01 -0700)]
Fix some -Wformat warnings.
Closes #561
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Léo Lam [Sat, 4 May 2019 17:53:56 +0000 (19:53 +0200)]
windows_winusb: Set policy ISO_ALWAYS_START_ASAP for libusbK
In some cases, this is required to avoid eventually getting a
USBD_STATUS_BAD_START_FRAME error back from the Windows USB stack.
This makes the libusbK code match the behaviour of the Linux backend.
It appears that the libusbK backend tried to get this behaviour by
setting StartFrame to 0. However, libusbK docs state that:
"Specifing 0 for KISO_CONTEXT::StartFrame (start transfer ASAP) is
restricted to the first transaction on a newly opened or reset pipe."
Closes #569
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Léo Lam [Fri, 3 May 2019 10:57:43 +0000 (12:57 +0200)]
windows_winusb: Bounds check interface for check_valid_interface
This prevents a nasty out-of-bounds read and a likely crash when
the interface number is invalid.
Closes #568
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Léo Lam [Fri, 3 May 2019 10:49:00 +0000 (12:49 +0200)]
windows_winusb: Mask wIndex correctly when checking interfaces
According to the USB 3.0 spec (9.3.4), the interface number is in the
lower 8 bits of wIndex.
Note that wIndex must not be modified because some (non-compliant?)
devices actually use the higher 8 bits for custom data with
recipient-interface requests.
Closes #567
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Josh Gao [Wed, 17 Apr 2019 23:02:18 +0000 (16:02 -0700)]
windows: fix return type of usbi_{inc,dec}_fds_ref.
These functions were declared as returning int, but failed to actually
return anything, and no one was using their return values anyway.
Closes #562
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
follower [Sun, 21 Apr 2019 04:52:28 +0000 (16:52 +1200)]
Typo fixes in comments
Closes #563
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
RipleyTom [Thu, 2 May 2019 16:19:42 +0000 (18:19 +0200)]
mingw fix
Closes #566
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
RipleyTom [Thu, 2 May 2019 15:43:36 +0000 (17:43 +0200)]
Adds /utf-8 to compile options
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
RipleyTom [Thu, 2 May 2019 14:13:20 +0000 (16:13 +0200)]
Change all $(SolutionDir) to $(ProjectDir)
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
mac Wang [Mon, 8 Apr 2019 20:45:14 +0000 (13:45 -0700)]
Address issue 554: Default context is erase before backend exits in libusb_exit
Closes #554
Closes #556
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
mac Wang [Mon, 8 Apr 2019 21:03:36 +0000 (14:03 -0700)]
Issue 555: Memory passed to ioctl is not initialized in reap_for_handle
Closes #557
Closes #555
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Nathan Hjelm [Fri, 5 Apr 2019 18:15:48 +0000 (12:15 -0600)]
update to 1.0.23-rc1
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
philemonf [Fri, 5 Apr 2019 07:27:39 +0000 (00:27 -0700)]
Add support for isochronous transfers with WinUSB.
Closes #284
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
haidong.zheng [Wed, 12 Dec 2018 03:07:18 +0000 (11:07 +0800)]
windows: get usb device until usb configuration is set
There are low possiblity to open device before windows complete usb
configuration. Then claim interface will be always failure.
this patch workaround this problem, make sure return device until
windows finish usb configuration.
Closes #505
Signed-off-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Tom Zheng <haidong.zheng@nxp.com>
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Juan Cruz Viotti [Wed, 20 Mar 2019 11:34:41 +0000 (11:34 +0000)]
darwin: Retry IOCreatePlugInInterfaceForService on failure
We have a case where a device might not be detected by libusb if we plug
it after initializing the library. We were able to reproduce this issue
pretty consistently on a Mac Mini and several MacBook Pros running very
recent macOS versions (Mojave) using the Balena Fin board
(https://www.balena.io/fin/). I don't know if this happens with other
USB devices.
Enabling debug output revealed the following:
```
[ 7.901582] [
00004f07] libusb: debug [darwin_get_cached_device] finding cached device for sessionID 0x2a9b5279f04
[ 7.901764] [
00004f07] libusb: debug [darwin_get_cached_device] matching sessionID 0x2a9b5279f04 against cached device with sessionID 0x17dbd029b6a
[ 7.901798] [
00004f07] libusb: debug [darwin_get_cached_device] matching sessionID 0x2a9b5279f04 against cached device with sessionID 0x1688763269f
[ 7.901818] [
00004f07] libusb: debug [darwin_get_cached_device] matching sessionID 0x2a9b5279f04 against cached device with sessionID 0x4c0aefaa
[ 7.901831] [
00004f07] libusb: debug [darwin_get_cached_device] matching sessionID 0x2a9b5279f04 against cached device with sessionID 0x0
[ 7.901845] [
00004f07] libusb: debug [darwin_get_cached_device] caching new device with sessionID 0x2a9b5279f04
[ 7.903377] [
00004f07] libusb: debug [darwin_device_from_service] could not set up plugin for service: out of resources
[ 8.029152] [
00000307] libusb: debug [libusb_get_device_list]
```
The "out of resources" error comes from
`IOCreatePlugInInterfaceForService` which will apparently return this
error if the `Start` method of the interface is not success (see
https://github.com/opensource-apple/IOKitUser/blob/
b80a5cbc0ebfb5c4954ef6d757918db0e4dc4b7f/IOCFPlugIn.c#L232).
Retrying `IOCreatePlugInInterfaceForService` makes it work for me.
Closes #542
Signed-off-by: Juan Cruz Viotti <juan@balena.io>
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Harry Mallon [Thu, 7 Feb 2019 15:02:59 +0000 (15:02 +0000)]
xusb: Report SuperSpeedPlus
Closes #530
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Alexander Pyhalov [Thu, 24 May 2018 11:57:04 +0000 (14:57 +0300)]
solaris: Fix crash on closing libusb handle
libusb_close() can interrupt transfer to device,
setting dev_handle to NULL.
In this case all async requests should exit gracefully.
Also usbi_signal_transfer_completion() can dereference dev_handle
in this case.
Closes #434
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
dmitrykos [Thu, 31 Jan 2019 21:17:06 +0000 (23:17 +0200)]
windows: Improved log message output to MSVC
Improved log message output to MSVC handling by converting multi-byte
string (assumed to be UTF-8) to WCHAR string if UNICODE is defined, if
UNICODE is not defined then multi-byte string is sent to MSVC (Windows
CE defines UNICODE always, so it will use UNICODE case), added check
for 0 to avoid sending trash to MSVC (and possibly crash the process)
if conversion to WCHAR string fails.
Closes #504
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Dmitry Kostjuchenko [Tue, 11 Dec 2018 11:41:24 +0000 (13:41 +0200)]
Fixed log message incorrect data format sent to MSVC if Unicode defined.
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Frederik Carlier [Tue, 18 Sep 2018 13:27:14 +0000 (15:27 +0200)]
Allow set configuration control requests when using libusb0.sys
Closes #473
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
kuro68k [Mon, 26 Feb 2018 15:46:11 +0000 (15:46 +0000)]
Fix control transfer interface selection
When bmRequestType indicates the recipient is an interface, get
interface number from wIndex.
Closes #398
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Alexander Pyhalov [Thu, 24 May 2018 11:54:02 +0000 (14:54 +0300)]
Use more portable di_prop_lookup_ints() interface
Closes #433
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Alexander Pyhalov [Thu, 24 May 2018 12:06:46 +0000 (15:06 +0300)]
transfer_lock should be released before usbi_handle_transfer_completion() call
Closes #430
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Dj Art [Fri, 27 Apr 2018 10:04:14 +0000 (18:04 +0800)]
Adding support for ARM & ARM64 Windows Platform
Closes #423
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Frank Li [Fri, 11 Jan 2019 19:09:51 +0000 (13:09 -0600)]
fix windows crash when multi-thread do sync transfer
fun()
{
libusb_open()
... sync transfer
libusb_close()
}
two thread call fun infininately.
to speed up crash, enable application verifier
below 20 cycle, assert(fd!=NULL) happen at check_pollfds
below 100 cycle, crash at pollable_fd->overlappend in
winusb_get_overlapped result
with this fix, success fun over 1000 cycles
in handle_events
usbi_mutex_lock()
fds = ctx->pollfds
nfds = ctx->pollfds_cnt;
usbi_mutex_unclock()
usbi_poll()
callback.
usbi poll is not in mutex. pollfds may be change by usbi_add_pollfd
and usbi_remove_pollfd.
Although usbi_add_pollfd and usbi_remove_pollfd hold mutex, but
usbi_poll and callback is not in protext of mutex.
windows use fd as index of fb_table. fb_table may changed by
usbi_remove_pollfd. the map between fd and internal file_descriptor may
be wrong.
this patch added ref count for file_descriptor, only free file_desciptor
and remove it from fb_table when ref count is 0.
ref count will be increase when fds copy with mutex lock.
so fd always index validate file_descriptor.
ref count will be descress before return from handle_events.
the file_descriptor can be free safely at this time.
Closes #521
Signed-off-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Harry Mallon [Tue, 12 Feb 2019 13:18:56 +0000 (13:18 +0000)]
Fix copy paste error in libusb_free_* docs
Closes #535
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Sean McBride [Thu, 7 Feb 2019 20:11:56 +0000 (15:11 -0500)]
Fixed Xcode 10.1 warning by setting project setting 'ALWAYS_SEARCH_USER_PATHS = NO'
The warning was: "Traditional headermap style is no longer supported; please migrate to using separate headermaps and set 'ALWAYS_SEARCH_USER_PATHS' to NO."
Also made sure all targets are referencing the xcconfig files.
Closes #532
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Aymeric Vincent [Thu, 28 Feb 2019 21:38:21 +0000 (22:38 +0100)]
Initialize the non-control endpoint fds in netbsd_open()
Not all users of libusb use libusb_claim_interface(), and in that
case, the NetBSD backend fails to open() the necessary /dev/ugenX.Y
and will try to send ioctl()s to fd 0, which fortunately fails.
This unbreaks e.g. openocd on NetBSD.
Closes #539
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Nathan Hjelm [Thu, 4 Apr 2019 18:02:25 +0000 (12:02 -0600)]
darwin: fix reset device
This commit fixes the backend of reset device to restore the state
of the device if possible. This fixes a bug introduced in
c14ab5fc4d22749aab9e3534d56012718a0b0f67. The previous commit
was necessary due to changes in the system USB stack that
essentially turned the ResetDevice function into a no-op. This
required libusb to move to USBDevuceReEnumerate to effectively
reset the device. The problem is that both the device handle and
libusb devices became invalid. This commit fixes the bug by
waiting for the re-enumeration to complete then 1) checking
whether the descriptors changed, 2) restoring the active
configuration, and 3) restoring claimed interfaces.
Closes #523
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Sean McBride [Thu, 17 Jan 2019 22:28:59 +0000 (17:28 -0500)]
Fixed -Wformat warnings by casting intptr_t to void*
%p is for pointers, not integers; therefore added a cast.
Fixes the following warnings:
libusb/core.c:1252:33: Format specifies type 'void *' but the argument has type 'intptr_t' (aka 'long')
libusb/core.c:1276:45: Format specifies type 'void *' but the argument has type 'intptr_t' (aka 'long')
Signed-off-by: Ludovic Rousseau <ludovic.rousseau@free.fr>
Andrew Aldridge [Fri, 25 Jan 2019 02:59:38 +0000 (21:59 -0500)]
haiku_usb_raw: Add missing wrap_sys_device field to usbi_os_backend
Closes #527
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Andrew Aldridge [Thu, 24 Jan 2019 16:51:45 +0000 (11:51 -0500)]
haiku_usb_raw: return written length instead of LIBUSB_SUCCESS
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Sean McBride [Sat, 15 Dec 2018 22:08:34 +0000 (17:08 -0500)]
Fixed many compiler warnings about sign and size mismatch
- added various casts
- added some asserts where the casts made assumptions
- enabled additional warnings in Xcode project (especially -Wshorten-64-to-32)
Closes #509
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Frank Li [Fri, 11 Jan 2019 17:56:47 +0000 (11:56 -0600)]
fix race condition at event_handles
event_handles supposed just run at a thread.
There are re-entry check at begin.
1: if (usbi_handling_events(ctx))
2: return LIBUSB_ERROR_BUSY;
3: usbi_stat_event_handle(ctx);
this code is hold any lock
it is possible two thread check 1 at the same time, then
go through to 3. So two threads will run event_handles.
above 3 line code should hold event_data_lock to avoid above
race condition.
1: usbi_mutex_lock($ctx->event_data_lock);
2: r = 0;
3: if (usbi_handling_events(ctx))
4: r = LIBUSB_ERROR_BUSY;
5: else
6: usbi_start_event_handling(ctx);
7: usbi_mutex_unlock($ctx->event_data_lock);
8: if(r)
9: return r;
check and set in an atomic operations.
Closes #520
Signed-off-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
winterrace [Sat, 26 Jan 2019 21:59:29 +0000 (22:59 +0100)]
Add missing structure entry to avoid erroneous shift of following items
Closes #526
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Nathan Hjelm [Thu, 17 Jan 2019 04:08:07 +0000 (21:08 -0700)]
darwin: use internal define when querying plugin interface
Apple changed the definition of kIOUSBInterfaceInterfaceID in the SDK
for macOS 10.14. This looks like it breaks support for building for
older macOS versions when running 10.14. I don't know if the change
was intentional or a mistake but in order to guarantee libusb
builds as it has in the past we can no longer rely on
kIOUSBInterfaceInterfaceID.
Closes #519
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Nathan Hjelm [Wed, 9 Jan 2019 01:26:48 +0000 (18:26 -0700)]
darwin: shorten hotplug poll timeout
Looks like 5 seconds was indeed too long. Shortened the timeout to
1ms instead.
Closes #516
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Vianney le Clément de Saint-Marcq [Tue, 13 Dec 2016 14:04:11 +0000 (15:04 +0100)]
linux_usbfs: Disable hotplug events and scanning on Android
On Android, the platform API should be used to scan for and open devices
and pass file descriptors to libusb. Newer devices (Android 5+) even
prohibit listening for hotplug events, resulting in libusb failing to
initialize without this patch.
Note that this patch effectively renders libusb useless on older devices
that do not have USB support in the platform API (anything before
Android 5).
Closes #242
Signed-off-by: Vianney le Clément de Saint-Marcq <code@quartic.eu>
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Vianney le Clément de Saint-Marcq [Tue, 15 Mar 2016 14:04:02 +0000 (15:04 +0100)]
linux_usbfs: Use fallback usbfs path on Android
On newer Android devices (5+), SELinux policies block normal processes
from reading /dev. The consequence is that the usbfs path cannot be
found. Rather than failing to initialize libusb in such case, fall back
to /dev/bus/usb. This path will actually not be used, as USB devices
should be opened through the Android API, passing the file descriptor to
libusb_wrap_sys_device.
Signed-off-by: Vianney le Clément de Saint-Marcq <code@quartic.eu>
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Vianney le Clément de Saint-Marcq [Tue, 13 Dec 2016 14:59:23 +0000 (15:59 +0100)]
linux_usbfs: Implement libusb_wrap_sys_device()
Add support for the libusb_wrap_sys_device() API on Linux. Because
sysfs_dir is set to NULL, only the provided file descriptor will be
used. This is needed on some platforms (e.g., Android) where sysfs
might not be available.
Signed-off-by: Vianney le Clément de Saint-Marcq <code@quartic.eu>
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Vianney le Clément de Saint-Marcq [Tue, 13 Dec 2016 14:45:56 +0000 (15:45 +0100)]
core: Add libusb_wrap_sys_device() API
Introduce a new API function for wrapping an existing platform-specific
device handle as a libusb_device_handle.
Signed-off-by: Vianney le Clément de Saint-Marcq <code@quartic.eu>
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Vianney le Clément de Saint-Marcq [Tue, 13 Dec 2016 15:30:56 +0000 (16:30 +0100)]
linux_usbfs: Get device address from file descriptor
Extend linux_get_device_address() to try to read the device address from
a file descriptor as a last resort, if provided.
Additionally, linux_get_device_address() will now return an error if the
path could not be parsed.
Signed-off-by: Vianney le Clément de Saint-Marcq <code@quartic.eu>
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Vianney le Clément de Saint-Marcq [Tue, 13 Dec 2016 14:32:39 +0000 (15:32 +0100)]
linux_usbfs: Extract device handle initialization from op_open()
Slightly refactor op_open() to extract the device handle initialization
code into a new initialize_handle() function, similar to the
initialize_device() function.
Signed-off-by: Vianney le Clément de Saint-Marcq <code@quartic.eu>
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Vianney le Clément de Saint-Marcq [Tue, 13 Dec 2016 12:57:25 +0000 (13:57 +0100)]
linux_usbfs: Fallback to usbfs if device has no sysfs_dir
Handle devices that are initialized with NULL as sysfs_dir. For such
devices, the usbfs functions should be used instead of their sysfs
counterparts.
Signed-off-by: Vianney le Clément de Saint-Marcq <code@quartic.eu>
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Sean McBride [Sat, 15 Dec 2018 21:26:14 +0000 (16:26 -0500)]
Tried to untangle mixing of int, enum libusb_error, kern_return_t, and IOReturn.
- Replace all kern_return_t with IOReturn, they are basically the same, but IOReturn is more common in IOUSBLib
- improve consistency by using the name 'kresult' for all IOReturn-type results, and not using that name for libusb_error return values.
- changed a few functions to use real 'bool' (this file already uses C99)
- replaced some raw '0's with LIBUSB_SUCCESS or kIOReturnSuccess.
- replaced some raw 'int's with either IOReturn or enum libusb_error.
- replaced ambiguous "if (kresult)" with more explicit "if (kresult != kIOReturnSuccess)"
- replaced incorrect use of darwin_to_libusb with darwin_transfer_status
Most of these were found by increasing the compiler warning level.
Closes #510
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Sean McBride [Sat, 15 Dec 2018 21:12:07 +0000 (16:12 -0500)]
Removed unneeded checks for passing null to free()
Closes #507
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Sean McBride [Sat, 15 Dec 2018 21:03:17 +0000 (16:03 -0500)]
Added USBI_PRINTFLIKE to allow finding printf format string mistakes
Fixed one such misktake
Closes #506
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Stephen [Mon, 17 Dec 2018 19:42:33 +0000 (11:42 -0800)]
use travis homebrew addon for reliability
Closes #513
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Nathan Hjelm [Wed, 5 Dec 2018 17:52:08 +0000 (10:52 -0700)]
Bump libusb API version for next release
Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
Nathan Hjelm [Wed, 5 Dec 2018 17:36:50 +0000 (10:36 -0700)]
configure.ac: bump .so version for next release
Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
Nathan Hjelm [Wed, 5 Dec 2018 17:36:20 +0000 (10:36 -0700)]
Update ChangeLog
Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
Alexander Pyhalov [Thu, 24 May 2018 12:03:45 +0000 (15:03 +0300)]
usbi_dbg() uses backend's clock_gettime(), break recursion in sunos backend
Closes #431
Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
Victor Toso [Tue, 7 Aug 2018 07:45:58 +0000 (09:45 +0200)]
examples: Fix format-truncation on debug
As description is used only for debug, we can extend it to be sure to
fit 256 from string variable plus 3 chars from " - " as described in
gcc warning below
| testlibusb.c: In function ‘print_device.constprop’:
| testlibusb.c:188:51: warning: ‘ - ’ directive output may be truncated writing 3 bytes into a region of size between 1 and 256 [-Wformat-truncation=]
| snprintf(description, sizeof(description), "%s - ", string);
| ^~~
| testlibusb.c:188:5: note: ‘snprintf’ output between 4 and 259 bytes into a destination of size 256
| snprintf(description, sizeof(description), "%s - ", string);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Closes #460
Signed-off-by: Victor Toso <victortoso@redhat.com>
Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
Alexander Pyhalov [Thu, 24 May 2018 11:55:20 +0000 (14:55 +0300)]
Enable timerfd on sunos when available
Closes #432
Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
gudenau [Wed, 20 Jun 2018 01:12:52 +0000 (20:12 -0500)]
Add missing libusb_exit on an error condition
Closes #448
Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
Bence Cs [Wed, 7 Nov 2018 12:17:40 +0000 (13:17 +0100)]
Hungarian translation
Closes #493
Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
saur0n [Tue, 27 Nov 2018 17:52:12 +0000 (20:52 +0300)]
Fixed typo in the documentation
Closes #496
Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
dmitrykos [Tue, 23 Oct 2018 18:05:25 +0000 (21:05 +0300)]
core: new API libusb_set_log_cb() to redirect global and per context log messages to the provided log handling function
Closes #486
Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
Nathan Hjelm [Mon, 22 Oct 2018 20:04:04 +0000 (14:04 -0600)]
update nano
Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
Alexander Schlarb [Mon, 18 Jun 2018 13:11:40 +0000 (15:11 +0200)]
Add German translation
Most strings were copied from the german `strerror` output on equivallent `errno` values and then adapted as necessary.
Closes #446
Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>