| Version 27 (modified by pbatard, 3 years ago) (diff) |
|---|
Windows backend
About
The aim of this project is to bring a Windows backend to the mainline libusb 1.0 branch, so that libusb 1.0 can easily be used on Windows platforms.
Status
The Windows backend is now in beta stages. As of 2010.01.13, it should include the main libusb v1.0 features, apart from isochronous transfers (which is a limitation from the WinUSB Microsoft API) and multithreaded application support.
It currently supports all Windows platforms from Windows XP, including 64 bit versions of Windows (untested on Windows 2003).
Source
The current development Windows backend is available in the libusb main git repository under libusb-pbatard.git.
For those not familiar with git, here are the git commands you can use retrieve and compile the Windows branch:
git clone git://git.libusb.org/libusb-pbatard.git ; retrieve development branch (this only needs to be done once) git pull ; keep in sync with the remote tree
On Windows, if you don't want to use git on the commandline, you can use TortoiseGit to access and keep in sync with the git repository.
Note that before you can install TortoiseGit you need to install MSysGit and make sure that, during the installation of MSysGit, when prompted to adjust the PATH environment, you select "Run Git from the Windows Command Prompt" (2nd option). Also, in the general settings of TortoiseGit, the MSysGit path must point to the MSysGit bin directory (eg: C:Program Files (x86)Gitin")
To compile this source, pthread-win32 is also required.
The following development environment are currently supported for libusb 1.0 on Windows:
- MinGW (32 bit version only, as the 64 bit version oh MinGW still has a bug that impacts libusb).
- Microsoft Visual C++ (Visual Studio), either Express or full version, from version 6.0 (NB: has only been properly tested with VS2008, is and currently missing project files for 6.0). You should be able to produce both win32 and x64 binaries with Visual C++, however x64 executables will require the use of a 64 bit version of pthread-win32 compiled from their latest CVS source. See the README_MSVC.txt for more details.
- cygwin.
To create projects relying on libusb 1.0, please refer to how the executables are compiled in the examples/ directory.
Finally, to access your USB devices with libusb-winusb, you need to download the WinUSB driver files, customize the .inf for your device, and then install the driver.
For more information on how to setup the WinUSB driver for your device, please see the WinUSB Driver Installation page.
Development Considerations
- The method of dealing with USB devices in the first release will be WinUSB only, with provisions for other access modes to be included later.
- Windows' handling of composite devices is done with multiple WinUSB drivers (VID_####&PID_####&MI_##), descendants of the usbccgp.sys driver (Composite Generic Parent). For more info, see "2. How Windows handles a composite device" at http://www.cygnal.org/ubb/Forum9/HTML/001050.html.
Current Issues
- IOCTL_USB_GET_NODE_CONNECTION_INFORMATION appears to be broken in MinGW-w64 (x64 platforms).
- WinUSB does not support multiple concurrent applications (as per the WinUSB Howto whitepaper).
- WinUSB does not support isochronous transfers.
To Do
- multithreading
- automated WinUSB driver installation?
- hotplug detection
Done
- device enumeration
- descriptors retrieval
- composite devices & interface selection
- poll and pipe
- control transfers
- bulk/interrupt transfers
- device reset
- transfer cancellation
- MSVC compatibility
Development's status log
- [2010.01.14 and later] Consult the git log
- [2009.12.13 to 2010.01.13] Consult the (now obsolete) Work-In-Progress Repository (SVN) or the Activity Log.
- [2009.12.12]
- Back on track after resubmission of git patches and timer related fixes.
- [2009.12.04]
- Paused while the changes below are broken down and incorporated into git. Then you can get latest updates from git.
- [2009.12.03]
- matching of libusb enumerated devices with WinUSB GUID devices (WIP)
- WinUSB driver cleanup & documentation.
- [2009.12.02]
- WinUSB generic device installation (x86 & x64)
- retrieval of device handles for use with WinUSB
- WinUSB init
- [2009.12.01]
- configuration descriptors retrieval
- initial possible API breakdown & more code cleanup
- [2009.11.30]
- Added clock_gettime() with hires timer detection for monotonic and GetSystemTimeAsFileTime?() (100 ns resolution) for realtime.
- Moved the USB 2.0 root hub caps detection into set_hcd_device_descriptor()
- [2009.11.29]
- First release with working lsusb enumeration
Development Links
- How to Use WinUSB to Communicate with a USB Device.
Note that the inf file given in the howto has a typo. If you don't change SourceDisksFiles?.NTamd64 to SourceDisksFiles?.amd64, the driver installation will fail to copy the required DLLs on 64 bit systems... - Using WinUSB for User-Mode to USB Device Communication
- WinUSB User-Mode Client Support Routines
- Microsoft's USB Core Team Blog (including resources on instrumenting the USB stack in Windows 7)
- additional information about Windows Co-Installers
Attachments
-
pthread-win32_libusb.zip
(145.1 KB) -
added by pbatard 3 years ago.
Precompiled version of pthread-win32, for 32 and 64 bit platforms, /MT and /MD versions, with 64 bit patch applied (Orin Eman)
-
mingw-w64-libusb-pbatard-1ebd8c90-2010-06-28.zip
(345.5 KB) -
added by stuge 3 years ago.
libusb-pbatard.git 1ebd8c90 cross-compiled using x86_64-w64-mingw32
Download all attachments as: .zip