Merge pull request #2032 from mathieui/update-libusb-externals
Update the libusb in externals to 1.0.19 (latest)
This commit is contained in:
commit
32d8f887fe
|
@ -1,23 +1,26 @@
|
||||||
Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
||||||
Copyright © 2007-2009 Daniel Drake <dsd@gentoo.org>
|
Copyright © 2007-2009 Daniel Drake <dsd@gentoo.org>
|
||||||
Copyright © 2010-2012 Peter Stuge <peter@stuge.se>
|
Copyright © 2010-2012 Peter Stuge <peter@stuge.se>
|
||||||
Copyright © 2008-2011 Nathan Hjelm <hjelmn@users.sourceforge.net>
|
Copyright © 2008-2013 Nathan Hjelm <hjelmn@users.sourceforge.net>
|
||||||
Copyright © 2009-2012 Pete Batard <pete@akeo.ie>
|
Copyright © 2009-2013 Pete Batard <pete@akeo.ie>
|
||||||
Copyright © 2009-2012 Ludovic Rousseau <ludovic.rousseau@gmail.com>
|
Copyright © 2009-2013 Ludovic Rousseau <ludovic.rousseau@gmail.com>
|
||||||
Copyright © 2010-2012 Michael Plante <michael.plante@gmail.com>
|
Copyright © 2010-2012 Michael Plante <michael.plante@gmail.com>
|
||||||
Copyright © 2011-2012 Hans de Goede <hdegoede@redhat.com>
|
Copyright © 2011-2013 Hans de Goede <hdegoede@redhat.com>
|
||||||
Copyright © 2012 Martin Pieuchot <mpi@openbsd.org>
|
Copyright © 2012-2013 Martin Pieuchot <mpi@openbsd.org>
|
||||||
Copyright © 2012-2013 Toby Gray <toby.gray@realvnc.com>
|
Copyright © 2012-2013 Toby Gray <toby.gray@realvnc.com>
|
||||||
|
|
||||||
Other contributors:
|
Other contributors:
|
||||||
Alan Ott
|
Alan Ott
|
||||||
Alan Stern
|
Alan Stern
|
||||||
Alex Vatchenko
|
Alex Vatchenko
|
||||||
|
Andrew Fernandes
|
||||||
Anthony Clay
|
Anthony Clay
|
||||||
Artem Egorkine
|
Artem Egorkine
|
||||||
Aurelien Jarno
|
Aurelien Jarno
|
||||||
Bastien Nocera
|
Bastien Nocera
|
||||||
|
Bei Zhang
|
||||||
Benjamin Dobell
|
Benjamin Dobell
|
||||||
|
Carl Karsten
|
||||||
Chris Dickens
|
Chris Dickens
|
||||||
Colin Walters
|
Colin Walters
|
||||||
Dave Camarillo
|
Dave Camarillo
|
||||||
|
@ -26,22 +29,36 @@ David Moore
|
||||||
Davidlohr Bueso
|
Davidlohr Bueso
|
||||||
Federico Manzan
|
Federico Manzan
|
||||||
Felipe Balbi
|
Felipe Balbi
|
||||||
|
Florian Albrechtskirchinger
|
||||||
Francesco Montorsi
|
Francesco Montorsi
|
||||||
|
Francisco Facioni
|
||||||
Graeme Gill
|
Graeme Gill
|
||||||
|
Gustavo Zacarias
|
||||||
Hans Ulrich Niedermann
|
Hans Ulrich Niedermann
|
||||||
Hector Martin
|
Hector Martin
|
||||||
Hoi-Ho Chan
|
Hoi-Ho Chan
|
||||||
Ilya Konstantinov
|
Ilya Konstantinov
|
||||||
James Hanko
|
James Hanko
|
||||||
|
John Sheu
|
||||||
|
Joshua Blake
|
||||||
|
Justin Bischoff
|
||||||
|
Karsten Koenig
|
||||||
Konrad Rzepecki
|
Konrad Rzepecki
|
||||||
|
Kuangye Guo
|
||||||
|
Lars Kanis
|
||||||
Lars Wirzenius
|
Lars Wirzenius
|
||||||
Luca Longinotti
|
Luca Longinotti
|
||||||
|
Markus Heidelberg
|
||||||
Martin Koegler
|
Martin Koegler
|
||||||
Matthias Bolte
|
Matthias Bolte
|
||||||
Mike Frysinger
|
Mike Frysinger
|
||||||
Mikhail Gusarov
|
Mikhail Gusarov
|
||||||
|
Moritz Fischer
|
||||||
|
Ларионов Даниил
|
||||||
Nicholas Corgan
|
Nicholas Corgan
|
||||||
|
Omri Iluz
|
||||||
Orin Eman
|
Orin Eman
|
||||||
|
Paul Fertser
|
||||||
Pekka Nikander
|
Pekka Nikander
|
||||||
Rob Walker
|
Rob Walker
|
||||||
Sean McBride
|
Sean McBride
|
||||||
|
@ -58,3 +75,4 @@ Vitali Lovich
|
||||||
Xiaofan Chen
|
Xiaofan Chen
|
||||||
Zoltán Kovács
|
Zoltán Kovács
|
||||||
Роман Донченко
|
Роман Донченко
|
||||||
|
xantares
|
|
@ -1,5 +1,42 @@
|
||||||
For detailed information about the changes below, please see the git log or
|
For detailed information about the changes below, please see the git log or
|
||||||
visit: http://log.libusbx.org
|
visit: http://log.libusb.info
|
||||||
|
|
||||||
|
2014-05-30: v1.0.19
|
||||||
|
* Add support for USB bulk streams on Linux and Mac OS X (#11)
|
||||||
|
* Windows: Add AMD and Intel USB-3.0 root hub support
|
||||||
|
* Windows: Fix USB 3.0 speed detection on Windows 8 or later (#10)
|
||||||
|
* Added Russian translation for libusb_strerror strings
|
||||||
|
* All: Various small fixes and cleanups
|
||||||
|
The (#xx) numbers are libusb issue numbers, see ie:
|
||||||
|
https://github.com/libusb/libusb/issues/11
|
||||||
|
|
||||||
|
2014-01-25: v1.0.18
|
||||||
|
* Fix multiple memory leaks
|
||||||
|
* Fix a crash when HID transfers return no data on Windows
|
||||||
|
* Ensure all pending events are consumed
|
||||||
|
* Improve Android and ucLinux support
|
||||||
|
* Multiple Windows improvements (error logging, VS2013, VIA xHCI support)
|
||||||
|
* Multiple OS X improvements (broken compilation, SIGFPE, 64bit support)
|
||||||
|
|
||||||
|
2013-09-06: v1.0.17
|
||||||
|
* Hotplug callbacks now always get passed a libusb_context, even if it is
|
||||||
|
the default context. Previously NULL would be passed for the default context,
|
||||||
|
but since the first context created is the default context, and most apps
|
||||||
|
use only 1 context, this meant that apps explicitly creating a context would
|
||||||
|
still get passed NULL
|
||||||
|
* Android: Add .mk files to build with the Android NDK
|
||||||
|
* Darwin: Add Xcode project
|
||||||
|
* Darwin: Fix crash on unplug (#121)
|
||||||
|
* Linux: Fix hang (deadlock) on libusb_exit
|
||||||
|
* Linux: Fix libusb build failure with --disable-udev (#124)
|
||||||
|
* Linux: Fix libusb_get_device_list() hang with --disable-udev (#130)
|
||||||
|
* OpenBSD: Update OpenBSD backend with support for control transfers to
|
||||||
|
non-ugen(4) devices and make get_configuration() no longer generate I/O.
|
||||||
|
Note that using this libusb version on OpenBSD requires using
|
||||||
|
OpenBSD 5.3-current or later. Users of older OpenBSD versions are advised
|
||||||
|
to stay with the libusb shipped with OpenBSD (mpi)
|
||||||
|
* Windows: fix libusb_dll_2010.vcxproj link errors (#129)
|
||||||
|
* Various other bug fixes and improvements
|
||||||
|
|
||||||
2013-07-11: v1.0.16
|
2013-07-11: v1.0.16
|
||||||
* Add hotplug support for Darwin and Linux (#9)
|
* Add hotplug support for Darwin and Linux (#9)
|
||||||
|
@ -40,7 +77,7 @@ https://github.com/libusbx/libusbx/issues/9
|
||||||
* Reverts the previous API change with regards to bMaxPower.
|
* Reverts the previous API change with regards to bMaxPower.
|
||||||
If this doesn't matter to you, you are encouraged to keep using v1.0.13,
|
If this doesn't matter to you, you are encouraged to keep using v1.0.13,
|
||||||
as it will use the same attribute as v2.0, to be released soon.
|
as it will use the same attribute as v2.0, to be released soon.
|
||||||
* Note that LIBUSBX_API_VERSION is *decreased* to 0x010000FF and the previous
|
* Note that LIBUSB_API_VERSION is *decreased* to 0x010000FF and the previous
|
||||||
guidelines with regards to concurrent use of MaxPower/bMaxPower still apply.
|
guidelines with regards to concurrent use of MaxPower/bMaxPower still apply.
|
||||||
|
|
||||||
2012-09-20: v1.0.13
|
2012-09-20: v1.0.13
|
||||||
|
@ -51,11 +88,11 @@ https://github.com/libusbx/libusbx/issues/9
|
||||||
* Fix broken support for the 0.1 -> 1.0 libusb-compat layer
|
* Fix broken support for the 0.1 -> 1.0 libusb-compat layer
|
||||||
* Fix unwanted cancellation of pending timeouts as well as major timeout related bugs
|
* Fix unwanted cancellation of pending timeouts as well as major timeout related bugs
|
||||||
* Fix handling of HID and composite devices on Windows
|
* Fix handling of HID and composite devices on Windows
|
||||||
* Introduce LIBUSBX_API_VERSION macro
|
* Introduce LIBUSB_API_VERSION macro
|
||||||
* Add Cypress FX/FX2 firmware upload sample, based on fxload from
|
* Add Cypress FX/FX2 firmware upload sample, based on fxload from
|
||||||
http://linux-hotplug.sourceforge.net
|
http://linux-hotplug.sourceforge.net
|
||||||
* Add libusb0 (libusb-win32) and libusbK driver support on Windows. Note that while
|
* Add libusb0 (libusb-win32) and libusbK driver support on Windows. Note that while
|
||||||
the drivers allow it, isochronous transfers are not supported yet in libusbx. Also
|
the drivers allow it, isochronous transfers are not supported yet in libusb. Also
|
||||||
not supported yet is the use of libusb-win32 filter drivers on composite interfaces
|
not supported yet is the use of libusb-win32 filter drivers on composite interfaces
|
||||||
* Add support for the new get_capabilities ioctl on Linux and avoid unnecessary
|
* Add support for the new get_capabilities ioctl on Linux and avoid unnecessary
|
||||||
splitting of bulk transfers
|
splitting of bulk transfers
|
||||||
|
@ -156,18 +193,18 @@ https://github.com/libusbx/libusbx/issues/9
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
APPENDIX A - How to maintain code compatibility with versions of libusb and
|
APPENDIX A - How to maintain code compatibility with versions of libusb and
|
||||||
libusbx that use MaxPower:
|
libusb that use MaxPower:
|
||||||
|
|
||||||
If you must to maintain compatibility with versions of the library that aren't
|
If you must to maintain compatibility with versions of the library that aren't
|
||||||
using the bMaxPower attribute in struct libusb_config_descriptor, the
|
using the bMaxPower attribute in struct libusb_config_descriptor, the
|
||||||
recommended way is to use the new LIBUSBX_API_VERSION macro with an #ifdef.
|
recommended way is to use the new LIBUSB_API_VERSION macro with an #ifdef.
|
||||||
For instance, if your code was written as follows:
|
For instance, if your code was written as follows:
|
||||||
|
|
||||||
if (dev->config[0].MaxPower < 250)
|
if (dev->config[0].MaxPower < 250)
|
||||||
|
|
||||||
Then you should modify it to have:
|
Then you should modify it to have:
|
||||||
|
|
||||||
#if defined(LIBUSBX_API_VERSION) && (LIBUSBX_API_VERSION >= 0x01000100)
|
#if defined(LIBUSB_API_VERSION) && (LIBUSB_API_VERSION >= 0x01000100)
|
||||||
if (dev->config[0].bMaxPower < 250)
|
if (dev->config[0].bMaxPower < 250)
|
||||||
#else
|
#else
|
||||||
if (dev->config[0].MaxPower < 250)
|
if (dev->config[0].MaxPower < 250)
|
|
@ -0,0 +1,7 @@
|
||||||
|
Dolphin-specific changes (as of 2015-02-12)
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
- removed all toplevel directories save msvc/ & libusb/
|
||||||
|
- removed all files save AUTHORS, Changelog, COPYING, INSTALL, NEWS,
|
||||||
|
PORTING, README and TODO
|
||||||
|
- patched the VS project file to insert dolphin-specific props
|
|
@ -0,0 +1,2 @@
|
||||||
|
For the latest libusb news, please refer to the ChangeLog file, or visit:
|
||||||
|
http://libusb.info
|
|
@ -1,15 +1,15 @@
|
||||||
PORTING LIBUSBX TO OTHER PLATFORMS
|
PORTING LIBUSB TO OTHER PLATFORMS
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
============
|
============
|
||||||
|
|
||||||
This document is aimed at developers wishing to port libusbx to unsupported
|
This document is aimed at developers wishing to port libusb to unsupported
|
||||||
platforms. I believe the libusbx API is OS-independent, so by supporting
|
platforms. I believe the libusb API is OS-independent, so by supporting
|
||||||
multiple operating systems we pave the way for cross-platform USB device
|
multiple operating systems we pave the way for cross-platform USB device
|
||||||
drivers.
|
drivers.
|
||||||
|
|
||||||
Implementation-wise, the basic idea is that you provide an interface to
|
Implementation-wise, the basic idea is that you provide an interface to
|
||||||
libusbx's internal "backend" API, which performs the appropriate operations on
|
libusb's internal "backend" API, which performs the appropriate operations on
|
||||||
your target platform.
|
your target platform.
|
||||||
|
|
||||||
In terms of USB I/O, your backend provides functionality to submit
|
In terms of USB I/O, your backend provides functionality to submit
|
||||||
|
@ -27,16 +27,16 @@ e.g. setting configuration, obtaining descriptors, etc.
|
||||||
File descriptors for I/O polling
|
File descriptors for I/O polling
|
||||||
================================
|
================================
|
||||||
|
|
||||||
For libusbx to work, your event handling function obviously needs to be called
|
For libusb to work, your event handling function obviously needs to be called
|
||||||
at various points in time. Your backend must provide a set of file descriptors
|
at various points in time. Your backend must provide a set of file descriptors
|
||||||
which libusbx and its users can pass to poll() or select() to determine when
|
which libusb and its users can pass to poll() or select() to determine when
|
||||||
it is time to call the event handling function.
|
it is time to call the event handling function.
|
||||||
|
|
||||||
On Linux, this is easy: the usbfs kernel interface exposes a file descriptor
|
On Linux, this is easy: the usbfs kernel interface exposes a file descriptor
|
||||||
which can be passed to poll(). If something similar is not true for your
|
which can be passed to poll(). If something similar is not true for your
|
||||||
platform, you can emulate this using an internal library thread to reap I/O as
|
platform, you can emulate this using an internal library thread to reap I/O as
|
||||||
necessary, and a pipe() with the main library to raise events. The file
|
necessary, and a pipe() with the main library to raise events. The file
|
||||||
descriptor of the pipe can then be provided to libusbx as an event source.
|
descriptor of the pipe can then be provided to libusb as an event source.
|
||||||
|
|
||||||
|
|
||||||
Interface semantics and documentation
|
Interface semantics and documentation
|
||||||
|
@ -46,7 +46,7 @@ Documentation of the backend interface can be found in libusbi.h inside the
|
||||||
usbi_os_backend structure definition.
|
usbi_os_backend structure definition.
|
||||||
|
|
||||||
Your implementations of these functions will need to call various internal
|
Your implementations of these functions will need to call various internal
|
||||||
libusbx functions, prefixed with "usbi_". Documentation for these functions
|
libusb functions, prefixed with "usbi_". Documentation for these functions
|
||||||
can be found in the .c files where they are implemented.
|
can be found in the .c files where they are implemented.
|
||||||
|
|
||||||
You probably want to skim over *all* the documentation before starting your
|
You probably want to skim over *all* the documentation before starting your
|
||||||
|
@ -72,18 +72,18 @@ right usbi_backend for your platform.
|
||||||
|
|
||||||
4. Produce and test your implementation.
|
4. Produce and test your implementation.
|
||||||
|
|
||||||
5. Send your implementation to libusbx-devel mailing list.
|
5. Send your implementation to libusb-devel mailing list.
|
||||||
|
|
||||||
|
|
||||||
Implementation difficulties? Questions?
|
Implementation difficulties? Questions?
|
||||||
=======================================
|
=======================================
|
||||||
|
|
||||||
If you encounter difficulties porting libusbx to your platform, please raise
|
If you encounter difficulties porting libusb to your platform, please raise
|
||||||
these issues on the libusbx-devel mailing list. Where possible and sensible, I
|
these issues on the libusb-devel mailing list. Where possible and sensible, I
|
||||||
am interested in solving problems preventing libusbx from operating on other
|
am interested in solving problems preventing libusb from operating on other
|
||||||
platforms.
|
platforms.
|
||||||
|
|
||||||
The libusbx-devel mailing list is also a good place to ask questions and
|
The libusb-devel mailing list is also a good place to ask questions and
|
||||||
make suggestions about the internal API. Hopefully we can produce some
|
make suggestions about the internal API. Hopefully we can produce some
|
||||||
better documentation based on your questions and other input.
|
better documentation based on your questions and other input.
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
libusb
|
||||||
|
======
|
||||||
|
|
||||||
|
libusb is a library for USB device access from Linux, Mac OS X,
|
||||||
|
Windows and OpenBSD/NetBSD userspace.
|
||||||
|
It is written in C and licensed under the GNU Lesser General Public
|
||||||
|
License version 2.1 or, at your option, any later version (see COPYING).
|
||||||
|
|
||||||
|
libusb is abstracted internally in such a way that it can hopefully
|
||||||
|
be ported to other operating systems. Please see the PORTING file
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
libusb homepage:
|
||||||
|
http://libusb.info/
|
||||||
|
|
||||||
|
Developers will wish to consult the API documentation:
|
||||||
|
http://api.libusb.info
|
||||||
|
|
||||||
|
Use the mailing list for questions, comments, etc:
|
||||||
|
http://mailing-list.libusb.info
|
||||||
|
|
||||||
|
- Pete Batard <pete@akeo.ie>
|
||||||
|
- Hans de Goede <hdegoede@redhat.com>
|
||||||
|
- Xiaofan Chen <xiaofanc@gmail.com>
|
||||||
|
- Ludovic Rousseau <ludovic.rousseau@gmail.com>
|
||||||
|
- Nathan Hjelm <hjelmn@users.sourceforge.net>
|
||||||
|
(Please use the mailing list rather than mailing developers directly)
|
|
@ -0,0 +1,2 @@
|
||||||
|
Please see the libusb roadmap by visiting:
|
||||||
|
https://github.com/libusb/libusb/issues/milestones?direction=asc&sort=due_date
|
|
@ -1,16 +1,19 @@
|
||||||
all: libusb-1.0.la libusb-1.0.dll
|
all: libusb-1.0.la libusb-1.0.dll
|
||||||
|
|
||||||
|
AUTOMAKE_OPTIONS = subdir-objects
|
||||||
|
|
||||||
lib_LTLIBRARIES = libusb-1.0.la
|
lib_LTLIBRARIES = libusb-1.0.la
|
||||||
|
|
||||||
POSIX_POLL_SRC = os/poll_posix.c
|
POSIX_POLL_SRC = os/poll_posix.c
|
||||||
LINUX_USBFS_SRC = os/linux_usbfs.c
|
LINUX_USBFS_SRC = os/linux_usbfs.c
|
||||||
DARWIN_USB_SRC = os/darwin_usb.c
|
DARWIN_USB_SRC = os/darwin_usb.c
|
||||||
OPENBSD_USB_SRC = os/openbsd_usb.c
|
OPENBSD_USB_SRC = os/openbsd_usb.c
|
||||||
|
NETBSD_USB_SRC = os/netbsd_usb.c
|
||||||
WINDOWS_USB_SRC = os/poll_windows.c os/windows_usb.c libusb-1.0.rc libusb-1.0.def
|
WINDOWS_USB_SRC = os/poll_windows.c os/windows_usb.c libusb-1.0.rc libusb-1.0.def
|
||||||
WINCE_USB_SRC = os/wince_usb.c os/wince_usb.h
|
WINCE_USB_SRC = os/wince_usb.c os/wince_usb.h
|
||||||
|
|
||||||
EXTRA_DIST = $(LINUX_USBFS_SRC) $(DARWIN_USB_SRC) $(OPENBSD_USB_SRC) \
|
EXTRA_DIST = $(LINUX_USBFS_SRC) $(DARWIN_USB_SRC) $(OPENBSD_USB_SRC) \
|
||||||
$(WINDOWS_USB_SRC) $(WINCE_USB_SRC) \
|
$(NETBSD_USB_SRC) $(WINDOWS_USB_SRC) $(WINCE_USB_SRC) \
|
||||||
$(POSIX_POLL_SRC) \
|
$(POSIX_POLL_SRC) \
|
||||||
os/threads_posix.c os/threads_windows.c \
|
os/threads_posix.c os/threads_windows.c \
|
||||||
os/linux_udev.c os/linux_netlink.c
|
os/linux_udev.c os/linux_netlink.c
|
||||||
|
@ -36,6 +39,10 @@ if OS_OPENBSD
|
||||||
OS_SRC = $(OPENBSD_USB_SRC) $(POSIX_POLL_SRC)
|
OS_SRC = $(OPENBSD_USB_SRC) $(POSIX_POLL_SRC)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if OS_NETBSD
|
||||||
|
OS_SRC = $(NETBSD_USB_SRC) $(POSIX_POLL_SRC)
|
||||||
|
endif
|
||||||
|
|
||||||
if OS_WINDOWS
|
if OS_WINDOWS
|
||||||
OS_SRC = $(WINDOWS_USB_SRC)
|
OS_SRC = $(WINDOWS_USB_SRC)
|
||||||
|
|
||||||
|
@ -45,7 +52,7 @@ OS_SRC = $(WINDOWS_USB_SRC)
|
||||||
libusb-1.0.rc: version.h version_nano.h
|
libusb-1.0.rc: version.h version_nano.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
libusb-1.0.dll: libusb-1.0.def
|
libusb-1.0.dll: libusb-1.0.def libusb-1.0.la
|
||||||
if CREATE_IMPORT_LIB
|
if CREATE_IMPORT_LIB
|
||||||
# Rebuild the import lib from the .def so that MS and MinGW DLLs can be interchanged
|
# Rebuild the import lib from the .def so that MS and MinGW DLLs can be interchanged
|
||||||
$(AM_V_GEN)$(DLLTOOL) $(DLLTOOLFLAGS) --kill-at --input-def $(srcdir)/libusb-1.0.def --dllname $@ --output-lib .libs/$@.a
|
$(AM_V_GEN)$(DLLTOOL) $(DLLTOOLFLAGS) --kill-at --input-def $(srcdir)/libusb-1.0.def --dllname $@ --output-lib .libs/$@.a
|
|
@ -1,4 +1,4 @@
|
||||||
# Makefile.in generated by automake 1.13.4 from Makefile.am.
|
# Makefile.in generated by automake 1.14.1 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
|
||||||
|
@ -129,30 +129,36 @@ am__libusb_1_0_la_SOURCES_DIST = libusbi.h core.c descriptor.c io.c \
|
||||||
os/threads_windows.h os/threads_windows.c os/threads_posix.h \
|
os/threads_windows.h os/threads_windows.c os/threads_posix.h \
|
||||||
os/threads_posix.c os/darwin_usb.c os/poll_posix.c \
|
os/threads_posix.c os/darwin_usb.c os/poll_posix.c \
|
||||||
os/linux_usbfs.c os/linux_netlink.c os/linux_udev.c \
|
os/linux_usbfs.c os/linux_netlink.c os/linux_udev.c \
|
||||||
os/openbsd_usb.c os/poll_windows.c os/windows_usb.c \
|
os/netbsd_usb.c os/openbsd_usb.c os/poll_windows.c \
|
||||||
libusb-1.0.rc libusb-1.0.def os/poll_posix.h os/poll_windows.h
|
os/windows_usb.c libusb-1.0.rc libusb-1.0.def os/poll_posix.h \
|
||||||
@THREADS_POSIX_FALSE@am__objects_1 = libusb_1_0_la-threads_windows.lo
|
os/poll_windows.h
|
||||||
@THREADS_POSIX_TRUE@am__objects_1 = libusb_1_0_la-threads_posix.lo
|
am__dirstamp = $(am__leading_dot)dirstamp
|
||||||
am__objects_2 = libusb_1_0_la-darwin_usb.lo
|
@THREADS_POSIX_FALSE@am__objects_1 = \
|
||||||
am__objects_3 = libusb_1_0_la-poll_posix.lo
|
@THREADS_POSIX_FALSE@ os/libusb_1_0_la-threads_windows.lo
|
||||||
am__objects_4 = libusb_1_0_la-linux_usbfs.lo
|
@THREADS_POSIX_TRUE@am__objects_1 = os/libusb_1_0_la-threads_posix.lo
|
||||||
am__objects_5 = libusb_1_0_la-openbsd_usb.lo
|
am__objects_2 = os/libusb_1_0_la-darwin_usb.lo
|
||||||
am__objects_6 = libusb_1_0_la-poll_windows.lo \
|
am__objects_3 = os/libusb_1_0_la-poll_posix.lo
|
||||||
libusb_1_0_la-windows_usb.lo libusb-1.0.lo
|
am__objects_4 = os/libusb_1_0_la-linux_usbfs.lo
|
||||||
@OS_DARWIN_FALSE@@OS_LINUX_FALSE@@OS_OPENBSD_FALSE@@OS_WINDOWS_TRUE@am__objects_7 = $(am__objects_6)
|
am__objects_5 = os/libusb_1_0_la-netbsd_usb.lo
|
||||||
@OS_DARWIN_FALSE@@OS_LINUX_FALSE@@OS_OPENBSD_TRUE@am__objects_7 = $(am__objects_5) \
|
am__objects_6 = os/libusb_1_0_la-openbsd_usb.lo
|
||||||
@OS_DARWIN_FALSE@@OS_LINUX_FALSE@@OS_OPENBSD_TRUE@ $(am__objects_3)
|
am__objects_7 = os/libusb_1_0_la-poll_windows.lo \
|
||||||
@OS_DARWIN_FALSE@@OS_LINUX_TRUE@@USE_UDEV_FALSE@am__objects_7 = $(am__objects_4) \
|
os/libusb_1_0_la-windows_usb.lo libusb-1.0.lo
|
||||||
|
@OS_DARWIN_FALSE@@OS_LINUX_FALSE@@OS_NETBSD_FALSE@@OS_OPENBSD_FALSE@@OS_WINDOWS_TRUE@am__objects_8 = $(am__objects_7)
|
||||||
|
@OS_DARWIN_FALSE@@OS_LINUX_FALSE@@OS_NETBSD_FALSE@@OS_OPENBSD_TRUE@am__objects_8 = $(am__objects_6) \
|
||||||
|
@OS_DARWIN_FALSE@@OS_LINUX_FALSE@@OS_NETBSD_FALSE@@OS_OPENBSD_TRUE@ $(am__objects_3)
|
||||||
|
@OS_DARWIN_FALSE@@OS_LINUX_FALSE@@OS_NETBSD_TRUE@am__objects_8 = $(am__objects_5) \
|
||||||
|
@OS_DARWIN_FALSE@@OS_LINUX_FALSE@@OS_NETBSD_TRUE@ $(am__objects_3)
|
||||||
|
@OS_DARWIN_FALSE@@OS_LINUX_TRUE@@USE_UDEV_FALSE@am__objects_8 = $(am__objects_4) \
|
||||||
@OS_DARWIN_FALSE@@OS_LINUX_TRUE@@USE_UDEV_FALSE@ $(am__objects_3) \
|
@OS_DARWIN_FALSE@@OS_LINUX_TRUE@@USE_UDEV_FALSE@ $(am__objects_3) \
|
||||||
@OS_DARWIN_FALSE@@OS_LINUX_TRUE@@USE_UDEV_FALSE@ libusb_1_0_la-linux_netlink.lo
|
@OS_DARWIN_FALSE@@OS_LINUX_TRUE@@USE_UDEV_FALSE@ os/libusb_1_0_la-linux_netlink.lo
|
||||||
@OS_DARWIN_FALSE@@OS_LINUX_TRUE@@USE_UDEV_TRUE@am__objects_7 = $(am__objects_4) \
|
@OS_DARWIN_FALSE@@OS_LINUX_TRUE@@USE_UDEV_TRUE@am__objects_8 = $(am__objects_4) \
|
||||||
@OS_DARWIN_FALSE@@OS_LINUX_TRUE@@USE_UDEV_TRUE@ $(am__objects_3) \
|
@OS_DARWIN_FALSE@@OS_LINUX_TRUE@@USE_UDEV_TRUE@ $(am__objects_3) \
|
||||||
@OS_DARWIN_FALSE@@OS_LINUX_TRUE@@USE_UDEV_TRUE@ libusb_1_0_la-linux_udev.lo
|
@OS_DARWIN_FALSE@@OS_LINUX_TRUE@@USE_UDEV_TRUE@ os/libusb_1_0_la-linux_udev.lo
|
||||||
@OS_DARWIN_TRUE@am__objects_7 = $(am__objects_2) $(am__objects_3)
|
@OS_DARWIN_TRUE@am__objects_8 = $(am__objects_2) $(am__objects_3)
|
||||||
am_libusb_1_0_la_OBJECTS = libusb_1_0_la-core.lo \
|
am_libusb_1_0_la_OBJECTS = libusb_1_0_la-core.lo \
|
||||||
libusb_1_0_la-descriptor.lo libusb_1_0_la-io.lo \
|
libusb_1_0_la-descriptor.lo libusb_1_0_la-io.lo \
|
||||||
libusb_1_0_la-strerror.lo libusb_1_0_la-sync.lo \
|
libusb_1_0_la-strerror.lo libusb_1_0_la-sync.lo \
|
||||||
libusb_1_0_la-hotplug.lo $(am__objects_1) $(am__objects_7)
|
libusb_1_0_la-hotplug.lo $(am__objects_1) $(am__objects_8)
|
||||||
libusb_1_0_la_OBJECTS = $(am_libusb_1_0_la_OBJECTS)
|
libusb_1_0_la_OBJECTS = $(am_libusb_1_0_la_OBJECTS)
|
||||||
AM_V_lt = $(am__v_lt_@AM_V@)
|
AM_V_lt = $(am__v_lt_@AM_V@)
|
||||||
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
||||||
|
@ -274,6 +280,7 @@ OBJDUMP = @OBJDUMP@
|
||||||
OBJEXT = @OBJEXT@
|
OBJEXT = @OBJEXT@
|
||||||
OS_DARWIN = @OS_DARWIN@
|
OS_DARWIN = @OS_DARWIN@
|
||||||
OS_LINUX = @OS_LINUX@
|
OS_LINUX = @OS_LINUX@
|
||||||
|
OS_NETBSD = @OS_NETBSD@
|
||||||
OS_OPENBSD = @OS_OPENBSD@
|
OS_OPENBSD = @OS_OPENBSD@
|
||||||
OS_WINDOWS = @OS_WINDOWS@
|
OS_WINDOWS = @OS_WINDOWS@
|
||||||
OTOOL = @OTOOL@
|
OTOOL = @OTOOL@
|
||||||
|
@ -346,15 +353,17 @@ target_alias = @target_alias@
|
||||||
top_build_prefix = @top_build_prefix@
|
top_build_prefix = @top_build_prefix@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
|
AUTOMAKE_OPTIONS = subdir-objects
|
||||||
lib_LTLIBRARIES = libusb-1.0.la
|
lib_LTLIBRARIES = libusb-1.0.la
|
||||||
POSIX_POLL_SRC = os/poll_posix.c
|
POSIX_POLL_SRC = os/poll_posix.c
|
||||||
LINUX_USBFS_SRC = os/linux_usbfs.c
|
LINUX_USBFS_SRC = os/linux_usbfs.c
|
||||||
DARWIN_USB_SRC = os/darwin_usb.c
|
DARWIN_USB_SRC = os/darwin_usb.c
|
||||||
OPENBSD_USB_SRC = os/openbsd_usb.c
|
OPENBSD_USB_SRC = os/openbsd_usb.c
|
||||||
|
NETBSD_USB_SRC = os/netbsd_usb.c
|
||||||
WINDOWS_USB_SRC = os/poll_windows.c os/windows_usb.c libusb-1.0.rc libusb-1.0.def
|
WINDOWS_USB_SRC = os/poll_windows.c os/windows_usb.c libusb-1.0.rc libusb-1.0.def
|
||||||
WINCE_USB_SRC = os/wince_usb.c os/wince_usb.h
|
WINCE_USB_SRC = os/wince_usb.c os/wince_usb.h
|
||||||
EXTRA_DIST = $(LINUX_USBFS_SRC) $(DARWIN_USB_SRC) $(OPENBSD_USB_SRC) \
|
EXTRA_DIST = $(LINUX_USBFS_SRC) $(DARWIN_USB_SRC) $(OPENBSD_USB_SRC) \
|
||||||
$(WINDOWS_USB_SRC) $(WINCE_USB_SRC) \
|
$(NETBSD_USB_SRC) $(WINDOWS_USB_SRC) $(WINCE_USB_SRC) \
|
||||||
$(POSIX_POLL_SRC) \
|
$(POSIX_POLL_SRC) \
|
||||||
os/threads_posix.c os/threads_windows.c \
|
os/threads_posix.c os/threads_windows.c \
|
||||||
os/linux_udev.c os/linux_netlink.c
|
os/linux_udev.c os/linux_netlink.c
|
||||||
|
@ -366,6 +375,7 @@ EXTRA_DIST = $(LINUX_USBFS_SRC) $(DARWIN_USB_SRC) $(OPENBSD_USB_SRC) \
|
||||||
@OS_LINUX_TRUE@@USE_UDEV_TRUE@OS_SRC = $(LINUX_USBFS_SRC) $(POSIX_POLL_SRC) \
|
@OS_LINUX_TRUE@@USE_UDEV_TRUE@OS_SRC = $(LINUX_USBFS_SRC) $(POSIX_POLL_SRC) \
|
||||||
@OS_LINUX_TRUE@@USE_UDEV_TRUE@ os/linux_udev.c
|
@OS_LINUX_TRUE@@USE_UDEV_TRUE@ os/linux_udev.c
|
||||||
|
|
||||||
|
@OS_NETBSD_TRUE@OS_SRC = $(NETBSD_USB_SRC) $(POSIX_POLL_SRC)
|
||||||
@OS_OPENBSD_TRUE@OS_SRC = $(OPENBSD_USB_SRC) $(POSIX_POLL_SRC)
|
@OS_OPENBSD_TRUE@OS_SRC = $(OPENBSD_USB_SRC) $(POSIX_POLL_SRC)
|
||||||
@OS_WINDOWS_TRUE@OS_SRC = $(WINDOWS_USB_SRC)
|
@OS_WINDOWS_TRUE@OS_SRC = $(WINDOWS_USB_SRC)
|
||||||
@OS_DARWIN_TRUE@AM_CFLAGS_EXT = -no-cpp-precomp
|
@OS_DARWIN_TRUE@AM_CFLAGS_EXT = -no-cpp-precomp
|
||||||
|
@ -449,50 +459,84 @@ clean-libLTLIBRARIES:
|
||||||
echo rm -f $${locs}; \
|
echo rm -f $${locs}; \
|
||||||
rm -f $${locs}; \
|
rm -f $${locs}; \
|
||||||
}
|
}
|
||||||
|
os/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) os
|
||||||
|
@: > os/$(am__dirstamp)
|
||||||
|
os/$(DEPDIR)/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) os/$(DEPDIR)
|
||||||
|
@: > os/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
os/libusb_1_0_la-threads_windows.lo: os/$(am__dirstamp) \
|
||||||
|
os/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
os/libusb_1_0_la-threads_posix.lo: os/$(am__dirstamp) \
|
||||||
|
os/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
os/libusb_1_0_la-darwin_usb.lo: os/$(am__dirstamp) \
|
||||||
|
os/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
os/libusb_1_0_la-poll_posix.lo: os/$(am__dirstamp) \
|
||||||
|
os/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
os/libusb_1_0_la-linux_usbfs.lo: os/$(am__dirstamp) \
|
||||||
|
os/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
os/libusb_1_0_la-linux_netlink.lo: os/$(am__dirstamp) \
|
||||||
|
os/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
os/libusb_1_0_la-linux_udev.lo: os/$(am__dirstamp) \
|
||||||
|
os/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
os/libusb_1_0_la-netbsd_usb.lo: os/$(am__dirstamp) \
|
||||||
|
os/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
os/libusb_1_0_la-openbsd_usb.lo: os/$(am__dirstamp) \
|
||||||
|
os/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
os/libusb_1_0_la-poll_windows.lo: os/$(am__dirstamp) \
|
||||||
|
os/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
os/libusb_1_0_la-windows_usb.lo: os/$(am__dirstamp) \
|
||||||
|
os/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
|
||||||
libusb-1.0.la: $(libusb_1_0_la_OBJECTS) $(libusb_1_0_la_DEPENDENCIES) $(EXTRA_libusb_1_0_la_DEPENDENCIES)
|
libusb-1.0.la: $(libusb_1_0_la_OBJECTS) $(libusb_1_0_la_DEPENDENCIES) $(EXTRA_libusb_1_0_la_DEPENDENCIES)
|
||||||
$(AM_V_CCLD)$(libusb_1_0_la_LINK) -rpath $(libdir) $(libusb_1_0_la_OBJECTS) $(libusb_1_0_la_LIBADD) $(LIBS)
|
$(AM_V_CCLD)$(libusb_1_0_la_LINK) -rpath $(libdir) $(libusb_1_0_la_OBJECTS) $(libusb_1_0_la_LIBADD) $(LIBS)
|
||||||
|
|
||||||
mostlyclean-compile:
|
mostlyclean-compile:
|
||||||
-rm -f *.$(OBJEXT)
|
-rm -f *.$(OBJEXT)
|
||||||
|
-rm -f os/*.$(OBJEXT)
|
||||||
|
-rm -f os/*.lo
|
||||||
|
|
||||||
distclean-compile:
|
distclean-compile:
|
||||||
-rm -f *.tab.c
|
-rm -f *.tab.c
|
||||||
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-core.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-core.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-darwin_usb.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-descriptor.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-descriptor.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-hotplug.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-hotplug.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-io.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-io.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-linux_netlink.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-linux_udev.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-linux_usbfs.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-openbsd_usb.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-poll_posix.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-poll_windows.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-strerror.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-strerror.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-sync.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-sync.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-threads_posix.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@os/$(DEPDIR)/libusb_1_0_la-darwin_usb.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-threads_windows.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@os/$(DEPDIR)/libusb_1_0_la-linux_netlink.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-windows_usb.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@os/$(DEPDIR)/libusb_1_0_la-linux_udev.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@os/$(DEPDIR)/libusb_1_0_la-linux_usbfs.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@os/$(DEPDIR)/libusb_1_0_la-netbsd_usb.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@os/$(DEPDIR)/libusb_1_0_la-openbsd_usb.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@os/$(DEPDIR)/libusb_1_0_la-poll_posix.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@os/$(DEPDIR)/libusb_1_0_la-poll_windows.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@os/$(DEPDIR)/libusb_1_0_la-threads_posix.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@os/$(DEPDIR)/libusb_1_0_la-threads_windows.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@os/$(DEPDIR)/libusb_1_0_la-windows_usb.Plo@am__quote@
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||||
|
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
|
||||||
|
|
||||||
.c.obj:
|
.c.obj:
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
|
@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
|
||||||
|
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||||
|
|
||||||
.c.lo:
|
.c.lo:
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
|
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||||
|
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
|
||||||
|
@ -539,81 +583,89 @@ libusb_1_0_la-hotplug.lo: hotplug.c
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-hotplug.lo `test -f 'hotplug.c' || echo '$(srcdir)/'`hotplug.c
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-hotplug.lo `test -f 'hotplug.c' || echo '$(srcdir)/'`hotplug.c
|
||||||
|
|
||||||
libusb_1_0_la-threads_windows.lo: os/threads_windows.c
|
os/libusb_1_0_la-threads_windows.lo: os/threads_windows.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-threads_windows.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-threads_windows.Tpo -c -o libusb_1_0_la-threads_windows.lo `test -f 'os/threads_windows.c' || echo '$(srcdir)/'`os/threads_windows.c
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT os/libusb_1_0_la-threads_windows.lo -MD -MP -MF os/$(DEPDIR)/libusb_1_0_la-threads_windows.Tpo -c -o os/libusb_1_0_la-threads_windows.lo `test -f 'os/threads_windows.c' || echo '$(srcdir)/'`os/threads_windows.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-threads_windows.Tpo $(DEPDIR)/libusb_1_0_la-threads_windows.Plo
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) os/$(DEPDIR)/libusb_1_0_la-threads_windows.Tpo os/$(DEPDIR)/libusb_1_0_la-threads_windows.Plo
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/threads_windows.c' object='libusb_1_0_la-threads_windows.lo' libtool=yes @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/threads_windows.c' object='os/libusb_1_0_la-threads_windows.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-threads_windows.lo `test -f 'os/threads_windows.c' || echo '$(srcdir)/'`os/threads_windows.c
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o os/libusb_1_0_la-threads_windows.lo `test -f 'os/threads_windows.c' || echo '$(srcdir)/'`os/threads_windows.c
|
||||||
|
|
||||||
libusb_1_0_la-threads_posix.lo: os/threads_posix.c
|
os/libusb_1_0_la-threads_posix.lo: os/threads_posix.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-threads_posix.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-threads_posix.Tpo -c -o libusb_1_0_la-threads_posix.lo `test -f 'os/threads_posix.c' || echo '$(srcdir)/'`os/threads_posix.c
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT os/libusb_1_0_la-threads_posix.lo -MD -MP -MF os/$(DEPDIR)/libusb_1_0_la-threads_posix.Tpo -c -o os/libusb_1_0_la-threads_posix.lo `test -f 'os/threads_posix.c' || echo '$(srcdir)/'`os/threads_posix.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-threads_posix.Tpo $(DEPDIR)/libusb_1_0_la-threads_posix.Plo
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) os/$(DEPDIR)/libusb_1_0_la-threads_posix.Tpo os/$(DEPDIR)/libusb_1_0_la-threads_posix.Plo
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/threads_posix.c' object='libusb_1_0_la-threads_posix.lo' libtool=yes @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/threads_posix.c' object='os/libusb_1_0_la-threads_posix.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-threads_posix.lo `test -f 'os/threads_posix.c' || echo '$(srcdir)/'`os/threads_posix.c
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o os/libusb_1_0_la-threads_posix.lo `test -f 'os/threads_posix.c' || echo '$(srcdir)/'`os/threads_posix.c
|
||||||
|
|
||||||
libusb_1_0_la-darwin_usb.lo: os/darwin_usb.c
|
os/libusb_1_0_la-darwin_usb.lo: os/darwin_usb.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-darwin_usb.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-darwin_usb.Tpo -c -o libusb_1_0_la-darwin_usb.lo `test -f 'os/darwin_usb.c' || echo '$(srcdir)/'`os/darwin_usb.c
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT os/libusb_1_0_la-darwin_usb.lo -MD -MP -MF os/$(DEPDIR)/libusb_1_0_la-darwin_usb.Tpo -c -o os/libusb_1_0_la-darwin_usb.lo `test -f 'os/darwin_usb.c' || echo '$(srcdir)/'`os/darwin_usb.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-darwin_usb.Tpo $(DEPDIR)/libusb_1_0_la-darwin_usb.Plo
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) os/$(DEPDIR)/libusb_1_0_la-darwin_usb.Tpo os/$(DEPDIR)/libusb_1_0_la-darwin_usb.Plo
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/darwin_usb.c' object='libusb_1_0_la-darwin_usb.lo' libtool=yes @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/darwin_usb.c' object='os/libusb_1_0_la-darwin_usb.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-darwin_usb.lo `test -f 'os/darwin_usb.c' || echo '$(srcdir)/'`os/darwin_usb.c
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o os/libusb_1_0_la-darwin_usb.lo `test -f 'os/darwin_usb.c' || echo '$(srcdir)/'`os/darwin_usb.c
|
||||||
|
|
||||||
libusb_1_0_la-poll_posix.lo: os/poll_posix.c
|
os/libusb_1_0_la-poll_posix.lo: os/poll_posix.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-poll_posix.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-poll_posix.Tpo -c -o libusb_1_0_la-poll_posix.lo `test -f 'os/poll_posix.c' || echo '$(srcdir)/'`os/poll_posix.c
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT os/libusb_1_0_la-poll_posix.lo -MD -MP -MF os/$(DEPDIR)/libusb_1_0_la-poll_posix.Tpo -c -o os/libusb_1_0_la-poll_posix.lo `test -f 'os/poll_posix.c' || echo '$(srcdir)/'`os/poll_posix.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-poll_posix.Tpo $(DEPDIR)/libusb_1_0_la-poll_posix.Plo
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) os/$(DEPDIR)/libusb_1_0_la-poll_posix.Tpo os/$(DEPDIR)/libusb_1_0_la-poll_posix.Plo
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/poll_posix.c' object='libusb_1_0_la-poll_posix.lo' libtool=yes @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/poll_posix.c' object='os/libusb_1_0_la-poll_posix.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-poll_posix.lo `test -f 'os/poll_posix.c' || echo '$(srcdir)/'`os/poll_posix.c
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o os/libusb_1_0_la-poll_posix.lo `test -f 'os/poll_posix.c' || echo '$(srcdir)/'`os/poll_posix.c
|
||||||
|
|
||||||
libusb_1_0_la-linux_usbfs.lo: os/linux_usbfs.c
|
os/libusb_1_0_la-linux_usbfs.lo: os/linux_usbfs.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-linux_usbfs.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-linux_usbfs.Tpo -c -o libusb_1_0_la-linux_usbfs.lo `test -f 'os/linux_usbfs.c' || echo '$(srcdir)/'`os/linux_usbfs.c
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT os/libusb_1_0_la-linux_usbfs.lo -MD -MP -MF os/$(DEPDIR)/libusb_1_0_la-linux_usbfs.Tpo -c -o os/libusb_1_0_la-linux_usbfs.lo `test -f 'os/linux_usbfs.c' || echo '$(srcdir)/'`os/linux_usbfs.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-linux_usbfs.Tpo $(DEPDIR)/libusb_1_0_la-linux_usbfs.Plo
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) os/$(DEPDIR)/libusb_1_0_la-linux_usbfs.Tpo os/$(DEPDIR)/libusb_1_0_la-linux_usbfs.Plo
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/linux_usbfs.c' object='libusb_1_0_la-linux_usbfs.lo' libtool=yes @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/linux_usbfs.c' object='os/libusb_1_0_la-linux_usbfs.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-linux_usbfs.lo `test -f 'os/linux_usbfs.c' || echo '$(srcdir)/'`os/linux_usbfs.c
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o os/libusb_1_0_la-linux_usbfs.lo `test -f 'os/linux_usbfs.c' || echo '$(srcdir)/'`os/linux_usbfs.c
|
||||||
|
|
||||||
libusb_1_0_la-linux_netlink.lo: os/linux_netlink.c
|
os/libusb_1_0_la-linux_netlink.lo: os/linux_netlink.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-linux_netlink.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-linux_netlink.Tpo -c -o libusb_1_0_la-linux_netlink.lo `test -f 'os/linux_netlink.c' || echo '$(srcdir)/'`os/linux_netlink.c
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT os/libusb_1_0_la-linux_netlink.lo -MD -MP -MF os/$(DEPDIR)/libusb_1_0_la-linux_netlink.Tpo -c -o os/libusb_1_0_la-linux_netlink.lo `test -f 'os/linux_netlink.c' || echo '$(srcdir)/'`os/linux_netlink.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-linux_netlink.Tpo $(DEPDIR)/libusb_1_0_la-linux_netlink.Plo
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) os/$(DEPDIR)/libusb_1_0_la-linux_netlink.Tpo os/$(DEPDIR)/libusb_1_0_la-linux_netlink.Plo
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/linux_netlink.c' object='libusb_1_0_la-linux_netlink.lo' libtool=yes @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/linux_netlink.c' object='os/libusb_1_0_la-linux_netlink.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-linux_netlink.lo `test -f 'os/linux_netlink.c' || echo '$(srcdir)/'`os/linux_netlink.c
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o os/libusb_1_0_la-linux_netlink.lo `test -f 'os/linux_netlink.c' || echo '$(srcdir)/'`os/linux_netlink.c
|
||||||
|
|
||||||
libusb_1_0_la-linux_udev.lo: os/linux_udev.c
|
os/libusb_1_0_la-linux_udev.lo: os/linux_udev.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-linux_udev.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-linux_udev.Tpo -c -o libusb_1_0_la-linux_udev.lo `test -f 'os/linux_udev.c' || echo '$(srcdir)/'`os/linux_udev.c
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT os/libusb_1_0_la-linux_udev.lo -MD -MP -MF os/$(DEPDIR)/libusb_1_0_la-linux_udev.Tpo -c -o os/libusb_1_0_la-linux_udev.lo `test -f 'os/linux_udev.c' || echo '$(srcdir)/'`os/linux_udev.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-linux_udev.Tpo $(DEPDIR)/libusb_1_0_la-linux_udev.Plo
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) os/$(DEPDIR)/libusb_1_0_la-linux_udev.Tpo os/$(DEPDIR)/libusb_1_0_la-linux_udev.Plo
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/linux_udev.c' object='libusb_1_0_la-linux_udev.lo' libtool=yes @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/linux_udev.c' object='os/libusb_1_0_la-linux_udev.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-linux_udev.lo `test -f 'os/linux_udev.c' || echo '$(srcdir)/'`os/linux_udev.c
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o os/libusb_1_0_la-linux_udev.lo `test -f 'os/linux_udev.c' || echo '$(srcdir)/'`os/linux_udev.c
|
||||||
|
|
||||||
libusb_1_0_la-openbsd_usb.lo: os/openbsd_usb.c
|
os/libusb_1_0_la-netbsd_usb.lo: os/netbsd_usb.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-openbsd_usb.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-openbsd_usb.Tpo -c -o libusb_1_0_la-openbsd_usb.lo `test -f 'os/openbsd_usb.c' || echo '$(srcdir)/'`os/openbsd_usb.c
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT os/libusb_1_0_la-netbsd_usb.lo -MD -MP -MF os/$(DEPDIR)/libusb_1_0_la-netbsd_usb.Tpo -c -o os/libusb_1_0_la-netbsd_usb.lo `test -f 'os/netbsd_usb.c' || echo '$(srcdir)/'`os/netbsd_usb.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-openbsd_usb.Tpo $(DEPDIR)/libusb_1_0_la-openbsd_usb.Plo
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) os/$(DEPDIR)/libusb_1_0_la-netbsd_usb.Tpo os/$(DEPDIR)/libusb_1_0_la-netbsd_usb.Plo
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/openbsd_usb.c' object='libusb_1_0_la-openbsd_usb.lo' libtool=yes @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/netbsd_usb.c' object='os/libusb_1_0_la-netbsd_usb.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-openbsd_usb.lo `test -f 'os/openbsd_usb.c' || echo '$(srcdir)/'`os/openbsd_usb.c
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o os/libusb_1_0_la-netbsd_usb.lo `test -f 'os/netbsd_usb.c' || echo '$(srcdir)/'`os/netbsd_usb.c
|
||||||
|
|
||||||
libusb_1_0_la-poll_windows.lo: os/poll_windows.c
|
os/libusb_1_0_la-openbsd_usb.lo: os/openbsd_usb.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-poll_windows.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-poll_windows.Tpo -c -o libusb_1_0_la-poll_windows.lo `test -f 'os/poll_windows.c' || echo '$(srcdir)/'`os/poll_windows.c
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT os/libusb_1_0_la-openbsd_usb.lo -MD -MP -MF os/$(DEPDIR)/libusb_1_0_la-openbsd_usb.Tpo -c -o os/libusb_1_0_la-openbsd_usb.lo `test -f 'os/openbsd_usb.c' || echo '$(srcdir)/'`os/openbsd_usb.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-poll_windows.Tpo $(DEPDIR)/libusb_1_0_la-poll_windows.Plo
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) os/$(DEPDIR)/libusb_1_0_la-openbsd_usb.Tpo os/$(DEPDIR)/libusb_1_0_la-openbsd_usb.Plo
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/poll_windows.c' object='libusb_1_0_la-poll_windows.lo' libtool=yes @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/openbsd_usb.c' object='os/libusb_1_0_la-openbsd_usb.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-poll_windows.lo `test -f 'os/poll_windows.c' || echo '$(srcdir)/'`os/poll_windows.c
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o os/libusb_1_0_la-openbsd_usb.lo `test -f 'os/openbsd_usb.c' || echo '$(srcdir)/'`os/openbsd_usb.c
|
||||||
|
|
||||||
libusb_1_0_la-windows_usb.lo: os/windows_usb.c
|
os/libusb_1_0_la-poll_windows.lo: os/poll_windows.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-windows_usb.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-windows_usb.Tpo -c -o libusb_1_0_la-windows_usb.lo `test -f 'os/windows_usb.c' || echo '$(srcdir)/'`os/windows_usb.c
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT os/libusb_1_0_la-poll_windows.lo -MD -MP -MF os/$(DEPDIR)/libusb_1_0_la-poll_windows.Tpo -c -o os/libusb_1_0_la-poll_windows.lo `test -f 'os/poll_windows.c' || echo '$(srcdir)/'`os/poll_windows.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-windows_usb.Tpo $(DEPDIR)/libusb_1_0_la-windows_usb.Plo
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) os/$(DEPDIR)/libusb_1_0_la-poll_windows.Tpo os/$(DEPDIR)/libusb_1_0_la-poll_windows.Plo
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/windows_usb.c' object='libusb_1_0_la-windows_usb.lo' libtool=yes @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/poll_windows.c' object='os/libusb_1_0_la-poll_windows.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-windows_usb.lo `test -f 'os/windows_usb.c' || echo '$(srcdir)/'`os/windows_usb.c
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o os/libusb_1_0_la-poll_windows.lo `test -f 'os/poll_windows.c' || echo '$(srcdir)/'`os/poll_windows.c
|
||||||
|
|
||||||
|
os/libusb_1_0_la-windows_usb.lo: os/windows_usb.c
|
||||||
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT os/libusb_1_0_la-windows_usb.lo -MD -MP -MF os/$(DEPDIR)/libusb_1_0_la-windows_usb.Tpo -c -o os/libusb_1_0_la-windows_usb.lo `test -f 'os/windows_usb.c' || echo '$(srcdir)/'`os/windows_usb.c
|
||||||
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) os/$(DEPDIR)/libusb_1_0_la-windows_usb.Tpo os/$(DEPDIR)/libusb_1_0_la-windows_usb.Plo
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='os/windows_usb.c' object='os/libusb_1_0_la-windows_usb.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o os/libusb_1_0_la-windows_usb.lo `test -f 'os/windows_usb.c' || echo '$(srcdir)/'`os/windows_usb.c
|
||||||
|
|
||||||
mostlyclean-libtool:
|
mostlyclean-libtool:
|
||||||
-rm -f *.lo
|
-rm -f *.lo
|
||||||
|
|
||||||
clean-libtool:
|
clean-libtool:
|
||||||
-rm -rf .libs _libs
|
-rm -rf .libs _libs
|
||||||
|
-rm -rf os/.libs os/_libs
|
||||||
install-hdrHEADERS: $(hdr_HEADERS)
|
install-hdrHEADERS: $(hdr_HEADERS)
|
||||||
@$(NORMAL_INSTALL)
|
@$(NORMAL_INSTALL)
|
||||||
@list='$(hdr_HEADERS)'; test -n "$(hdrdir)" || list=; \
|
@list='$(hdr_HEADERS)'; test -n "$(hdrdir)" || list=; \
|
||||||
|
@ -751,6 +803,8 @@ clean-generic:
|
||||||
distclean-generic:
|
distclean-generic:
|
||||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||||
|
-rm -f os/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
-rm -f os/$(am__dirstamp)
|
||||||
|
|
||||||
maintainer-clean-generic:
|
maintainer-clean-generic:
|
||||||
@echo "This command is intended for maintainers to use"
|
@echo "This command is intended for maintainers to use"
|
||||||
|
@ -761,7 +815,7 @@ clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
|
||||||
mostlyclean-am
|
mostlyclean-am
|
||||||
|
|
||||||
distclean: distclean-am
|
distclean: distclean-am
|
||||||
-rm -rf ./$(DEPDIR)
|
-rm -rf ./$(DEPDIR) os/$(DEPDIR)
|
||||||
-rm -f Makefile
|
-rm -f Makefile
|
||||||
distclean-am: clean-am distclean-compile distclean-generic \
|
distclean-am: clean-am distclean-compile distclean-generic \
|
||||||
distclean-tags
|
distclean-tags
|
||||||
|
@ -807,7 +861,7 @@ install-ps-am:
|
||||||
installcheck-am:
|
installcheck-am:
|
||||||
|
|
||||||
maintainer-clean: maintainer-clean-am
|
maintainer-clean: maintainer-clean-am
|
||||||
-rm -rf ./$(DEPDIR)
|
-rm -rf ./$(DEPDIR) os/$(DEPDIR)
|
||||||
-rm -f Makefile
|
-rm -f Makefile
|
||||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||||
|
|
||||||
|
@ -851,7 +905,7 @@ all: libusb-1.0.la libusb-1.0.dll
|
||||||
|
|
||||||
@OS_WINDOWS_TRUE@libusb-1.0.rc: version.h version_nano.h
|
@OS_WINDOWS_TRUE@libusb-1.0.rc: version.h version_nano.h
|
||||||
|
|
||||||
libusb-1.0.dll: libusb-1.0.def
|
libusb-1.0.dll: libusb-1.0.def libusb-1.0.la
|
||||||
# Rebuild the import lib from the .def so that MS and MinGW DLLs can be interchanged
|
# Rebuild the import lib from the .def so that MS and MinGW DLLs can be interchanged
|
||||||
@CREATE_IMPORT_LIB_TRUE@ $(AM_V_GEN)$(DLLTOOL) $(DLLTOOLFLAGS) --kill-at --input-def $(srcdir)/libusb-1.0.def --dllname $@ --output-lib .libs/$@.a
|
@CREATE_IMPORT_LIB_TRUE@ $(AM_V_GEN)$(DLLTOOL) $(DLLTOOLFLAGS) --kill-at --input-def $(srcdir)/libusb-1.0.def --dllname $@ --output-lib .libs/$@.a
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* -*- Mode: C; indent-tabs-mode:t ; c-basic-offset:8 -*- */
|
/* -*- Mode: C; indent-tabs-mode:t ; c-basic-offset:8 -*- */
|
||||||
/*
|
/*
|
||||||
* Core functions for libusbx
|
* Core functions for libusb
|
||||||
* Copyright © 2012-2013 Nathan Hjelm <hjelmn@cs.unm.edu>
|
* Copyright © 2012-2013 Nathan Hjelm <hjelmn@cs.unm.edu>
|
||||||
* Copyright © 2007-2008 Daniel Drake <dsd@gentoo.org>
|
* Copyright © 2007-2008 Daniel Drake <dsd@gentoo.org>
|
||||||
* Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
* Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
||||||
|
@ -33,6 +33,9 @@
|
||||||
#ifdef HAVE_SYS_TIME_H
|
#ifdef HAVE_SYS_TIME_H
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_SYSLOG_H
|
||||||
|
#include <syslog.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
#include <android/log.h>
|
#include <android/log.h>
|
||||||
|
@ -47,6 +50,8 @@ const struct usbi_os_backend * const usbi_backend = &linux_usbfs_backend;
|
||||||
const struct usbi_os_backend * const usbi_backend = &darwin_backend;
|
const struct usbi_os_backend * const usbi_backend = &darwin_backend;
|
||||||
#elif defined(OS_OPENBSD)
|
#elif defined(OS_OPENBSD)
|
||||||
const struct usbi_os_backend * const usbi_backend = &openbsd_backend;
|
const struct usbi_os_backend * const usbi_backend = &openbsd_backend;
|
||||||
|
#elif defined(OS_NETBSD)
|
||||||
|
const struct usbi_os_backend * const usbi_backend = &netbsd_backend;
|
||||||
#elif defined(OS_WINDOWS)
|
#elif defined(OS_WINDOWS)
|
||||||
const struct usbi_os_backend * const usbi_backend = &windows_backend;
|
const struct usbi_os_backend * const usbi_backend = &windows_backend;
|
||||||
#elif defined(OS_WINCE)
|
#elif defined(OS_WINCE)
|
||||||
|
@ -56,9 +61,9 @@ const struct usbi_os_backend * const usbi_backend = &wince_backend;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct libusb_context *usbi_default_context = NULL;
|
struct libusb_context *usbi_default_context = NULL;
|
||||||
const struct libusb_version libusb_version_internal =
|
static const struct libusb_version libusb_version_internal =
|
||||||
{ LIBUSB_MAJOR, LIBUSB_MINOR, LIBUSB_MICRO, LIBUSB_NANO,
|
{ LIBUSB_MAJOR, LIBUSB_MINOR, LIBUSB_MICRO, LIBUSB_NANO,
|
||||||
LIBUSB_RC, "http://libusbx.org" };
|
LIBUSB_RC, "http://libusb.info" };
|
||||||
static int default_context_refcnt = 0;
|
static int default_context_refcnt = 0;
|
||||||
static usbi_mutex_static_t default_context_lock = USBI_MUTEX_INITIALIZER;
|
static usbi_mutex_static_t default_context_lock = USBI_MUTEX_INITIALIZER;
|
||||||
static struct timeval timestamp_origin = { 0, 0 };
|
static struct timeval timestamp_origin = { 0, 0 };
|
||||||
|
@ -67,18 +72,18 @@ usbi_mutex_static_t active_contexts_lock = USBI_MUTEX_INITIALIZER;
|
||||||
struct list_head active_contexts_list;
|
struct list_head active_contexts_list;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \mainpage libusbx-1.0 API Reference
|
* \mainpage libusb-1.0 API Reference
|
||||||
*
|
*
|
||||||
* \section intro Introduction
|
* \section intro Introduction
|
||||||
*
|
*
|
||||||
* libusbx is an open source library that allows you to communicate with USB
|
* libusb is an open source library that allows you to communicate with USB
|
||||||
* devices from userspace. For more info, see the
|
* devices from userspace. For more info, see the
|
||||||
* <a href="http://libusbx.org">libusbx homepage</a>.
|
* <a href="http://libusb.info">libusb homepage</a>.
|
||||||
*
|
*
|
||||||
* This documentation is aimed at application developers wishing to
|
* This documentation is aimed at application developers wishing to
|
||||||
* communicate with USB peripherals from their own software. After reviewing
|
* communicate with USB peripherals from their own software. After reviewing
|
||||||
* this documentation, feedback and questions can be sent to the
|
* this documentation, feedback and questions can be sent to the
|
||||||
* <a href="http://mailing-list.libusbx.org">libusbx-devel mailing list</a>.
|
* <a href="http://mailing-list.libusb.info">libusb-devel mailing list</a>.
|
||||||
*
|
*
|
||||||
* This documentation assumes knowledge of how to operate USB devices from
|
* This documentation assumes knowledge of how to operate USB devices from
|
||||||
* a software standpoint (descriptors, configurations, interfaces, endpoints,
|
* a software standpoint (descriptors, configurations, interfaces, endpoints,
|
||||||
|
@ -102,25 +107,25 @@ struct list_head active_contexts_list;
|
||||||
* \section gettingstarted Getting Started
|
* \section gettingstarted Getting Started
|
||||||
*
|
*
|
||||||
* To begin reading the API documentation, start with the Modules page which
|
* To begin reading the API documentation, start with the Modules page which
|
||||||
* links to the different categories of libusbx's functionality.
|
* links to the different categories of libusb's functionality.
|
||||||
*
|
*
|
||||||
* One decision you will have to make is whether to use the synchronous
|
* One decision you will have to make is whether to use the synchronous
|
||||||
* or the asynchronous data transfer interface. The \ref io documentation
|
* or the asynchronous data transfer interface. The \ref io documentation
|
||||||
* provides some insight into this topic.
|
* provides some insight into this topic.
|
||||||
*
|
*
|
||||||
* Some example programs can be found in the libusbx source distribution under
|
* Some example programs can be found in the libusb source distribution under
|
||||||
* the "examples" subdirectory. The libusbx homepage includes a list of
|
* the "examples" subdirectory. The libusb homepage includes a list of
|
||||||
* real-life project examples which use libusbx.
|
* real-life project examples which use libusb.
|
||||||
*
|
*
|
||||||
* \section errorhandling Error handling
|
* \section errorhandling Error handling
|
||||||
*
|
*
|
||||||
* libusbx functions typically return 0 on success or a negative error code
|
* libusb functions typically return 0 on success or a negative error code
|
||||||
* on failure. These negative error codes relate to LIBUSB_ERROR constants
|
* on failure. These negative error codes relate to LIBUSB_ERROR constants
|
||||||
* which are listed on the \ref misc "miscellaneous" documentation page.
|
* which are listed on the \ref misc "miscellaneous" documentation page.
|
||||||
*
|
*
|
||||||
* \section msglog Debug message logging
|
* \section msglog Debug message logging
|
||||||
*
|
*
|
||||||
* libusbx uses stderr for all logging. By default, logging is set to NONE,
|
* libusb uses stderr for all logging. By default, logging is set to NONE,
|
||||||
* which means that no output will be produced. However, unless the library
|
* which means that no output will be produced. However, unless the library
|
||||||
* has been compiled with logging disabled, then any application calls to
|
* has been compiled with logging disabled, then any application calls to
|
||||||
* libusb_set_debug(), or the setting of the environmental variable
|
* libusb_set_debug(), or the setting of the environmental variable
|
||||||
|
@ -129,19 +134,19 @@ struct list_head active_contexts_list;
|
||||||
* direct it to the null device if its output is undesireable.
|
* direct it to the null device if its output is undesireable.
|
||||||
*
|
*
|
||||||
* The libusb_set_debug() function can be used to enable logging of certain
|
* The libusb_set_debug() function can be used to enable logging of certain
|
||||||
* messages. Under standard configuration, libusbx doesn't really log much
|
* messages. Under standard configuration, libusb doesn't really log much
|
||||||
* so you are advised to use this function to enable all error/warning/
|
* so you are advised to use this function to enable all error/warning/
|
||||||
* informational messages. It will help debug problems with your software.
|
* informational messages. It will help debug problems with your software.
|
||||||
*
|
*
|
||||||
* The logged messages are unstructured. There is no one-to-one correspondence
|
* The logged messages are unstructured. There is no one-to-one correspondence
|
||||||
* between messages being logged and success or failure return codes from
|
* between messages being logged and success or failure return codes from
|
||||||
* libusbx functions. There is no format to the messages, so you should not
|
* libusb functions. There is no format to the messages, so you should not
|
||||||
* try to capture or parse them. They are not and will not be localized.
|
* try to capture or parse them. They are not and will not be localized.
|
||||||
* These messages are not intended to being passed to your application user;
|
* These messages are not intended to being passed to your application user;
|
||||||
* instead, you should interpret the error codes returned from libusbx functions
|
* instead, you should interpret the error codes returned from libusb functions
|
||||||
* and provide appropriate notification to the user. The messages are simply
|
* and provide appropriate notification to the user. The messages are simply
|
||||||
* there to aid you as a programmer, and if you're confused because you're
|
* there to aid you as a programmer, and if you're confused because you're
|
||||||
* getting a strange error code from a libusbx function, enabling message
|
* getting a strange error code from a libusb function, enabling message
|
||||||
* logging may give you a suitable explanation.
|
* logging may give you a suitable explanation.
|
||||||
*
|
*
|
||||||
* The LIBUSB_DEBUG environment variable can be used to enable message logging
|
* The LIBUSB_DEBUG environment variable can be used to enable message logging
|
||||||
|
@ -150,18 +155,18 @@ struct list_head active_contexts_list;
|
||||||
* environment variable is set, the message logging verbosity level is fixed
|
* environment variable is set, the message logging verbosity level is fixed
|
||||||
* and libusb_set_debug() effectively does nothing.
|
* and libusb_set_debug() effectively does nothing.
|
||||||
*
|
*
|
||||||
* libusbx can be compiled without any logging functions, useful for embedded
|
* libusb can be compiled without any logging functions, useful for embedded
|
||||||
* systems. In this case, libusb_set_debug() and the LIBUSB_DEBUG environment
|
* systems. In this case, libusb_set_debug() and the LIBUSB_DEBUG environment
|
||||||
* variable have no effects.
|
* variable have no effects.
|
||||||
*
|
*
|
||||||
* libusbx can also be compiled with verbose debugging messages always. When
|
* libusb can also be compiled with verbose debugging messages always. When
|
||||||
* the library is compiled in this way, all messages of all verbosities are
|
* the library is compiled in this way, all messages of all verbosities are
|
||||||
* always logged. libusb_set_debug() and the LIBUSB_DEBUG environment variable
|
* always logged. libusb_set_debug() and the LIBUSB_DEBUG environment variable
|
||||||
* have no effects.
|
* have no effects.
|
||||||
*
|
*
|
||||||
* \section remarks Other remarks
|
* \section remarks Other remarks
|
||||||
*
|
*
|
||||||
* libusbx does have imperfections. The \ref caveats "caveats" page attempts
|
* libusb does have imperfections. The \ref caveats "caveats" page attempts
|
||||||
* to document these.
|
* to document these.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -176,7 +181,7 @@ struct list_head active_contexts_list;
|
||||||
* reset).
|
* reset).
|
||||||
*
|
*
|
||||||
* The problem is that any other program could reset the device your program
|
* The problem is that any other program could reset the device your program
|
||||||
* is working with, at any time. libusbx does not offer a mechanism to inform
|
* is working with, at any time. libusb does not offer a mechanism to inform
|
||||||
* you when this has happened, so if someone else resets your device it will
|
* you when this has happened, so if someone else resets your device it will
|
||||||
* not be clear to your own program why the device state has changed.
|
* not be clear to your own program why the device state has changed.
|
||||||
*
|
*
|
||||||
|
@ -201,7 +206,7 @@ struct list_head active_contexts_list;
|
||||||
*
|
*
|
||||||
* \section configsel Configuration selection and handling
|
* \section configsel Configuration selection and handling
|
||||||
*
|
*
|
||||||
* When libusbx presents a device handle to an application, there is a chance
|
* When libusb presents a device handle to an application, there is a chance
|
||||||
* that the corresponding device may be in unconfigured state. For devices
|
* that the corresponding device may be in unconfigured state. For devices
|
||||||
* with multiple configurations, there is also a chance that the configuration
|
* with multiple configurations, there is also a chance that the configuration
|
||||||
* currently selected is not the one that the application wants to use.
|
* currently selected is not the one that the application wants to use.
|
||||||
|
@ -212,13 +217,13 @@ struct list_head active_contexts_list;
|
||||||
* -# If the device is already in the desired configuration, calling
|
* -# If the device is already in the desired configuration, calling
|
||||||
* libusb_set_configuration() using the same configuration value will cause
|
* libusb_set_configuration() using the same configuration value will cause
|
||||||
* a lightweight device reset. This may not be desirable behaviour.
|
* a lightweight device reset. This may not be desirable behaviour.
|
||||||
* -# libusbx will be unable to change configuration if the device is in
|
* -# libusb will be unable to change configuration if the device is in
|
||||||
* another configuration and other programs or drivers have claimed
|
* another configuration and other programs or drivers have claimed
|
||||||
* interfaces under that configuration.
|
* interfaces under that configuration.
|
||||||
* -# In the case where the desired configuration is already active, libusbx
|
* -# In the case where the desired configuration is already active, libusb
|
||||||
* may not even be able to perform a lightweight device reset. For example,
|
* may not even be able to perform a lightweight device reset. For example,
|
||||||
* take my USB keyboard with fingerprint reader: I'm interested in driving
|
* take my USB keyboard with fingerprint reader: I'm interested in driving
|
||||||
* the fingerprint reader interface through libusbx, but the kernel's
|
* the fingerprint reader interface through libusb, but the kernel's
|
||||||
* USB-HID driver will almost always have claimed the keyboard interface.
|
* USB-HID driver will almost always have claimed the keyboard interface.
|
||||||
* Because the kernel has claimed an interface, it is not even possible to
|
* Because the kernel has claimed an interface, it is not even possible to
|
||||||
* perform the lightweight device reset, so libusb_set_configuration() will
|
* perform the lightweight device reset, so libusb_set_configuration() will
|
||||||
|
@ -258,13 +263,13 @@ if (cfg != desired)
|
||||||
* considerations apply to Darwin or other platforms.
|
* considerations apply to Darwin or other platforms.
|
||||||
*
|
*
|
||||||
* When a transfer completes early (i.e. when less data is received/sent in
|
* When a transfer completes early (i.e. when less data is received/sent in
|
||||||
* any one packet than the transfer buffer allows for) then libusbx is designed
|
* any one packet than the transfer buffer allows for) then libusb is designed
|
||||||
* to terminate the transfer immediately, not transferring or receiving any
|
* to terminate the transfer immediately, not transferring or receiving any
|
||||||
* more data unless other transfers have been queued by the user.
|
* more data unless other transfers have been queued by the user.
|
||||||
*
|
*
|
||||||
* On legacy platforms, libusbx is unable to do this in all situations. After
|
* On legacy platforms, libusb is unable to do this in all situations. After
|
||||||
* the incomplete packet occurs, "surplus" data may be transferred. For recent
|
* the incomplete packet occurs, "surplus" data may be transferred. For recent
|
||||||
* versions of libusbx, this information is kept (the data length of the
|
* versions of libusb, this information is kept (the data length of the
|
||||||
* transfer is updated) and, for device-to-host transfers, any surplus data was
|
* transfer is updated) and, for device-to-host transfers, any surplus data was
|
||||||
* added to the buffer. Still, this is not a nice solution because it loses the
|
* added to the buffer. Still, this is not a nice solution because it loses the
|
||||||
* information about the end of the short packet, and the user probably wanted
|
* information about the end of the short packet, and the user probably wanted
|
||||||
|
@ -273,7 +278,7 @@ if (cfg != desired)
|
||||||
*
|
*
|
||||||
* \section zlp Zero length packets
|
* \section zlp Zero length packets
|
||||||
*
|
*
|
||||||
* - libusbx is able to send a packet of zero length to an endpoint simply by
|
* - libusb is able to send a packet of zero length to an endpoint simply by
|
||||||
* submitting a transfer of zero length.
|
* submitting a transfer of zero length.
|
||||||
* - The \ref libusb_transfer_flags::LIBUSB_TRANSFER_ADD_ZERO_PACKET
|
* - The \ref libusb_transfer_flags::LIBUSB_TRANSFER_ADD_ZERO_PACKET
|
||||||
* "LIBUSB_TRANSFER_ADD_ZERO_PACKET" flag is currently only supported on Linux.
|
* "LIBUSB_TRANSFER_ADD_ZERO_PACKET" flag is currently only supported on Linux.
|
||||||
|
@ -282,24 +287,24 @@ if (cfg != desired)
|
||||||
/**
|
/**
|
||||||
* \page contexts Contexts
|
* \page contexts Contexts
|
||||||
*
|
*
|
||||||
* It is possible that libusbx may be used simultaneously from two independent
|
* It is possible that libusb may be used simultaneously from two independent
|
||||||
* libraries linked into the same executable. For example, if your application
|
* libraries linked into the same executable. For example, if your application
|
||||||
* has a plugin-like system which allows the user to dynamically load a range
|
* has a plugin-like system which allows the user to dynamically load a range
|
||||||
* of modules into your program, it is feasible that two independently
|
* of modules into your program, it is feasible that two independently
|
||||||
* developed modules may both use libusbx.
|
* developed modules may both use libusb.
|
||||||
*
|
*
|
||||||
* libusbx is written to allow for these multiple user scenarios. The two
|
* libusb is written to allow for these multiple user scenarios. The two
|
||||||
* "instances" of libusbx will not interfere: libusb_set_debug() calls
|
* "instances" of libusb will not interfere: libusb_set_debug() calls
|
||||||
* from one user will not affect the same settings for other users, other
|
* from one user will not affect the same settings for other users, other
|
||||||
* users can continue using libusbx after one of them calls libusb_exit(), etc.
|
* users can continue using libusb after one of them calls libusb_exit(), etc.
|
||||||
*
|
*
|
||||||
* This is made possible through libusbx's <em>context</em> concept. When you
|
* This is made possible through libusb's <em>context</em> concept. When you
|
||||||
* call libusb_init(), you are (optionally) given a context. You can then pass
|
* call libusb_init(), you are (optionally) given a context. You can then pass
|
||||||
* this context pointer back into future libusbx functions.
|
* this context pointer back into future libusb functions.
|
||||||
*
|
*
|
||||||
* In order to keep things simple for more simplistic applications, it is
|
* In order to keep things simple for more simplistic applications, it is
|
||||||
* legal to pass NULL to all functions requiring a context pointer (as long as
|
* legal to pass NULL to all functions requiring a context pointer (as long as
|
||||||
* you're sure no other code will attempt to use libusbx from the same process).
|
* you're sure no other code will attempt to use libusb from the same process).
|
||||||
* When you pass NULL, the default context will be used. The default context
|
* When you pass NULL, the default context will be used. The default context
|
||||||
* is created the first time a process calls libusb_init() when no other
|
* is created the first time a process calls libusb_init() when no other
|
||||||
* context is alive. Contexts are destroyed during libusb_exit().
|
* context is alive. Contexts are destroyed during libusb_exit().
|
||||||
|
@ -312,17 +317,17 @@ if (cfg != desired)
|
||||||
* reference count goes from 0 to 1, and is deinitialized and destroyed when
|
* reference count goes from 0 to 1, and is deinitialized and destroyed when
|
||||||
* its reference count goes from 1 to 0.
|
* its reference count goes from 1 to 0.
|
||||||
*
|
*
|
||||||
* You may be wondering why only a subset of libusbx functions require a
|
* You may be wondering why only a subset of libusb functions require a
|
||||||
* context pointer in their function definition. Internally, libusbx stores
|
* context pointer in their function definition. Internally, libusb stores
|
||||||
* context pointers in other objects (e.g. libusb_device instances) and hence
|
* context pointers in other objects (e.g. libusb_device instances) and hence
|
||||||
* can infer the context from those objects.
|
* can infer the context from those objects.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @defgroup lib Library initialization/deinitialization
|
* @defgroup lib Library initialization/deinitialization
|
||||||
* This page details how to initialize and deinitialize libusbx. Initialization
|
* This page details how to initialize and deinitialize libusb. Initialization
|
||||||
* must be performed before using any libusbx functionality, and similarly you
|
* must be performed before using any libusb functionality, and similarly you
|
||||||
* must not call any libusbx functions after deinitialization.
|
* must not call any libusb functions after deinitialization.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -379,7 +384,7 @@ libusb_free_device_list(list, 1);
|
||||||
* device.
|
* device.
|
||||||
*
|
*
|
||||||
* \section devshandles Devices and device handles
|
* \section devshandles Devices and device handles
|
||||||
* libusbx has a concept of a USB device, represented by the
|
* libusb has a concept of a USB device, represented by the
|
||||||
* \ref libusb_device opaque type. A device represents a USB device that
|
* \ref libusb_device opaque type. A device represents a USB device that
|
||||||
* is currently or was previously connected to the system. Using a reference
|
* is currently or was previously connected to the system. Using a reference
|
||||||
* to a device, you can determine certain information about the device (e.g.
|
* to a device, you can determine certain information about the device (e.g.
|
||||||
|
@ -395,8 +400,8 @@ libusb_free_device_list(list, 1);
|
||||||
* using the device.
|
* using the device.
|
||||||
*
|
*
|
||||||
* When you've found a device that you'd like to operate, you must ask
|
* When you've found a device that you'd like to operate, you must ask
|
||||||
* libusbx to open the device using the libusb_open() function. Assuming
|
* libusb to open the device using the libusb_open() function. Assuming
|
||||||
* success, libusbx then returns you a <em>device handle</em>
|
* success, libusb then returns you a <em>device handle</em>
|
||||||
* (a \ref libusb_device_handle pointer). All "real" I/O operations then
|
* (a \ref libusb_device_handle pointer). All "real" I/O operations then
|
||||||
* operate on the handle rather than the original device pointer.
|
* operate on the handle rather than the original device pointer.
|
||||||
*
|
*
|
||||||
|
@ -404,10 +409,10 @@ libusb_free_device_list(list, 1);
|
||||||
*
|
*
|
||||||
* Device discovery (i.e. calling libusb_get_device_list()) returns a
|
* Device discovery (i.e. calling libusb_get_device_list()) returns a
|
||||||
* freshly-allocated list of devices. The list itself must be freed when
|
* freshly-allocated list of devices. The list itself must be freed when
|
||||||
* you are done with it. libusbx also needs to know when it is OK to free
|
* you are done with it. libusb also needs to know when it is OK to free
|
||||||
* the contents of the list - the devices themselves.
|
* the contents of the list - the devices themselves.
|
||||||
*
|
*
|
||||||
* To handle these issues, libusbx provides you with two separate items:
|
* To handle these issues, libusb provides you with two separate items:
|
||||||
* - A function to free the list itself
|
* - A function to free the list itself
|
||||||
* - A reference counting system for the devices inside
|
* - A reference counting system for the devices inside
|
||||||
*
|
*
|
||||||
|
@ -564,6 +569,10 @@ void usbi_disconnect_device(struct libusb_device *dev)
|
||||||
dev->attached = 0;
|
dev->attached = 0;
|
||||||
usbi_mutex_unlock(&dev->lock);
|
usbi_mutex_unlock(&dev->lock);
|
||||||
|
|
||||||
|
usbi_mutex_lock(&ctx->usb_devs_lock);
|
||||||
|
list_del(&dev->list);
|
||||||
|
usbi_mutex_unlock(&ctx->usb_devs_lock);
|
||||||
|
|
||||||
/* Signal that an event has occurred for this device if we support hotplug AND
|
/* Signal that an event has occurred for this device if we support hotplug AND
|
||||||
* the hotplug pipe is ready. This prevents an event from getting raised during
|
* the hotplug pipe is ready. This prevents an event from getting raised during
|
||||||
* initial enumeration. libusb_handle_events will take care of dereferencing the
|
* initial enumeration. libusb_handle_events will take care of dereferencing the
|
||||||
|
@ -574,10 +583,6 @@ void usbi_disconnect_device(struct libusb_device *dev)
|
||||||
usbi_err(DEVICE_CTX(dev), "error writing hotplug message");
|
usbi_err(DEVICE_CTX(dev), "error writing hotplug message");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
usbi_mutex_lock(&ctx->usb_devs_lock);
|
|
||||||
list_del(&dev->list);
|
|
||||||
usbi_mutex_unlock(&ctx->usb_devs_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Perform some final sanity checks on a newly discovered device. If this
|
/* Perform some final sanity checks on a newly discovered device. If this
|
||||||
|
@ -603,7 +608,7 @@ int usbi_sanitize_device(struct libusb_device *dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Examine libusbx's internal list of known devices, looking for one with
|
/* Examine libusb's internal list of known devices, looking for one with
|
||||||
* a specific session ID. Returns the matching device if it was found, and
|
* a specific session ID. Returns the matching device if it was found, and
|
||||||
* NULL otherwise. */
|
* NULL otherwise. */
|
||||||
struct libusb_device *usbi_get_device_by_session_id(struct libusb_context *ctx,
|
struct libusb_device *usbi_get_device_by_session_id(struct libusb_context *ctx,
|
||||||
|
@ -615,7 +620,7 @@ struct libusb_device *usbi_get_device_by_session_id(struct libusb_context *ctx,
|
||||||
usbi_mutex_lock(&ctx->usb_devs_lock);
|
usbi_mutex_lock(&ctx->usb_devs_lock);
|
||||||
list_for_each_entry(dev, &ctx->usb_devs, list, struct libusb_device)
|
list_for_each_entry(dev, &ctx->usb_devs, list, struct libusb_device)
|
||||||
if (dev->session_data == session_id) {
|
if (dev->session_data == session_id) {
|
||||||
ret = dev;
|
ret = libusb_ref_device(dev);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
usbi_mutex_unlock(&ctx->usb_devs_lock);
|
usbi_mutex_unlock(&ctx->usb_devs_lock);
|
||||||
|
@ -758,7 +763,7 @@ uint8_t API_EXPORTED libusb_get_port_number(libusb_device *dev)
|
||||||
/** \ingroup dev
|
/** \ingroup dev
|
||||||
* Get the list of all port numbers from root for the specified device
|
* Get the list of all port numbers from root for the specified device
|
||||||
*
|
*
|
||||||
* Since version 1.0.16, \ref LIBUSBX_API_VERSION >= 0x01000102
|
* Since version 1.0.16, \ref LIBUSB_API_VERSION >= 0x01000102
|
||||||
* \param dev a device
|
* \param dev a device
|
||||||
* \param port_numbers the array that should contain the port numbers
|
* \param port_numbers the array that should contain the port numbers
|
||||||
* \param port_numbers_len the maximum length of the array. As per the USB 3.0
|
* \param port_numbers_len the maximum length of the array. As per the USB 3.0
|
||||||
|
@ -770,22 +775,22 @@ int API_EXPORTED libusb_get_port_numbers(libusb_device *dev,
|
||||||
uint8_t* port_numbers, int port_numbers_len)
|
uint8_t* port_numbers, int port_numbers_len)
|
||||||
{
|
{
|
||||||
int i = port_numbers_len;
|
int i = port_numbers_len;
|
||||||
|
struct libusb_context *ctx = DEVICE_CTX(dev);
|
||||||
|
|
||||||
while(dev) {
|
if (port_numbers_len <= 0)
|
||||||
// HCDs can be listed as devices and would have port #0
|
return LIBUSB_ERROR_INVALID_PARAM;
|
||||||
// TODO: see how the other backends want to implement HCDs as parents
|
|
||||||
if (dev->port_number == 0)
|
// HCDs can be listed as devices with port #0
|
||||||
break;
|
while((dev) && (dev->port_number != 0)) {
|
||||||
i--;
|
if (--i < 0) {
|
||||||
if (i < 0) {
|
usbi_warn(ctx, "port numbers array is too small");
|
||||||
usbi_warn(DEVICE_CTX(dev),
|
|
||||||
"port numbers array too small");
|
|
||||||
return LIBUSB_ERROR_OVERFLOW;
|
return LIBUSB_ERROR_OVERFLOW;
|
||||||
}
|
}
|
||||||
port_numbers[i] = dev->port_number;
|
port_numbers[i] = dev->port_number;
|
||||||
dev = dev->parent_dev;
|
dev = dev->parent_dev;
|
||||||
}
|
}
|
||||||
memmove(port_numbers, &port_numbers[i], port_numbers_len - i);
|
if (i < port_numbers_len)
|
||||||
|
memmove(port_numbers, &port_numbers[i], port_numbers_len - i);
|
||||||
return port_numbers_len - i;
|
return port_numbers_len - i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -806,7 +811,7 @@ int API_EXPORTED libusb_get_port_path(libusb_context *ctx, libusb_device *dev,
|
||||||
* \returns the device parent or NULL if not available
|
* \returns the device parent or NULL if not available
|
||||||
* You should issue a \ref libusb_get_device_list() before calling this
|
* You should issue a \ref libusb_get_device_list() before calling this
|
||||||
* function and make sure that you only access the parent before issuing
|
* function and make sure that you only access the parent before issuing
|
||||||
* \ref libusb_free_device_list(). The reason is that libusbx currently does
|
* \ref libusb_free_device_list(). The reason is that libusb currently does
|
||||||
* not maintain a permanent list of device instances, and therefore can
|
* not maintain a permanent list of device instances, and therefore can
|
||||||
* only guarantee that parents are fully instantiated within a
|
* only guarantee that parents are fully instantiated within a
|
||||||
* libusb_get_device_list() - libusb_free_device_list() block.
|
* libusb_get_device_list() - libusb_free_device_list() block.
|
||||||
|
@ -894,10 +899,14 @@ int API_EXPORTED libusb_get_max_packet_size(libusb_device *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
ep = find_endpoint(config, endpoint);
|
ep = find_endpoint(config, endpoint);
|
||||||
if (!ep)
|
if (!ep) {
|
||||||
return LIBUSB_ERROR_NOT_FOUND;
|
r = LIBUSB_ERROR_NOT_FOUND;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
r = ep->wMaxPacketSize;
|
r = ep->wMaxPacketSize;
|
||||||
|
|
||||||
|
out:
|
||||||
libusb_free_config_descriptor(config);
|
libusb_free_config_descriptor(config);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -945,17 +954,21 @@ int API_EXPORTED libusb_get_max_iso_packet_size(libusb_device *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
ep = find_endpoint(config, endpoint);
|
ep = find_endpoint(config, endpoint);
|
||||||
if (!ep)
|
if (!ep) {
|
||||||
return LIBUSB_ERROR_NOT_FOUND;
|
r = LIBUSB_ERROR_NOT_FOUND;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
val = ep->wMaxPacketSize;
|
val = ep->wMaxPacketSize;
|
||||||
ep_type = (enum libusb_transfer_type) (ep->bmAttributes & 0x3);
|
ep_type = (enum libusb_transfer_type) (ep->bmAttributes & 0x3);
|
||||||
libusb_free_config_descriptor(config);
|
|
||||||
|
|
||||||
r = val & 0x07ff;
|
r = val & 0x07ff;
|
||||||
if (ep_type == LIBUSB_TRANSFER_TYPE_ISOCHRONOUS
|
if (ep_type == LIBUSB_TRANSFER_TYPE_ISOCHRONOUS
|
||||||
|| ep_type == LIBUSB_TRANSFER_TYPE_INTERRUPT)
|
|| ep_type == LIBUSB_TRANSFER_TYPE_INTERRUPT)
|
||||||
r *= (1 + ((val >> 11) & 3));
|
r *= (1 + ((val >> 11) & 3));
|
||||||
|
|
||||||
|
out:
|
||||||
|
libusb_free_config_descriptor(config);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1115,7 +1128,7 @@ int API_EXPORTED libusb_open(libusb_device *dev,
|
||||||
/* At this point, we want to interrupt any existing event handlers so
|
/* At this point, we want to interrupt any existing event handlers so
|
||||||
* that they realise the addition of the new device's poll fd. One
|
* that they realise the addition of the new device's poll fd. One
|
||||||
* example when this is desirable is if the user is running a separate
|
* example when this is desirable is if the user is running a separate
|
||||||
* dedicated libusbx events handling thread, which is running with a long
|
* dedicated libusb events handling thread, which is running with a long
|
||||||
* or infinite timeout. We want to interrupt that iteration of the loop,
|
* or infinite timeout. We want to interrupt that iteration of the loop,
|
||||||
* so that it picks up the new fd, and then continues. */
|
* so that it picks up the new fd, and then continues. */
|
||||||
usbi_fd_notification(ctx);
|
usbi_fd_notification(ctx);
|
||||||
|
@ -1126,7 +1139,7 @@ int API_EXPORTED libusb_open(libusb_device *dev,
|
||||||
/** \ingroup dev
|
/** \ingroup dev
|
||||||
* Convenience function for finding a device with a particular
|
* Convenience function for finding a device with a particular
|
||||||
* <tt>idVendor</tt>/<tt>idProduct</tt> combination. This function is intended
|
* <tt>idVendor</tt>/<tt>idProduct</tt> combination. This function is intended
|
||||||
* for those scenarios where you are using libusbx to knock up a quick test
|
* for those scenarios where you are using libusb to knock up a quick test
|
||||||
* application - it allows you to avoid calling libusb_get_device_list() and
|
* application - it allows you to avoid calling libusb_get_device_list() and
|
||||||
* worrying about traversing/freeing the list.
|
* worrying about traversing/freeing the list.
|
||||||
*
|
*
|
||||||
|
@ -1420,7 +1433,7 @@ int API_EXPORTED libusb_set_configuration(libusb_device_handle *dev,
|
||||||
* you wish to use before you can perform I/O on any of its endpoints.
|
* you wish to use before you can perform I/O on any of its endpoints.
|
||||||
*
|
*
|
||||||
* It is legal to attempt to claim an already-claimed interface, in which
|
* It is legal to attempt to claim an already-claimed interface, in which
|
||||||
* case libusbx just returns 0 without doing anything.
|
* case libusb just returns 0 without doing anything.
|
||||||
*
|
*
|
||||||
* If auto_detach_kernel_driver is set to 1 for <tt>dev</tt>, the kernel driver
|
* If auto_detach_kernel_driver is set to 1 for <tt>dev</tt>, the kernel driver
|
||||||
* will be detached if necessary, on failure the detach error is returned.
|
* will be detached if necessary, on failure the detach error is returned.
|
||||||
|
@ -1610,9 +1623,72 @@ int API_EXPORTED libusb_reset_device(libusb_device_handle *dev)
|
||||||
return usbi_backend->reset_device(dev);
|
return usbi_backend->reset_device(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** \ingroup asyncio
|
||||||
|
* Allocate up to num_streams usb bulk streams on the specified endpoints. This
|
||||||
|
* function takes an array of endpoints rather then a single endpoint because
|
||||||
|
* some protocols require that endpoints are setup with similar stream ids.
|
||||||
|
* All endpoints passed in must belong to the same interface.
|
||||||
|
*
|
||||||
|
* Note this function may return less streams then requested. Also note that the
|
||||||
|
* same number of streams are allocated for each endpoint in the endpoint array.
|
||||||
|
*
|
||||||
|
* Stream id 0 is reserved, and should not be used to communicate with devices.
|
||||||
|
* If libusb_alloc_streams() returns with a value of N, you may use stream ids
|
||||||
|
* 1 to N.
|
||||||
|
*
|
||||||
|
* Since version 1.0.19, \ref LIBUSB_API_VERSION >= 0x01000103
|
||||||
|
*
|
||||||
|
* \param dev a device handle
|
||||||
|
* \param num_streams number of streams to try to allocate
|
||||||
|
* \param endpoints array of endpoints to allocate streams on
|
||||||
|
* \param num_endpoints length of the endpoints array
|
||||||
|
* \returns number of streams allocated, or a LIBUSB_ERROR code on failure
|
||||||
|
*/
|
||||||
|
int API_EXPORTED libusb_alloc_streams(libusb_device_handle *dev,
|
||||||
|
uint32_t num_streams, unsigned char *endpoints, int num_endpoints)
|
||||||
|
{
|
||||||
|
usbi_dbg("streams %u eps %d", (unsigned) num_streams, num_endpoints);
|
||||||
|
|
||||||
|
if (!dev->dev->attached)
|
||||||
|
return LIBUSB_ERROR_NO_DEVICE;
|
||||||
|
|
||||||
|
if (usbi_backend->alloc_streams)
|
||||||
|
return usbi_backend->alloc_streams(dev, num_streams, endpoints,
|
||||||
|
num_endpoints);
|
||||||
|
else
|
||||||
|
return LIBUSB_ERROR_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** \ingroup asyncio
|
||||||
|
* Free usb bulk streams allocated with libusb_alloc_streams().
|
||||||
|
*
|
||||||
|
* Note streams are automatically free-ed when releasing an interface.
|
||||||
|
*
|
||||||
|
* Since version 1.0.19, \ref LIBUSB_API_VERSION >= 0x01000103
|
||||||
|
*
|
||||||
|
* \param dev a device handle
|
||||||
|
* \param endpoints array of endpoints to free streams on
|
||||||
|
* \param num_endpoints length of the endpoints array
|
||||||
|
* \returns LIBUSB_SUCCESS, or a LIBUSB_ERROR code on failure
|
||||||
|
*/
|
||||||
|
int API_EXPORTED libusb_free_streams(libusb_device_handle *dev,
|
||||||
|
unsigned char *endpoints, int num_endpoints)
|
||||||
|
{
|
||||||
|
usbi_dbg("eps %d", num_endpoints);
|
||||||
|
|
||||||
|
if (!dev->dev->attached)
|
||||||
|
return LIBUSB_ERROR_NO_DEVICE;
|
||||||
|
|
||||||
|
if (usbi_backend->free_streams)
|
||||||
|
return usbi_backend->free_streams(dev, endpoints,
|
||||||
|
num_endpoints);
|
||||||
|
else
|
||||||
|
return LIBUSB_ERROR_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
/** \ingroup dev
|
/** \ingroup dev
|
||||||
* Determine if a kernel driver is active on an interface. If a kernel driver
|
* Determine if a kernel driver is active on an interface. If a kernel driver
|
||||||
* is active, you cannot claim the interface, and libusbx will be unable to
|
* is active, you cannot claim the interface, and libusb will be unable to
|
||||||
* perform I/O.
|
* perform I/O.
|
||||||
*
|
*
|
||||||
* This functionality is not available on Windows.
|
* This functionality is not available on Windows.
|
||||||
|
@ -1647,7 +1723,7 @@ int API_EXPORTED libusb_kernel_driver_active(libusb_device_handle *dev,
|
||||||
*
|
*
|
||||||
* This functionality is not available on Darwin or Windows.
|
* This functionality is not available on Darwin or Windows.
|
||||||
*
|
*
|
||||||
* Note that libusbx itself also talks to the device through a special kernel
|
* Note that libusb itself also talks to the device through a special kernel
|
||||||
* driver, if this driver is already attached to the device, this call will
|
* driver, if this driver is already attached to the device, this call will
|
||||||
* not detach it and return LIBUSB_ERROR_NOT_FOUND.
|
* not detach it and return LIBUSB_ERROR_NOT_FOUND.
|
||||||
*
|
*
|
||||||
|
@ -1711,15 +1787,15 @@ int API_EXPORTED libusb_attach_kernel_driver(libusb_device_handle *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
/** \ingroup dev
|
/** \ingroup dev
|
||||||
* Enable/disable libusbx's automatic kernel driver detachment. When this is
|
* Enable/disable libusb's automatic kernel driver detachment. When this is
|
||||||
* enabled libusbx will automatically detach the kernel driver on an interface
|
* enabled libusb will automatically detach the kernel driver on an interface
|
||||||
* when claiming the interface, and attach it when releasing the interface.
|
* when claiming the interface, and attach it when releasing the interface.
|
||||||
*
|
*
|
||||||
* Automatic kernel driver detachment is disabled on newly opened device
|
* Automatic kernel driver detachment is disabled on newly opened device
|
||||||
* handles by default.
|
* handles by default.
|
||||||
*
|
*
|
||||||
* On platforms which do not have LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER
|
* On platforms which do not have LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER
|
||||||
* this function will return LIBUSB_ERROR_NOT_SUPPORTED, and libusbx will
|
* this function will return LIBUSB_ERROR_NOT_SUPPORTED, and libusb will
|
||||||
* continue as if this function was never called.
|
* continue as if this function was never called.
|
||||||
*
|
*
|
||||||
* \param dev a device handle
|
* \param dev a device handle
|
||||||
|
@ -1749,19 +1825,19 @@ int API_EXPORTED libusb_set_auto_detach_kernel_driver(
|
||||||
* printed. If you choose to increase the message verbosity level, ensure
|
* printed. If you choose to increase the message verbosity level, ensure
|
||||||
* that your application does not close the stdout/stderr file descriptors.
|
* that your application does not close the stdout/stderr file descriptors.
|
||||||
*
|
*
|
||||||
* You are advised to use level LIBUSB_LOG_LEVEL_WARNING. libusbx is conservative
|
* You are advised to use level LIBUSB_LOG_LEVEL_WARNING. libusb is conservative
|
||||||
* with its message logging and most of the time, will only log messages that
|
* with its message logging and most of the time, will only log messages that
|
||||||
* explain error conditions and other oddities. This will help you debug
|
* explain error conditions and other oddities. This will help you debug
|
||||||
* your software.
|
* your software.
|
||||||
*
|
*
|
||||||
* If the LIBUSB_DEBUG environment variable was set when libusbx was
|
* If the LIBUSB_DEBUG environment variable was set when libusb was
|
||||||
* initialized, this function does nothing: the message verbosity is fixed
|
* initialized, this function does nothing: the message verbosity is fixed
|
||||||
* to the value in the environment variable.
|
* to the value in the environment variable.
|
||||||
*
|
*
|
||||||
* If libusbx was compiled without any message logging, this function does
|
* If libusb was compiled without any message logging, this function does
|
||||||
* nothing: you'll never get any messages.
|
* nothing: you'll never get any messages.
|
||||||
*
|
*
|
||||||
* If libusbx was compiled with verbose debug message logging, this function
|
* If libusb was compiled with verbose debug message logging, this function
|
||||||
* does nothing: you'll always get messages from all levels.
|
* does nothing: you'll always get messages from all levels.
|
||||||
*
|
*
|
||||||
* \param ctx the context to operate on, or NULL for the default context
|
* \param ctx the context to operate on, or NULL for the default context
|
||||||
|
@ -1776,7 +1852,7 @@ void API_EXPORTED libusb_set_debug(libusb_context *ctx, int level)
|
||||||
|
|
||||||
/** \ingroup lib
|
/** \ingroup lib
|
||||||
* Initialize libusb. This function must be called before calling any other
|
* Initialize libusb. This function must be called before calling any other
|
||||||
* libusbx function.
|
* libusb function.
|
||||||
*
|
*
|
||||||
* If you do not provide an output location for a context pointer, a default
|
* If you do not provide an output location for a context pointer, a default
|
||||||
* context will be created. If there was already a default context, it will
|
* context will be created. If there was already a default context, it will
|
||||||
|
@ -1831,7 +1907,7 @@ int API_EXPORTED libusb_init(libusb_context **context)
|
||||||
usbi_dbg("created default context");
|
usbi_dbg("created default context");
|
||||||
}
|
}
|
||||||
|
|
||||||
usbi_dbg("libusbx v%d.%d.%d.%d", libusb_version_internal.major, libusb_version_internal.minor,
|
usbi_dbg("libusb v%d.%d.%d.%d", libusb_version_internal.major, libusb_version_internal.minor,
|
||||||
libusb_version_internal.micro, libusb_version_internal.nano);
|
libusb_version_internal.micro, libusb_version_internal.nano);
|
||||||
|
|
||||||
usbi_mutex_init(&ctx->usb_devs_lock, NULL);
|
usbi_mutex_init(&ctx->usb_devs_lock, NULL);
|
||||||
|
@ -1873,10 +1949,6 @@ err_free_ctx:
|
||||||
if (ctx == usbi_default_context)
|
if (ctx == usbi_default_context)
|
||||||
usbi_default_context = NULL;
|
usbi_default_context = NULL;
|
||||||
|
|
||||||
usbi_mutex_destroy(&ctx->open_devs_lock);
|
|
||||||
usbi_mutex_destroy(&ctx->usb_devs_lock);
|
|
||||||
usbi_mutex_destroy(&ctx->hotplug_cbs_lock);
|
|
||||||
|
|
||||||
usbi_mutex_static_lock(&active_contexts_lock);
|
usbi_mutex_static_lock(&active_contexts_lock);
|
||||||
list_del (&ctx->list);
|
list_del (&ctx->list);
|
||||||
usbi_mutex_static_unlock(&active_contexts_lock);
|
usbi_mutex_static_unlock(&active_contexts_lock);
|
||||||
|
@ -1888,6 +1960,10 @@ err_free_ctx:
|
||||||
}
|
}
|
||||||
usbi_mutex_unlock(&ctx->usb_devs_lock);
|
usbi_mutex_unlock(&ctx->usb_devs_lock);
|
||||||
|
|
||||||
|
usbi_mutex_destroy(&ctx->open_devs_lock);
|
||||||
|
usbi_mutex_destroy(&ctx->usb_devs_lock);
|
||||||
|
usbi_mutex_destroy(&ctx->hotplug_cbs_lock);
|
||||||
|
|
||||||
free(ctx);
|
free(ctx);
|
||||||
err_unlock:
|
err_unlock:
|
||||||
usbi_mutex_static_unlock(&default_context_lock);
|
usbi_mutex_static_unlock(&default_context_lock);
|
||||||
|
@ -1902,6 +1978,7 @@ err_unlock:
|
||||||
void API_EXPORTED libusb_exit(struct libusb_context *ctx)
|
void API_EXPORTED libusb_exit(struct libusb_context *ctx)
|
||||||
{
|
{
|
||||||
struct libusb_device *dev, *next;
|
struct libusb_device *dev, *next;
|
||||||
|
struct timeval tv = { 0, 0 };
|
||||||
|
|
||||||
usbi_dbg("");
|
usbi_dbg("");
|
||||||
USBI_GET_CONTEXT(ctx);
|
USBI_GET_CONTEXT(ctx);
|
||||||
|
@ -1926,6 +2003,19 @@ void API_EXPORTED libusb_exit(struct libusb_context *ctx)
|
||||||
|
|
||||||
if (libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG)) {
|
if (libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG)) {
|
||||||
usbi_hotplug_deregister_all(ctx);
|
usbi_hotplug_deregister_all(ctx);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ensure any pending unplug events are read from the hotplug
|
||||||
|
* pipe. The usb_device-s hold in the events are no longer part
|
||||||
|
* of usb_devs, but the events still hold a reference!
|
||||||
|
*
|
||||||
|
* Note we don't do this if the application has left devices
|
||||||
|
* open (which implies a buggy app) to avoid packet completion
|
||||||
|
* handlers running when the app does not expect them to run.
|
||||||
|
*/
|
||||||
|
if (list_empty(&ctx->open_devs))
|
||||||
|
libusb_handle_events_timeout(ctx, &tv);
|
||||||
|
|
||||||
usbi_mutex_lock(&ctx->usb_devs_lock);
|
usbi_mutex_lock(&ctx->usb_devs_lock);
|
||||||
list_for_each_entry_safe(dev, next, &ctx->usb_devs, list, struct libusb_device) {
|
list_for_each_entry_safe(dev, next, &ctx->usb_devs, list, struct libusb_device) {
|
||||||
list_del(&dev->list);
|
list_del(&dev->list);
|
||||||
|
@ -2026,10 +2116,42 @@ int usbi_gettimeofday(struct timeval *tp, void *tzp)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void usbi_log_str(struct libusb_context *ctx, const char * str)
|
static void usbi_log_str(struct libusb_context *ctx,
|
||||||
|
enum libusb_log_level level, const char * str)
|
||||||
{
|
{
|
||||||
UNUSED(ctx);
|
#if defined(USE_SYSTEM_LOGGING_FACILITY)
|
||||||
|
#if defined(OS_WINDOWS) || defined(OS_WINCE)
|
||||||
|
/* Windows CE only supports the Unicode version of OutputDebugString. */
|
||||||
|
WCHAR wbuf[USBI_MAX_LOG_LEN];
|
||||||
|
MultiByteToWideChar(CP_UTF8, 0, str, -1, wbuf, sizeof(wbuf));
|
||||||
|
OutputDebugStringW(wbuf);
|
||||||
|
#elif defined(__ANDROID__)
|
||||||
|
int priority = ANDROID_LOG_UNKNOWN;
|
||||||
|
switch (level) {
|
||||||
|
case LIBUSB_LOG_LEVEL_INFO: priority = ANDROID_LOG_INFO; break;
|
||||||
|
case LIBUSB_LOG_LEVEL_WARNING: priority = ANDROID_LOG_WARN; break;
|
||||||
|
case LIBUSB_LOG_LEVEL_ERROR: priority = ANDROID_LOG_ERROR; break;
|
||||||
|
case LIBUSB_LOG_LEVEL_DEBUG: priority = ANDROID_LOG_DEBUG; break;
|
||||||
|
}
|
||||||
|
__android_log_write(priority, "libusb", str);
|
||||||
|
#elif defined(HAVE_SYSLOG_FUNC)
|
||||||
|
int syslog_level = LOG_INFO;
|
||||||
|
switch (level) {
|
||||||
|
case LIBUSB_LOG_LEVEL_INFO: syslog_level = LOG_INFO; break;
|
||||||
|
case LIBUSB_LOG_LEVEL_WARNING: syslog_level = LOG_WARNING; break;
|
||||||
|
case LIBUSB_LOG_LEVEL_ERROR: syslog_level = LOG_ERR; break;
|
||||||
|
case LIBUSB_LOG_LEVEL_DEBUG: syslog_level = LOG_DEBUG; break;
|
||||||
|
}
|
||||||
|
syslog(syslog_level, "%s", str);
|
||||||
|
#else /* All of gcc, Clang, XCode seem to use #warning */
|
||||||
|
#warning System logging is not supported on this platform. Logging to stderr will be used instead.
|
||||||
fputs(str, stderr);
|
fputs(str, stderr);
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
fputs(str, stderr);
|
||||||
|
#endif /* USE_SYSTEM_LOGGING_FACILITY */
|
||||||
|
UNUSED(ctx);
|
||||||
|
UNUSED(level);
|
||||||
}
|
}
|
||||||
|
|
||||||
void usbi_log_v(struct libusb_context *ctx, enum libusb_log_level level,
|
void usbi_log_v(struct libusb_context *ctx, enum libusb_log_level level,
|
||||||
|
@ -2045,47 +2167,32 @@ void usbi_log_v(struct libusb_context *ctx, enum libusb_log_level level,
|
||||||
global_debug = 1;
|
global_debug = 1;
|
||||||
UNUSED(ctx);
|
UNUSED(ctx);
|
||||||
#else
|
#else
|
||||||
|
int ctx_level = 0;
|
||||||
|
|
||||||
USBI_GET_CONTEXT(ctx);
|
USBI_GET_CONTEXT(ctx);
|
||||||
if (ctx == NULL)
|
if (ctx) {
|
||||||
|
ctx_level = ctx->debug;
|
||||||
|
} else {
|
||||||
|
char *dbg = getenv("LIBUSB_DEBUG");
|
||||||
|
if (dbg)
|
||||||
|
ctx_level = atoi(dbg);
|
||||||
|
}
|
||||||
|
global_debug = (ctx_level == LIBUSB_LOG_LEVEL_DEBUG);
|
||||||
|
if (!ctx_level)
|
||||||
return;
|
return;
|
||||||
global_debug = (ctx->debug == LIBUSB_LOG_LEVEL_DEBUG);
|
if (level == LIBUSB_LOG_LEVEL_WARNING && ctx_level < LIBUSB_LOG_LEVEL_WARNING)
|
||||||
if (!ctx->debug)
|
|
||||||
return;
|
return;
|
||||||
if (level == LIBUSB_LOG_LEVEL_WARNING && ctx->debug < LIBUSB_LOG_LEVEL_WARNING)
|
if (level == LIBUSB_LOG_LEVEL_INFO && ctx_level < LIBUSB_LOG_LEVEL_INFO)
|
||||||
return;
|
return;
|
||||||
if (level == LIBUSB_LOG_LEVEL_INFO && ctx->debug < LIBUSB_LOG_LEVEL_INFO)
|
if (level == LIBUSB_LOG_LEVEL_DEBUG && ctx_level < LIBUSB_LOG_LEVEL_DEBUG)
|
||||||
return;
|
|
||||||
if (level == LIBUSB_LOG_LEVEL_DEBUG && ctx->debug < LIBUSB_LOG_LEVEL_DEBUG)
|
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __ANDROID__
|
|
||||||
int prio;
|
|
||||||
switch (level) {
|
|
||||||
case LOG_LEVEL_INFO:
|
|
||||||
prio = ANDROID_LOG_INFO;
|
|
||||||
break;
|
|
||||||
case LOG_LEVEL_WARNING:
|
|
||||||
prio = ANDROID_LOG_WARN;
|
|
||||||
break;
|
|
||||||
case LOG_LEVEL_ERROR:
|
|
||||||
prio = ANDROID_LOG_ERROR;
|
|
||||||
break;
|
|
||||||
case LOG_LEVEL_DEBUG:
|
|
||||||
prio = ANDROID_LOG_DEBUG;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
prio = ANDROID_LOG_UNKNOWN;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
__android_log_vprint(prio, "LibUsb", format, args);
|
|
||||||
#else
|
|
||||||
usbi_gettimeofday(&now, NULL);
|
usbi_gettimeofday(&now, NULL);
|
||||||
if ((global_debug) && (!has_debug_header_been_displayed)) {
|
if ((global_debug) && (!has_debug_header_been_displayed)) {
|
||||||
has_debug_header_been_displayed = 1;
|
has_debug_header_been_displayed = 1;
|
||||||
usbi_log_str(ctx, "[timestamp] [threadID] facility level [function call] <message>\n");
|
usbi_log_str(ctx, LIBUSB_LOG_LEVEL_DEBUG, "[timestamp] [threadID] facility level [function call] <message>\n");
|
||||||
usbi_log_str(ctx, "--------------------------------------------------------------------------------\n");
|
usbi_log_str(ctx, LIBUSB_LOG_LEVEL_DEBUG, "--------------------------------------------------------------------------------\n");
|
||||||
}
|
}
|
||||||
if (now.tv_usec < timestamp_origin.tv_usec) {
|
if (now.tv_usec < timestamp_origin.tv_usec) {
|
||||||
now.tv_sec--;
|
now.tv_sec--;
|
||||||
|
@ -2108,7 +2215,7 @@ void usbi_log_v(struct libusb_context *ctx, enum libusb_log_level level,
|
||||||
prefix = "debug";
|
prefix = "debug";
|
||||||
break;
|
break;
|
||||||
case LIBUSB_LOG_LEVEL_NONE:
|
case LIBUSB_LOG_LEVEL_NONE:
|
||||||
break;
|
return;
|
||||||
default:
|
default:
|
||||||
prefix = "unknown";
|
prefix = "unknown";
|
||||||
break;
|
break;
|
||||||
|
@ -2116,11 +2223,11 @@ void usbi_log_v(struct libusb_context *ctx, enum libusb_log_level level,
|
||||||
|
|
||||||
if (global_debug) {
|
if (global_debug) {
|
||||||
header_len = snprintf(buf, sizeof(buf),
|
header_len = snprintf(buf, sizeof(buf),
|
||||||
"[%2d.%06d] [%08x] libusbx: %s [%s] ",
|
"[%2d.%06d] [%08x] libusb: %s [%s] ",
|
||||||
(int)now.tv_sec, (int)now.tv_usec, usbi_get_tid(), prefix, function);
|
(int)now.tv_sec, (int)now.tv_usec, usbi_get_tid(), prefix, function);
|
||||||
} else {
|
} else {
|
||||||
header_len = snprintf(buf, sizeof(buf),
|
header_len = snprintf(buf, sizeof(buf),
|
||||||
"libusbx: %s [%s] ", prefix, function);
|
"libusb: %s [%s] ", prefix, function);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (header_len < 0 || header_len >= sizeof(buf)) {
|
if (header_len < 0 || header_len >= sizeof(buf)) {
|
||||||
|
@ -2143,8 +2250,7 @@ void usbi_log_v(struct libusb_context *ctx, enum libusb_log_level level,
|
||||||
}
|
}
|
||||||
strcpy(buf + header_len + text_len, USBI_LOG_LINE_END);
|
strcpy(buf + header_len + text_len, USBI_LOG_LINE_END);
|
||||||
|
|
||||||
usbi_log_str(ctx, buf);
|
usbi_log_str(ctx, level, buf);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void usbi_log(struct libusb_context *ctx, enum libusb_log_level level,
|
void usbi_log(struct libusb_context *ctx, enum libusb_log_level level,
|
||||||
|
@ -2158,7 +2264,7 @@ void usbi_log(struct libusb_context *ctx, enum libusb_log_level level,
|
||||||
}
|
}
|
||||||
|
|
||||||
/** \ingroup misc
|
/** \ingroup misc
|
||||||
* Returns a constant NULL-terminated string with the ASCII name of a libusbx
|
* Returns a constant NULL-terminated string with the ASCII name of a libusb
|
||||||
* error or transfer status code. The caller must not free() the returned
|
* error or transfer status code. The caller must not free() the returned
|
||||||
* string.
|
* string.
|
||||||
*
|
*
|
|
@ -1,6 +1,6 @@
|
||||||
/* -*- Mode: C; indent-tabs-mode:t ; c-basic-offset:8 -*- */
|
/* -*- Mode: C; indent-tabs-mode:t ; c-basic-offset:8 -*- */
|
||||||
/*
|
/*
|
||||||
* USB descriptor handling functions for libusbx
|
* USB descriptor handling functions for libusb
|
||||||
* Copyright © 2007 Daniel Drake <dsd@gentoo.org>
|
* Copyright © 2007 Daniel Drake <dsd@gentoo.org>
|
||||||
* Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
* Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
||||||
*
|
*
|
||||||
|
@ -541,7 +541,7 @@ int usbi_device_cache_descriptor(libusb_device *dev)
|
||||||
*
|
*
|
||||||
* This is a non-blocking function; the device descriptor is cached in memory.
|
* This is a non-blocking function; the device descriptor is cached in memory.
|
||||||
*
|
*
|
||||||
* Note since libusbx-1.0.16, \ref LIBUSBX_API_VERSION >= 0x01000102, this
|
* Note since libusb-1.0.16, \ref LIBUSB_API_VERSION >= 0x01000102, this
|
||||||
* function always succeeds.
|
* function always succeeds.
|
||||||
*
|
*
|
||||||
* \param dev the device
|
* \param dev the device
|
||||||
|
@ -660,7 +660,7 @@ int API_EXPORTED libusb_get_config_descriptor(libusb_device *dev,
|
||||||
/* iterate through all configurations, returning the index of the configuration
|
/* iterate through all configurations, returning the index of the configuration
|
||||||
* matching a specific bConfigurationValue in the idx output parameter, or -1
|
* matching a specific bConfigurationValue in the idx output parameter, or -1
|
||||||
* if the config was not found.
|
* if the config was not found.
|
||||||
* returns 0 or a LIBUSB_ERROR code
|
* returns 0 on success or a LIBUSB_ERROR code
|
||||||
*/
|
*/
|
||||||
int usbi_get_config_index_by_value(struct libusb_device *dev,
|
int usbi_get_config_index_by_value(struct libusb_device *dev,
|
||||||
uint8_t bConfigurationValue, int *idx)
|
uint8_t bConfigurationValue, int *idx)
|
||||||
|
@ -673,8 +673,10 @@ int usbi_get_config_index_by_value(struct libusb_device *dev,
|
||||||
int host_endian;
|
int host_endian;
|
||||||
int r = usbi_backend->get_config_descriptor(dev, i, tmp, sizeof(tmp),
|
int r = usbi_backend->get_config_descriptor(dev, i, tmp, sizeof(tmp),
|
||||||
&host_endian);
|
&host_endian);
|
||||||
if (r < 0)
|
if (r < 0) {
|
||||||
|
*idx = -1;
|
||||||
return r;
|
return r;
|
||||||
|
}
|
||||||
if (tmp[5] == bConfigurationValue) {
|
if (tmp[5] == bConfigurationValue) {
|
||||||
*idx = i;
|
*idx = i;
|
||||||
return 0;
|
return 0;
|
|
@ -1,6 +1,6 @@
|
||||||
/* -*- Mode: C; indent-tabs-mode:t ; c-basic-offset:8 -*- */
|
/* -*- Mode: C; indent-tabs-mode:t ; c-basic-offset:8 -*- */
|
||||||
/*
|
/*
|
||||||
* Hotplug functions for libusbx
|
* Hotplug functions for libusb
|
||||||
* Copyright © 2012-2013 Nathan Hjelm <hjelmn@mac.com>
|
* Copyright © 2012-2013 Nathan Hjelm <hjelmn@mac.com>
|
||||||
* Copyright © 2012-2013 Peter Stuge <peter@stuge.se>
|
* Copyright © 2012-2013 Peter Stuge <peter@stuge.se>
|
||||||
*
|
*
|
||||||
|
@ -45,7 +45,7 @@
|
||||||
*
|
*
|
||||||
* \section intro Introduction
|
* \section intro Introduction
|
||||||
*
|
*
|
||||||
* Version 1.0.16, \ref LIBUSBX_API_VERSION >= 0x01000102, has added support
|
* Version 1.0.16, \ref LIBUSB_API_VERSION >= 0x01000102, has added support
|
||||||
* for hotplug events on <b>some</b> platforms (you should test if your platform
|
* for hotplug events on <b>some</b> platforms (you should test if your platform
|
||||||
* supports hotplug notification by calling \ref libusb_has_capability() with
|
* supports hotplug notification by calling \ref libusb_has_capability() with
|
||||||
* parameter \ref LIBUSB_CAP_HAS_HOTPLUG).
|
* parameter \ref LIBUSB_CAP_HAS_HOTPLUG).
|
||||||
|
@ -59,7 +59,11 @@
|
||||||
*
|
*
|
||||||
* A callback function must return an int (0 or 1) indicating whether the callback is
|
* A callback function must return an int (0 or 1) indicating whether the callback is
|
||||||
* expecting additional events. Returning 0 will rearm the callback and 1 will cause
|
* expecting additional events. Returning 0 will rearm the callback and 1 will cause
|
||||||
* the callback to be deregistered.
|
* the callback to be deregistered. Note that when callbacks are called from
|
||||||
|
* libusb_hotplug_register_callback() because of the \ref LIBUSB_HOTPLUG_ENUMERATE
|
||||||
|
* flag, the callback return value is ignored, iow you cannot cause a callback
|
||||||
|
* to be deregistered by returning 1 when it is called from
|
||||||
|
* libusb_hotplug_register_callback().
|
||||||
*
|
*
|
||||||
* Callbacks for a particular context are automatically deregistered by libusb_exit().
|
* Callbacks for a particular context are automatically deregistered by libusb_exit().
|
||||||
*
|
*
|
||||||
|
@ -76,12 +80,16 @@
|
||||||
* are invalid and will remain so even if the device comes back.
|
* are invalid and will remain so even if the device comes back.
|
||||||
*
|
*
|
||||||
* When handling a LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED event it is considered
|
* When handling a LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED event it is considered
|
||||||
* safe to call any libusbx function that takes a libusb_device. On the other hand,
|
* safe to call any libusb function that takes a libusb_device. On the other hand,
|
||||||
* when handling a LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT event the only safe function
|
* when handling a LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT event the only safe function
|
||||||
* is libusb_get_device_descriptor().
|
* is libusb_get_device_descriptor().
|
||||||
*
|
*
|
||||||
* The following code provides an example of the usage of the hotplug interface:
|
* The following code provides an example of the usage of the hotplug interface:
|
||||||
\code
|
\code
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <libusb.h>
|
||||||
|
|
||||||
static int count = 0;
|
static int count = 0;
|
||||||
|
|
||||||
int hotplug_callback(struct libusb_context *ctx, struct libusb_device *dev,
|
int hotplug_callback(struct libusb_context *ctx, struct libusb_device *dev,
|
||||||
|
@ -127,10 +135,11 @@ int main (void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
while (count < 2) {
|
while (count < 2) {
|
||||||
|
libusb_handle_events_completed(NULL, NULL);
|
||||||
usleep(10000);
|
usleep(10000);
|
||||||
}
|
}
|
||||||
|
|
||||||
libusb_hotplug_deregister_callback(handle);
|
libusb_hotplug_deregister_callback(NULL, handle);
|
||||||
libusb_exit(NULL);
|
libusb_exit(NULL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -167,8 +176,7 @@ static int usbi_hotplug_match_cb (struct libusb_context *ctx,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return hotplug_cb->cb (ctx == usbi_default_context ? NULL : ctx,
|
return hotplug_cb->cb (ctx, dev, event, hotplug_cb->user_data);
|
||||||
dev, event, hotplug_cb->user_data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void usbi_hotplug_match(struct libusb_context *ctx, struct libusb_device *dev,
|
void usbi_hotplug_match(struct libusb_context *ctx, struct libusb_device *dev,
|
||||||
|
@ -192,18 +200,7 @@ void usbi_hotplug_match(struct libusb_context *ctx, struct libusb_device *dev,
|
||||||
|
|
||||||
usbi_mutex_unlock(&ctx->hotplug_cbs_lock);
|
usbi_mutex_unlock(&ctx->hotplug_cbs_lock);
|
||||||
|
|
||||||
/* loop through and disconnect all open handles for this device */
|
/* the backend is expected to call the callback for each active transfer */
|
||||||
if (LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT == event) {
|
|
||||||
struct libusb_device_handle *handle;
|
|
||||||
|
|
||||||
usbi_mutex_lock(&ctx->open_devs_lock);
|
|
||||||
list_for_each_entry(handle, &ctx->open_devs, list, struct libusb_device_handle) {
|
|
||||||
if (dev == handle->dev) {
|
|
||||||
usbi_handle_disconnect (handle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
usbi_mutex_unlock(&ctx->open_devs_lock);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int API_EXPORTED libusb_hotplug_register_callback(libusb_context *ctx,
|
int API_EXPORTED libusb_hotplug_register_callback(libusb_context *ctx,
|
||||||
|
@ -253,19 +250,29 @@ int API_EXPORTED libusb_hotplug_register_callback(libusb_context *ctx,
|
||||||
|
|
||||||
list_add(&new_callback->list, &ctx->hotplug_cbs);
|
list_add(&new_callback->list, &ctx->hotplug_cbs);
|
||||||
|
|
||||||
|
usbi_mutex_unlock(&ctx->hotplug_cbs_lock);
|
||||||
|
|
||||||
|
|
||||||
if (flags & LIBUSB_HOTPLUG_ENUMERATE) {
|
if (flags & LIBUSB_HOTPLUG_ENUMERATE) {
|
||||||
struct libusb_device *dev;
|
int i, len;
|
||||||
|
struct libusb_device **devs;
|
||||||
|
|
||||||
usbi_mutex_lock(&ctx->usb_devs_lock);
|
len = (int) libusb_get_device_list(ctx, &devs);
|
||||||
|
if (len < 0) {
|
||||||
list_for_each_entry(dev, &ctx->usb_devs, list, struct libusb_device) {
|
libusb_hotplug_deregister_callback(ctx,
|
||||||
(void) usbi_hotplug_match_cb (ctx, dev, LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED, new_callback);
|
new_callback->handle);
|
||||||
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
usbi_mutex_unlock(&ctx->usb_devs_lock);
|
for (i = 0; i < len; i++) {
|
||||||
|
usbi_hotplug_match_cb(ctx, devs[i],
|
||||||
|
LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED,
|
||||||
|
new_callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
libusb_free_device_list(devs, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
usbi_mutex_unlock(&ctx->hotplug_cbs_lock);
|
|
||||||
|
|
||||||
if (handle) {
|
if (handle) {
|
||||||
*handle = new_callback->handle;
|
*handle = new_callback->handle;
|
|
@ -1,6 +1,6 @@
|
||||||
/* -*- Mode: C; indent-tabs-mode:t ; c-basic-offset:8 -*- */
|
/* -*- Mode: C; indent-tabs-mode:t ; c-basic-offset:8 -*- */
|
||||||
/*
|
/*
|
||||||
* Hotplug support for libusbx
|
* Hotplug support for libusb
|
||||||
* Copyright © 2012-2013 Nathan Hjelm <hjelmn@mac.com>
|
* Copyright © 2012-2013 Nathan Hjelm <hjelmn@mac.com>
|
||||||
* Copyright © 2012-2013 Peter Stuge <peter@stuge.se>
|
* Copyright © 2012-2013 Peter Stuge <peter@stuge.se>
|
||||||
*
|
*
|
|
@ -1,6 +1,6 @@
|
||||||
/* -*- Mode: C; indent-tabs-mode:t ; c-basic-offset:8 -*- */
|
/* -*- Mode: C; indent-tabs-mode:t ; c-basic-offset:8 -*- */
|
||||||
/*
|
/*
|
||||||
* I/O functions for libusbx
|
* I/O functions for libusb
|
||||||
* Copyright © 2007-2009 Daniel Drake <dsd@gentoo.org>
|
* Copyright © 2007-2009 Daniel Drake <dsd@gentoo.org>
|
||||||
* Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
* Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
||||||
*
|
*
|
||||||
|
@ -43,10 +43,10 @@
|
||||||
*
|
*
|
||||||
* \section intro Introduction
|
* \section intro Introduction
|
||||||
*
|
*
|
||||||
* If you're using libusbx in your application, you're probably wanting to
|
* If you're using libusb in your application, you're probably wanting to
|
||||||
* perform I/O with devices - you want to perform USB data transfers.
|
* perform I/O with devices - you want to perform USB data transfers.
|
||||||
*
|
*
|
||||||
* libusbx offers two separate interfaces for device I/O. This page aims to
|
* libusb offers two separate interfaces for device I/O. This page aims to
|
||||||
* introduce the two in order to help you decide which one is more suitable
|
* introduce the two in order to help you decide which one is more suitable
|
||||||
* for your application. You can also choose to use both interfaces in your
|
* for your application. You can also choose to use both interfaces in your
|
||||||
* application by considering each transfer on a case-by-case basis.
|
* application by considering each transfer on a case-by-case basis.
|
||||||
|
@ -76,7 +76,7 @@
|
||||||
* Data will arrive when the button is pressed by the user, which is
|
* Data will arrive when the button is pressed by the user, which is
|
||||||
* potentially hours later.
|
* potentially hours later.
|
||||||
*
|
*
|
||||||
* libusbx offers both a synchronous and an asynchronous interface to performing
|
* libusb offers both a synchronous and an asynchronous interface to performing
|
||||||
* USB transfers. The main difference is that the synchronous interface
|
* USB transfers. The main difference is that the synchronous interface
|
||||||
* combines both steps indicated above into a single function call, whereas
|
* combines both steps indicated above into a single function call, whereas
|
||||||
* the asynchronous interface separates them.
|
* the asynchronous interface separates them.
|
||||||
|
@ -131,9 +131,9 @@ if (r == 0 && actual_length == sizeof(data)) {
|
||||||
* above.
|
* above.
|
||||||
*
|
*
|
||||||
* Instead of providing which functions that block until the I/O has complete,
|
* Instead of providing which functions that block until the I/O has complete,
|
||||||
* libusbx's asynchronous interface presents non-blocking functions which
|
* libusb's asynchronous interface presents non-blocking functions which
|
||||||
* begin a transfer and then return immediately. Your application passes a
|
* begin a transfer and then return immediately. Your application passes a
|
||||||
* callback function pointer to this non-blocking function, which libusbx will
|
* callback function pointer to this non-blocking function, which libusb will
|
||||||
* call with the results of the transaction when it has completed.
|
* call with the results of the transaction when it has completed.
|
||||||
*
|
*
|
||||||
* Transfers which have been submitted through the non-blocking functions
|
* Transfers which have been submitted through the non-blocking functions
|
||||||
|
@ -144,12 +144,12 @@ if (r == 0 && actual_length == sizeof(data)) {
|
||||||
* to use threads.
|
* to use threads.
|
||||||
*
|
*
|
||||||
* This added flexibility does come with some complications though:
|
* This added flexibility does come with some complications though:
|
||||||
* - In the interest of being a lightweight library, libusbx does not create
|
* - In the interest of being a lightweight library, libusb does not create
|
||||||
* threads and can only operate when your application is calling into it. Your
|
* threads and can only operate when your application is calling into it. Your
|
||||||
* application must call into libusbx from it's main loop when events are ready
|
* application must call into libusb from it's main loop when events are ready
|
||||||
* to be handled, or you must use some other scheme to allow libusbx to
|
* to be handled, or you must use some other scheme to allow libusb to
|
||||||
* undertake whatever work needs to be done.
|
* undertake whatever work needs to be done.
|
||||||
* - libusbx also needs to be called into at certain fixed points in time in
|
* - libusb also needs to be called into at certain fixed points in time in
|
||||||
* order to accurately handle transfer timeouts.
|
* order to accurately handle transfer timeouts.
|
||||||
* - Memory handling becomes more complex. You cannot use stack memory unless
|
* - Memory handling becomes more complex. You cannot use stack memory unless
|
||||||
* the function with that stack is guaranteed not to return until the transfer
|
* the function with that stack is guaranteed not to return until the transfer
|
||||||
|
@ -159,7 +159,7 @@ if (r == 0 && actual_length == sizeof(data)) {
|
||||||
* results are handled. This becomes particularly obvious when you want to
|
* results are handled. This becomes particularly obvious when you want to
|
||||||
* submit a second transfer based on the results of an earlier transfer.
|
* submit a second transfer based on the results of an earlier transfer.
|
||||||
*
|
*
|
||||||
* Internally, libusbx's synchronous interface is expressed in terms of function
|
* Internally, libusb's synchronous interface is expressed in terms of function
|
||||||
* calls to the asynchronous interface.
|
* calls to the asynchronous interface.
|
||||||
*
|
*
|
||||||
* For details on how to use the asynchronous API, see the
|
* For details on how to use the asynchronous API, see the
|
||||||
|
@ -176,25 +176,25 @@ if (r == 0 && actual_length == sizeof(data)) {
|
||||||
* constraints on packet size defined by endpoint descriptors. The host must
|
* constraints on packet size defined by endpoint descriptors. The host must
|
||||||
* not send data payloads larger than the endpoint's maximum packet size.
|
* not send data payloads larger than the endpoint's maximum packet size.
|
||||||
*
|
*
|
||||||
* libusbx and the underlying OS abstract out the packet concept, allowing you
|
* libusb and the underlying OS abstract out the packet concept, allowing you
|
||||||
* to request transfers of any size. Internally, the request will be divided
|
* to request transfers of any size. Internally, the request will be divided
|
||||||
* up into correctly-sized packets. You do not have to be concerned with
|
* up into correctly-sized packets. You do not have to be concerned with
|
||||||
* packet sizes, but there is one exception when considering overflows.
|
* packet sizes, but there is one exception when considering overflows.
|
||||||
*
|
*
|
||||||
* \section overflow Bulk/interrupt transfer overflows
|
* \section overflow Bulk/interrupt transfer overflows
|
||||||
*
|
*
|
||||||
* When requesting data on a bulk endpoint, libusbx requires you to supply a
|
* When requesting data on a bulk endpoint, libusb requires you to supply a
|
||||||
* buffer and the maximum number of bytes of data that libusbx can put in that
|
* buffer and the maximum number of bytes of data that libusb can put in that
|
||||||
* buffer. However, the size of the buffer is not communicated to the device -
|
* buffer. However, the size of the buffer is not communicated to the device -
|
||||||
* the device is just asked to send any amount of data.
|
* the device is just asked to send any amount of data.
|
||||||
*
|
*
|
||||||
* There is no problem if the device sends an amount of data that is less than
|
* There is no problem if the device sends an amount of data that is less than
|
||||||
* or equal to the buffer size. libusbx reports this condition to you through
|
* or equal to the buffer size. libusb reports this condition to you through
|
||||||
* the \ref libusb_transfer::actual_length "libusb_transfer.actual_length"
|
* the \ref libusb_transfer::actual_length "libusb_transfer.actual_length"
|
||||||
* field.
|
* field.
|
||||||
*
|
*
|
||||||
* Problems may occur if the device attempts to send more data than can fit in
|
* Problems may occur if the device attempts to send more data than can fit in
|
||||||
* the buffer. libusbx reports LIBUSB_TRANSFER_OVERFLOW for this condition but
|
* the buffer. libusb reports LIBUSB_TRANSFER_OVERFLOW for this condition but
|
||||||
* other behaviour is largely undefined: actual_length may or may not be
|
* other behaviour is largely undefined: actual_length may or may not be
|
||||||
* accurate, the chunk of data that can fit in the buffer (before overflow)
|
* accurate, the chunk of data that can fit in the buffer (before overflow)
|
||||||
* may or may not have been transferred.
|
* may or may not have been transferred.
|
||||||
|
@ -212,7 +212,7 @@ if (r == 0 && actual_length == sizeof(data)) {
|
||||||
/**
|
/**
|
||||||
* @defgroup asyncio Asynchronous device I/O
|
* @defgroup asyncio Asynchronous device I/O
|
||||||
*
|
*
|
||||||
* This page details libusbx's asynchronous (non-blocking) API for USB device
|
* This page details libusb's asynchronous (non-blocking) API for USB device
|
||||||
* I/O. This interface is very powerful but is also quite complex - you will
|
* I/O. This interface is very powerful but is also quite complex - you will
|
||||||
* need to read this page carefully to understand the necessary considerations
|
* need to read this page carefully to understand the necessary considerations
|
||||||
* and issues surrounding use of this interface. Simplistic applications
|
* and issues surrounding use of this interface. Simplistic applications
|
||||||
|
@ -227,7 +227,7 @@ if (r == 0 && actual_length == sizeof(data)) {
|
||||||
*
|
*
|
||||||
* \section asyncabstraction Transfer abstraction
|
* \section asyncabstraction Transfer abstraction
|
||||||
*
|
*
|
||||||
* For the asynchronous I/O, libusbx implements the concept of a generic
|
* For the asynchronous I/O, libusb implements the concept of a generic
|
||||||
* transfer entity for all types of I/O (control, bulk, interrupt,
|
* transfer entity for all types of I/O (control, bulk, interrupt,
|
||||||
* isochronous). The generic transfer object must be treated slightly
|
* isochronous). The generic transfer object must be treated slightly
|
||||||
* differently depending on which type of I/O you are performing with it.
|
* differently depending on which type of I/O you are performing with it.
|
||||||
|
@ -240,7 +240,7 @@ if (r == 0 && actual_length == sizeof(data)) {
|
||||||
* -# <b>Allocation</b>: allocate a libusb_transfer
|
* -# <b>Allocation</b>: allocate a libusb_transfer
|
||||||
* -# <b>Filling</b>: populate the libusb_transfer instance with information
|
* -# <b>Filling</b>: populate the libusb_transfer instance with information
|
||||||
* about the transfer you wish to perform
|
* about the transfer you wish to perform
|
||||||
* -# <b>Submission</b>: ask libusbx to submit the transfer
|
* -# <b>Submission</b>: ask libusb to submit the transfer
|
||||||
* -# <b>Completion handling</b>: examine transfer results in the
|
* -# <b>Completion handling</b>: examine transfer results in the
|
||||||
* libusb_transfer structure
|
* libusb_transfer structure
|
||||||
* -# <b>Deallocation</b>: clean up resources
|
* -# <b>Deallocation</b>: clean up resources
|
||||||
|
@ -287,7 +287,7 @@ if (r == 0 && actual_length == sizeof(data)) {
|
||||||
*
|
*
|
||||||
* The user-specified callback is passed a pointer to the libusb_transfer
|
* The user-specified callback is passed a pointer to the libusb_transfer
|
||||||
* structure which was used to setup and submit the transfer. At completion
|
* structure which was used to setup and submit the transfer. At completion
|
||||||
* time, libusbx has populated this structure with results of the transfer:
|
* time, libusb has populated this structure with results of the transfer:
|
||||||
* success or failure reason, number of bytes of data transferred, etc. See
|
* success or failure reason, number of bytes of data transferred, etc. See
|
||||||
* the libusb_transfer structure documentation for more information.
|
* the libusb_transfer structure documentation for more information.
|
||||||
*
|
*
|
||||||
|
@ -326,7 +326,7 @@ if (r == 0 && actual_length == sizeof(data)) {
|
||||||
* has completed will result in undefined behaviour.
|
* has completed will result in undefined behaviour.
|
||||||
*
|
*
|
||||||
* When a transfer is cancelled, some of the data may have been transferred.
|
* When a transfer is cancelled, some of the data may have been transferred.
|
||||||
* libusbx will communicate this to you in the transfer callback. Do not assume
|
* libusb will communicate this to you in the transfer callback. Do not assume
|
||||||
* that no data was transferred.
|
* that no data was transferred.
|
||||||
*
|
*
|
||||||
* \section bulk_overflows Overflows on device-to-host bulk/interrupt endpoints
|
* \section bulk_overflows Overflows on device-to-host bulk/interrupt endpoints
|
||||||
|
@ -468,7 +468,7 @@ if (r == 0 && actual_length == sizeof(data)) {
|
||||||
*
|
*
|
||||||
* In most circumstances, it is not safe to use stack memory for transfer
|
* In most circumstances, it is not safe to use stack memory for transfer
|
||||||
* buffers. This is because the function that fired off the asynchronous
|
* buffers. This is because the function that fired off the asynchronous
|
||||||
* transfer may return before libusbx has finished using the buffer, and when
|
* transfer may return before libusb has finished using the buffer, and when
|
||||||
* the function returns it's stack gets destroyed. This is true for both
|
* the function returns it's stack gets destroyed. This is true for both
|
||||||
* host-to-device and device-to-host transfers.
|
* host-to-device and device-to-host transfers.
|
||||||
*
|
*
|
||||||
|
@ -488,43 +488,43 @@ if (r == 0 && actual_length == sizeof(data)) {
|
||||||
* \ref libusb_transfer_status::LIBUSB_TRANSFER_ERROR "LIBUSB_TRANSFER_ERROR"
|
* \ref libusb_transfer_status::LIBUSB_TRANSFER_ERROR "LIBUSB_TRANSFER_ERROR"
|
||||||
* (they would normally be regarded as COMPLETED)
|
* (they would normally be regarded as COMPLETED)
|
||||||
* - \ref libusb_transfer_flags::LIBUSB_TRANSFER_FREE_BUFFER
|
* - \ref libusb_transfer_flags::LIBUSB_TRANSFER_FREE_BUFFER
|
||||||
* "LIBUSB_TRANSFER_FREE_BUFFER" allows you to ask libusbx to free the transfer
|
* "LIBUSB_TRANSFER_FREE_BUFFER" allows you to ask libusb to free the transfer
|
||||||
* buffer when freeing the transfer.
|
* buffer when freeing the transfer.
|
||||||
* - \ref libusb_transfer_flags::LIBUSB_TRANSFER_FREE_TRANSFER
|
* - \ref libusb_transfer_flags::LIBUSB_TRANSFER_FREE_TRANSFER
|
||||||
* "LIBUSB_TRANSFER_FREE_TRANSFER" causes libusbx to automatically free the
|
* "LIBUSB_TRANSFER_FREE_TRANSFER" causes libusb to automatically free the
|
||||||
* transfer after the transfer callback returns.
|
* transfer after the transfer callback returns.
|
||||||
*
|
*
|
||||||
* \section asyncevent Event handling
|
* \section asyncevent Event handling
|
||||||
*
|
*
|
||||||
* An asynchronous model requires that libusbx perform work at various
|
* An asynchronous model requires that libusb perform work at various
|
||||||
* points in time - namely processing the results of previously-submitted
|
* points in time - namely processing the results of previously-submitted
|
||||||
* transfers and invoking the user-supplied callback function.
|
* transfers and invoking the user-supplied callback function.
|
||||||
*
|
*
|
||||||
* This gives rise to the libusb_handle_events() function which your
|
* This gives rise to the libusb_handle_events() function which your
|
||||||
* application must call into when libusbx has work do to. This gives libusbx
|
* application must call into when libusb has work do to. This gives libusb
|
||||||
* the opportunity to reap pending transfers, invoke callbacks, etc.
|
* the opportunity to reap pending transfers, invoke callbacks, etc.
|
||||||
*
|
*
|
||||||
* There are 2 different approaches to dealing with libusb_handle_events:
|
* There are 2 different approaches to dealing with libusb_handle_events:
|
||||||
*
|
*
|
||||||
* -# Repeatedly call libusb_handle_events() in blocking mode from a dedicated
|
* -# Repeatedly call libusb_handle_events() in blocking mode from a dedicated
|
||||||
* thread.
|
* thread.
|
||||||
* -# Integrate libusbx with your application's main event loop. libusbx
|
* -# Integrate libusb with your application's main event loop. libusb
|
||||||
* exposes a set of file descriptors which allow you to do this.
|
* exposes a set of file descriptors which allow you to do this.
|
||||||
*
|
*
|
||||||
* The first approach has the big advantage that it will also work on Windows
|
* The first approach has the big advantage that it will also work on Windows
|
||||||
* were libusbx' poll API for select / poll integration is not available. So
|
* were libusb' poll API for select / poll integration is not available. So
|
||||||
* if you want to support Windows and use the async API, you must use this
|
* if you want to support Windows and use the async API, you must use this
|
||||||
* approach, see the \ref eventthread "Using an event handling thread" section
|
* approach, see the \ref eventthread "Using an event handling thread" section
|
||||||
* below for details.
|
* below for details.
|
||||||
*
|
*
|
||||||
* If you prefer a single threaded approach with a single central event loop,
|
* If you prefer a single threaded approach with a single central event loop,
|
||||||
* see the \ref poll "polling and timing" section for how to integrate libusbx
|
* see the \ref poll "polling and timing" section for how to integrate libusb
|
||||||
* into your application's main event loop.
|
* into your application's main event loop.
|
||||||
*
|
*
|
||||||
* \section eventthread Using an event handling thread
|
* \section eventthread Using an event handling thread
|
||||||
*
|
*
|
||||||
* Lets begin with stating the obvious: If you're going to use a separate
|
* Lets begin with stating the obvious: If you're going to use a separate
|
||||||
* thread for libusbx event handling, your callback functions MUST be
|
* thread for libusb event handling, your callback functions MUST be
|
||||||
* threadsafe.
|
* threadsafe.
|
||||||
*
|
*
|
||||||
* Other then that doing event handling from a separate thread, is mostly
|
* Other then that doing event handling from a separate thread, is mostly
|
||||||
|
@ -545,7 +545,7 @@ void *event_thread_func(void *ctx)
|
||||||
* libusb_handle_events() will not return.
|
* libusb_handle_events() will not return.
|
||||||
*
|
*
|
||||||
* There are 2 different ways of dealing with this, depending on if your
|
* There are 2 different ways of dealing with this, depending on if your
|
||||||
* application uses libusbx' \ref hotplug "hotplug" support or not.
|
* application uses libusb' \ref hotplug "hotplug" support or not.
|
||||||
*
|
*
|
||||||
* Applications which do not use hotplug support, should not start the event
|
* Applications which do not use hotplug support, should not start the event
|
||||||
* thread until after their first call to libusb_open(), and should stop the
|
* thread until after their first call to libusb_open(), and should stop the
|
||||||
|
@ -582,7 +582,7 @@ void my_libusb_exit(void)
|
||||||
/**
|
/**
|
||||||
* @defgroup poll Polling and timing
|
* @defgroup poll Polling and timing
|
||||||
*
|
*
|
||||||
* This page documents libusbx's functions for polling events and timing.
|
* This page documents libusb's functions for polling events and timing.
|
||||||
* These functions are only necessary for users of the
|
* These functions are only necessary for users of the
|
||||||
* \ref asyncio "asynchronous API". If you are only using the simpler
|
* \ref asyncio "asynchronous API". If you are only using the simpler
|
||||||
* \ref syncio "synchronous API" then you do not need to ever call these
|
* \ref syncio "synchronous API" then you do not need to ever call these
|
||||||
|
@ -590,28 +590,28 @@ void my_libusb_exit(void)
|
||||||
*
|
*
|
||||||
* The justification for the functionality described here has already been
|
* The justification for the functionality described here has already been
|
||||||
* discussed in the \ref asyncevent "event handling" section of the
|
* discussed in the \ref asyncevent "event handling" section of the
|
||||||
* asynchronous API documentation. In summary, libusbx does not create internal
|
* asynchronous API documentation. In summary, libusb does not create internal
|
||||||
* threads for event processing and hence relies on your application calling
|
* threads for event processing and hence relies on your application calling
|
||||||
* into libusbx at certain points in time so that pending events can be handled.
|
* into libusb at certain points in time so that pending events can be handled.
|
||||||
*
|
*
|
||||||
* Your main loop is probably already calling poll() or select() or a
|
* Your main loop is probably already calling poll() or select() or a
|
||||||
* variant on a set of file descriptors for other event sources (e.g. keyboard
|
* variant on a set of file descriptors for other event sources (e.g. keyboard
|
||||||
* button presses, mouse movements, network sockets, etc). You then add
|
* button presses, mouse movements, network sockets, etc). You then add
|
||||||
* libusbx's file descriptors to your poll()/select() calls, and when activity
|
* libusb's file descriptors to your poll()/select() calls, and when activity
|
||||||
* is detected on such descriptors you know it is time to call
|
* is detected on such descriptors you know it is time to call
|
||||||
* libusb_handle_events().
|
* libusb_handle_events().
|
||||||
*
|
*
|
||||||
* There is one final event handling complication. libusbx supports
|
* There is one final event handling complication. libusb supports
|
||||||
* asynchronous transfers which time out after a specified time period.
|
* asynchronous transfers which time out after a specified time period.
|
||||||
*
|
*
|
||||||
* On some platforms a timerfd is used, so the timeout handling is just another
|
* On some platforms a timerfd is used, so the timeout handling is just another
|
||||||
* fd, on other platforms this requires that libusbx is called into at or after
|
* fd, on other platforms this requires that libusb is called into at or after
|
||||||
* the timeout to handle it. So, in addition to considering libusbx's file
|
* the timeout to handle it. So, in addition to considering libusb's file
|
||||||
* descriptors in your main event loop, you must also consider that libusbx
|
* descriptors in your main event loop, you must also consider that libusb
|
||||||
* sometimes needs to be called into at fixed points in time even when there
|
* sometimes needs to be called into at fixed points in time even when there
|
||||||
* is no file descriptor activity, see \ref polltime details.
|
* is no file descriptor activity, see \ref polltime details.
|
||||||
*
|
*
|
||||||
* In order to know precisely when libusbx needs to be called into, libusbx
|
* In order to know precisely when libusb needs to be called into, libusb
|
||||||
* offers you a set of pollable file descriptors and information about when
|
* offers you a set of pollable file descriptors and information about when
|
||||||
* the next timeout expires.
|
* the next timeout expires.
|
||||||
*
|
*
|
||||||
|
@ -620,10 +620,10 @@ void my_libusb_exit(void)
|
||||||
*
|
*
|
||||||
* \section pollsimple The simple option
|
* \section pollsimple The simple option
|
||||||
*
|
*
|
||||||
* If your application revolves solely around libusbx and does not need to
|
* If your application revolves solely around libusb and does not need to
|
||||||
* handle other event sources, you can have a program structure as follows:
|
* handle other event sources, you can have a program structure as follows:
|
||||||
\code
|
\code
|
||||||
// initialize libusbx
|
// initialize libusb
|
||||||
// find and open device
|
// find and open device
|
||||||
// maybe fire off some initial async I/O
|
// maybe fire off some initial async I/O
|
||||||
|
|
||||||
|
@ -646,15 +646,15 @@ while (user_has_not_requested_exit)
|
||||||
*
|
*
|
||||||
* In more advanced applications, you will already have a main loop which
|
* In more advanced applications, you will already have a main loop which
|
||||||
* is monitoring other event sources: network sockets, X11 events, mouse
|
* is monitoring other event sources: network sockets, X11 events, mouse
|
||||||
* movements, etc. Through exposing a set of file descriptors, libusbx is
|
* movements, etc. Through exposing a set of file descriptors, libusb is
|
||||||
* designed to cleanly integrate into such main loops.
|
* designed to cleanly integrate into such main loops.
|
||||||
*
|
*
|
||||||
* In addition to polling file descriptors for the other event sources, you
|
* In addition to polling file descriptors for the other event sources, you
|
||||||
* take a set of file descriptors from libusbx and monitor those too. When you
|
* take a set of file descriptors from libusb and monitor those too. When you
|
||||||
* detect activity on libusbx's file descriptors, you call
|
* detect activity on libusb's file descriptors, you call
|
||||||
* libusb_handle_events_timeout() in non-blocking mode.
|
* libusb_handle_events_timeout() in non-blocking mode.
|
||||||
*
|
*
|
||||||
* What's more, libusbx may also need to handle events at specific moments in
|
* What's more, libusb may also need to handle events at specific moments in
|
||||||
* time. No file descriptor activity is generated at these times, so your
|
* time. No file descriptor activity is generated at these times, so your
|
||||||
* own application needs to be continually aware of when the next one of these
|
* own application needs to be continually aware of when the next one of these
|
||||||
* moments occurs (through calling libusb_get_next_timeout()), and then it
|
* moments occurs (through calling libusb_get_next_timeout()), and then it
|
||||||
|
@ -662,25 +662,25 @@ while (user_has_not_requested_exit)
|
||||||
* these moments occur. This means that you need to adjust your
|
* these moments occur. This means that you need to adjust your
|
||||||
* poll()/select() timeout accordingly.
|
* poll()/select() timeout accordingly.
|
||||||
*
|
*
|
||||||
* libusbx provides you with a set of file descriptors to poll and expects you
|
* libusb provides you with a set of file descriptors to poll and expects you
|
||||||
* to poll all of them, treating them as a single entity. The meaning of each
|
* to poll all of them, treating them as a single entity. The meaning of each
|
||||||
* file descriptor in the set is an internal implementation detail,
|
* file descriptor in the set is an internal implementation detail,
|
||||||
* platform-dependent and may vary from release to release. Don't try and
|
* platform-dependent and may vary from release to release. Don't try and
|
||||||
* interpret the meaning of the file descriptors, just do as libusbx indicates,
|
* interpret the meaning of the file descriptors, just do as libusb indicates,
|
||||||
* polling all of them at once.
|
* polling all of them at once.
|
||||||
*
|
*
|
||||||
* In pseudo-code, you want something that looks like:
|
* In pseudo-code, you want something that looks like:
|
||||||
\code
|
\code
|
||||||
// initialise libusbx
|
// initialise libusb
|
||||||
|
|
||||||
libusb_get_pollfds(ctx)
|
libusb_get_pollfds(ctx)
|
||||||
while (user has not requested application exit) {
|
while (user has not requested application exit) {
|
||||||
libusb_get_next_timeout(ctx);
|
libusb_get_next_timeout(ctx);
|
||||||
poll(on libusbx file descriptors plus any other event sources of interest,
|
poll(on libusb file descriptors plus any other event sources of interest,
|
||||||
using a timeout no larger than the value libusbx just suggested)
|
using a timeout no larger than the value libusb just suggested)
|
||||||
if (poll() indicated activity on libusbx file descriptors)
|
if (poll() indicated activity on libusb file descriptors)
|
||||||
libusb_handle_events_timeout(ctx, &zero_tv);
|
libusb_handle_events_timeout(ctx, &zero_tv);
|
||||||
if (time has elapsed to or beyond the libusbx timeout)
|
if (time has elapsed to or beyond the libusb timeout)
|
||||||
libusb_handle_events_timeout(ctx, &zero_tv);
|
libusb_handle_events_timeout(ctx, &zero_tv);
|
||||||
// handle events from other sources here
|
// handle events from other sources here
|
||||||
}
|
}
|
||||||
|
@ -690,7 +690,7 @@ while (user has not requested application exit) {
|
||||||
*
|
*
|
||||||
* \subsection polltime Notes on time-based events
|
* \subsection polltime Notes on time-based events
|
||||||
*
|
*
|
||||||
* The above complication with having to track time and call into libusbx at
|
* The above complication with having to track time and call into libusb at
|
||||||
* specific moments is a bit of a headache. For maximum compatibility, you do
|
* specific moments is a bit of a headache. For maximum compatibility, you do
|
||||||
* need to write your main loop as above, but you may decide that you can
|
* need to write your main loop as above, but you may decide that you can
|
||||||
* restrict the supported platforms of your application and get away with
|
* restrict the supported platforms of your application and get away with
|
||||||
|
@ -702,18 +702,18 @@ while (user has not requested application exit) {
|
||||||
* - Linux, provided that the following version requirements are satisfied:
|
* - Linux, provided that the following version requirements are satisfied:
|
||||||
* - Linux v2.6.27 or newer, compiled with timerfd support
|
* - Linux v2.6.27 or newer, compiled with timerfd support
|
||||||
* - glibc v2.9 or newer
|
* - glibc v2.9 or newer
|
||||||
* - libusbx v1.0.5 or newer
|
* - libusb v1.0.5 or newer
|
||||||
*
|
*
|
||||||
* Under these configurations, libusb_get_next_timeout() will \em always return
|
* Under these configurations, libusb_get_next_timeout() will \em always return
|
||||||
* 0, so your main loop can be simplified to:
|
* 0, so your main loop can be simplified to:
|
||||||
\code
|
\code
|
||||||
// initialise libusbx
|
// initialise libusb
|
||||||
|
|
||||||
libusb_get_pollfds(ctx)
|
libusb_get_pollfds(ctx)
|
||||||
while (user has not requested application exit) {
|
while (user has not requested application exit) {
|
||||||
poll(on libusbx file descriptors plus any other event sources of interest,
|
poll(on libusb file descriptors plus any other event sources of interest,
|
||||||
using any timeout that you like)
|
using any timeout that you like)
|
||||||
if (poll() indicated activity on libusbx file descriptors)
|
if (poll() indicated activity on libusb file descriptors)
|
||||||
libusb_handle_events_timeout(ctx, &zero_tv);
|
libusb_handle_events_timeout(ctx, &zero_tv);
|
||||||
// handle events from other sources here
|
// handle events from other sources here
|
||||||
}
|
}
|
||||||
|
@ -723,20 +723,20 @@ while (user has not requested application exit) {
|
||||||
*
|
*
|
||||||
* Do remember that if you simplify your main loop to the above, you will
|
* Do remember that if you simplify your main loop to the above, you will
|
||||||
* lose compatibility with some platforms (including legacy Linux platforms,
|
* lose compatibility with some platforms (including legacy Linux platforms,
|
||||||
* and <em>any future platforms supported by libusbx which may have time-based
|
* and <em>any future platforms supported by libusb which may have time-based
|
||||||
* event requirements</em>). The resultant problems will likely appear as
|
* event requirements</em>). The resultant problems will likely appear as
|
||||||
* strange bugs in your application.
|
* strange bugs in your application.
|
||||||
*
|
*
|
||||||
* You can use the libusb_pollfds_handle_timeouts() function to do a runtime
|
* You can use the libusb_pollfds_handle_timeouts() function to do a runtime
|
||||||
* check to see if it is safe to ignore the time-based event complications.
|
* check to see if it is safe to ignore the time-based event complications.
|
||||||
* If your application has taken the shortcut of ignoring libusbx's next timeout
|
* If your application has taken the shortcut of ignoring libusb's next timeout
|
||||||
* in your main loop, then you are advised to check the return value of
|
* in your main loop, then you are advised to check the return value of
|
||||||
* libusb_pollfds_handle_timeouts() during application startup, and to abort
|
* libusb_pollfds_handle_timeouts() during application startup, and to abort
|
||||||
* if the platform does suffer from these timing complications.
|
* if the platform does suffer from these timing complications.
|
||||||
*
|
*
|
||||||
* \subsection fdsetchange Changes in the file descriptor set
|
* \subsection fdsetchange Changes in the file descriptor set
|
||||||
*
|
*
|
||||||
* The set of file descriptors that libusbx uses as event sources may change
|
* The set of file descriptors that libusb uses as event sources may change
|
||||||
* during the life of your application. Rather than having to repeatedly
|
* during the life of your application. Rather than having to repeatedly
|
||||||
* call libusb_get_pollfds(), you can set up notification functions for when
|
* call libusb_get_pollfds(), you can set up notification functions for when
|
||||||
* the file descriptor set changes using libusb_set_pollfd_notifiers().
|
* the file descriptor set changes using libusb_set_pollfd_notifiers().
|
||||||
|
@ -757,10 +757,10 @@ while (user has not requested application exit) {
|
||||||
|
|
||||||
/** \page mtasync Multi-threaded applications and asynchronous I/O
|
/** \page mtasync Multi-threaded applications and asynchronous I/O
|
||||||
*
|
*
|
||||||
* libusbx is a thread-safe library, but extra considerations must be applied
|
* libusb is a thread-safe library, but extra considerations must be applied
|
||||||
* to applications which interact with libusbx from multiple threads.
|
* to applications which interact with libusb from multiple threads.
|
||||||
*
|
*
|
||||||
* The underlying issue that must be addressed is that all libusbx I/O
|
* The underlying issue that must be addressed is that all libusb I/O
|
||||||
* revolves around monitoring file descriptors through the poll()/select()
|
* revolves around monitoring file descriptors through the poll()/select()
|
||||||
* system calls. This is directly exposed at the
|
* system calls. This is directly exposed at the
|
||||||
* \ref asyncio "asynchronous interface" but it is important to note that the
|
* \ref asyncio "asynchronous interface" but it is important to note that the
|
||||||
|
@ -768,13 +768,13 @@ while (user has not requested application exit) {
|
||||||
* asynchonrous interface, therefore the same considerations apply.
|
* asynchonrous interface, therefore the same considerations apply.
|
||||||
*
|
*
|
||||||
* The issue is that if two or more threads are concurrently calling poll()
|
* The issue is that if two or more threads are concurrently calling poll()
|
||||||
* or select() on libusbx's file descriptors then only one of those threads
|
* or select() on libusb's file descriptors then only one of those threads
|
||||||
* will be woken up when an event arrives. The others will be completely
|
* will be woken up when an event arrives. The others will be completely
|
||||||
* oblivious that anything has happened.
|
* oblivious that anything has happened.
|
||||||
*
|
*
|
||||||
* Consider the following pseudo-code, which submits an asynchronous transfer
|
* Consider the following pseudo-code, which submits an asynchronous transfer
|
||||||
* then waits for its completion. This style is one way you could implement a
|
* then waits for its completion. This style is one way you could implement a
|
||||||
* synchronous interface on top of the asynchronous interface (and libusbx
|
* synchronous interface on top of the asynchronous interface (and libusb
|
||||||
* does something similar, albeit more advanced due to the complications
|
* does something similar, albeit more advanced due to the complications
|
||||||
* explained on this page).
|
* explained on this page).
|
||||||
*
|
*
|
||||||
|
@ -787,7 +787,7 @@ void cb(struct libusb_transfer *transfer)
|
||||||
|
|
||||||
void myfunc() {
|
void myfunc() {
|
||||||
struct libusb_transfer *transfer;
|
struct libusb_transfer *transfer;
|
||||||
unsigned char buffer[LIBUSB_CONTROL_SETUP_SIZE];
|
unsigned char buffer[LIBUSB_CONTROL_SETUP_SIZE] __attribute__ ((aligned (2)));
|
||||||
int completed = 0;
|
int completed = 0;
|
||||||
|
|
||||||
transfer = libusb_alloc_transfer(0);
|
transfer = libusb_alloc_transfer(0);
|
||||||
|
@ -797,7 +797,7 @@ void myfunc() {
|
||||||
libusb_submit_transfer(transfer);
|
libusb_submit_transfer(transfer);
|
||||||
|
|
||||||
while (!completed) {
|
while (!completed) {
|
||||||
poll(libusbx file descriptors, 120*1000);
|
poll(libusb file descriptors, 120*1000);
|
||||||
if (poll indicates activity)
|
if (poll indicates activity)
|
||||||
libusb_handle_events_timeout(ctx, &zero_tv);
|
libusb_handle_events_timeout(ctx, &zero_tv);
|
||||||
}
|
}
|
||||||
|
@ -811,7 +811,7 @@ void myfunc() {
|
||||||
* The poll() loop has a long timeout to minimize CPU usage during situations
|
* The poll() loop has a long timeout to minimize CPU usage during situations
|
||||||
* when nothing is happening (it could reasonably be unlimited).
|
* when nothing is happening (it could reasonably be unlimited).
|
||||||
*
|
*
|
||||||
* If this is the only thread that is polling libusbx's file descriptors, there
|
* If this is the only thread that is polling libusb's file descriptors, there
|
||||||
* is no problem: there is no danger that another thread will swallow up the
|
* is no problem: there is no danger that another thread will swallow up the
|
||||||
* event that we are interested in. On the other hand, if there is another
|
* event that we are interested in. On the other hand, if there is another
|
||||||
* thread polling the same descriptors, there is a chance that it will receive
|
* thread polling the same descriptors, there is a chance that it will receive
|
||||||
|
@ -823,13 +823,13 @@ void myfunc() {
|
||||||
*
|
*
|
||||||
* The solution here is to ensure that no two threads are ever polling the
|
* The solution here is to ensure that no two threads are ever polling the
|
||||||
* file descriptors at the same time. A naive implementation of this would
|
* file descriptors at the same time. A naive implementation of this would
|
||||||
* impact the capabilities of the library, so libusbx offers the scheme
|
* impact the capabilities of the library, so libusb offers the scheme
|
||||||
* documented below to ensure no loss of functionality.
|
* documented below to ensure no loss of functionality.
|
||||||
*
|
*
|
||||||
* Before we go any further, it is worth mentioning that all libusb-wrapped
|
* Before we go any further, it is worth mentioning that all libusb-wrapped
|
||||||
* event handling procedures fully adhere to the scheme documented below.
|
* event handling procedures fully adhere to the scheme documented below.
|
||||||
* This includes libusb_handle_events() and its variants, and all the
|
* This includes libusb_handle_events() and its variants, and all the
|
||||||
* synchronous I/O functions - libusbx hides this headache from you.
|
* synchronous I/O functions - libusb hides this headache from you.
|
||||||
*
|
*
|
||||||
* \section Using libusb_handle_events() from multiple threads
|
* \section Using libusb_handle_events() from multiple threads
|
||||||
*
|
*
|
||||||
|
@ -875,17 +875,17 @@ void myfunc() {
|
||||||
*
|
*
|
||||||
* \section eventlock The events lock
|
* \section eventlock The events lock
|
||||||
*
|
*
|
||||||
* The problem is when we consider the fact that libusbx exposes file
|
* The problem is when we consider the fact that libusb exposes file
|
||||||
* descriptors to allow for you to integrate asynchronous USB I/O into
|
* descriptors to allow for you to integrate asynchronous USB I/O into
|
||||||
* existing main loops, effectively allowing you to do some work behind
|
* existing main loops, effectively allowing you to do some work behind
|
||||||
* libusbx's back. If you do take libusbx's file descriptors and pass them to
|
* libusb's back. If you do take libusb's file descriptors and pass them to
|
||||||
* poll()/select() yourself, you need to be aware of the associated issues.
|
* poll()/select() yourself, you need to be aware of the associated issues.
|
||||||
*
|
*
|
||||||
* The first concept to be introduced is the events lock. The events lock
|
* The first concept to be introduced is the events lock. The events lock
|
||||||
* is used to serialize threads that want to handle events, such that only
|
* is used to serialize threads that want to handle events, such that only
|
||||||
* one thread is handling events at any one time.
|
* one thread is handling events at any one time.
|
||||||
*
|
*
|
||||||
* You must take the events lock before polling libusbx file descriptors,
|
* You must take the events lock before polling libusb file descriptors,
|
||||||
* using libusb_lock_events(). You must release the lock as soon as you have
|
* using libusb_lock_events(). You must release the lock as soon as you have
|
||||||
* aborted your poll()/select() loop, using libusb_unlock_events().
|
* aborted your poll()/select() loop, using libusb_unlock_events().
|
||||||
*
|
*
|
||||||
|
@ -896,7 +896,7 @@ void myfunc() {
|
||||||
\code
|
\code
|
||||||
libusb_lock_events(ctx);
|
libusb_lock_events(ctx);
|
||||||
while (!completed) {
|
while (!completed) {
|
||||||
poll(libusbx file descriptors, 120*1000);
|
poll(libusb file descriptors, 120*1000);
|
||||||
if (poll indicates activity)
|
if (poll indicates activity)
|
||||||
libusb_handle_events_timeout(ctx, &zero_tv);
|
libusb_handle_events_timeout(ctx, &zero_tv);
|
||||||
}
|
}
|
||||||
|
@ -912,7 +912,7 @@ void myfunc() {
|
||||||
* status of its transfer until the code above has finished (30 seconds later)
|
* status of its transfer until the code above has finished (30 seconds later)
|
||||||
* due to contention on the lock.
|
* due to contention on the lock.
|
||||||
*
|
*
|
||||||
* To solve this, libusbx offers you a mechanism to determine when another
|
* To solve this, libusb offers you a mechanism to determine when another
|
||||||
* thread is handling events. It also offers a mechanism to block your thread
|
* thread is handling events. It also offers a mechanism to block your thread
|
||||||
* until the event handling thread has completed an event (and this mechanism
|
* until the event handling thread has completed an event (and this mechanism
|
||||||
* does not involve polling of file descriptors).
|
* does not involve polling of file descriptors).
|
||||||
|
@ -938,7 +938,7 @@ if (libusb_try_lock_events(ctx) == 0) {
|
||||||
libusb_unlock_events(ctx);
|
libusb_unlock_events(ctx);
|
||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
poll(libusbx file descriptors, 120*1000);
|
poll(libusb file descriptors, 120*1000);
|
||||||
if (poll indicates activity)
|
if (poll indicates activity)
|
||||||
libusb_handle_events_locked(ctx, 0);
|
libusb_handle_events_locked(ctx, 0);
|
||||||
}
|
}
|
||||||
|
@ -984,8 +984,8 @@ printf("completed!\n");
|
||||||
* should be apparent from the code shown above.
|
* should be apparent from the code shown above.
|
||||||
* -# libusb_try_lock_events() is a non-blocking function which attempts
|
* -# libusb_try_lock_events() is a non-blocking function which attempts
|
||||||
* to acquire the events lock but returns a failure code if it is contended.
|
* to acquire the events lock but returns a failure code if it is contended.
|
||||||
* -# libusb_event_handling_ok() checks that libusbx is still happy for your
|
* -# libusb_event_handling_ok() checks that libusb is still happy for your
|
||||||
* thread to be performing event handling. Sometimes, libusbx needs to
|
* thread to be performing event handling. Sometimes, libusb needs to
|
||||||
* interrupt the event handler, and this is how you can check if you have
|
* interrupt the event handler, and this is how you can check if you have
|
||||||
* been interrupted. If this function returns 0, the correct behaviour is
|
* been interrupted. If this function returns 0, the correct behaviour is
|
||||||
* for you to give up the event handling lock, and then to repeat the cycle.
|
* for you to give up the event handling lock, and then to repeat the cycle.
|
||||||
|
@ -995,12 +995,12 @@ printf("completed!\n");
|
||||||
* libusb_handle_events_timeout() that you can call while holding the
|
* libusb_handle_events_timeout() that you can call while holding the
|
||||||
* events lock. libusb_handle_events_timeout() itself implements similar
|
* events lock. libusb_handle_events_timeout() itself implements similar
|
||||||
* logic to the above, so be sure not to call it when you are
|
* logic to the above, so be sure not to call it when you are
|
||||||
* "working behind libusbx's back", as is the case here.
|
* "working behind libusb's back", as is the case here.
|
||||||
* -# libusb_event_handler_active() determines if someone is currently
|
* -# libusb_event_handler_active() determines if someone is currently
|
||||||
* holding the events lock
|
* holding the events lock
|
||||||
*
|
*
|
||||||
* You might be wondering why there is no function to wake up all threads
|
* You might be wondering why there is no function to wake up all threads
|
||||||
* blocked on libusb_wait_for_event(). This is because libusbx can do this
|
* blocked on libusb_wait_for_event(). This is because libusb can do this
|
||||||
* internally: it will wake up all such threads when someone calls
|
* internally: it will wake up all such threads when someone calls
|
||||||
* libusb_unlock_events() or when a transfer completes (at the point after its
|
* libusb_unlock_events() or when a transfer completes (at the point after its
|
||||||
* callback has returned).
|
* callback has returned).
|
||||||
|
@ -1009,7 +1009,7 @@ printf("completed!\n");
|
||||||
*
|
*
|
||||||
* The above explanation should be enough to get you going, but if you're
|
* The above explanation should be enough to get you going, but if you're
|
||||||
* really thinking through the issues then you may be left with some more
|
* really thinking through the issues then you may be left with some more
|
||||||
* questions regarding libusbx's internals. If you're curious, read on, and if
|
* questions regarding libusb's internals. If you're curious, read on, and if
|
||||||
* not, skip to the next section to avoid confusing yourself!
|
* not, skip to the next section to avoid confusing yourself!
|
||||||
*
|
*
|
||||||
* The immediate question that may spring to mind is: what if one thread
|
* The immediate question that may spring to mind is: what if one thread
|
||||||
|
@ -1024,14 +1024,14 @@ printf("completed!\n");
|
||||||
* are all kinds of race conditions that could arise here, so it is
|
* are all kinds of race conditions that could arise here, so it is
|
||||||
* important that nobody is doing event handling at this time.
|
* important that nobody is doing event handling at this time.
|
||||||
*
|
*
|
||||||
* libusbx handles these issues internally, so application developers do not
|
* libusb handles these issues internally, so application developers do not
|
||||||
* have to stop their event handlers while opening/closing devices. Here's how
|
* have to stop their event handlers while opening/closing devices. Here's how
|
||||||
* it works, focusing on the libusb_close() situation first:
|
* it works, focusing on the libusb_close() situation first:
|
||||||
*
|
*
|
||||||
* -# During initialization, libusbx opens an internal pipe, and it adds the read
|
* -# During initialization, libusb opens an internal pipe, and it adds the read
|
||||||
* end of this pipe to the set of file descriptors to be polled.
|
* end of this pipe to the set of file descriptors to be polled.
|
||||||
* -# During libusb_close(), libusbx writes some dummy data on this control pipe.
|
* -# During libusb_close(), libusb writes some dummy data on this control pipe.
|
||||||
* This immediately interrupts the event handler. libusbx also records
|
* This immediately interrupts the event handler. libusb also records
|
||||||
* internally that it is trying to interrupt event handlers for this
|
* internally that it is trying to interrupt event handlers for this
|
||||||
* high-priority event.
|
* high-priority event.
|
||||||
* -# At this point, some of the functions described above start behaving
|
* -# At this point, some of the functions described above start behaving
|
||||||
|
@ -1046,7 +1046,7 @@ printf("completed!\n");
|
||||||
* giving up the events lock very quickly, giving the high-priority
|
* giving up the events lock very quickly, giving the high-priority
|
||||||
* libusb_close() operation a "free ride" to acquire the events lock. All
|
* libusb_close() operation a "free ride" to acquire the events lock. All
|
||||||
* threads that are competing to do event handling become event waiters.
|
* threads that are competing to do event handling become event waiters.
|
||||||
* -# With the events lock held inside libusb_close(), libusbx can safely remove
|
* -# With the events lock held inside libusb_close(), libusb can safely remove
|
||||||
* a file descriptor from the poll set, in the safety of knowledge that
|
* a file descriptor from the poll set, in the safety of knowledge that
|
||||||
* nobody is polling those descriptors or trying to access the poll set.
|
* nobody is polling those descriptors or trying to access the poll set.
|
||||||
* -# After obtaining the events lock, the close operation completes very
|
* -# After obtaining the events lock, the close operation completes very
|
||||||
|
@ -1063,7 +1063,7 @@ printf("completed!\n");
|
||||||
* call to libusb_open():
|
* call to libusb_open():
|
||||||
*
|
*
|
||||||
* -# The device is opened and a file descriptor is added to the poll set.
|
* -# The device is opened and a file descriptor is added to the poll set.
|
||||||
* -# libusbx sends some dummy data on the control pipe, and records that it
|
* -# libusb sends some dummy data on the control pipe, and records that it
|
||||||
* is trying to modify the poll descriptor set.
|
* is trying to modify the poll descriptor set.
|
||||||
* -# The event handler is interrupted, and the same behaviour change as for
|
* -# The event handler is interrupted, and the same behaviour change as for
|
||||||
* libusb_close() takes effect, causing all event handling threads to become
|
* libusb_close() takes effect, causing all event handling threads to become
|
||||||
|
@ -1079,7 +1079,7 @@ printf("completed!\n");
|
||||||
*
|
*
|
||||||
* The above may seem a little complicated, but hopefully I have made it clear
|
* The above may seem a little complicated, but hopefully I have made it clear
|
||||||
* why such complications are necessary. Also, do not forget that this only
|
* why such complications are necessary. Also, do not forget that this only
|
||||||
* applies to applications that take libusbx's file descriptors and integrate
|
* applies to applications that take libusb's file descriptors and integrate
|
||||||
* them into their own polling loops.
|
* them into their own polling loops.
|
||||||
*
|
*
|
||||||
* You may decide that it is OK for your multi-threaded application to ignore
|
* You may decide that it is OK for your multi-threaded application to ignore
|
||||||
|
@ -1291,7 +1291,7 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
/** \ingroup asyncio
|
/** \ingroup asyncio
|
||||||
* Allocate a libusbx transfer with a specified number of isochronous packet
|
* Allocate a libusb transfer with a specified number of isochronous packet
|
||||||
* descriptors. The returned transfer is pre-initialized for you. When the new
|
* descriptors. The returned transfer is pre-initialized for you. When the new
|
||||||
* transfer is no longer needed, it should be freed with
|
* transfer is no longer needed, it should be freed with
|
||||||
* libusb_free_transfer().
|
* libusb_free_transfer().
|
||||||
|
@ -1439,6 +1439,7 @@ int API_EXPORTED libusb_submit_transfer(struct libusb_transfer *transfer)
|
||||||
int r;
|
int r;
|
||||||
int updated_fds;
|
int updated_fds;
|
||||||
|
|
||||||
|
usbi_mutex_lock(&ctx->flying_transfers_lock);
|
||||||
usbi_mutex_lock(&itransfer->lock);
|
usbi_mutex_lock(&itransfer->lock);
|
||||||
itransfer->transferred = 0;
|
itransfer->transferred = 0;
|
||||||
itransfer->flags = 0;
|
itransfer->flags = 0;
|
||||||
|
@ -1448,7 +1449,6 @@ int API_EXPORTED libusb_submit_transfer(struct libusb_transfer *transfer)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
usbi_mutex_lock(&ctx->flying_transfers_lock);
|
|
||||||
r = add_to_flying_list(itransfer);
|
r = add_to_flying_list(itransfer);
|
||||||
if (r == LIBUSB_SUCCESS) {
|
if (r == LIBUSB_SUCCESS) {
|
||||||
r = usbi_backend->submit_transfer(itransfer);
|
r = usbi_backend->submit_transfer(itransfer);
|
||||||
|
@ -1456,12 +1456,14 @@ int API_EXPORTED libusb_submit_transfer(struct libusb_transfer *transfer)
|
||||||
if (r != LIBUSB_SUCCESS) {
|
if (r != LIBUSB_SUCCESS) {
|
||||||
list_del(&itransfer->list);
|
list_del(&itransfer->list);
|
||||||
arm_timerfd_for_next_timeout(ctx);
|
arm_timerfd_for_next_timeout(ctx);
|
||||||
|
} else {
|
||||||
|
/* keep a reference to this device */
|
||||||
|
libusb_ref_device(transfer->dev_handle->dev);
|
||||||
}
|
}
|
||||||
usbi_mutex_unlock(&ctx->flying_transfers_lock);
|
|
||||||
|
|
||||||
out:
|
out:
|
||||||
updated_fds = (itransfer->flags & USBI_TRANSFER_UPDATED_FDS);
|
updated_fds = (itransfer->flags & USBI_TRANSFER_UPDATED_FDS);
|
||||||
usbi_mutex_unlock(&itransfer->lock);
|
usbi_mutex_unlock(&itransfer->lock);
|
||||||
|
usbi_mutex_unlock(&ctx->flying_transfers_lock);
|
||||||
if (updated_fds)
|
if (updated_fds)
|
||||||
usbi_fd_notification(ctx);
|
usbi_fd_notification(ctx);
|
||||||
return r;
|
return r;
|
||||||
|
@ -1508,6 +1510,43 @@ int API_EXPORTED libusb_cancel_transfer(struct libusb_transfer *transfer)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** \ingroup asyncio
|
||||||
|
* Set a transfers bulk stream id. Note users are advised to use
|
||||||
|
* libusb_fill_bulk_stream_transfer() instead of calling this function
|
||||||
|
* directly.
|
||||||
|
*
|
||||||
|
* Since version 1.0.19, \ref LIBUSB_API_VERSION >= 0x01000103
|
||||||
|
*
|
||||||
|
* \param transfer the transfer to set the stream id for
|
||||||
|
* \param stream_id the stream id to set
|
||||||
|
* \see libusb_alloc_streams()
|
||||||
|
*/
|
||||||
|
void API_EXPORTED libusb_transfer_set_stream_id(
|
||||||
|
struct libusb_transfer *transfer, uint32_t stream_id)
|
||||||
|
{
|
||||||
|
struct usbi_transfer *itransfer =
|
||||||
|
LIBUSB_TRANSFER_TO_USBI_TRANSFER(transfer);
|
||||||
|
|
||||||
|
itransfer->stream_id = stream_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** \ingroup asyncio
|
||||||
|
* Get a transfers bulk stream id.
|
||||||
|
*
|
||||||
|
* Since version 1.0.19, \ref LIBUSB_API_VERSION >= 0x01000103
|
||||||
|
*
|
||||||
|
* \param transfer the transfer to get the stream id for
|
||||||
|
* \returns the stream id for the transfer
|
||||||
|
*/
|
||||||
|
uint32_t API_EXPORTED libusb_transfer_get_stream_id(
|
||||||
|
struct libusb_transfer *transfer)
|
||||||
|
{
|
||||||
|
struct usbi_transfer *itransfer =
|
||||||
|
LIBUSB_TRANSFER_TO_USBI_TRANSFER(transfer);
|
||||||
|
|
||||||
|
return itransfer->stream_id;
|
||||||
|
}
|
||||||
|
|
||||||
/* Handle completion of a transfer (completion might be an error condition).
|
/* Handle completion of a transfer (completion might be an error condition).
|
||||||
* This will invoke the user-supplied callback function, which may end up
|
* This will invoke the user-supplied callback function, which may end up
|
||||||
* freeing the transfer. Therefore you cannot use the transfer structure
|
* freeing the transfer. Therefore you cannot use the transfer structure
|
||||||
|
@ -1522,6 +1561,7 @@ int usbi_handle_transfer_completion(struct usbi_transfer *itransfer,
|
||||||
struct libusb_transfer *transfer =
|
struct libusb_transfer *transfer =
|
||||||
USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
||||||
struct libusb_context *ctx = TRANSFER_CTX(transfer);
|
struct libusb_context *ctx = TRANSFER_CTX(transfer);
|
||||||
|
struct libusb_device_handle *handle = transfer->dev_handle;
|
||||||
uint8_t flags;
|
uint8_t flags;
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
|
||||||
|
@ -1562,6 +1602,7 @@ int usbi_handle_transfer_completion(struct usbi_transfer *itransfer,
|
||||||
usbi_mutex_lock(&ctx->event_waiters_lock);
|
usbi_mutex_lock(&ctx->event_waiters_lock);
|
||||||
usbi_cond_broadcast(&ctx->event_waiters_cond);
|
usbi_cond_broadcast(&ctx->event_waiters_cond);
|
||||||
usbi_mutex_unlock(&ctx->event_waiters_lock);
|
usbi_mutex_unlock(&ctx->event_waiters_lock);
|
||||||
|
libusb_unref_device(handle->dev);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1585,11 +1626,11 @@ int usbi_handle_transfer_cancellation(struct usbi_transfer *transfer)
|
||||||
|
|
||||||
/** \ingroup poll
|
/** \ingroup poll
|
||||||
* Attempt to acquire the event handling lock. This lock is used to ensure that
|
* Attempt to acquire the event handling lock. This lock is used to ensure that
|
||||||
* only one thread is monitoring libusbx event sources at any one time.
|
* only one thread is monitoring libusb event sources at any one time.
|
||||||
*
|
*
|
||||||
* You only need to use this lock if you are developing an application
|
* You only need to use this lock if you are developing an application
|
||||||
* which calls poll() or select() on libusbx's file descriptors directly.
|
* which calls poll() or select() on libusb's file descriptors directly.
|
||||||
* If you stick to libusbx's event handling loop functions (e.g.
|
* If you stick to libusb's event handling loop functions (e.g.
|
||||||
* libusb_handle_events()) then you do not need to be concerned with this
|
* libusb_handle_events()) then you do not need to be concerned with this
|
||||||
* locking.
|
* locking.
|
||||||
*
|
*
|
||||||
|
@ -1600,7 +1641,7 @@ int usbi_handle_transfer_cancellation(struct usbi_transfer *transfer)
|
||||||
* \param ctx the context to operate on, or NULL for the default context
|
* \param ctx the context to operate on, or NULL for the default context
|
||||||
* \returns 0 if the lock was obtained successfully
|
* \returns 0 if the lock was obtained successfully
|
||||||
* \returns 1 if the lock was not obtained (i.e. another thread holds the lock)
|
* \returns 1 if the lock was not obtained (i.e. another thread holds the lock)
|
||||||
* \see \ref mtasync
|
* \ref mtasync
|
||||||
*/
|
*/
|
||||||
int API_EXPORTED libusb_try_lock_events(libusb_context *ctx)
|
int API_EXPORTED libusb_try_lock_events(libusb_context *ctx)
|
||||||
{
|
{
|
||||||
|
@ -1629,11 +1670,11 @@ int API_EXPORTED libusb_try_lock_events(libusb_context *ctx)
|
||||||
/** \ingroup poll
|
/** \ingroup poll
|
||||||
* Acquire the event handling lock, blocking until successful acquisition if
|
* Acquire the event handling lock, blocking until successful acquisition if
|
||||||
* it is contended. This lock is used to ensure that only one thread is
|
* it is contended. This lock is used to ensure that only one thread is
|
||||||
* monitoring libusbx event sources at any one time.
|
* monitoring libusb event sources at any one time.
|
||||||
*
|
*
|
||||||
* You only need to use this lock if you are developing an application
|
* You only need to use this lock if you are developing an application
|
||||||
* which calls poll() or select() on libusbx's file descriptors directly.
|
* which calls poll() or select() on libusb's file descriptors directly.
|
||||||
* If you stick to libusbx's event handling loop functions (e.g.
|
* If you stick to libusb's event handling loop functions (e.g.
|
||||||
* libusb_handle_events()) then you do not need to be concerned with this
|
* libusb_handle_events()) then you do not need to be concerned with this
|
||||||
* locking.
|
* locking.
|
||||||
*
|
*
|
||||||
|
@ -1642,7 +1683,7 @@ int API_EXPORTED libusb_try_lock_events(libusb_context *ctx)
|
||||||
* as soon as possible.
|
* as soon as possible.
|
||||||
*
|
*
|
||||||
* \param ctx the context to operate on, or NULL for the default context
|
* \param ctx the context to operate on, or NULL for the default context
|
||||||
* \see \ref mtasync
|
* \ref mtasync
|
||||||
*/
|
*/
|
||||||
void API_EXPORTED libusb_lock_events(libusb_context *ctx)
|
void API_EXPORTED libusb_lock_events(libusb_context *ctx)
|
||||||
{
|
{
|
||||||
|
@ -1657,7 +1698,7 @@ void API_EXPORTED libusb_lock_events(libusb_context *ctx)
|
||||||
* on libusb_wait_for_event().
|
* on libusb_wait_for_event().
|
||||||
*
|
*
|
||||||
* \param ctx the context to operate on, or NULL for the default context
|
* \param ctx the context to operate on, or NULL for the default context
|
||||||
* \see \ref mtasync
|
* \ref mtasync
|
||||||
*/
|
*/
|
||||||
void API_EXPORTED libusb_unlock_events(libusb_context *ctx)
|
void API_EXPORTED libusb_unlock_events(libusb_context *ctx)
|
||||||
{
|
{
|
||||||
|
@ -1676,7 +1717,7 @@ void API_EXPORTED libusb_unlock_events(libusb_context *ctx)
|
||||||
/** \ingroup poll
|
/** \ingroup poll
|
||||||
* Determine if it is still OK for this thread to be doing event handling.
|
* Determine if it is still OK for this thread to be doing event handling.
|
||||||
*
|
*
|
||||||
* Sometimes, libusbx needs to temporarily pause all event handlers, and this
|
* Sometimes, libusb needs to temporarily pause all event handlers, and this
|
||||||
* is the function you should use before polling file descriptors to see if
|
* is the function you should use before polling file descriptors to see if
|
||||||
* this is the case.
|
* this is the case.
|
||||||
*
|
*
|
||||||
|
@ -1692,7 +1733,7 @@ void API_EXPORTED libusb_unlock_events(libusb_context *ctx)
|
||||||
* \param ctx the context to operate on, or NULL for the default context
|
* \param ctx the context to operate on, or NULL for the default context
|
||||||
* \returns 1 if event handling can start or continue
|
* \returns 1 if event handling can start or continue
|
||||||
* \returns 0 if this thread must give up the events lock
|
* \returns 0 if this thread must give up the events lock
|
||||||
* \see \ref fullstory "Multi-threaded I/O: the full story"
|
* \ref fullstory "Multi-threaded I/O: the full story"
|
||||||
*/
|
*/
|
||||||
int API_EXPORTED libusb_event_handling_ok(libusb_context *ctx)
|
int API_EXPORTED libusb_event_handling_ok(libusb_context *ctx)
|
||||||
{
|
{
|
||||||
|
@ -1720,7 +1761,7 @@ int API_EXPORTED libusb_event_handling_ok(libusb_context *ctx)
|
||||||
* \param ctx the context to operate on, or NULL for the default context
|
* \param ctx the context to operate on, or NULL for the default context
|
||||||
* \returns 1 if a thread is handling events
|
* \returns 1 if a thread is handling events
|
||||||
* \returns 0 if there are no threads currently handling events
|
* \returns 0 if there are no threads currently handling events
|
||||||
* \see \ref mtasync
|
* \ref mtasync
|
||||||
*/
|
*/
|
||||||
int API_EXPORTED libusb_event_handler_active(libusb_context *ctx)
|
int API_EXPORTED libusb_event_handler_active(libusb_context *ctx)
|
||||||
{
|
{
|
||||||
|
@ -1750,14 +1791,14 @@ int API_EXPORTED libusb_event_handler_active(libusb_context *ctx)
|
||||||
* events, then call libusb_wait_for_event().
|
* events, then call libusb_wait_for_event().
|
||||||
*
|
*
|
||||||
* You only need to use this lock if you are developing an application
|
* You only need to use this lock if you are developing an application
|
||||||
* which calls poll() or select() on libusbx's file descriptors directly,
|
* which calls poll() or select() on libusb's file descriptors directly,
|
||||||
* <b>and</b> may potentially be handling events from 2 threads simultaenously.
|
* <b>and</b> may potentially be handling events from 2 threads simultaenously.
|
||||||
* If you stick to libusbx's event handling loop functions (e.g.
|
* If you stick to libusb's event handling loop functions (e.g.
|
||||||
* libusb_handle_events()) then you do not need to be concerned with this
|
* libusb_handle_events()) then you do not need to be concerned with this
|
||||||
* locking.
|
* locking.
|
||||||
*
|
*
|
||||||
* \param ctx the context to operate on, or NULL for the default context
|
* \param ctx the context to operate on, or NULL for the default context
|
||||||
* \see \ref mtasync
|
* \ref mtasync
|
||||||
*/
|
*/
|
||||||
void API_EXPORTED libusb_lock_event_waiters(libusb_context *ctx)
|
void API_EXPORTED libusb_lock_event_waiters(libusb_context *ctx)
|
||||||
{
|
{
|
||||||
|
@ -1768,7 +1809,7 @@ void API_EXPORTED libusb_lock_event_waiters(libusb_context *ctx)
|
||||||
/** \ingroup poll
|
/** \ingroup poll
|
||||||
* Release the event waiters lock.
|
* Release the event waiters lock.
|
||||||
* \param ctx the context to operate on, or NULL for the default context
|
* \param ctx the context to operate on, or NULL for the default context
|
||||||
* \see \ref mtasync
|
* \ref mtasync
|
||||||
*/
|
*/
|
||||||
void API_EXPORTED libusb_unlock_event_waiters(libusb_context *ctx)
|
void API_EXPORTED libusb_unlock_event_waiters(libusb_context *ctx)
|
||||||
{
|
{
|
||||||
|
@ -1799,7 +1840,7 @@ void API_EXPORTED libusb_unlock_event_waiters(libusb_context *ctx)
|
||||||
* indicates unlimited timeout.
|
* indicates unlimited timeout.
|
||||||
* \returns 0 after a transfer completes or another thread stops event handling
|
* \returns 0 after a transfer completes or another thread stops event handling
|
||||||
* \returns 1 if the timeout expired
|
* \returns 1 if the timeout expired
|
||||||
* \see \ref mtasync
|
* \ref mtasync
|
||||||
*/
|
*/
|
||||||
int API_EXPORTED libusb_wait_for_event(libusb_context *ctx, struct timeval *tv)
|
int API_EXPORTED libusb_wait_for_event(libusb_context *ctx, struct timeval *tv)
|
||||||
{
|
{
|
||||||
|
@ -1926,6 +1967,7 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv)
|
||||||
struct pollfd *fds = NULL;
|
struct pollfd *fds = NULL;
|
||||||
int i = -1;
|
int i = -1;
|
||||||
int timeout_ms;
|
int timeout_ms;
|
||||||
|
int special_event;
|
||||||
|
|
||||||
usbi_mutex_lock(&ctx->pollfds_lock);
|
usbi_mutex_lock(&ctx->pollfds_lock);
|
||||||
list_for_each_entry(ipollfd, &ctx->pollfds, list, struct usbi_pollfd)
|
list_for_each_entry(ipollfd, &ctx->pollfds, list, struct usbi_pollfd)
|
||||||
|
@ -1955,6 +1997,7 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv)
|
||||||
if (tv->tv_usec % 1000)
|
if (tv->tv_usec % 1000)
|
||||||
timeout_ms++;
|
timeout_ms++;
|
||||||
|
|
||||||
|
redo_poll:
|
||||||
usbi_dbg("poll() %d fds with timeout in %dms", nfds, timeout_ms);
|
usbi_dbg("poll() %d fds with timeout in %dms", nfds, timeout_ms);
|
||||||
r = usbi_poll(fds, nfds, timeout_ms);
|
r = usbi_poll(fds, nfds, timeout_ms);
|
||||||
usbi_dbg("poll() returned %d", r);
|
usbi_dbg("poll() returned %d", r);
|
||||||
|
@ -1970,6 +2013,8 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv)
|
||||||
return LIBUSB_ERROR_IO;
|
return LIBUSB_ERROR_IO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
special_event = 0;
|
||||||
|
|
||||||
/* fd[0] is always the ctrl pipe */
|
/* fd[0] is always the ctrl pipe */
|
||||||
if (fds[0].revents) {
|
if (fds[0].revents) {
|
||||||
/* another thread wanted to interrupt event handling, and it succeeded!
|
/* another thread wanted to interrupt event handling, and it succeeded!
|
||||||
|
@ -1993,11 +2038,12 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv)
|
||||||
ssize_t ret;
|
ssize_t ret;
|
||||||
|
|
||||||
usbi_dbg("caught a fish on the hotplug pipe");
|
usbi_dbg("caught a fish on the hotplug pipe");
|
||||||
|
special_event = 1;
|
||||||
|
|
||||||
/* read the message from the hotplug thread */
|
/* read the message from the hotplug thread */
|
||||||
ret = usbi_read(ctx->hotplug_pipe[0], &message, sizeof (message));
|
ret = usbi_read(ctx->hotplug_pipe[0], &message, sizeof (message));
|
||||||
if (ret < sizeof(message)) {
|
if (ret != sizeof(message)) {
|
||||||
usbi_err(ctx, "hotplug pipe read error %d < %d",
|
usbi_err(ctx, "hotplug pipe read error %d != %u",
|
||||||
ret, sizeof(message));
|
ret, sizeof(message));
|
||||||
r = LIBUSB_ERROR_OTHER;
|
r = LIBUSB_ERROR_OTHER;
|
||||||
goto handled;
|
goto handled;
|
||||||
|
@ -2020,6 +2066,7 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv)
|
||||||
/* timerfd indicates that a timeout has expired */
|
/* timerfd indicates that a timeout has expired */
|
||||||
int ret;
|
int ret;
|
||||||
usbi_dbg("timerfd triggered");
|
usbi_dbg("timerfd triggered");
|
||||||
|
special_event = 1;
|
||||||
|
|
||||||
ret = handle_timerfd_trigger(ctx);
|
ret = handle_timerfd_trigger(ctx);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
@ -2044,6 +2091,11 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv)
|
||||||
usbi_err(ctx, "backend handle_events failed with error %d", r);
|
usbi_err(ctx, "backend handle_events failed with error %d", r);
|
||||||
|
|
||||||
handled:
|
handled:
|
||||||
|
if (r == 0 && special_event) {
|
||||||
|
timeout_ms = 0;
|
||||||
|
goto redo_poll;
|
||||||
|
}
|
||||||
|
|
||||||
free(fds);
|
free(fds);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -2078,7 +2130,7 @@ static int get_next_timeout(libusb_context *ctx, struct timeval *tv,
|
||||||
/** \ingroup poll
|
/** \ingroup poll
|
||||||
* Handle any pending events.
|
* Handle any pending events.
|
||||||
*
|
*
|
||||||
* libusbx determines "pending events" by checking if any timeouts have expired
|
* libusb determines "pending events" by checking if any timeouts have expired
|
||||||
* and by checking the set of file descriptors for activity.
|
* and by checking the set of file descriptors for activity.
|
||||||
*
|
*
|
||||||
* If a zero timeval is passed, this function will handle any already-pending
|
* If a zero timeval is passed, this function will handle any already-pending
|
||||||
|
@ -2099,7 +2151,7 @@ static int get_next_timeout(libusb_context *ctx, struct timeval *tv,
|
||||||
* timeval struct for non-blocking mode
|
* timeval struct for non-blocking mode
|
||||||
* \param completed pointer to completion integer to check, or NULL
|
* \param completed pointer to completion integer to check, or NULL
|
||||||
* \returns 0 on success, or a LIBUSB_ERROR code on failure
|
* \returns 0 on success, or a LIBUSB_ERROR code on failure
|
||||||
* \see \ref mtasync
|
* \ref mtasync
|
||||||
*/
|
*/
|
||||||
int API_EXPORTED libusb_handle_events_timeout_completed(libusb_context *ctx,
|
int API_EXPORTED libusb_handle_events_timeout_completed(libusb_context *ctx,
|
||||||
struct timeval *tv, int *completed)
|
struct timeval *tv, int *completed)
|
||||||
|
@ -2210,7 +2262,7 @@ int API_EXPORTED libusb_handle_events(libusb_context *ctx)
|
||||||
* \param ctx the context to operate on, or NULL for the default context
|
* \param ctx the context to operate on, or NULL for the default context
|
||||||
* \param completed pointer to completion integer to check, or NULL
|
* \param completed pointer to completion integer to check, or NULL
|
||||||
* \returns 0 on success, or a LIBUSB_ERROR code on failure
|
* \returns 0 on success, or a LIBUSB_ERROR code on failure
|
||||||
* \see \ref mtasync
|
* \ref mtasync
|
||||||
*/
|
*/
|
||||||
int API_EXPORTED libusb_handle_events_completed(libusb_context *ctx,
|
int API_EXPORTED libusb_handle_events_completed(libusb_context *ctx,
|
||||||
int *completed)
|
int *completed)
|
||||||
|
@ -2227,16 +2279,16 @@ int API_EXPORTED libusb_handle_events_completed(libusb_context *ctx,
|
||||||
* held, see libusb_lock_events().
|
* held, see libusb_lock_events().
|
||||||
*
|
*
|
||||||
* This function is designed to be called under the situation where you have
|
* This function is designed to be called under the situation where you have
|
||||||
* taken the event lock and are calling poll()/select() directly on libusbx's
|
* taken the event lock and are calling poll()/select() directly on libusb's
|
||||||
* file descriptors (as opposed to using libusb_handle_events() or similar).
|
* file descriptors (as opposed to using libusb_handle_events() or similar).
|
||||||
* You detect events on libusbx's descriptors, so you then call this function
|
* You detect events on libusb's descriptors, so you then call this function
|
||||||
* with a zero timeout value (while still holding the event lock).
|
* with a zero timeout value (while still holding the event lock).
|
||||||
*
|
*
|
||||||
* \param ctx the context to operate on, or NULL for the default context
|
* \param ctx the context to operate on, or NULL for the default context
|
||||||
* \param tv the maximum time to block waiting for events, or zero for
|
* \param tv the maximum time to block waiting for events, or zero for
|
||||||
* non-blocking mode
|
* non-blocking mode
|
||||||
* \returns 0 on success, or a LIBUSB_ERROR code on failure
|
* \returns 0 on success, or a LIBUSB_ERROR code on failure
|
||||||
* \see \ref mtasync
|
* \ref mtasync
|
||||||
*/
|
*/
|
||||||
int API_EXPORTED libusb_handle_events_locked(libusb_context *ctx,
|
int API_EXPORTED libusb_handle_events_locked(libusb_context *ctx,
|
||||||
struct timeval *tv)
|
struct timeval *tv)
|
||||||
|
@ -2256,19 +2308,19 @@ int API_EXPORTED libusb_handle_events_locked(libusb_context *ctx,
|
||||||
|
|
||||||
/** \ingroup poll
|
/** \ingroup poll
|
||||||
* Determines whether your application must apply special timing considerations
|
* Determines whether your application must apply special timing considerations
|
||||||
* when monitoring libusbx's file descriptors.
|
* when monitoring libusb's file descriptors.
|
||||||
*
|
*
|
||||||
* This function is only useful for applications which retrieve and poll
|
* This function is only useful for applications which retrieve and poll
|
||||||
* libusbx's file descriptors in their own main loop (\ref pollmain).
|
* libusb's file descriptors in their own main loop (\ref pollmain).
|
||||||
*
|
*
|
||||||
* Ordinarily, libusbx's event handler needs to be called into at specific
|
* Ordinarily, libusb's event handler needs to be called into at specific
|
||||||
* moments in time (in addition to times when there is activity on the file
|
* moments in time (in addition to times when there is activity on the file
|
||||||
* descriptor set). The usual approach is to use libusb_get_next_timeout()
|
* descriptor set). The usual approach is to use libusb_get_next_timeout()
|
||||||
* to learn about when the next timeout occurs, and to adjust your
|
* to learn about when the next timeout occurs, and to adjust your
|
||||||
* poll()/select() timeout accordingly so that you can make a call into the
|
* poll()/select() timeout accordingly so that you can make a call into the
|
||||||
* library at that time.
|
* library at that time.
|
||||||
*
|
*
|
||||||
* Some platforms supported by libusbx do not come with this baggage - any
|
* Some platforms supported by libusb do not come with this baggage - any
|
||||||
* events relevant to timing will be represented by activity on the file
|
* events relevant to timing will be represented by activity on the file
|
||||||
* descriptor set, and libusb_get_next_timeout() will always return 0.
|
* descriptor set, and libusb_get_next_timeout() will always return 0.
|
||||||
* This function allows you to detect whether you are running on such a
|
* This function allows you to detect whether you are running on such a
|
||||||
|
@ -2277,10 +2329,10 @@ int API_EXPORTED libusb_handle_events_locked(libusb_context *ctx,
|
||||||
* Since v1.0.5.
|
* Since v1.0.5.
|
||||||
*
|
*
|
||||||
* \param ctx the context to operate on, or NULL for the default context
|
* \param ctx the context to operate on, or NULL for the default context
|
||||||
* \returns 0 if you must call into libusbx at times determined by
|
* \returns 0 if you must call into libusb at times determined by
|
||||||
* libusb_get_next_timeout(), or 1 if all timeout events are handled internally
|
* libusb_get_next_timeout(), or 1 if all timeout events are handled internally
|
||||||
* or through regular activity on the file descriptors.
|
* or through regular activity on the file descriptors.
|
||||||
* \see \ref pollmain "Polling libusbx file descriptors for event handling"
|
* \ref pollmain "Polling libusb file descriptors for event handling"
|
||||||
*/
|
*/
|
||||||
int API_EXPORTED libusb_pollfds_handle_timeouts(libusb_context *ctx)
|
int API_EXPORTED libusb_pollfds_handle_timeouts(libusb_context *ctx)
|
||||||
{
|
{
|
||||||
|
@ -2294,21 +2346,21 @@ int API_EXPORTED libusb_pollfds_handle_timeouts(libusb_context *ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** \ingroup poll
|
/** \ingroup poll
|
||||||
* Determine the next internal timeout that libusbx needs to handle. You only
|
* Determine the next internal timeout that libusb needs to handle. You only
|
||||||
* need to use this function if you are calling poll() or select() or similar
|
* need to use this function if you are calling poll() or select() or similar
|
||||||
* on libusbx's file descriptors yourself - you do not need to use it if you
|
* on libusb's file descriptors yourself - you do not need to use it if you
|
||||||
* are calling libusb_handle_events() or a variant directly.
|
* are calling libusb_handle_events() or a variant directly.
|
||||||
*
|
*
|
||||||
* You should call this function in your main loop in order to determine how
|
* You should call this function in your main loop in order to determine how
|
||||||
* long to wait for select() or poll() to return results. libusbx needs to be
|
* long to wait for select() or poll() to return results. libusb needs to be
|
||||||
* called into at this timeout, so you should use it as an upper bound on
|
* called into at this timeout, so you should use it as an upper bound on
|
||||||
* your select() or poll() call.
|
* your select() or poll() call.
|
||||||
*
|
*
|
||||||
* When the timeout has expired, call into libusb_handle_events_timeout()
|
* When the timeout has expired, call into libusb_handle_events_timeout()
|
||||||
* (perhaps in non-blocking mode) so that libusbx can handle the timeout.
|
* (perhaps in non-blocking mode) so that libusb can handle the timeout.
|
||||||
*
|
*
|
||||||
* This function may return 1 (success) and an all-zero timeval. If this is
|
* This function may return 1 (success) and an all-zero timeval. If this is
|
||||||
* the case, it indicates that libusbx has a timeout that has already expired
|
* the case, it indicates that libusb has a timeout that has already expired
|
||||||
* so you should call libusb_handle_events_timeout() or similar immediately.
|
* so you should call libusb_handle_events_timeout() or similar immediately.
|
||||||
* A return code of 0 indicates that there are no pending timeouts.
|
* A return code of 0 indicates that there are no pending timeouts.
|
||||||
*
|
*
|
||||||
|
@ -2317,7 +2369,7 @@ int API_EXPORTED libusb_pollfds_handle_timeouts(libusb_context *ctx)
|
||||||
*
|
*
|
||||||
* \param ctx the context to operate on, or NULL for the default context
|
* \param ctx the context to operate on, or NULL for the default context
|
||||||
* \param tv output location for a relative time against the current
|
* \param tv output location for a relative time against the current
|
||||||
* clock in which libusbx must be called into in order to process timeout events
|
* clock in which libusb must be called into in order to process timeout events
|
||||||
* \returns 0 if there are no pending timeouts, 1 if a timeout was returned,
|
* \returns 0 if there are no pending timeouts, 1 if a timeout was returned,
|
||||||
* or LIBUSB_ERROR_OTHER on failure
|
* or LIBUSB_ERROR_OTHER on failure
|
||||||
*/
|
*/
|
||||||
|
@ -2384,7 +2436,7 @@ int API_EXPORTED libusb_get_next_timeout(libusb_context *ctx,
|
||||||
/** \ingroup poll
|
/** \ingroup poll
|
||||||
* Register notification functions for file descriptor additions/removals.
|
* Register notification functions for file descriptor additions/removals.
|
||||||
* These functions will be invoked for every new or removed file descriptor
|
* These functions will be invoked for every new or removed file descriptor
|
||||||
* that libusbx uses as an event source.
|
* that libusb uses as an event source.
|
||||||
*
|
*
|
||||||
* To remove notifiers, pass NULL values for the function pointers.
|
* To remove notifiers, pass NULL values for the function pointers.
|
||||||
*
|
*
|
||||||
|
@ -2462,7 +2514,7 @@ void usbi_remove_pollfd(struct libusb_context *ctx, int fd)
|
||||||
|
|
||||||
/** \ingroup poll
|
/** \ingroup poll
|
||||||
* Retrieve a list of file descriptors that should be polled by your main loop
|
* Retrieve a list of file descriptors that should be polled by your main loop
|
||||||
* as libusbx event sources.
|
* as libusb event sources.
|
||||||
*
|
*
|
||||||
* The returned list is NULL-terminated and should be freed with free() when
|
* The returned list is NULL-terminated and should be freed with free() when
|
||||||
* done. The actual list contents must not be touched.
|
* done. The actual list contents must not be touched.
|
||||||
|
@ -2502,7 +2554,7 @@ out:
|
||||||
usbi_mutex_unlock(&ctx->pollfds_lock);
|
usbi_mutex_unlock(&ctx->pollfds_lock);
|
||||||
return (const struct libusb_pollfd **) ret;
|
return (const struct libusb_pollfd **) ret;
|
||||||
#else
|
#else
|
||||||
usbi_err(ctx, "external polling of libusbx's internal descriptors "\
|
usbi_err(ctx, "external polling of libusb's internal descriptors "\
|
||||||
"is not yet supported on Windows platforms");
|
"is not yet supported on Windows platforms");
|
||||||
return NULL;
|
return NULL;
|
||||||
#endif
|
#endif
|
|
@ -1,5 +1,7 @@
|
||||||
LIBRARY "libusb-1.0.dll"
|
LIBRARY "libusb-1.0.dll"
|
||||||
EXPORTS
|
EXPORTS
|
||||||
|
libusb_alloc_streams
|
||||||
|
libusb_alloc_streams@16 = libusb_alloc_streams
|
||||||
libusb_alloc_transfer
|
libusb_alloc_transfer
|
||||||
libusb_alloc_transfer@4 = libusb_alloc_transfer
|
libusb_alloc_transfer@4 = libusb_alloc_transfer
|
||||||
libusb_attach_kernel_driver
|
libusb_attach_kernel_driver
|
||||||
|
@ -38,6 +40,8 @@ EXPORTS
|
||||||
libusb_free_ss_endpoint_companion_descriptor@4 = libusb_free_ss_endpoint_companion_descriptor
|
libusb_free_ss_endpoint_companion_descriptor@4 = libusb_free_ss_endpoint_companion_descriptor
|
||||||
libusb_free_ss_usb_device_capability_descriptor
|
libusb_free_ss_usb_device_capability_descriptor
|
||||||
libusb_free_ss_usb_device_capability_descriptor@4 = libusb_free_ss_usb_device_capability_descriptor
|
libusb_free_ss_usb_device_capability_descriptor@4 = libusb_free_ss_usb_device_capability_descriptor
|
||||||
|
libusb_free_streams
|
||||||
|
libusb_free_streams@12 = libusb_free_streams
|
||||||
libusb_free_transfer
|
libusb_free_transfer
|
||||||
libusb_free_transfer@4 = libusb_free_transfer
|
libusb_free_transfer@4 = libusb_free_transfer
|
||||||
libusb_free_usb_2_0_extension_descriptor
|
libusb_free_usb_2_0_extension_descriptor
|
||||||
|
@ -146,6 +150,10 @@ EXPORTS
|
||||||
libusb_strerror@4 = libusb_strerror
|
libusb_strerror@4 = libusb_strerror
|
||||||
libusb_submit_transfer
|
libusb_submit_transfer
|
||||||
libusb_submit_transfer@4 = libusb_submit_transfer
|
libusb_submit_transfer@4 = libusb_submit_transfer
|
||||||
|
libusb_transfer_get_stream_id
|
||||||
|
libusb_transfer_get_stream_id@4 = libusb_transfer_get_stream_id
|
||||||
|
libusb_transfer_set_stream_id
|
||||||
|
libusb_transfer_set_stream_id@8 = libusb_transfer_set_stream_id
|
||||||
libusb_try_lock_events
|
libusb_try_lock_events
|
||||||
libusb_try_lock_events@4 = libusb_try_lock_events
|
libusb_try_lock_events@4 = libusb_try_lock_events
|
||||||
libusb_unlock_event_waiters
|
libusb_unlock_event_waiters
|
|
@ -41,7 +41,7 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
BLOCK "040904b0"
|
BLOCK "040904b0"
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "libusbx.org\0"
|
VALUE "CompanyName", "libusb.info\0"
|
||||||
VALUE "FileDescription", "C library for writing portable USB drivers in userspace\0"
|
VALUE "FileDescription", "C library for writing portable USB drivers in userspace\0"
|
||||||
VALUE "FileVersion", LIBUSB_VERSIONSTRING
|
VALUE "FileVersion", LIBUSB_VERSIONSTRING
|
||||||
VALUE "InternalName", "libusb\0"
|
VALUE "InternalName", "libusb\0"
|
|
@ -1,10 +1,10 @@
|
||||||
/*
|
/*
|
||||||
* Public libusbx header file
|
* Public libusb header file
|
||||||
* Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
* Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
||||||
* Copyright © 2007-2008 Daniel Drake <dsd@gentoo.org>
|
* Copyright © 2007-2008 Daniel Drake <dsd@gentoo.org>
|
||||||
* Copyright © 2012 Pete Batard <pete@akeo.ie>
|
* Copyright © 2012 Pete Batard <pete@akeo.ie>
|
||||||
* Copyright © 2012 Nathan Hjelm <hjelmn@cs.unm.edu>
|
* Copyright © 2012 Nathan Hjelm <hjelmn@cs.unm.edu>
|
||||||
* For more information, please visit: http://libusbx.org
|
* For more information, please visit: http://libusb.info
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -62,7 +62,7 @@ typedef unsigned __int32 uint32_t;
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
/* 'interface' might be defined as a macro on Windows, so we need to
|
/* 'interface' might be defined as a macro on Windows, so we need to
|
||||||
* undefine it so as not to break the current libusbx API, because
|
* undefine it so as not to break the current libusb API, because
|
||||||
* libusb_config_descriptor has an 'interface' member
|
* libusb_config_descriptor has an 'interface' member
|
||||||
* As this can be problematic if you include windows.h after libusb.h
|
* As this can be problematic if you include windows.h after libusb.h
|
||||||
* in your sources, we force windows.h to be included first. */
|
* in your sources, we force windows.h to be included first. */
|
||||||
|
@ -85,14 +85,14 @@ typedef unsigned __int32 uint32_t;
|
||||||
|
|
||||||
/** \def LIBUSB_CALL
|
/** \def LIBUSB_CALL
|
||||||
* \ingroup misc
|
* \ingroup misc
|
||||||
* libusbx's Windows calling convention.
|
* libusb's Windows calling convention.
|
||||||
*
|
*
|
||||||
* Under Windows, the selection of available compilers and configurations
|
* Under Windows, the selection of available compilers and configurations
|
||||||
* means that, unlike other platforms, there is not <em>one true calling
|
* means that, unlike other platforms, there is not <em>one true calling
|
||||||
* convention</em> (calling convention: the manner in which parameters are
|
* convention</em> (calling convention: the manner in which parameters are
|
||||||
* passed to funcions in the generated assembly code).
|
* passed to funcions in the generated assembly code).
|
||||||
*
|
*
|
||||||
* Matching the Windows API itself, libusbx uses the WINAPI convention (which
|
* Matching the Windows API itself, libusb uses the WINAPI convention (which
|
||||||
* translates to the <tt>stdcall</tt> convention) and guarantees that the
|
* translates to the <tt>stdcall</tt> convention) and guarantees that the
|
||||||
* library is compiled in this way. The public header file also includes
|
* library is compiled in this way. The public header file also includes
|
||||||
* appropriate annotations so that your own software will use the right
|
* appropriate annotations so that your own software will use the right
|
||||||
|
@ -100,7 +100,7 @@ typedef unsigned __int32 uint32_t;
|
||||||
* your codebase.
|
* your codebase.
|
||||||
*
|
*
|
||||||
* The one consideration that you must apply in your software is to mark
|
* The one consideration that you must apply in your software is to mark
|
||||||
* all functions which you use as libusbx callbacks with this LIBUSB_CALL
|
* all functions which you use as libusb callbacks with this LIBUSB_CALL
|
||||||
* annotation, so that they too get compiled for the correct calling
|
* annotation, so that they too get compiled for the correct calling
|
||||||
* convention.
|
* convention.
|
||||||
*
|
*
|
||||||
|
@ -108,7 +108,7 @@ typedef unsigned __int32 uint32_t;
|
||||||
* means that you can apply it to your code without worrying about
|
* means that you can apply it to your code without worrying about
|
||||||
* cross-platform compatibility.
|
* cross-platform compatibility.
|
||||||
*/
|
*/
|
||||||
/* LIBUSB_CALL must be defined on both definition and declaration of libusbx
|
/* LIBUSB_CALL must be defined on both definition and declaration of libusb
|
||||||
* functions. You'd think that declaration would be enough, but cygwin will
|
* functions. You'd think that declaration would be enough, but cygwin will
|
||||||
* complain about conflicting types unless both are marked this way.
|
* complain about conflicting types unless both are marked this way.
|
||||||
* The placement of this macro is important too; it must appear after the
|
* The placement of this macro is important too; it must appear after the
|
||||||
|
@ -121,36 +121,39 @@ typedef unsigned __int32 uint32_t;
|
||||||
#define LIBUSB_CALL
|
#define LIBUSB_CALL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** \def LIBUSBX_API_VERSION
|
/** \def LIBUSB_API_VERSION
|
||||||
* \ingroup misc
|
* \ingroup misc
|
||||||
* libusbx's API version.
|
* libusb's API version.
|
||||||
*
|
*
|
||||||
* Since version 1.0.13, to help with feature detection, libusbx defines
|
* Since version 1.0.13, to help with feature detection, libusb defines
|
||||||
* a LIBUSBX_API_VERSION macro that gets increased every time there is a
|
* a LIBUSB_API_VERSION macro that gets increased every time there is a
|
||||||
* significant change to the API, such as the introduction of a new call,
|
* significant change to the API, such as the introduction of a new call,
|
||||||
* the definition of a new macro/enum member, or any other element that
|
* the definition of a new macro/enum member, or any other element that
|
||||||
* libusbx applications may want to detect at compilation time.
|
* libusb applications may want to detect at compilation time.
|
||||||
*
|
*
|
||||||
* The macro is typically used in an application as follows:
|
* The macro is typically used in an application as follows:
|
||||||
* \code
|
* \code
|
||||||
* #if defined(LIBUSBX_API_VERSION) && (LIBUSBX_API_VERSION >= 0x01001234)
|
* #if defined(LIBUSB_API_VERSION) && (LIBUSB_API_VERSION >= 0x01001234)
|
||||||
* // Use one of the newer features from the libusbx API
|
* // Use one of the newer features from the libusb API
|
||||||
* #endif
|
* #endif
|
||||||
* \endcode
|
* \endcode
|
||||||
*
|
*
|
||||||
* Another feature of LIBUSBX_API_VERSION is that it can be used to detect
|
* Another feature of LIBUSB_API_VERSION is that it can be used to detect
|
||||||
* whether you are compiling against the libusb or the libusbx library.
|
* whether you are compiling against the libusb or the libusb library.
|
||||||
*
|
*
|
||||||
* Internally, LIBUSBX_API_VERSION is defined as follows:
|
* Internally, LIBUSB_API_VERSION is defined as follows:
|
||||||
* (libusbx major << 24) | (libusbx minor << 16) | (16 bit incremental)
|
* (libusb major << 24) | (libusb minor << 16) | (16 bit incremental)
|
||||||
*/
|
*/
|
||||||
#define LIBUSBX_API_VERSION 0x01000102
|
#define LIBUSB_API_VERSION 0x01000103
|
||||||
|
|
||||||
|
/* The following is kept for compatibility, but will be deprecated in the future */
|
||||||
|
#define LIBUSBX_API_VERSION LIBUSB_API_VERSION
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** \def libusb_cpu_to_le16
|
/**
|
||||||
* \ingroup misc
|
* \ingroup misc
|
||||||
* Convert a 16-bit value from host-endian to little-endian format. On
|
* Convert a 16-bit value from host-endian to little-endian format. On
|
||||||
* little endian systems, this function does nothing. On big endian systems,
|
* little endian systems, this function does nothing. On big endian systems,
|
||||||
|
@ -340,7 +343,10 @@ enum libusb_transfer_type {
|
||||||
LIBUSB_TRANSFER_TYPE_BULK = 2,
|
LIBUSB_TRANSFER_TYPE_BULK = 2,
|
||||||
|
|
||||||
/** Interrupt endpoint */
|
/** Interrupt endpoint */
|
||||||
LIBUSB_TRANSFER_TYPE_INTERRUPT = 3
|
LIBUSB_TRANSFER_TYPE_INTERRUPT = 3,
|
||||||
|
|
||||||
|
/** Stream endpoint */
|
||||||
|
LIBUSB_TRANSFER_TYPE_BULK_STREAM = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
/** \ingroup misc
|
/** \ingroup misc
|
||||||
|
@ -562,7 +568,7 @@ struct libusb_endpoint_descriptor {
|
||||||
/** For audio devices only: the address if the synch endpoint */
|
/** For audio devices only: the address if the synch endpoint */
|
||||||
uint8_t bSynchAddress;
|
uint8_t bSynchAddress;
|
||||||
|
|
||||||
/** Extra descriptors. If libusbx encounters unknown endpoint descriptors,
|
/** Extra descriptors. If libusb encounters unknown endpoint descriptors,
|
||||||
* it will store them here, should you wish to parse them. */
|
* it will store them here, should you wish to parse them. */
|
||||||
const unsigned char *extra;
|
const unsigned char *extra;
|
||||||
|
|
||||||
|
@ -612,7 +618,7 @@ struct libusb_interface_descriptor {
|
||||||
* by the bNumEndpoints field. */
|
* by the bNumEndpoints field. */
|
||||||
const struct libusb_endpoint_descriptor *endpoint;
|
const struct libusb_endpoint_descriptor *endpoint;
|
||||||
|
|
||||||
/** Extra descriptors. If libusbx encounters unknown interface descriptors,
|
/** Extra descriptors. If libusb encounters unknown interface descriptors,
|
||||||
* it will store them here, should you wish to parse them. */
|
* it will store them here, should you wish to parse them. */
|
||||||
const unsigned char *extra;
|
const unsigned char *extra;
|
||||||
|
|
||||||
|
@ -670,7 +676,7 @@ struct libusb_config_descriptor {
|
||||||
* this array is determined by the bNumInterfaces field. */
|
* this array is determined by the bNumInterfaces field. */
|
||||||
const struct libusb_interface *interface;
|
const struct libusb_interface *interface;
|
||||||
|
|
||||||
/** Extra descriptors. If libusbx encounters unknown configuration
|
/** Extra descriptors. If libusb encounters unknown configuration
|
||||||
* descriptors, it will store them here, should you wish to parse them. */
|
* descriptors, it will store them here, should you wish to parse them. */
|
||||||
const unsigned char *extra;
|
const unsigned char *extra;
|
||||||
|
|
||||||
|
@ -889,7 +895,7 @@ struct libusb_control_setup {
|
||||||
|
|
||||||
#define LIBUSB_CONTROL_SETUP_SIZE (sizeof(struct libusb_control_setup))
|
#define LIBUSB_CONTROL_SETUP_SIZE (sizeof(struct libusb_control_setup))
|
||||||
|
|
||||||
/* libusbx */
|
/* libusb */
|
||||||
|
|
||||||
struct libusb_context;
|
struct libusb_context;
|
||||||
struct libusb_device;
|
struct libusb_device;
|
||||||
|
@ -897,7 +903,7 @@ struct libusb_device_handle;
|
||||||
struct libusb_hotplug_callback;
|
struct libusb_hotplug_callback;
|
||||||
|
|
||||||
/** \ingroup lib
|
/** \ingroup lib
|
||||||
* Structure providing the version of the libusbx runtime
|
* Structure providing the version of the libusb runtime
|
||||||
*/
|
*/
|
||||||
struct libusb_version {
|
struct libusb_version {
|
||||||
/** Library major version. */
|
/** Library major version. */
|
||||||
|
@ -920,16 +926,16 @@ struct libusb_version {
|
||||||
};
|
};
|
||||||
|
|
||||||
/** \ingroup lib
|
/** \ingroup lib
|
||||||
* Structure representing a libusbx session. The concept of individual libusbx
|
* Structure representing a libusb session. The concept of individual libusb
|
||||||
* sessions allows for your program to use two libraries (or dynamically
|
* sessions allows for your program to use two libraries (or dynamically
|
||||||
* load two modules) which both independently use libusb. This will prevent
|
* load two modules) which both independently use libusb. This will prevent
|
||||||
* interference between the individual libusbx users - for example
|
* interference between the individual libusb users - for example
|
||||||
* libusb_set_debug() will not affect the other user of the library, and
|
* libusb_set_debug() will not affect the other user of the library, and
|
||||||
* libusb_exit() will not destroy resources that the other user is still
|
* libusb_exit() will not destroy resources that the other user is still
|
||||||
* using.
|
* using.
|
||||||
*
|
*
|
||||||
* Sessions are created by libusb_init() and destroyed through libusb_exit().
|
* Sessions are created by libusb_init() and destroyed through libusb_exit().
|
||||||
* If your application is guaranteed to only ever include a single libusbx
|
* If your application is guaranteed to only ever include a single libusb
|
||||||
* user (i.e. you), you do not have to worry about contexts: pass NULL in
|
* user (i.e. you), you do not have to worry about contexts: pass NULL in
|
||||||
* every function call where a context is required. The default context
|
* every function call where a context is required. The default context
|
||||||
* will be used.
|
* will be used.
|
||||||
|
@ -1042,7 +1048,7 @@ enum libusb_bos_type {
|
||||||
};
|
};
|
||||||
|
|
||||||
/** \ingroup misc
|
/** \ingroup misc
|
||||||
* Error codes. Most libusbx functions return 0 on success or one of these
|
* Error codes. Most libusb functions return 0 on success or one of these
|
||||||
* codes on failure.
|
* codes on failure.
|
||||||
* You can call libusb_error_name() to retrieve a string representation of an
|
* You can call libusb_error_name() to retrieve a string representation of an
|
||||||
* error code or libusb_strerror() to get an end-user suitable description of
|
* error code or libusb_strerror() to get an end-user suitable description of
|
||||||
|
@ -1188,7 +1194,7 @@ struct libusb_transfer;
|
||||||
* Asynchronous transfer callback function type. When submitting asynchronous
|
* Asynchronous transfer callback function type. When submitting asynchronous
|
||||||
* transfers, you pass a pointer to a callback function of this type via the
|
* transfers, you pass a pointer to a callback function of this type via the
|
||||||
* \ref libusb_transfer::callback "callback" member of the libusb_transfer
|
* \ref libusb_transfer::callback "callback" member of the libusb_transfer
|
||||||
* structure. libusbx will call this function later, when the transfer has
|
* structure. libusb will call this function later, when the transfer has
|
||||||
* completed or failed. See \ref asyncio for more information.
|
* completed or failed. See \ref asyncio for more information.
|
||||||
* \param transfer The libusb_transfer struct the callback function is being
|
* \param transfer The libusb_transfer struct the callback function is being
|
||||||
* notified about.
|
* notified about.
|
||||||
|
@ -1271,7 +1277,7 @@ enum libusb_capability {
|
||||||
LIBUSB_CAP_HAS_HOTPLUG = 0x0001,
|
LIBUSB_CAP_HAS_HOTPLUG = 0x0001,
|
||||||
/** The library can access HID devices without requiring user intervention.
|
/** The library can access HID devices without requiring user intervention.
|
||||||
* Note that before being able to actually access an HID device, you may
|
* Note that before being able to actually access an HID device, you may
|
||||||
* still have to call additional libusbx functions such as
|
* still have to call additional libusb functions such as
|
||||||
* \ref libusb_detach_kernel_driver(). */
|
* \ref libusb_detach_kernel_driver(). */
|
||||||
LIBUSB_CAP_HAS_HID_ACCESS = 0x0100,
|
LIBUSB_CAP_HAS_HID_ACCESS = 0x0100,
|
||||||
/** The library supports detaching of the default USB driver, using
|
/** The library supports detaching of the default USB driver, using
|
||||||
|
@ -1384,6 +1390,11 @@ int LIBUSB_CALL libusb_clear_halt(libusb_device_handle *dev,
|
||||||
unsigned char endpoint);
|
unsigned char endpoint);
|
||||||
int LIBUSB_CALL libusb_reset_device(libusb_device_handle *dev);
|
int LIBUSB_CALL libusb_reset_device(libusb_device_handle *dev);
|
||||||
|
|
||||||
|
int LIBUSB_CALL libusb_alloc_streams(libusb_device_handle *dev,
|
||||||
|
uint32_t num_streams, unsigned char *endpoints, int num_endpoints);
|
||||||
|
int LIBUSB_CALL libusb_free_streams(libusb_device_handle *dev,
|
||||||
|
unsigned char *endpoints, int num_endpoints);
|
||||||
|
|
||||||
int LIBUSB_CALL libusb_kernel_driver_active(libusb_device_handle *dev,
|
int LIBUSB_CALL libusb_kernel_driver_active(libusb_device_handle *dev,
|
||||||
int interface_number);
|
int interface_number);
|
||||||
int LIBUSB_CALL libusb_detach_kernel_driver(libusb_device_handle *dev,
|
int LIBUSB_CALL libusb_detach_kernel_driver(libusb_device_handle *dev,
|
||||||
|
@ -1428,7 +1439,7 @@ static inline unsigned char *libusb_control_transfer_get_data(
|
||||||
static inline struct libusb_control_setup *libusb_control_transfer_get_setup(
|
static inline struct libusb_control_setup *libusb_control_transfer_get_setup(
|
||||||
struct libusb_transfer *transfer)
|
struct libusb_transfer *transfer)
|
||||||
{
|
{
|
||||||
return (struct libusb_control_setup *) transfer->buffer;
|
return (struct libusb_control_setup *)(void *) transfer->buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** \ingroup asyncio
|
/** \ingroup asyncio
|
||||||
|
@ -1437,6 +1448,7 @@ static inline struct libusb_control_setup *libusb_control_transfer_get_setup(
|
||||||
* be given in host-endian byte order.
|
* be given in host-endian byte order.
|
||||||
*
|
*
|
||||||
* \param buffer buffer to output the setup packet into
|
* \param buffer buffer to output the setup packet into
|
||||||
|
* This pointer must be aligned to at least 2 bytes boundary.
|
||||||
* \param bmRequestType see the
|
* \param bmRequestType see the
|
||||||
* \ref libusb_control_setup::bmRequestType "bmRequestType" field of
|
* \ref libusb_control_setup::bmRequestType "bmRequestType" field of
|
||||||
* \ref libusb_control_setup
|
* \ref libusb_control_setup
|
||||||
|
@ -1457,7 +1469,7 @@ static inline void libusb_fill_control_setup(unsigned char *buffer,
|
||||||
uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex,
|
uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex,
|
||||||
uint16_t wLength)
|
uint16_t wLength)
|
||||||
{
|
{
|
||||||
struct libusb_control_setup *setup = (struct libusb_control_setup *) buffer;
|
struct libusb_control_setup *setup = (struct libusb_control_setup *)(void *) buffer;
|
||||||
setup->bmRequestType = bmRequestType;
|
setup->bmRequestType = bmRequestType;
|
||||||
setup->bRequest = bRequest;
|
setup->bRequest = bRequest;
|
||||||
setup->wValue = libusb_cpu_to_le16(wValue);
|
setup->wValue = libusb_cpu_to_le16(wValue);
|
||||||
|
@ -1469,6 +1481,10 @@ struct libusb_transfer * LIBUSB_CALL libusb_alloc_transfer(int iso_packets);
|
||||||
int LIBUSB_CALL libusb_submit_transfer(struct libusb_transfer *transfer);
|
int LIBUSB_CALL libusb_submit_transfer(struct libusb_transfer *transfer);
|
||||||
int LIBUSB_CALL libusb_cancel_transfer(struct libusb_transfer *transfer);
|
int LIBUSB_CALL libusb_cancel_transfer(struct libusb_transfer *transfer);
|
||||||
void LIBUSB_CALL libusb_free_transfer(struct libusb_transfer *transfer);
|
void LIBUSB_CALL libusb_free_transfer(struct libusb_transfer *transfer);
|
||||||
|
void LIBUSB_CALL libusb_transfer_set_stream_id(
|
||||||
|
struct libusb_transfer *transfer, uint32_t stream_id);
|
||||||
|
uint32_t LIBUSB_CALL libusb_transfer_get_stream_id(
|
||||||
|
struct libusb_transfer *transfer);
|
||||||
|
|
||||||
/** \ingroup asyncio
|
/** \ingroup asyncio
|
||||||
* Helper function to populate the required \ref libusb_transfer fields
|
* Helper function to populate the required \ref libusb_transfer fields
|
||||||
|
@ -1493,6 +1509,7 @@ void LIBUSB_CALL libusb_free_transfer(struct libusb_transfer *transfer);
|
||||||
* \param dev_handle handle of the device that will handle the transfer
|
* \param dev_handle handle of the device that will handle the transfer
|
||||||
* \param buffer data buffer. If provided, this function will interpret the
|
* \param buffer data buffer. If provided, this function will interpret the
|
||||||
* first 8 bytes as a setup packet and infer the transfer length from that.
|
* first 8 bytes as a setup packet and infer the transfer length from that.
|
||||||
|
* This pointer must be aligned to at least 2 bytes boundary.
|
||||||
* \param callback callback function to be invoked on transfer completion
|
* \param callback callback function to be invoked on transfer completion
|
||||||
* \param user_data user data to pass to callback function
|
* \param user_data user data to pass to callback function
|
||||||
* \param timeout timeout for the transfer in milliseconds
|
* \param timeout timeout for the transfer in milliseconds
|
||||||
|
@ -1502,7 +1519,7 @@ static inline void libusb_fill_control_transfer(
|
||||||
unsigned char *buffer, libusb_transfer_cb_fn callback, void *user_data,
|
unsigned char *buffer, libusb_transfer_cb_fn callback, void *user_data,
|
||||||
unsigned int timeout)
|
unsigned int timeout)
|
||||||
{
|
{
|
||||||
struct libusb_control_setup *setup = (struct libusb_control_setup *) buffer;
|
struct libusb_control_setup *setup = (struct libusb_control_setup *)(void *) buffer;
|
||||||
transfer->dev_handle = dev_handle;
|
transfer->dev_handle = dev_handle;
|
||||||
transfer->endpoint = 0;
|
transfer->endpoint = 0;
|
||||||
transfer->type = LIBUSB_TRANSFER_TYPE_CONTROL;
|
transfer->type = LIBUSB_TRANSFER_TYPE_CONTROL;
|
||||||
|
@ -1543,6 +1560,34 @@ static inline void libusb_fill_bulk_transfer(struct libusb_transfer *transfer,
|
||||||
transfer->callback = callback;
|
transfer->callback = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** \ingroup asyncio
|
||||||
|
* Helper function to populate the required \ref libusb_transfer fields
|
||||||
|
* for a bulk transfer using bulk streams.
|
||||||
|
*
|
||||||
|
* Since version 1.0.19, \ref LIBUSB_API_VERSION >= 0x01000103
|
||||||
|
*
|
||||||
|
* \param transfer the transfer to populate
|
||||||
|
* \param dev_handle handle of the device that will handle the transfer
|
||||||
|
* \param endpoint address of the endpoint where this transfer will be sent
|
||||||
|
* \param stream_id bulk stream id for this transfer
|
||||||
|
* \param buffer data buffer
|
||||||
|
* \param length length of data buffer
|
||||||
|
* \param callback callback function to be invoked on transfer completion
|
||||||
|
* \param user_data user data to pass to callback function
|
||||||
|
* \param timeout timeout for the transfer in milliseconds
|
||||||
|
*/
|
||||||
|
static inline void libusb_fill_bulk_stream_transfer(
|
||||||
|
struct libusb_transfer *transfer, libusb_device_handle *dev_handle,
|
||||||
|
unsigned char endpoint, uint32_t stream_id,
|
||||||
|
unsigned char *buffer, int length, libusb_transfer_cb_fn callback,
|
||||||
|
void *user_data, unsigned int timeout)
|
||||||
|
{
|
||||||
|
libusb_fill_bulk_transfer(transfer, dev_handle, endpoint, buffer,
|
||||||
|
length, callback, user_data, timeout);
|
||||||
|
transfer->type = LIBUSB_TRANSFER_TYPE_BULK_STREAM;
|
||||||
|
libusb_transfer_set_stream_id(transfer, stream_id);
|
||||||
|
}
|
||||||
|
|
||||||
/** \ingroup asyncio
|
/** \ingroup asyncio
|
||||||
* Helper function to populate the required \ref libusb_transfer fields
|
* Helper function to populate the required \ref libusb_transfer fields
|
||||||
* for an interrupt transfer.
|
* for an interrupt transfer.
|
||||||
|
@ -1827,7 +1872,7 @@ void LIBUSB_CALL libusb_set_pollfd_notifiers(libusb_context *ctx,
|
||||||
* per libusb_context and it is safe to call libusb_hotplug_deregister_callback()
|
* per libusb_context and it is safe to call libusb_hotplug_deregister_callback()
|
||||||
* on an already deregisted callback.
|
* on an already deregisted callback.
|
||||||
*
|
*
|
||||||
* Since version 1.0.16, \ref LIBUSBX_API_VERSION >= 0x01000102
|
* Since version 1.0.16, \ref LIBUSB_API_VERSION >= 0x01000102
|
||||||
*
|
*
|
||||||
* For more information, see \ref hotplug.
|
* For more information, see \ref hotplug.
|
||||||
*/
|
*/
|
||||||
|
@ -1835,7 +1880,7 @@ typedef int libusb_hotplug_callback_handle;
|
||||||
|
|
||||||
/** \ingroup hotplug
|
/** \ingroup hotplug
|
||||||
*
|
*
|
||||||
* Since version 1.0.16, \ref LIBUSBX_API_VERSION >= 0x01000102
|
* Since version 1.0.16, \ref LIBUSB_API_VERSION >= 0x01000102
|
||||||
*
|
*
|
||||||
* Flags for hotplug events */
|
* Flags for hotplug events */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -1845,7 +1890,7 @@ typedef enum {
|
||||||
|
|
||||||
/** \ingroup hotplug
|
/** \ingroup hotplug
|
||||||
*
|
*
|
||||||
* Since version 1.0.16, \ref LIBUSBX_API_VERSION >= 0x01000102
|
* Since version 1.0.16, \ref LIBUSB_API_VERSION >= 0x01000102
|
||||||
*
|
*
|
||||||
* Hotplug events */
|
* Hotplug events */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -1869,15 +1914,15 @@ typedef enum {
|
||||||
* This callback may be called by an internal event thread and as such it is
|
* This callback may be called by an internal event thread and as such it is
|
||||||
* recommended the callback do minimal processing before returning.
|
* recommended the callback do minimal processing before returning.
|
||||||
*
|
*
|
||||||
* libusbx will call this function later, when a matching event had happened on
|
* libusb will call this function later, when a matching event had happened on
|
||||||
* a matching device. See \ref hotplug for more information.
|
* a matching device. See \ref hotplug for more information.
|
||||||
*
|
*
|
||||||
* It is safe to call either libusb_hotplug_register_callback() or
|
* It is safe to call either libusb_hotplug_register_callback() or
|
||||||
* libusb_hotplug_deregister_callback() from within a callback function.
|
* libusb_hotplug_deregister_callback() from within a callback function.
|
||||||
*
|
*
|
||||||
* Since version 1.0.16, \ref LIBUSBX_API_VERSION >= 0x01000102
|
* Since version 1.0.16, \ref LIBUSB_API_VERSION >= 0x01000102
|
||||||
*
|
*
|
||||||
* \param libusb_context context of this notification
|
* \param ctx context of this notification
|
||||||
* \param device libusb_device this event occurred on
|
* \param device libusb_device this event occurred on
|
||||||
* \param event event that occurred
|
* \param event event that occurred
|
||||||
* \param user_data user data provided when this callback was registered
|
* \param user_data user data provided when this callback was registered
|
||||||
|
@ -1897,7 +1942,19 @@ typedef int (LIBUSB_CALL *libusb_hotplug_callback_fn)(libusb_context *ctx,
|
||||||
* armed until either it is deregistered with libusb_hotplug_deregister_callback()
|
* armed until either it is deregistered with libusb_hotplug_deregister_callback()
|
||||||
* or the supplied callback returns 1 to indicate it is finished processing events.
|
* or the supplied callback returns 1 to indicate it is finished processing events.
|
||||||
*
|
*
|
||||||
* Since version 1.0.16, \ref LIBUSBX_API_VERSION >= 0x01000102
|
* If the \ref LIBUSB_HOTPLUG_ENUMERATE is passed the callback will be
|
||||||
|
* called with a \ref LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED for all devices
|
||||||
|
* already plugged into the machine. Note that libusb modifies its internal
|
||||||
|
* device list from a separate thread, while calling hotplug callbacks from
|
||||||
|
* libusb_handle_events(), so it is possible for a device to already be present
|
||||||
|
* on, or removed from, its internal device list, while the hotplug callbacks
|
||||||
|
* still need to be dispatched. This means that when using \ref
|
||||||
|
* LIBUSB_HOTPLUG_ENUMERATE, your callback may be called twice for the arrival
|
||||||
|
* of the same device, once from libusb_hotplug_register_callback() and once
|
||||||
|
* from libusb_handle_events(); and/or your callback may be called for the
|
||||||
|
* removal of a device for which an arrived call was never made.
|
||||||
|
*
|
||||||
|
* Since version 1.0.16, \ref LIBUSB_API_VERSION >= 0x01000102
|
||||||
*
|
*
|
||||||
* \param[in] ctx context to register this callback with
|
* \param[in] ctx context to register this callback with
|
||||||
* \param[in] events bitwise or of events that will trigger this callback. See \ref
|
* \param[in] events bitwise or of events that will trigger this callback. See \ref
|
||||||
|
@ -1926,7 +1983,7 @@ int LIBUSB_CALL libusb_hotplug_register_callback(libusb_context *ctx,
|
||||||
* Deregister a callback from a libusb_context. This function is safe to call from within
|
* Deregister a callback from a libusb_context. This function is safe to call from within
|
||||||
* a hotplug callback.
|
* a hotplug callback.
|
||||||
*
|
*
|
||||||
* Since version 1.0.16, \ref LIBUSBX_API_VERSION >= 0x01000102
|
* Since version 1.0.16, \ref LIBUSB_API_VERSION >= 0x01000102
|
||||||
*
|
*
|
||||||
* \param[in] ctx context this callback is registered with
|
* \param[in] ctx context this callback is registered with
|
||||||
* \param[in] handle the handle of the callback to deregister
|
* \param[in] handle the handle of the callback to deregister
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Internal header for libusbx
|
* Internal header for libusb
|
||||||
* Copyright © 2007-2009 Daniel Drake <dsd@gentoo.org>
|
* Copyright © 2007-2009 Daniel Drake <dsd@gentoo.org>
|
||||||
* Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
* Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
||||||
*
|
*
|
||||||
|
@ -23,6 +23,8 @@
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
@ -37,11 +39,11 @@
|
||||||
#include "libusb.h"
|
#include "libusb.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
||||||
/* Inside the libusbx code, mark all public functions as follows:
|
/* Inside the libusb code, mark all public functions as follows:
|
||||||
* return_type API_EXPORTED function_name(params) { ... }
|
* return_type API_EXPORTED function_name(params) { ... }
|
||||||
* But if the function returns a pointer, mark it as follows:
|
* But if the function returns a pointer, mark it as follows:
|
||||||
* DEFAULT_VISIBILITY return_type * LIBUSB_CALL function_name(params) { ... }
|
* DEFAULT_VISIBILITY return_type * LIBUSB_CALL function_name(params) { ... }
|
||||||
* In the libusbx public header, mark all declarations as:
|
* In the libusb public header, mark all declarations as:
|
||||||
* return_type LIBUSB_CALL function_name(params);
|
* return_type LIBUSB_CALL function_name(params);
|
||||||
*/
|
*/
|
||||||
#define API_EXPORTED LIBUSB_CALL DEFAULT_VISIBILITY
|
#define API_EXPORTED LIBUSB_CALL DEFAULT_VISIBILITY
|
||||||
|
@ -147,6 +149,15 @@ static inline void *usbi_reallocf(void *ptr, size_t size)
|
||||||
|
|
||||||
#define TIMESPEC_IS_SET(ts) ((ts)->tv_sec != 0 || (ts)->tv_nsec != 0)
|
#define TIMESPEC_IS_SET(ts) ((ts)->tv_sec != 0 || (ts)->tv_nsec != 0)
|
||||||
|
|
||||||
|
/* Some platforms don't have this define */
|
||||||
|
#ifndef TIMESPEC_TO_TIMEVAL
|
||||||
|
#define TIMESPEC_TO_TIMEVAL(tv, ts) \
|
||||||
|
do { \
|
||||||
|
(tv)->tv_sec = (ts)->tv_sec; \
|
||||||
|
(tv)->tv_usec = (ts)->tv_nsec / 1000; \
|
||||||
|
} while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
void usbi_log(struct libusb_context *ctx, enum libusb_log_level level,
|
void usbi_log(struct libusb_context *ctx, enum libusb_log_level level,
|
||||||
const char *function, const char *format, ...);
|
const char *function, const char *format, ...);
|
||||||
|
|
||||||
|
@ -355,6 +366,7 @@ struct usbi_transfer {
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
struct timeval timeout;
|
struct timeval timeout;
|
||||||
int transferred;
|
int transferred;
|
||||||
|
uint32_t stream_id;
|
||||||
uint8_t flags;
|
uint8_t flags;
|
||||||
|
|
||||||
/* this lock is held during libusb_submit_transfer() and
|
/* this lock is held during libusb_submit_transfer() and
|
||||||
|
@ -433,7 +445,7 @@ void usbi_connect_device (struct libusb_device *dev);
|
||||||
void usbi_disconnect_device (struct libusb_device *dev);
|
void usbi_disconnect_device (struct libusb_device *dev);
|
||||||
|
|
||||||
/* Internal abstraction for poll (needs struct usbi_transfer on Windows) */
|
/* Internal abstraction for poll (needs struct usbi_transfer on Windows) */
|
||||||
#if defined(OS_LINUX) || defined(OS_DARWIN) || defined(OS_OPENBSD)
|
#if defined(OS_LINUX) || defined(OS_DARWIN) || defined(OS_OPENBSD) || defined(OS_NETBSD)
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "os/poll_posix.h"
|
#include "os/poll_posix.h"
|
||||||
#elif defined(OS_WINDOWS) || defined(OS_WINCE)
|
#elif defined(OS_WINDOWS) || defined(OS_WINCE)
|
||||||
|
@ -501,7 +513,7 @@ struct usbi_os_backend {
|
||||||
* to determine specific capabilities of the system, allocate required
|
* to determine specific capabilities of the system, allocate required
|
||||||
* data structures for later, etc.
|
* data structures for later, etc.
|
||||||
*
|
*
|
||||||
* This function is called when a libusbx user initializes the library
|
* This function is called when a libusb user initializes the library
|
||||||
* prior to use.
|
* prior to use.
|
||||||
*
|
*
|
||||||
* Return 0 on success, or a LIBUSB_ERROR code on failure.
|
* Return 0 on success, or a LIBUSB_ERROR code on failure.
|
||||||
|
@ -531,9 +543,9 @@ struct usbi_os_backend {
|
||||||
* but that is an unlikely case.
|
* but that is an unlikely case.
|
||||||
*
|
*
|
||||||
* After computing a session ID for a device, call
|
* After computing a session ID for a device, call
|
||||||
* usbi_get_device_by_session_id(). This function checks if libusbx already
|
* usbi_get_device_by_session_id(). This function checks if libusb already
|
||||||
* knows about the device, and if so, it provides you with a libusb_device
|
* knows about the device, and if so, it provides you with a reference
|
||||||
* structure for it.
|
* to a libusb_device structure for it.
|
||||||
*
|
*
|
||||||
* If usbi_get_device_by_session_id() returns NULL, it is time to allocate
|
* If usbi_get_device_by_session_id() returns NULL, it is time to allocate
|
||||||
* a new device structure for the device. Call usbi_alloc_device() to
|
* a new device structure for the device. Call usbi_alloc_device() to
|
||||||
|
@ -592,7 +604,7 @@ struct usbi_os_backend {
|
||||||
*
|
*
|
||||||
* Your backend should allocate any internal resources required for I/O
|
* Your backend should allocate any internal resources required for I/O
|
||||||
* and other operations so that those operations can happen (hopefully)
|
* and other operations so that those operations can happen (hopefully)
|
||||||
* without hiccup. This is also a good place to inform libusbx that it
|
* without hiccup. This is also a good place to inform libusb that it
|
||||||
* should monitor certain file descriptors related to this device -
|
* should monitor certain file descriptors related to this device -
|
||||||
* see the usbi_add_pollfd() function.
|
* see the usbi_add_pollfd() function.
|
||||||
*
|
*
|
||||||
|
@ -616,7 +628,7 @@ struct usbi_os_backend {
|
||||||
/* Close a device such that the handle cannot be used again. Your backend
|
/* Close a device such that the handle cannot be used again. Your backend
|
||||||
* should destroy any resources that were allocated in the open path.
|
* should destroy any resources that were allocated in the open path.
|
||||||
* This may also be a good place to call usbi_remove_pollfd() to inform
|
* This may also be a good place to call usbi_remove_pollfd() to inform
|
||||||
* libusbx of any file descriptors associated with this device that should
|
* libusb of any file descriptors associated with this device that should
|
||||||
* no longer be monitored.
|
* no longer be monitored.
|
||||||
*
|
*
|
||||||
* This function is called when the user closes a device handle.
|
* This function is called when the user closes a device handle.
|
||||||
|
@ -689,7 +701,7 @@ struct usbi_os_backend {
|
||||||
* (LE). If it returns the multi-byte values in host-endian format,
|
* (LE). If it returns the multi-byte values in host-endian format,
|
||||||
* set the host_endian output parameter to "1".
|
* set the host_endian output parameter to "1".
|
||||||
*
|
*
|
||||||
* Return 0 on success or a LIBUSB_ERROR code on failure.
|
* Return the length read on success or a LIBUSB_ERROR code on failure.
|
||||||
*/
|
*/
|
||||||
int (*get_config_descriptor)(struct libusb_device *device,
|
int (*get_config_descriptor)(struct libusb_device *device,
|
||||||
uint8_t config_index, unsigned char *buffer, size_t len,
|
uint8_t config_index, unsigned char *buffer, size_t len,
|
||||||
|
@ -717,7 +729,7 @@ struct usbi_os_backend {
|
||||||
*
|
*
|
||||||
* If you cannot retrieve this from cache, either do not implement this
|
* If you cannot retrieve this from cache, either do not implement this
|
||||||
* function, or return LIBUSB_ERROR_NOT_SUPPORTED. This will cause
|
* function, or return LIBUSB_ERROR_NOT_SUPPORTED. This will cause
|
||||||
* libusbx to retrieve the information through a standard control transfer.
|
* libusb to retrieve the information through a standard control transfer.
|
||||||
*
|
*
|
||||||
* This function must be non-blocking.
|
* This function must be non-blocking.
|
||||||
* Return:
|
* Return:
|
||||||
|
@ -832,6 +844,14 @@ struct usbi_os_backend {
|
||||||
*/
|
*/
|
||||||
int (*reset_device)(struct libusb_device_handle *handle);
|
int (*reset_device)(struct libusb_device_handle *handle);
|
||||||
|
|
||||||
|
/* Alloc num_streams usb3 bulk streams on the passed in endpoints */
|
||||||
|
int (*alloc_streams)(struct libusb_device_handle *handle,
|
||||||
|
uint32_t num_streams, unsigned char *endpoints, int num_endpoints);
|
||||||
|
|
||||||
|
/* Free usb3 bulk streams allocated with alloc_streams */
|
||||||
|
int (*free_streams)(struct libusb_device_handle *handle,
|
||||||
|
unsigned char *endpoints, int num_endpoints);
|
||||||
|
|
||||||
/* Determine if a kernel driver is active on an interface. Optional.
|
/* Determine if a kernel driver is active on an interface. Optional.
|
||||||
*
|
*
|
||||||
* The presence of a kernel driver on an interface indicates that any
|
* The presence of a kernel driver on an interface indicates that any
|
||||||
|
@ -916,7 +936,7 @@ struct usbi_os_backend {
|
||||||
* all private data from the transfer as if you were just about to report
|
* all private data from the transfer as if you were just about to report
|
||||||
* completion or cancellation.
|
* completion or cancellation.
|
||||||
*
|
*
|
||||||
* This function might seem a bit out of place. It is used when libusbx
|
* This function might seem a bit out of place. It is used when libusb
|
||||||
* detects a disconnected device - it calls this function for all pending
|
* detects a disconnected device - it calls this function for all pending
|
||||||
* transfers before reporting completion (with the disconnect code) to
|
* transfers before reporting completion (with the disconnect code) to
|
||||||
* the user. Maybe we can improve upon this internal interface in future.
|
* the user. Maybe we can improve upon this internal interface in future.
|
||||||
|
@ -995,6 +1015,7 @@ extern const struct usbi_os_backend * const usbi_backend;
|
||||||
extern const struct usbi_os_backend linux_usbfs_backend;
|
extern const struct usbi_os_backend linux_usbfs_backend;
|
||||||
extern const struct usbi_os_backend darwin_backend;
|
extern const struct usbi_os_backend darwin_backend;
|
||||||
extern const struct usbi_os_backend openbsd_backend;
|
extern const struct usbi_os_backend openbsd_backend;
|
||||||
|
extern const struct usbi_os_backend netbsd_backend;
|
||||||
extern const struct usbi_os_backend windows_backend;
|
extern const struct usbi_os_backend windows_backend;
|
||||||
extern const struct usbi_os_backend wince_backend;
|
extern const struct usbi_os_backend wince_backend;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* -*- Mode: C; indent-tabs-mode:nil -*- */
|
/* -*- Mode: C; indent-tabs-mode:nil -*- */
|
||||||
/*
|
/*
|
||||||
* darwin backend for libusbx 1.0
|
* darwin backend for libusb 1.0
|
||||||
* Copyright © 2008-2013 Nathan Hjelm <hjelmn@users.sourceforge.net>
|
* Copyright © 2008-2014 Nathan Hjelm <hjelmn@users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -71,6 +71,7 @@ static int process_new_device (struct libusb_context *ctx, io_service_t service)
|
||||||
|
|
||||||
#if defined(ENABLE_LOGGING)
|
#if defined(ENABLE_LOGGING)
|
||||||
static const char *darwin_error_str (int result) {
|
static const char *darwin_error_str (int result) {
|
||||||
|
static char string_buffer[50];
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case kIOReturnSuccess:
|
case kIOReturnSuccess:
|
||||||
return "no error";
|
return "no error";
|
||||||
|
@ -103,7 +104,8 @@ static const char *darwin_error_str (int result) {
|
||||||
case kIOUSBHighSpeedSplitError:
|
case kIOUSBHighSpeedSplitError:
|
||||||
return "high speed split error";
|
return "high speed split error";
|
||||||
default:
|
default:
|
||||||
return "unknown error";
|
snprintf(string_buffer, sizeof(string_buffer), "unknown error (0x%x)", result);
|
||||||
|
return string_buffer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -149,7 +151,7 @@ static void darwin_ref_cached_device(struct darwin_cached_device *cached_dev) {
|
||||||
cached_dev->refcount++;
|
cached_dev->refcount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ep_to_pipeRef(struct libusb_device_handle *dev_handle, uint8_t ep, uint8_t *pipep, uint8_t *ifcp) {
|
static int ep_to_pipeRef(struct libusb_device_handle *dev_handle, uint8_t ep, uint8_t *pipep, uint8_t *ifcp, struct darwin_interface **interface_out) {
|
||||||
struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)dev_handle->os_priv;
|
struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)dev_handle->os_priv;
|
||||||
|
|
||||||
/* current interface */
|
/* current interface */
|
||||||
|
@ -166,8 +168,14 @@ static int ep_to_pipeRef(struct libusb_device_handle *dev_handle, uint8_t ep, ui
|
||||||
for (i = 0 ; i < cInterface->num_endpoints ; i++) {
|
for (i = 0 ; i < cInterface->num_endpoints ; i++) {
|
||||||
if (cInterface->endpoint_addrs[i] == ep) {
|
if (cInterface->endpoint_addrs[i] == ep) {
|
||||||
*pipep = i + 1;
|
*pipep = i + 1;
|
||||||
*ifcp = iface;
|
|
||||||
usbi_dbg ("pipe %d on interface %d matches", *pipep, *ifcp);
|
if (ifcp)
|
||||||
|
*ifcp = iface;
|
||||||
|
|
||||||
|
if (interface_out)
|
||||||
|
*interface_out = cInterface;
|
||||||
|
|
||||||
|
usbi_dbg ("pipe %d on interface %d matches", *pipep, iface);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -177,7 +185,7 @@ static int ep_to_pipeRef(struct libusb_device_handle *dev_handle, uint8_t ep, ui
|
||||||
/* No pipe found with the correct endpoint address */
|
/* No pipe found with the correct endpoint address */
|
||||||
usbi_warn (HANDLE_CTX(dev_handle), "no pipeRef found with endpoint address 0x%02x.", ep);
|
usbi_warn (HANDLE_CTX(dev_handle), "no pipeRef found with endpoint address 0x%02x.", ep);
|
||||||
|
|
||||||
return -1;
|
return LIBUSB_ERROR_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int usb_setup_device_iterator (io_iterator_t *deviceIterator, UInt32 location) {
|
static int usb_setup_device_iterator (io_iterator_t *deviceIterator, UInt32 location) {
|
||||||
|
@ -210,6 +218,7 @@ static int usb_setup_device_iterator (io_iterator_t *deviceIterator, UInt32 loca
|
||||||
return IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDict, deviceIterator);
|
return IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDict, deviceIterator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Returns 1 on success, 0 on failure. */
|
||||||
static int get_ioregistry_value_number (io_service_t service, CFStringRef property, CFNumberType type, void *p) {
|
static int get_ioregistry_value_number (io_service_t service, CFStringRef property, CFNumberType type, void *p) {
|
||||||
CFTypeRef cfNumber = IORegistryEntryCreateCFProperty (service, property, kCFAllocatorDefault, 0);
|
CFTypeRef cfNumber = IORegistryEntryCreateCFProperty (service, property, kCFAllocatorDefault, 0);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -275,6 +284,8 @@ static void darwin_devices_detached (void *ptr, io_iterator_t rem_devices) {
|
||||||
UInt64 session;
|
UInt64 session;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
usbi_mutex_lock(&active_contexts_lock);
|
||||||
|
|
||||||
while ((device = IOIteratorNext (rem_devices)) != 0) {
|
while ((device = IOIteratorNext (rem_devices)) != 0) {
|
||||||
/* get the location from the i/o registry */
|
/* get the location from the i/o registry */
|
||||||
ret = get_ioregistry_value_number (device, CFSTR("sessionID"), kCFNumberSInt64Type, &session);
|
ret = get_ioregistry_value_number (device, CFSTR("sessionID"), kCFNumberSInt64Type, &session);
|
||||||
|
@ -282,21 +293,31 @@ static void darwin_devices_detached (void *ptr, io_iterator_t rem_devices) {
|
||||||
if (!ret)
|
if (!ret)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
usbi_mutex_lock(&active_contexts_lock);
|
|
||||||
|
|
||||||
list_for_each_entry(ctx, &active_contexts_list, list, struct libusb_context) {
|
list_for_each_entry(ctx, &active_contexts_list, list, struct libusb_context) {
|
||||||
usbi_dbg ("notifying context %p of device disconnect", ctx);
|
usbi_dbg ("notifying context %p of device disconnect", ctx);
|
||||||
|
|
||||||
dev = usbi_get_device_by_session_id(ctx, session);
|
dev = usbi_get_device_by_session_id(ctx, (unsigned long) session);
|
||||||
if (dev) {
|
if (dev) {
|
||||||
/* signal the core that this device has been disconnected. the core will tear down this device
|
/* signal the core that this device has been disconnected. the core will tear down this device
|
||||||
when the reference count reaches 0 */
|
when the reference count reaches 0 */
|
||||||
usbi_disconnect_device(dev);
|
usbi_disconnect_device(dev);
|
||||||
|
libusb_unref_device(dev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
usbi_mutex_unlock(&active_contexts_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
usbi_mutex_unlock(&active_contexts_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void darwin_hotplug_poll (void)
|
||||||
|
{
|
||||||
|
/* not sure if 5 seconds will be too long/short but it should work ok */
|
||||||
|
mach_timespec_t timeout = {.tv_sec = 5, .tv_nsec = 0};
|
||||||
|
|
||||||
|
/* since a kernel thread may nodify the IOInterators used for
|
||||||
|
* hotplug notidication we can't just clear the iterators.
|
||||||
|
* instead just wait until all IOService providers are quiet */
|
||||||
|
(void) IOKitWaitQuiet (kIOMasterPortDefault, &timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void darwin_clear_iterator (io_iterator_t iter) {
|
static void darwin_clear_iterator (io_iterator_t iter) {
|
||||||
|
@ -342,8 +363,8 @@ static void *darwin_event_thread_main (void *arg0) {
|
||||||
/* create notifications for removed devices */
|
/* create notifications for removed devices */
|
||||||
kresult = IOServiceAddMatchingNotification (libusb_notification_port, kIOTerminatedNotification,
|
kresult = IOServiceAddMatchingNotification (libusb_notification_port, kIOTerminatedNotification,
|
||||||
IOServiceMatching(kIOUSBDeviceClassName),
|
IOServiceMatching(kIOUSBDeviceClassName),
|
||||||
(IOServiceMatchingCallback)darwin_devices_detached,
|
darwin_devices_detached,
|
||||||
(void *)ctx, &libusb_rem_device_iterator);
|
ctx, &libusb_rem_device_iterator);
|
||||||
|
|
||||||
if (kresult != kIOReturnSuccess) {
|
if (kresult != kIOReturnSuccess) {
|
||||||
usbi_err (ctx, "could not add hotplug event source: %s", darwin_error_str (kresult));
|
usbi_err (ctx, "could not add hotplug event source: %s", darwin_error_str (kresult));
|
||||||
|
@ -354,8 +375,8 @@ static void *darwin_event_thread_main (void *arg0) {
|
||||||
/* create notifications for attached devices */
|
/* create notifications for attached devices */
|
||||||
kresult = IOServiceAddMatchingNotification(libusb_notification_port, kIOFirstMatchNotification,
|
kresult = IOServiceAddMatchingNotification(libusb_notification_port, kIOFirstMatchNotification,
|
||||||
IOServiceMatching(kIOUSBDeviceClassName),
|
IOServiceMatching(kIOUSBDeviceClassName),
|
||||||
(IOServiceMatchingCallback)darwin_devices_attached,
|
darwin_devices_attached,
|
||||||
(void *)ctx, &libusb_add_device_iterator);
|
ctx, &libusb_add_device_iterator);
|
||||||
|
|
||||||
if (kresult != kIOReturnSuccess) {
|
if (kresult != kIOReturnSuccess) {
|
||||||
usbi_err (ctx, "could not add hotplug event source: %s", darwin_error_str (kresult));
|
usbi_err (ctx, "could not add hotplug event source: %s", darwin_error_str (kresult));
|
||||||
|
@ -397,7 +418,8 @@ static void *darwin_event_thread_main (void *arg0) {
|
||||||
pthread_exit (NULL);
|
pthread_exit (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _darwin_finalize(void) {
|
/* cleanup function to destroy cached devices */
|
||||||
|
static void __attribute__((destructor)) _darwin_finalize(void) {
|
||||||
struct darwin_cached_device *dev, *next;
|
struct darwin_cached_device *dev, *next;
|
||||||
|
|
||||||
usbi_mutex_lock(&darwin_cached_devices_lock);
|
usbi_mutex_lock(&darwin_cached_devices_lock);
|
||||||
|
@ -409,7 +431,6 @@ static void _darwin_finalize(void) {
|
||||||
|
|
||||||
static int darwin_init(struct libusb_context *ctx) {
|
static int darwin_init(struct libusb_context *ctx) {
|
||||||
host_name_port_t host_self;
|
host_name_port_t host_self;
|
||||||
static int initted = 0;
|
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
rc = darwin_scan_devices (ctx);
|
rc = darwin_scan_devices (ctx);
|
||||||
|
@ -420,17 +441,12 @@ static int darwin_init(struct libusb_context *ctx) {
|
||||||
if (OSAtomicIncrement32Barrier(&initCount) == 1) {
|
if (OSAtomicIncrement32Barrier(&initCount) == 1) {
|
||||||
/* create the clocks that will be used */
|
/* create the clocks that will be used */
|
||||||
|
|
||||||
if (!initted) {
|
|
||||||
initted = 1;
|
|
||||||
atexit(_darwin_finalize);
|
|
||||||
}
|
|
||||||
|
|
||||||
host_self = mach_host_self();
|
host_self = mach_host_self();
|
||||||
host_get_clock_service(host_self, CALENDAR_CLOCK, &clock_realtime);
|
host_get_clock_service(host_self, CALENDAR_CLOCK, &clock_realtime);
|
||||||
host_get_clock_service(host_self, SYSTEM_CLOCK, &clock_monotonic);
|
host_get_clock_service(host_self, SYSTEM_CLOCK, &clock_monotonic);
|
||||||
mach_port_deallocate(mach_task_self(), host_self);
|
mach_port_deallocate(mach_task_self(), host_self);
|
||||||
|
|
||||||
pthread_create (&libusb_darwin_at, NULL, darwin_event_thread_main, (void *)ctx);
|
pthread_create (&libusb_darwin_at, NULL, darwin_event_thread_main, ctx);
|
||||||
|
|
||||||
pthread_mutex_lock (&libusb_darwin_at_mutex);
|
pthread_mutex_lock (&libusb_darwin_at_mutex);
|
||||||
while (!libusb_darwin_acfl)
|
while (!libusb_darwin_acfl)
|
||||||
|
@ -524,7 +540,7 @@ static int darwin_get_config_descriptor(struct libusb_device *dev, uint8_t confi
|
||||||
if (ret != LIBUSB_SUCCESS)
|
if (ret != LIBUSB_SUCCESS)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
return len;
|
return (int) len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check whether the os has configured the device */
|
/* check whether the os has configured the device */
|
||||||
|
@ -701,7 +717,7 @@ static int darwin_cache_device_descriptor (struct libusb_context *ctx, struct da
|
||||||
else
|
else
|
||||||
usbi_warn (ctx, "could not retrieve device descriptor %.4x:%.4x: %s (%x). skipping device",
|
usbi_warn (ctx, "could not retrieve device descriptor %.4x:%.4x: %s (%x). skipping device",
|
||||||
idVendor, idProduct, darwin_error_str (ret), ret);
|
idVendor, idProduct, darwin_error_str (ret), ret);
|
||||||
return -1;
|
return darwin_to_libusb (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* catch buggy hubs (which appear to be virtual). Apple's own USB prober has problems with these devices. */
|
/* catch buggy hubs (which appear to be virtual). Apple's own USB prober has problems with these devices. */
|
||||||
|
@ -709,7 +725,7 @@ static int darwin_cache_device_descriptor (struct libusb_context *ctx, struct da
|
||||||
/* not a valid device */
|
/* not a valid device */
|
||||||
usbi_warn (ctx, "idProduct from iokit (%04x) does not match idProduct in descriptor (%04x). skipping device",
|
usbi_warn (ctx, "idProduct from iokit (%04x) does not match idProduct in descriptor (%04x). skipping device",
|
||||||
idProduct, libusb_le16_to_cpu (dev->dev_descriptor.idProduct));
|
idProduct, libusb_le16_to_cpu (dev->dev_descriptor.idProduct));
|
||||||
return -1;
|
return LIBUSB_ERROR_NO_DEVICE;
|
||||||
}
|
}
|
||||||
|
|
||||||
usbi_dbg ("cached device descriptor:");
|
usbi_dbg ("cached device descriptor:");
|
||||||
|
@ -729,26 +745,24 @@ static int darwin_cache_device_descriptor (struct libusb_context *ctx, struct da
|
||||||
|
|
||||||
dev->can_enumerate = 1;
|
dev->can_enumerate = 1;
|
||||||
|
|
||||||
return 0;
|
return LIBUSB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int darwin_get_cached_device(struct libusb_context *ctx, io_service_t service,
|
static int darwin_get_cached_device(struct libusb_context *ctx, io_service_t service,
|
||||||
struct darwin_cached_device **cached_out) {
|
struct darwin_cached_device **cached_out) {
|
||||||
struct darwin_cached_device *new_device;
|
struct darwin_cached_device *new_device;
|
||||||
UInt64 sessionID, parent_sessionID;
|
UInt64 sessionID = 0, parent_sessionID = 0;
|
||||||
int ret = LIBUSB_SUCCESS;
|
int ret = LIBUSB_SUCCESS;
|
||||||
usb_device_t **device;
|
usb_device_t **device;
|
||||||
io_service_t parent;
|
io_service_t parent;
|
||||||
kern_return_t result;
|
kern_return_t result;
|
||||||
UInt8 port = 0;
|
UInt8 port = 0;
|
||||||
|
|
||||||
*cached_out = NULL;
|
|
||||||
|
|
||||||
/* get some info from the io registry */
|
/* get some info from the io registry */
|
||||||
(void) get_ioregistry_value_number (service, CFSTR("sessionID"), kCFNumberSInt64Type, &sessionID);
|
(void) get_ioregistry_value_number (service, CFSTR("sessionID"), kCFNumberSInt64Type, &sessionID);
|
||||||
(void) get_ioregistry_value_number (service, CFSTR("PortNum"), kCFNumberSInt8Type, &port);
|
(void) get_ioregistry_value_number (service, CFSTR("PortNum"), kCFNumberSInt8Type, &port);
|
||||||
|
|
||||||
usbi_dbg("finding cached device for sessionID 0x\n" PRIx64, sessionID);
|
usbi_dbg("finding cached device for sessionID 0x%" PRIx64, sessionID);
|
||||||
|
|
||||||
result = IORegistryEntryGetParentEntry (service, kIOUSBPlane, &parent);
|
result = IORegistryEntryGetParentEntry (service, kIOUSBPlane, &parent);
|
||||||
|
|
||||||
|
@ -759,8 +773,10 @@ static int darwin_get_cached_device(struct libusb_context *ctx, io_service_t ser
|
||||||
|
|
||||||
usbi_mutex_lock(&darwin_cached_devices_lock);
|
usbi_mutex_lock(&darwin_cached_devices_lock);
|
||||||
do {
|
do {
|
||||||
|
*cached_out = NULL;
|
||||||
|
|
||||||
list_for_each_entry(new_device, &darwin_cached_devices, list, struct darwin_cached_device) {
|
list_for_each_entry(new_device, &darwin_cached_devices, list, struct darwin_cached_device) {
|
||||||
usbi_dbg("matching sessionID 0x%x against cached device with sessionID 0x%x", sessionID, new_device->session);
|
usbi_dbg("matching sessionID 0x%" PRIx64 " against cached device with sessionID 0x%" PRIx64, sessionID, new_device->session);
|
||||||
if (new_device->session == sessionID) {
|
if (new_device->session == sessionID) {
|
||||||
usbi_dbg("using cached device for device");
|
usbi_dbg("using cached device for device");
|
||||||
*cached_out = new_device;
|
*cached_out = new_device;
|
||||||
|
@ -771,19 +787,17 @@ static int darwin_get_cached_device(struct libusb_context *ctx, io_service_t ser
|
||||||
if (*cached_out)
|
if (*cached_out)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
usbi_dbg("caching new device with sessionID 0x%x\n", sessionID);
|
usbi_dbg("caching new device with sessionID 0x%" PRIx64, sessionID);
|
||||||
|
|
||||||
new_device = calloc (1, sizeof (*new_device));
|
|
||||||
if (!new_device) {
|
|
||||||
ret = LIBUSB_ERROR_NO_MEM;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
device = darwin_device_from_service (service);
|
device = darwin_device_from_service (service);
|
||||||
if (!device) {
|
if (!device) {
|
||||||
ret = LIBUSB_ERROR_NO_DEVICE;
|
ret = LIBUSB_ERROR_NO_DEVICE;
|
||||||
free (new_device);
|
break;
|
||||||
new_device = NULL;
|
}
|
||||||
|
|
||||||
|
new_device = calloc (1, sizeof (*new_device));
|
||||||
|
if (!new_device) {
|
||||||
|
ret = LIBUSB_ERROR_NO_MEM;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -833,7 +847,7 @@ static int process_new_device (struct libusb_context *ctx, io_service_t service)
|
||||||
do {
|
do {
|
||||||
ret = darwin_get_cached_device (ctx, service, &cached_device);
|
ret = darwin_get_cached_device (ctx, service, &cached_device);
|
||||||
|
|
||||||
if (ret < 0 || (cached_device && !cached_device->can_enumerate)) {
|
if (ret < 0 || !cached_device->can_enumerate) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -843,10 +857,10 @@ static int process_new_device (struct libusb_context *ctx, io_service_t service)
|
||||||
if (ret)
|
if (ret)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
usbi_dbg ("allocating new device in context %p for with session 0x%08x",
|
usbi_dbg ("allocating new device in context %p for with session 0x%" PRIx64,
|
||||||
ctx, cached_device->session);
|
ctx, cached_device->session);
|
||||||
|
|
||||||
dev = usbi_alloc_device(ctx, cached_device->session);
|
dev = usbi_alloc_device(ctx, (unsigned long) cached_device->session);
|
||||||
if (!dev) {
|
if (!dev) {
|
||||||
return LIBUSB_ERROR_NO_MEM;
|
return LIBUSB_ERROR_NO_MEM;
|
||||||
}
|
}
|
||||||
|
@ -857,7 +871,7 @@ static int process_new_device (struct libusb_context *ctx, io_service_t service)
|
||||||
darwin_ref_cached_device (priv->dev);
|
darwin_ref_cached_device (priv->dev);
|
||||||
|
|
||||||
if (cached_device->parent_session > 0) {
|
if (cached_device->parent_session > 0) {
|
||||||
dev->parent_dev = usbi_get_device_by_session_id (ctx, cached_device->parent_session);
|
dev->parent_dev = usbi_get_device_by_session_id (ctx, (unsigned long) cached_device->parent_session);
|
||||||
} else {
|
} else {
|
||||||
dev->parent_dev = NULL;
|
dev->parent_dev = NULL;
|
||||||
}
|
}
|
||||||
|
@ -865,11 +879,6 @@ static int process_new_device (struct libusb_context *ctx, io_service_t service)
|
||||||
dev->bus_number = cached_device->location >> 24;
|
dev->bus_number = cached_device->location >> 24;
|
||||||
dev->device_address = cached_device->address;
|
dev->device_address = cached_device->address;
|
||||||
|
|
||||||
/* need to add a reference to the parent device */
|
|
||||||
if (dev->parent_dev) {
|
|
||||||
libusb_ref_device(dev->parent_dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
(*(priv->dev->device))->GetDeviceSpeed (priv->dev->device, &devSpeed);
|
(*(priv->dev->device))->GetDeviceSpeed (priv->dev->device, &devSpeed);
|
||||||
|
|
||||||
switch (devSpeed) {
|
switch (devSpeed) {
|
||||||
|
@ -1129,7 +1138,7 @@ static int get_endpoints (struct libusb_device_handle *dev_handle, int iface) {
|
||||||
|
|
||||||
usbi_dbg ("interface: %i pipe %i: dir: %i number: %i", iface, i, direction, number);
|
usbi_dbg ("interface: %i pipe %i: dir: %i number: %i", iface, i, direction, number);
|
||||||
|
|
||||||
cInterface->endpoint_addrs[i - 1] = ((direction << 7 & LIBUSB_ENDPOINT_DIR_MASK) | (number & LIBUSB_ENDPOINT_ADDRESS_MASK));
|
cInterface->endpoint_addrs[i - 1] = (((kUSBIn == direction) << kUSBRqDirnShift) | (number & LIBUSB_ENDPOINT_ADDRESS_MASK));
|
||||||
}
|
}
|
||||||
|
|
||||||
cInterface->num_endpoints = numep;
|
cInterface->num_endpoints = numep;
|
||||||
|
@ -1301,22 +1310,18 @@ static int darwin_set_interface_altsetting(struct libusb_device_handle *dev_hand
|
||||||
}
|
}
|
||||||
|
|
||||||
static int darwin_clear_halt(struct libusb_device_handle *dev_handle, unsigned char endpoint) {
|
static int darwin_clear_halt(struct libusb_device_handle *dev_handle, unsigned char endpoint) {
|
||||||
struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)dev_handle->os_priv;
|
|
||||||
|
|
||||||
/* current interface */
|
/* current interface */
|
||||||
struct darwin_interface *cInterface;
|
struct darwin_interface *cInterface;
|
||||||
uint8_t pipeRef, iface;
|
|
||||||
IOReturn kresult;
|
IOReturn kresult;
|
||||||
|
uint8_t pipeRef;
|
||||||
|
|
||||||
/* determine the interface/endpoint to use */
|
/* determine the interface/endpoint to use */
|
||||||
if (ep_to_pipeRef (dev_handle, endpoint, &pipeRef, &iface) != 0) {
|
if (ep_to_pipeRef (dev_handle, endpoint, &pipeRef, NULL, &cInterface) != 0) {
|
||||||
usbi_err (HANDLE_CTX (dev_handle), "endpoint not found on any open interface");
|
usbi_err (HANDLE_CTX (dev_handle), "endpoint not found on any open interface");
|
||||||
|
|
||||||
return LIBUSB_ERROR_NOT_FOUND;
|
return LIBUSB_ERROR_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
cInterface = &priv->interfaces[iface];
|
|
||||||
|
|
||||||
/* newer versions of darwin support clearing additional bits on the device's endpoint */
|
/* newer versions of darwin support clearing additional bits on the device's endpoint */
|
||||||
kresult = (*(cInterface->interface))->ClearPipeStallBothEnds(cInterface->interface, pipeRef);
|
kresult = (*(cInterface->interface))->ClearPipeStallBothEnds(cInterface->interface, pipeRef);
|
||||||
if (kresult)
|
if (kresult)
|
||||||
|
@ -1430,26 +1435,29 @@ static void darwin_destroy_device(struct libusb_device *dev) {
|
||||||
|
|
||||||
static int submit_bulk_transfer(struct usbi_transfer *itransfer) {
|
static int submit_bulk_transfer(struct usbi_transfer *itransfer) {
|
||||||
struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
||||||
struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)transfer->dev_handle->os_priv;
|
|
||||||
|
|
||||||
IOReturn ret;
|
IOReturn ret;
|
||||||
uint8_t transferType;
|
uint8_t transferType;
|
||||||
/* None of the values below are used in libusbx for bulk transfers */
|
/* None of the values below are used in libusbx for bulk transfers */
|
||||||
uint8_t direction, number, interval, pipeRef, iface;
|
uint8_t direction, number, interval, pipeRef;
|
||||||
uint16_t maxPacketSize;
|
uint16_t maxPacketSize;
|
||||||
|
|
||||||
struct darwin_interface *cInterface;
|
struct darwin_interface *cInterface;
|
||||||
|
|
||||||
if (ep_to_pipeRef (transfer->dev_handle, transfer->endpoint, &pipeRef, &iface) != 0) {
|
if (ep_to_pipeRef (transfer->dev_handle, transfer->endpoint, &pipeRef, NULL, &cInterface) != 0) {
|
||||||
usbi_err (TRANSFER_CTX (transfer), "endpoint not found on any open interface");
|
usbi_err (TRANSFER_CTX (transfer), "endpoint not found on any open interface");
|
||||||
|
|
||||||
return LIBUSB_ERROR_NOT_FOUND;
|
return LIBUSB_ERROR_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
cInterface = &priv->interfaces[iface];
|
ret = (*(cInterface->interface))->GetPipeProperties (cInterface->interface, pipeRef, &direction, &number,
|
||||||
|
&transferType, &maxPacketSize, &interval);
|
||||||
|
|
||||||
(*(cInterface->interface))->GetPipeProperties (cInterface->interface, pipeRef, &direction, &number,
|
if (ret) {
|
||||||
&transferType, &maxPacketSize, &interval);
|
usbi_err (TRANSFER_CTX (transfer), "bulk transfer failed (dir = %s): %s (code = 0x%08x)", IS_XFERIN(transfer) ? "In" : "Out",
|
||||||
|
darwin_error_str(ret), ret);
|
||||||
|
return darwin_to_libusb (ret);
|
||||||
|
}
|
||||||
|
|
||||||
if (0 != (transfer->length % maxPacketSize)) {
|
if (0 != (transfer->length % maxPacketSize)) {
|
||||||
/* do not need a zero packet */
|
/* do not need a zero packet */
|
||||||
|
@ -1485,13 +1493,44 @@ static int submit_bulk_transfer(struct usbi_transfer *itransfer) {
|
||||||
return darwin_to_libusb (ret);
|
return darwin_to_libusb (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if InterfaceVersion >= 550
|
||||||
|
static int submit_stream_transfer(struct usbi_transfer *itransfer) {
|
||||||
|
struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
||||||
|
struct darwin_interface *cInterface;
|
||||||
|
uint8_t pipeRef;
|
||||||
|
IOReturn ret;
|
||||||
|
|
||||||
|
if (ep_to_pipeRef (transfer->dev_handle, transfer->endpoint, &pipeRef, NULL, &cInterface) != 0) {
|
||||||
|
usbi_err (TRANSFER_CTX (transfer), "endpoint not found on any open interface");
|
||||||
|
|
||||||
|
return LIBUSB_ERROR_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
itransfer->flags |= USBI_TRANSFER_OS_HANDLES_TIMEOUT;
|
||||||
|
|
||||||
|
if (IS_XFERIN(transfer))
|
||||||
|
ret = (*(cInterface->interface))->ReadStreamsPipeAsyncTO(cInterface->interface, pipeRef, itransfer->stream_id,
|
||||||
|
transfer->buffer, transfer->length, transfer->timeout,
|
||||||
|
transfer->timeout, darwin_async_io_callback, (void *)itransfer);
|
||||||
|
else
|
||||||
|
ret = (*(cInterface->interface))->WriteStreamsPipeAsyncTO(cInterface->interface, pipeRef, itransfer->stream_id,
|
||||||
|
transfer->buffer, transfer->length, transfer->timeout,
|
||||||
|
transfer->timeout, darwin_async_io_callback, (void *)itransfer);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
usbi_err (TRANSFER_CTX (transfer), "bulk stream transfer failed (dir = %s): %s (code = 0x%08x)", IS_XFERIN(transfer) ? "In" : "Out",
|
||||||
|
darwin_error_str(ret), ret);
|
||||||
|
|
||||||
|
return darwin_to_libusb (ret);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int submit_iso_transfer(struct usbi_transfer *itransfer) {
|
static int submit_iso_transfer(struct usbi_transfer *itransfer) {
|
||||||
struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
||||||
struct darwin_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
|
struct darwin_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
|
||||||
struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)transfer->dev_handle->os_priv;
|
|
||||||
|
|
||||||
IOReturn kresult;
|
IOReturn kresult;
|
||||||
uint8_t direction, number, interval, pipeRef, iface, transferType;
|
uint8_t direction, number, interval, pipeRef, transferType;
|
||||||
uint16_t maxPacketSize;
|
uint16_t maxPacketSize;
|
||||||
UInt64 frame;
|
UInt64 frame;
|
||||||
AbsoluteTime atTime;
|
AbsoluteTime atTime;
|
||||||
|
@ -1512,19 +1551,17 @@ static int submit_iso_transfer(struct usbi_transfer *itransfer) {
|
||||||
return LIBUSB_ERROR_NO_MEM;
|
return LIBUSB_ERROR_NO_MEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* copy the frame list from the libusbx descriptor (the structures differ only is member order) */
|
/* copy the frame list from the libusb descriptor (the structures differ only is member order) */
|
||||||
for (i = 0 ; i < transfer->num_iso_packets ; i++)
|
for (i = 0 ; i < transfer->num_iso_packets ; i++)
|
||||||
tpriv->isoc_framelist[i].frReqCount = transfer->iso_packet_desc[i].length;
|
tpriv->isoc_framelist[i].frReqCount = transfer->iso_packet_desc[i].length;
|
||||||
|
|
||||||
/* determine the interface/endpoint to use */
|
/* determine the interface/endpoint to use */
|
||||||
if (ep_to_pipeRef (transfer->dev_handle, transfer->endpoint, &pipeRef, &iface) != 0) {
|
if (ep_to_pipeRef (transfer->dev_handle, transfer->endpoint, &pipeRef, NULL, &cInterface) != 0) {
|
||||||
usbi_err (TRANSFER_CTX (transfer), "endpoint not found on any open interface");
|
usbi_err (TRANSFER_CTX (transfer), "endpoint not found on any open interface");
|
||||||
|
|
||||||
return LIBUSB_ERROR_NOT_FOUND;
|
return LIBUSB_ERROR_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
cInterface = &priv->interfaces[iface];
|
|
||||||
|
|
||||||
/* determine the properties of this endpoint and the speed of the device */
|
/* determine the properties of this endpoint and the speed of the device */
|
||||||
(*(cInterface->interface))->GetPipeProperties (cInterface->interface, pipeRef, &direction, &number,
|
(*(cInterface->interface))->GetPipeProperties (cInterface->interface, pipeRef, &direction, &number,
|
||||||
&transferType, &maxPacketSize, &interval);
|
&transferType, &maxPacketSize, &interval);
|
||||||
|
@ -1579,7 +1616,6 @@ static int submit_control_transfer(struct usbi_transfer *itransfer) {
|
||||||
struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
||||||
struct libusb_control_setup *setup = (struct libusb_control_setup *) transfer->buffer;
|
struct libusb_control_setup *setup = (struct libusb_control_setup *) transfer->buffer;
|
||||||
struct darwin_cached_device *dpriv = DARWIN_CACHED_DEVICE(transfer->dev_handle->dev);
|
struct darwin_cached_device *dpriv = DARWIN_CACHED_DEVICE(transfer->dev_handle->dev);
|
||||||
struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)transfer->dev_handle->os_priv;
|
|
||||||
struct darwin_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
|
struct darwin_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
|
||||||
|
|
||||||
IOReturn kresult;
|
IOReturn kresult;
|
||||||
|
@ -1593,7 +1629,7 @@ static int submit_control_transfer(struct usbi_transfer *itransfer) {
|
||||||
tpriv->req.wValue = OSSwapLittleToHostInt16 (setup->wValue);
|
tpriv->req.wValue = OSSwapLittleToHostInt16 (setup->wValue);
|
||||||
tpriv->req.wIndex = OSSwapLittleToHostInt16 (setup->wIndex);
|
tpriv->req.wIndex = OSSwapLittleToHostInt16 (setup->wIndex);
|
||||||
tpriv->req.wLength = OSSwapLittleToHostInt16 (setup->wLength);
|
tpriv->req.wLength = OSSwapLittleToHostInt16 (setup->wLength);
|
||||||
/* data is stored after the libusbx control block */
|
/* data is stored after the libusb control block */
|
||||||
tpriv->req.pData = transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE;
|
tpriv->req.pData = transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE;
|
||||||
tpriv->req.completionTimeout = transfer->timeout;
|
tpriv->req.completionTimeout = transfer->timeout;
|
||||||
tpriv->req.noDataTimeout = transfer->timeout;
|
tpriv->req.noDataTimeout = transfer->timeout;
|
||||||
|
@ -1604,16 +1640,14 @@ static int submit_control_transfer(struct usbi_transfer *itransfer) {
|
||||||
|
|
||||||
if (transfer->endpoint) {
|
if (transfer->endpoint) {
|
||||||
struct darwin_interface *cInterface;
|
struct darwin_interface *cInterface;
|
||||||
uint8_t pipeRef, iface;
|
uint8_t pipeRef;
|
||||||
|
|
||||||
if (ep_to_pipeRef (transfer->dev_handle, transfer->endpoint, &pipeRef, &iface) != 0) {
|
if (ep_to_pipeRef (transfer->dev_handle, transfer->endpoint, &pipeRef, NULL, &cInterface) != 0) {
|
||||||
usbi_err (TRANSFER_CTX (transfer), "endpoint not found on any open interface");
|
usbi_err (TRANSFER_CTX (transfer), "endpoint not found on any open interface");
|
||||||
|
|
||||||
return LIBUSB_ERROR_NOT_FOUND;
|
return LIBUSB_ERROR_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
cInterface = &priv->interfaces[iface];
|
|
||||||
|
|
||||||
kresult = (*(cInterface->interface))->ControlRequestAsyncTO (cInterface->interface, pipeRef, &(tpriv->req), darwin_async_io_callback, itransfer);
|
kresult = (*(cInterface->interface))->ControlRequestAsyncTO (cInterface->interface, pipeRef, &(tpriv->req), darwin_async_io_callback, itransfer);
|
||||||
} else
|
} else
|
||||||
/* control request on endpoint 0 */
|
/* control request on endpoint 0 */
|
||||||
|
@ -1636,6 +1670,13 @@ static int darwin_submit_transfer(struct usbi_transfer *itransfer) {
|
||||||
return submit_bulk_transfer(itransfer);
|
return submit_bulk_transfer(itransfer);
|
||||||
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
||||||
return submit_iso_transfer(itransfer);
|
return submit_iso_transfer(itransfer);
|
||||||
|
case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
|
||||||
|
#if InterfaceVersion >= 550
|
||||||
|
return submit_stream_transfer(itransfer);
|
||||||
|
#else
|
||||||
|
usbi_err (TRANSFER_CTX(transfer), "IOUSBFamily version does not support bulk stream transfers");
|
||||||
|
return LIBUSB_ERROR_NOT_SUPPORTED;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
usbi_err (TRANSFER_CTX(transfer), "unknown endpoint type %d", transfer->type);
|
usbi_err (TRANSFER_CTX(transfer), "unknown endpoint type %d", transfer->type);
|
||||||
return LIBUSB_ERROR_INVALID_PARAM;
|
return LIBUSB_ERROR_INVALID_PARAM;
|
||||||
|
@ -1660,26 +1701,28 @@ static int cancel_control_transfer(struct usbi_transfer *itransfer) {
|
||||||
static int darwin_abort_transfers (struct usbi_transfer *itransfer) {
|
static int darwin_abort_transfers (struct usbi_transfer *itransfer) {
|
||||||
struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
||||||
struct darwin_cached_device *dpriv = DARWIN_CACHED_DEVICE(transfer->dev_handle->dev);
|
struct darwin_cached_device *dpriv = DARWIN_CACHED_DEVICE(transfer->dev_handle->dev);
|
||||||
struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)transfer->dev_handle->os_priv;
|
|
||||||
struct darwin_interface *cInterface;
|
struct darwin_interface *cInterface;
|
||||||
uint8_t pipeRef, iface;
|
uint8_t pipeRef, iface;
|
||||||
IOReturn kresult;
|
IOReturn kresult;
|
||||||
|
|
||||||
if (ep_to_pipeRef (transfer->dev_handle, transfer->endpoint, &pipeRef, &iface) != 0) {
|
if (ep_to_pipeRef (transfer->dev_handle, transfer->endpoint, &pipeRef, &iface, &cInterface) != 0) {
|
||||||
usbi_err (TRANSFER_CTX (transfer), "endpoint not found on any open interface");
|
usbi_err (TRANSFER_CTX (transfer), "endpoint not found on any open interface");
|
||||||
|
|
||||||
return LIBUSB_ERROR_NOT_FOUND;
|
return LIBUSB_ERROR_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
cInterface = &priv->interfaces[iface];
|
|
||||||
|
|
||||||
if (!dpriv->device)
|
if (!dpriv->device)
|
||||||
return LIBUSB_ERROR_NO_DEVICE;
|
return LIBUSB_ERROR_NO_DEVICE;
|
||||||
|
|
||||||
usbi_warn (ITRANSFER_CTX (itransfer), "aborting all transactions on interface %d pipe %d", iface, pipeRef);
|
usbi_warn (ITRANSFER_CTX (itransfer), "aborting all transactions on interface %d pipe %d", iface, pipeRef);
|
||||||
|
|
||||||
/* abort transactions */
|
/* abort transactions */
|
||||||
(*(cInterface->interface))->AbortPipe (cInterface->interface, pipeRef);
|
#if InterfaceVersion >= 550
|
||||||
|
if (LIBUSB_TRANSFER_TYPE_BULK_STREAM == transfer->type)
|
||||||
|
(*(cInterface->interface))->AbortStreamsPipe (cInterface->interface, pipeRef, itransfer->stream_id);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
(*(cInterface->interface))->AbortPipe (cInterface->interface, pipeRef);
|
||||||
|
|
||||||
usbi_dbg ("calling clear pipe stall to clear the data toggle bit");
|
usbi_dbg ("calling clear pipe stall to clear the data toggle bit");
|
||||||
|
|
||||||
|
@ -1727,10 +1770,9 @@ static void darwin_async_io_callback (void *refcon, IOReturn result, void *arg0)
|
||||||
/* if requested write a zero packet */
|
/* if requested write a zero packet */
|
||||||
if (kIOReturnSuccess == result && IS_XFEROUT(transfer) && transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET) {
|
if (kIOReturnSuccess == result && IS_XFEROUT(transfer) && transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET) {
|
||||||
struct darwin_interface *cInterface;
|
struct darwin_interface *cInterface;
|
||||||
uint8_t iface, pipeRef;
|
uint8_t pipeRef;
|
||||||
|
|
||||||
(void) ep_to_pipeRef (transfer->dev_handle, transfer->endpoint, &pipeRef, &iface);
|
(void) ep_to_pipeRef (transfer->dev_handle, transfer->endpoint, &pipeRef, NULL, &cInterface);
|
||||||
cInterface = &priv->interfaces[iface];
|
|
||||||
|
|
||||||
(*(cInterface->interface))->WritePipe (cInterface->interface, pipeRef, transfer->buffer, 0);
|
(*(cInterface->interface))->WritePipe (cInterface->interface, pipeRef, transfer->buffer, 0);
|
||||||
}
|
}
|
||||||
|
@ -1861,6 +1903,64 @@ static int darwin_clock_gettime(int clk_id, struct timespec *tp) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if InterfaceVersion >= 550
|
||||||
|
static int darwin_alloc_streams (struct libusb_device_handle *dev_handle, uint32_t num_streams, unsigned char *endpoints,
|
||||||
|
int num_endpoints) {
|
||||||
|
struct darwin_interface *cInterface;
|
||||||
|
UInt32 supportsStreams;
|
||||||
|
uint8_t pipeRef;
|
||||||
|
int rc, i;
|
||||||
|
|
||||||
|
/* find the mimimum number of supported streams on the endpoint list */
|
||||||
|
for (i = 0 ; i < num_endpoints ; ++i) {
|
||||||
|
if (0 != (rc = ep_to_pipeRef (dev_handle, endpoints[i], &pipeRef, NULL, &cInterface))) {
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*(cInterface->interface))->SupportsStreams (cInterface->interface, pipeRef, &supportsStreams);
|
||||||
|
if (num_streams > supportsStreams)
|
||||||
|
num_streams = supportsStreams;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* it is an error if any endpoint in endpoints does not support streams */
|
||||||
|
if (0 == num_streams)
|
||||||
|
return LIBUSB_ERROR_INVALID_PARAM;
|
||||||
|
|
||||||
|
/* create the streams */
|
||||||
|
for (i = 0 ; i < num_endpoints ; ++i) {
|
||||||
|
(void) ep_to_pipeRef (dev_handle, endpoints[i], &pipeRef, NULL, &cInterface);
|
||||||
|
|
||||||
|
rc = (*(cInterface->interface))->CreateStreams (cInterface->interface, pipeRef, num_streams);
|
||||||
|
if (kIOReturnSuccess != rc)
|
||||||
|
return darwin_to_libusb(rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
return num_streams;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int darwin_free_streams (struct libusb_device_handle *dev_handle, unsigned char *endpoints, int num_endpoints) {
|
||||||
|
struct darwin_interface *cInterface;
|
||||||
|
UInt32 supportsStreams;
|
||||||
|
uint8_t pipeRef;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
for (int i = 0 ; i < num_endpoints ; ++i) {
|
||||||
|
if (0 != (rc = ep_to_pipeRef (dev_handle, endpoints[i], &pipeRef, NULL, &cInterface)))
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
(*(cInterface->interface))->SupportsStreams (cInterface->interface, pipeRef, &supportsStreams);
|
||||||
|
if (0 == supportsStreams)
|
||||||
|
return LIBUSB_ERROR_INVALID_PARAM;
|
||||||
|
|
||||||
|
rc = (*(cInterface->interface))->CreateStreams (cInterface->interface, pipeRef, 0);
|
||||||
|
if (kIOReturnSuccess != rc)
|
||||||
|
return darwin_to_libusb(rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
return LIBUSB_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
const struct usbi_os_backend darwin_backend = {
|
const struct usbi_os_backend darwin_backend = {
|
||||||
.name = "Darwin",
|
.name = "Darwin",
|
||||||
.caps = 0,
|
.caps = 0,
|
||||||
|
@ -1870,6 +1970,7 @@ const struct usbi_os_backend darwin_backend = {
|
||||||
.get_device_descriptor = darwin_get_device_descriptor,
|
.get_device_descriptor = darwin_get_device_descriptor,
|
||||||
.get_active_config_descriptor = darwin_get_active_config_descriptor,
|
.get_active_config_descriptor = darwin_get_active_config_descriptor,
|
||||||
.get_config_descriptor = darwin_get_config_descriptor,
|
.get_config_descriptor = darwin_get_config_descriptor,
|
||||||
|
.hotplug_poll = darwin_hotplug_poll,
|
||||||
|
|
||||||
.open = darwin_open,
|
.open = darwin_open,
|
||||||
.close = darwin_close,
|
.close = darwin_close,
|
||||||
|
@ -1882,6 +1983,11 @@ const struct usbi_os_backend darwin_backend = {
|
||||||
.clear_halt = darwin_clear_halt,
|
.clear_halt = darwin_clear_halt,
|
||||||
.reset_device = darwin_reset_device,
|
.reset_device = darwin_reset_device,
|
||||||
|
|
||||||
|
#if InterfaceVersion >= 550
|
||||||
|
.alloc_streams = darwin_alloc_streams,
|
||||||
|
.free_streams = darwin_free_streams,
|
||||||
|
#endif
|
||||||
|
|
||||||
.kernel_driver_active = darwin_kernel_driver_active,
|
.kernel_driver_active = darwin_kernel_driver_active,
|
||||||
.detach_kernel_driver = darwin_detach_kernel_driver,
|
.detach_kernel_driver = darwin_detach_kernel_driver,
|
||||||
.attach_kernel_driver = darwin_attach_kernel_driver,
|
.attach_kernel_driver = darwin_attach_kernel_driver,
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* darwin backend for libusbx 1.0
|
* darwin backend for libusb 1.0
|
||||||
* Copyright © 2008-2013 Nathan Hjelm <hjelmn@users.sourceforge.net>
|
* Copyright © 2008-2013 Nathan Hjelm <hjelmn@users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
|
@ -137,7 +137,7 @@ struct darwin_device_handle_priv {
|
||||||
uint8_t num_endpoints;
|
uint8_t num_endpoints;
|
||||||
CFRunLoopSourceRef cfSource;
|
CFRunLoopSourceRef cfSource;
|
||||||
uint64_t frames[256];
|
uint64_t frames[256];
|
||||||
uint8_t endpoint_addrs[USB_MAXENDPOINTS];
|
uint8_t endpoint_addrs[USB_MAXENDPOINTS];
|
||||||
} interfaces[USB_MAXINTERFACES];
|
} interfaces[USB_MAXINTERFACES];
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,6 +21,10 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "libusb.h"
|
||||||
|
#include "libusbi.h"
|
||||||
|
#include "linux_usbfs.h"
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
@ -30,46 +34,113 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_ASM_TYPES_H
|
||||||
|
#include <asm/types.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
#include "libusb.h"
|
#ifdef HAVE_LINUX_NETLINK_H
|
||||||
#include "libusbi.h"
|
|
||||||
#include "linux_usbfs.h"
|
|
||||||
|
|
||||||
#include <linux/netlink.h>
|
#include <linux/netlink.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_LINUX_FILTER_H
|
||||||
#include <linux/filter.h>
|
#include <linux/filter.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define KERNEL 1
|
#define KERNEL 1
|
||||||
|
|
||||||
static int linux_netlink_socket = -1;
|
static int linux_netlink_socket = -1;
|
||||||
|
static int netlink_control_pipe[2] = { -1, -1 };
|
||||||
static pthread_t libusb_linux_event_thread;
|
static pthread_t libusb_linux_event_thread;
|
||||||
|
|
||||||
static void *linux_netlink_event_thread_main(void *arg);
|
static void *linux_netlink_event_thread_main(void *arg);
|
||||||
|
|
||||||
struct sockaddr_nl snl = { .nl_family=AF_NETLINK, .nl_groups=KERNEL };
|
struct sockaddr_nl snl = { .nl_family=AF_NETLINK, .nl_groups=KERNEL };
|
||||||
|
|
||||||
|
static int set_fd_cloexec_nb (int fd)
|
||||||
|
{
|
||||||
|
int flags;
|
||||||
|
|
||||||
|
#if defined(FD_CLOEXEC)
|
||||||
|
flags = fcntl (linux_netlink_socket, F_GETFD);
|
||||||
|
if (0 > flags) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(flags & FD_CLOEXEC)) {
|
||||||
|
fcntl (linux_netlink_socket, F_SETFD, flags | FD_CLOEXEC);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
flags = fcntl (linux_netlink_socket, F_GETFL);
|
||||||
|
if (0 > flags) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(flags & O_NONBLOCK)) {
|
||||||
|
fcntl (linux_netlink_socket, F_SETFL, flags | O_NONBLOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int linux_netlink_start_event_monitor(void)
|
int linux_netlink_start_event_monitor(void)
|
||||||
{
|
{
|
||||||
|
int socktype = SOCK_RAW;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
snl.nl_groups = KERNEL;
|
snl.nl_groups = KERNEL;
|
||||||
|
|
||||||
linux_netlink_socket = socket(PF_NETLINK, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, NETLINK_KOBJECT_UEVENT);
|
#if defined(SOCK_CLOEXEC)
|
||||||
|
socktype |= SOCK_CLOEXEC;
|
||||||
|
#endif
|
||||||
|
#if defined(SOCK_NONBLOCK)
|
||||||
|
socktype |= SOCK_NONBLOCK;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
linux_netlink_socket = socket(PF_NETLINK, socktype, NETLINK_KOBJECT_UEVENT);
|
||||||
|
if (-1 == linux_netlink_socket && EINVAL == errno) {
|
||||||
|
linux_netlink_socket = socket(PF_NETLINK, SOCK_RAW, NETLINK_KOBJECT_UEVENT);
|
||||||
|
}
|
||||||
|
|
||||||
if (-1 == linux_netlink_socket) {
|
if (-1 == linux_netlink_socket) {
|
||||||
return LIBUSB_ERROR_OTHER;
|
return LIBUSB_ERROR_OTHER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = set_fd_cloexec_nb (linux_netlink_socket);
|
||||||
|
if (0 != ret) {
|
||||||
|
close (linux_netlink_socket);
|
||||||
|
linux_netlink_socket = -1;
|
||||||
|
return LIBUSB_ERROR_OTHER;
|
||||||
|
}
|
||||||
|
|
||||||
ret = bind(linux_netlink_socket, (struct sockaddr *) &snl, sizeof(snl));
|
ret = bind(linux_netlink_socket, (struct sockaddr *) &snl, sizeof(snl));
|
||||||
if (0 != ret) {
|
if (0 != ret) {
|
||||||
|
close(linux_netlink_socket);
|
||||||
return LIBUSB_ERROR_OTHER;
|
return LIBUSB_ERROR_OTHER;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO -- add authentication */
|
/* TODO -- add authentication */
|
||||||
/* setsockopt(linux_netlink_socket, SOL_SOCKET, SO_PASSCRED, &one, sizeof(one)); */
|
/* setsockopt(linux_netlink_socket, SOL_SOCKET, SO_PASSCRED, &one, sizeof(one)); */
|
||||||
|
|
||||||
|
ret = usbi_pipe(netlink_control_pipe);
|
||||||
|
if (ret) {
|
||||||
|
usbi_err(NULL, "could not create netlink control pipe");
|
||||||
|
close(linux_netlink_socket);
|
||||||
|
return LIBUSB_ERROR_OTHER;
|
||||||
|
}
|
||||||
|
|
||||||
ret = pthread_create(&libusb_linux_event_thread, NULL, linux_netlink_event_thread_main, NULL);
|
ret = pthread_create(&libusb_linux_event_thread, NULL, linux_netlink_event_thread_main, NULL);
|
||||||
if (0 != ret) {
|
if (0 != ret) {
|
||||||
|
close(netlink_control_pipe[0]);
|
||||||
|
close(netlink_control_pipe[1]);
|
||||||
|
close(linux_netlink_socket);
|
||||||
return LIBUSB_ERROR_OTHER;
|
return LIBUSB_ERROR_OTHER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,22 +150,30 @@ int linux_netlink_start_event_monitor(void)
|
||||||
int linux_netlink_stop_event_monitor(void)
|
int linux_netlink_stop_event_monitor(void)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
char dummy = 1;
|
||||||
|
|
||||||
if (-1 == linux_netlink_socket) {
|
if (-1 == linux_netlink_socket) {
|
||||||
/* already closed. nothing to do */
|
/* already closed. nothing to do */
|
||||||
return LIBUSB_SUCCESS;
|
return LIBUSB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = close(linux_netlink_socket);
|
/* Write some dummy data to the control pipe and
|
||||||
if (0 > r) {
|
* wait for the thread to exit */
|
||||||
usbi_err(NULL, "error closing netlink socket. %s", strerror(errno));
|
r = usbi_write(netlink_control_pipe[1], &dummy, sizeof(dummy));
|
||||||
return LIBUSB_ERROR_OTHER;
|
if (r <= 0) {
|
||||||
|
usbi_warn(NULL, "netlink control pipe signal failed");
|
||||||
}
|
}
|
||||||
|
pthread_join(libusb_linux_event_thread, NULL);
|
||||||
|
|
||||||
pthread_cancel(libusb_linux_event_thread);
|
close(linux_netlink_socket);
|
||||||
|
|
||||||
linux_netlink_socket = -1;
|
linux_netlink_socket = -1;
|
||||||
|
|
||||||
|
/* close and reset control pipe */
|
||||||
|
close(netlink_control_pipe[0]);
|
||||||
|
close(netlink_control_pipe[1]);
|
||||||
|
netlink_control_pipe[0] = -1;
|
||||||
|
netlink_control_pipe[1] = -1;
|
||||||
|
|
||||||
return LIBUSB_SUCCESS;
|
return LIBUSB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,8 +224,32 @@ static int linux_netlink_parse(char *buffer, size_t len, int *detached, const ch
|
||||||
|
|
||||||
tmp = netlink_message_parse(buffer, len, "BUSNUM");
|
tmp = netlink_message_parse(buffer, len, "BUSNUM");
|
||||||
if (NULL == tmp) {
|
if (NULL == tmp) {
|
||||||
/* no bus number (likely a usb interface). ignore*/
|
/* no bus number. try "DEVICE" */
|
||||||
return -1;
|
tmp = netlink_message_parse(buffer, len, "DEVICE");
|
||||||
|
if (NULL == tmp) {
|
||||||
|
/* not usb. ignore */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Parse a device path such as /dev/bus/usb/003/004 */
|
||||||
|
char *pLastSlash = (char*)strrchr(tmp,'/');
|
||||||
|
if(NULL == pLastSlash) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*devaddr = strtoul(pLastSlash + 1, NULL, 10);
|
||||||
|
if (errno) {
|
||||||
|
errno = 0;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*busnum = strtoul(pLastSlash - 3, NULL, 10);
|
||||||
|
if (errno) {
|
||||||
|
errno = 0;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
*busnum = (uint8_t)(strtoul(tmp, NULL, 10) & 0xff);
|
*busnum = (uint8_t)(strtoul(tmp, NULL, 10) & 0xff);
|
||||||
|
@ -214,7 +317,7 @@ static int linux_netlink_read_message(void)
|
||||||
|
|
||||||
/* signal device is available (or not) to all contexts */
|
/* signal device is available (or not) to all contexts */
|
||||||
if (detached)
|
if (detached)
|
||||||
linux_hotplug_disconnected(busnum, devaddr, sys_name);
|
linux_device_disconnected(busnum, devaddr, sys_name);
|
||||||
else
|
else
|
||||||
linux_hotplug_enumerate(busnum, devaddr, sys_name);
|
linux_hotplug_enumerate(busnum, devaddr, sys_name);
|
||||||
|
|
||||||
|
@ -223,20 +326,32 @@ static int linux_netlink_read_message(void)
|
||||||
|
|
||||||
static void *linux_netlink_event_thread_main(void *arg)
|
static void *linux_netlink_event_thread_main(void *arg)
|
||||||
{
|
{
|
||||||
struct pollfd fds = {.fd = linux_netlink_socket,
|
char dummy;
|
||||||
.events = POLLIN};
|
int r;
|
||||||
|
struct pollfd fds[] = {
|
||||||
|
{ .fd = netlink_control_pipe[0],
|
||||||
|
.events = POLLIN },
|
||||||
|
{ .fd = linux_netlink_socket,
|
||||||
|
.events = POLLIN },
|
||||||
|
};
|
||||||
|
|
||||||
/* silence compiler warning */
|
/* silence compiler warning */
|
||||||
(void) arg;
|
(void) arg;
|
||||||
|
|
||||||
while (1 == poll(&fds, 1, -1)) {
|
while (poll(fds, 2, -1) >= 0) {
|
||||||
if (POLLIN != fds.revents) {
|
if (fds[0].revents & POLLIN) {
|
||||||
|
/* activity on control pipe, read the byte and exit */
|
||||||
|
r = usbi_read(netlink_control_pipe[0], &dummy, sizeof(dummy));
|
||||||
|
if (r <= 0) {
|
||||||
|
usbi_warn(NULL, "netlink control pipe read failed");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (fds[1].revents & POLLIN) {
|
||||||
usbi_mutex_static_lock(&linux_hotplug_lock);
|
usbi_mutex_static_lock(&linux_hotplug_lock);
|
||||||
linux_netlink_read_message();
|
linux_netlink_read_message();
|
||||||
usbi_mutex_static_unlock(&linux_hotplug_lock);
|
usbi_mutex_static_unlock(&linux_hotplug_lock);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
|
@ -46,6 +46,7 @@
|
||||||
/* udev context */
|
/* udev context */
|
||||||
static struct udev *udev_ctx = NULL;
|
static struct udev *udev_ctx = NULL;
|
||||||
static int udev_monitor_fd = -1;
|
static int udev_monitor_fd = -1;
|
||||||
|
static int udev_control_pipe[2] = {-1, -1};
|
||||||
static struct udev_monitor *udev_monitor = NULL;
|
static struct udev_monitor *udev_monitor = NULL;
|
||||||
static pthread_t linux_event_thread;
|
static pthread_t linux_event_thread;
|
||||||
|
|
||||||
|
@ -60,7 +61,7 @@ int linux_udev_start_event_monitor(void)
|
||||||
udev_ctx = udev_new();
|
udev_ctx = udev_new();
|
||||||
if (!udev_ctx) {
|
if (!udev_ctx) {
|
||||||
usbi_err(NULL, "could not create udev context");
|
usbi_err(NULL, "could not create udev context");
|
||||||
return LIBUSB_ERROR_OTHER;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
udev_monitor = udev_monitor_new_from_netlink(udev_ctx, "udev");
|
udev_monitor = udev_monitor_new_from_netlink(udev_ctx, "udev");
|
||||||
|
@ -95,34 +96,49 @@ int linux_udev_start_event_monitor(void)
|
||||||
goto err_free_monitor;
|
goto err_free_monitor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r = usbi_pipe(udev_control_pipe);
|
||||||
|
if (r) {
|
||||||
|
usbi_err(NULL, "could not create udev control pipe");
|
||||||
|
goto err_free_monitor;
|
||||||
|
}
|
||||||
|
|
||||||
r = pthread_create(&linux_event_thread, NULL, linux_udev_event_thread_main, NULL);
|
r = pthread_create(&linux_event_thread, NULL, linux_udev_event_thread_main, NULL);
|
||||||
if (r) {
|
if (r) {
|
||||||
usbi_err(NULL, "creating hotplug event thread (%d)", r);
|
usbi_err(NULL, "creating hotplug event thread (%d)", r);
|
||||||
goto err_free_monitor;
|
goto err_close_pipe;
|
||||||
}
|
}
|
||||||
|
|
||||||
return LIBUSB_SUCCESS;
|
return LIBUSB_SUCCESS;
|
||||||
|
|
||||||
|
err_close_pipe:
|
||||||
|
close(udev_control_pipe[0]);
|
||||||
|
close(udev_control_pipe[1]);
|
||||||
err_free_monitor:
|
err_free_monitor:
|
||||||
udev_monitor_unref(udev_monitor);
|
udev_monitor_unref(udev_monitor);
|
||||||
udev_monitor = NULL;
|
udev_monitor = NULL;
|
||||||
udev_monitor_fd = -1;
|
udev_monitor_fd = -1;
|
||||||
err_free_ctx:
|
err_free_ctx:
|
||||||
udev_unref(udev_ctx);
|
udev_unref(udev_ctx);
|
||||||
|
err:
|
||||||
udev_ctx = NULL;
|
udev_ctx = NULL;
|
||||||
return LIBUSB_ERROR_OTHER;
|
return LIBUSB_ERROR_OTHER;
|
||||||
}
|
}
|
||||||
|
|
||||||
int linux_udev_stop_event_monitor(void)
|
int linux_udev_stop_event_monitor(void)
|
||||||
{
|
{
|
||||||
|
char dummy = 1;
|
||||||
|
int r;
|
||||||
|
|
||||||
assert(udev_ctx != NULL);
|
assert(udev_ctx != NULL);
|
||||||
assert(udev_monitor != NULL);
|
assert(udev_monitor != NULL);
|
||||||
assert(udev_monitor_fd != -1);
|
assert(udev_monitor_fd != -1);
|
||||||
|
|
||||||
/* Cancel the event thread. This is the only way to guarantee the
|
/* Write some dummy data to the control pipe and
|
||||||
thread exits since closing the monitor fd won't necessarily cause
|
* wait for the thread to exit */
|
||||||
poll to return. */
|
r = usbi_write(udev_control_pipe[1], &dummy, sizeof(dummy));
|
||||||
pthread_cancel(linux_event_thread);
|
if (r <= 0) {
|
||||||
|
usbi_warn(NULL, "udev control pipe signal failed");
|
||||||
|
}
|
||||||
pthread_join(linux_event_thread, NULL);
|
pthread_join(linux_event_thread, NULL);
|
||||||
|
|
||||||
/* Release the udev monitor */
|
/* Release the udev monitor */
|
||||||
|
@ -134,27 +150,45 @@ int linux_udev_stop_event_monitor(void)
|
||||||
udev_unref(udev_ctx);
|
udev_unref(udev_ctx);
|
||||||
udev_ctx = NULL;
|
udev_ctx = NULL;
|
||||||
|
|
||||||
|
/* close and reset control pipe */
|
||||||
|
close(udev_control_pipe[0]);
|
||||||
|
close(udev_control_pipe[1]);
|
||||||
|
udev_control_pipe[0] = -1;
|
||||||
|
udev_control_pipe[1] = -1;
|
||||||
|
|
||||||
return LIBUSB_SUCCESS;
|
return LIBUSB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *linux_udev_event_thread_main(void *arg)
|
static void *linux_udev_event_thread_main(void *arg)
|
||||||
{
|
{
|
||||||
|
char dummy;
|
||||||
|
int r;
|
||||||
struct udev_device* udev_dev;
|
struct udev_device* udev_dev;
|
||||||
struct pollfd fds = {.fd = udev_monitor_fd,
|
struct pollfd fds[] = {
|
||||||
.events = POLLIN};
|
{.fd = udev_control_pipe[0],
|
||||||
|
.events = POLLIN},
|
||||||
|
{.fd = udev_monitor_fd,
|
||||||
|
.events = POLLIN},
|
||||||
|
};
|
||||||
|
|
||||||
usbi_dbg("udev event thread entering.");
|
usbi_dbg("udev event thread entering.");
|
||||||
|
|
||||||
while (1 == poll(&fds, 1, -1)) {
|
while (poll(fds, 2, -1) >= 0) {
|
||||||
if (NULL == udev_monitor || POLLIN != fds.revents) {
|
if (fds[0].revents & POLLIN) {
|
||||||
|
/* activity on control pipe, read the byte and exit */
|
||||||
|
r = usbi_read(udev_control_pipe[0], &dummy, sizeof(dummy));
|
||||||
|
if (r <= 0) {
|
||||||
|
usbi_warn(NULL, "udev control pipe read failed");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (fds[1].revents & POLLIN) {
|
||||||
usbi_mutex_static_lock(&linux_hotplug_lock);
|
usbi_mutex_static_lock(&linux_hotplug_lock);
|
||||||
udev_dev = udev_monitor_receive_device(udev_monitor);
|
udev_dev = udev_monitor_receive_device(udev_monitor);
|
||||||
if (udev_dev)
|
if (udev_dev)
|
||||||
udev_hotplug_event(udev_dev);
|
udev_hotplug_event(udev_dev);
|
||||||
usbi_mutex_static_unlock(&linux_hotplug_lock);
|
usbi_mutex_static_unlock(&linux_hotplug_lock);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
usbi_dbg("udev event thread exiting");
|
usbi_dbg("udev event thread exiting");
|
||||||
|
@ -207,7 +241,7 @@ static void udev_hotplug_event(struct udev_device* udev_dev)
|
||||||
if (strncmp(udev_action, "add", 3) == 0) {
|
if (strncmp(udev_action, "add", 3) == 0) {
|
||||||
linux_hotplug_enumerate(busnum, devaddr, sys_name);
|
linux_hotplug_enumerate(busnum, devaddr, sys_name);
|
||||||
} else if (detached) {
|
} else if (detached) {
|
||||||
linux_hotplug_disconnected(busnum, devaddr, sys_name);
|
linux_device_disconnected(busnum, devaddr, sys_name);
|
||||||
} else {
|
} else {
|
||||||
usbi_err(NULL, "ignoring udev action %s", udev_action);
|
usbi_err(NULL, "ignoring udev action %s", udev_action);
|
||||||
}
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
|
/* -*- Mode: C; c-basic-offset:8 ; indent-tabs-mode:t -*- */
|
||||||
/*
|
/*
|
||||||
* Linux usbfs backend for libusbx
|
* Linux usbfs backend for libusb
|
||||||
* Copyright © 2007-2009 Daniel Drake <dsd@gentoo.org>
|
* Copyright © 2007-2009 Daniel Drake <dsd@gentoo.org>
|
||||||
* Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
* Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
|
||||||
* Copyright © 2013 Nathan Hjelm <hjelmn@mac.com>
|
* Copyright © 2013 Nathan Hjelm <hjelmn@mac.com>
|
||||||
|
@ -48,7 +49,7 @@
|
||||||
* sysfs allows us to read the kernel's in-memory copies of device descriptors
|
* sysfs allows us to read the kernel's in-memory copies of device descriptors
|
||||||
* and so forth, avoiding the need to open the device:
|
* and so forth, avoiding the need to open the device:
|
||||||
* - The binary "descriptors" file contains all config descriptors since
|
* - The binary "descriptors" file contains all config descriptors since
|
||||||
* 2.6.26, commit 217a9081d8e69026186067711131b77f0ce219ed
|
* 2.6.26, commit 217a9081d8e69026186067711131b77f0ce219ed
|
||||||
* - The binary "descriptors" file was added in 2.6.23, commit
|
* - The binary "descriptors" file was added in 2.6.23, commit
|
||||||
* 69d42a78f935d19384d1f6e4f94b65bb162b36df, but it only contains the
|
* 69d42a78f935d19384d1f6e4f94b65bb162b36df, but it only contains the
|
||||||
* active config descriptors
|
* active config descriptors
|
||||||
|
@ -118,9 +119,11 @@ static int sysfs_can_relate_devices = -1;
|
||||||
static int sysfs_has_descriptors = -1;
|
static int sysfs_has_descriptors = -1;
|
||||||
|
|
||||||
/* how many times have we initted (and not exited) ? */
|
/* how many times have we initted (and not exited) ? */
|
||||||
static volatile int init_count = 0;
|
static int init_count = 0;
|
||||||
|
|
||||||
/* Serialize hotplug start/stop, scan-devices, event-thread, and poll */
|
/* Serialize hotplug start/stop */
|
||||||
|
usbi_mutex_static_t linux_hotplug_startstop_lock = USBI_MUTEX_INITIALIZER;
|
||||||
|
/* Serialize scan-devices, event-thread, and poll */
|
||||||
usbi_mutex_static_t linux_hotplug_lock = USBI_MUTEX_INITIALIZER;
|
usbi_mutex_static_t linux_hotplug_lock = USBI_MUTEX_INITIALIZER;
|
||||||
|
|
||||||
static int linux_start_event_monitor(void);
|
static int linux_start_event_monitor(void);
|
||||||
|
@ -181,6 +184,7 @@ static int _get_usbfs_fd(struct libusb_device *dev, mode_t mode, int silent)
|
||||||
struct libusb_context *ctx = DEVICE_CTX(dev);
|
struct libusb_context *ctx = DEVICE_CTX(dev);
|
||||||
char path[PATH_MAX];
|
char path[PATH_MAX];
|
||||||
int fd;
|
int fd;
|
||||||
|
int delay = 10000;
|
||||||
|
|
||||||
if (usbdev_names)
|
if (usbdev_names)
|
||||||
snprintf(path, PATH_MAX, "%s/usbdev%d.%d",
|
snprintf(path, PATH_MAX, "%s/usbdev%d.%d",
|
||||||
|
@ -193,11 +197,23 @@ static int _get_usbfs_fd(struct libusb_device *dev, mode_t mode, int silent)
|
||||||
if (fd != -1)
|
if (fd != -1)
|
||||||
return fd; /* Success */
|
return fd; /* Success */
|
||||||
|
|
||||||
|
if (errno == ENOENT) {
|
||||||
|
if (!silent)
|
||||||
|
usbi_err(ctx, "File doesn't exist, wait %d ms and try again\n", delay/1000);
|
||||||
|
|
||||||
|
/* Wait 10ms for USB device path creation.*/
|
||||||
|
usleep(delay);
|
||||||
|
|
||||||
|
fd = open(path, mode);
|
||||||
|
if (fd != -1)
|
||||||
|
return fd; /* Success */
|
||||||
|
}
|
||||||
|
|
||||||
if (!silent) {
|
if (!silent) {
|
||||||
usbi_err(ctx, "libusbx couldn't open USB device %s: %s",
|
usbi_err(ctx, "libusb couldn't open USB device %s: %s",
|
||||||
path, strerror(errno));
|
path, strerror(errno));
|
||||||
if (errno == EACCES && mode == O_RDWR)
|
if (errno == EACCES && mode == O_RDWR)
|
||||||
usbi_err(ctx, "libusbx requires write access to USB "
|
usbi_err(ctx, "libusb requires write access to USB "
|
||||||
"device nodes.");
|
"device nodes.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,7 +435,7 @@ static int op_init(struct libusb_context *ctx)
|
||||||
if (sysfs_has_descriptors)
|
if (sysfs_has_descriptors)
|
||||||
usbi_dbg("sysfs has complete descriptors");
|
usbi_dbg("sysfs has complete descriptors");
|
||||||
|
|
||||||
usbi_mutex_static_lock(&linux_hotplug_lock);
|
usbi_mutex_static_lock(&linux_hotplug_startstop_lock);
|
||||||
r = LIBUSB_SUCCESS;
|
r = LIBUSB_SUCCESS;
|
||||||
if (init_count == 0) {
|
if (init_count == 0) {
|
||||||
/* start up hotplug event handler */
|
/* start up hotplug event handler */
|
||||||
|
@ -433,20 +449,20 @@ static int op_init(struct libusb_context *ctx)
|
||||||
linux_stop_event_monitor();
|
linux_stop_event_monitor();
|
||||||
} else
|
} else
|
||||||
usbi_err(ctx, "error starting hotplug event monitor");
|
usbi_err(ctx, "error starting hotplug event monitor");
|
||||||
usbi_mutex_static_unlock(&linux_hotplug_lock);
|
usbi_mutex_static_unlock(&linux_hotplug_startstop_lock);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void op_exit(void)
|
static void op_exit(void)
|
||||||
{
|
{
|
||||||
usbi_mutex_static_lock(&linux_hotplug_lock);
|
usbi_mutex_static_lock(&linux_hotplug_startstop_lock);
|
||||||
assert(init_count != 0);
|
assert(init_count != 0);
|
||||||
if (!--init_count) {
|
if (!--init_count) {
|
||||||
/* tear down event handler */
|
/* tear down event handler */
|
||||||
(void)linux_stop_event_monitor();
|
(void)linux_stop_event_monitor();
|
||||||
}
|
}
|
||||||
usbi_mutex_static_unlock(&linux_hotplug_lock);
|
usbi_mutex_static_unlock(&linux_hotplug_startstop_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int linux_start_event_monitor(void)
|
static int linux_start_event_monitor(void)
|
||||||
|
@ -469,11 +485,19 @@ static int linux_stop_event_monitor(void)
|
||||||
|
|
||||||
static int linux_scan_devices(struct libusb_context *ctx)
|
static int linux_scan_devices(struct libusb_context *ctx)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
usbi_mutex_static_lock(&linux_hotplug_lock);
|
||||||
|
|
||||||
#if defined(USE_UDEV)
|
#if defined(USE_UDEV)
|
||||||
return linux_udev_scan_devices(ctx);
|
ret = linux_udev_scan_devices(ctx);
|
||||||
#else
|
#else
|
||||||
return linux_default_scan_devices(ctx);
|
ret = linux_default_scan_devices(ctx);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
usbi_mutex_static_unlock(&linux_hotplug_lock);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void op_hotplug_poll(void)
|
static void op_hotplug_poll(void)
|
||||||
|
@ -553,7 +577,7 @@ static int op_get_device_descriptor(struct libusb_device *dev,
|
||||||
static int sysfs_get_active_config(struct libusb_device *dev, int *config)
|
static int sysfs_get_active_config(struct libusb_device *dev, int *config)
|
||||||
{
|
{
|
||||||
char *endptr;
|
char *endptr;
|
||||||
char tmp[4] = {0, 0, 0, 0};
|
char tmp[5] = {0, 0, 0, 0, 0};
|
||||||
long num;
|
long num;
|
||||||
int fd;
|
int fd;
|
||||||
ssize_t r;
|
ssize_t r;
|
||||||
|
@ -565,7 +589,7 @@ static int sysfs_get_active_config(struct libusb_device *dev, int *config)
|
||||||
r = read(fd, tmp, sizeof(tmp));
|
r = read(fd, tmp, sizeof(tmp));
|
||||||
close(fd);
|
close(fd);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
usbi_err(DEVICE_CTX(dev),
|
usbi_err(DEVICE_CTX(dev),
|
||||||
"read bConfigurationValue failed ret=%d errno=%d", r, errno);
|
"read bConfigurationValue failed ret=%d errno=%d", r, errno);
|
||||||
return LIBUSB_ERROR_IO;
|
return LIBUSB_ERROR_IO;
|
||||||
} else if (r == 0) {
|
} else if (r == 0) {
|
||||||
|
@ -596,6 +620,8 @@ int linux_get_device_address (struct libusb_context *ctx, int detached,
|
||||||
uint8_t *busnum, uint8_t *devaddr,const char *dev_node,
|
uint8_t *busnum, uint8_t *devaddr,const char *dev_node,
|
||||||
const char *sys_name)
|
const char *sys_name)
|
||||||
{
|
{
|
||||||
|
int sysfs_attr;
|
||||||
|
|
||||||
usbi_dbg("getting address for device: %s detached: %d", sys_name, detached);
|
usbi_dbg("getting address for device: %s detached: %d", sys_name, detached);
|
||||||
/* can't use sysfs to read the bus and device number if the
|
/* can't use sysfs to read the bus and device number if the
|
||||||
* device has been detached */
|
* device has been detached */
|
||||||
|
@ -616,17 +642,22 @@ int linux_get_device_address (struct libusb_context *ctx, int detached,
|
||||||
|
|
||||||
usbi_dbg("scan %s", sys_name);
|
usbi_dbg("scan %s", sys_name);
|
||||||
|
|
||||||
*busnum = __read_sysfs_attr(ctx, sys_name, "busnum");
|
sysfs_attr = __read_sysfs_attr(ctx, sys_name, "busnum");
|
||||||
if (0 > *busnum)
|
if (0 > sysfs_attr)
|
||||||
return *busnum;
|
return sysfs_attr;
|
||||||
|
if (sysfs_attr > 255)
|
||||||
|
return LIBUSB_ERROR_INVALID_PARAM;
|
||||||
|
*busnum = (uint8_t) sysfs_attr;
|
||||||
|
|
||||||
*devaddr = __read_sysfs_attr(ctx, sys_name, "devnum");
|
sysfs_attr = __read_sysfs_attr(ctx, sys_name, "devnum");
|
||||||
if (0 > *devaddr)
|
if (0 > sysfs_attr)
|
||||||
return *devaddr;
|
return sysfs_attr;
|
||||||
|
if (sysfs_attr > 255)
|
||||||
|
return LIBUSB_ERROR_INVALID_PARAM;
|
||||||
|
|
||||||
|
*devaddr = (uint8_t) sysfs_attr;
|
||||||
|
|
||||||
usbi_dbg("bus=%d dev=%d", *busnum, *devaddr);
|
usbi_dbg("bus=%d dev=%d", *busnum, *devaddr);
|
||||||
if (*busnum > 255 || *devaddr > 255)
|
|
||||||
return LIBUSB_ERROR_INVALID_PARAM;
|
|
||||||
|
|
||||||
return LIBUSB_SUCCESS;
|
return LIBUSB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -895,7 +926,7 @@ static int initialize_device(struct libusb_device *dev, uint8_t busnum,
|
||||||
}
|
}
|
||||||
priv->descriptors_len += r;
|
priv->descriptors_len += r;
|
||||||
} while (priv->descriptors_len == descriptors_size);
|
} while (priv->descriptors_len == descriptors_size);
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
if (priv->descriptors_len < DEVICE_DESC_LENGTH) {
|
if (priv->descriptors_len < DEVICE_DESC_LENGTH) {
|
||||||
|
@ -1030,9 +1061,11 @@ int linux_enumerate_device(struct libusb_context *ctx,
|
||||||
usbi_dbg("busnum %d devaddr %d session_id %ld", busnum, devaddr,
|
usbi_dbg("busnum %d devaddr %d session_id %ld", busnum, devaddr,
|
||||||
session_id);
|
session_id);
|
||||||
|
|
||||||
if (usbi_get_device_by_session_id(ctx, session_id)) {
|
dev = usbi_get_device_by_session_id(ctx, session_id);
|
||||||
|
if (dev) {
|
||||||
/* device already exists in the context */
|
/* device already exists in the context */
|
||||||
usbi_dbg("session_id %ld already exists", session_id);
|
usbi_dbg("session_id %ld already exists", session_id);
|
||||||
|
libusb_unref_device(dev);
|
||||||
return LIBUSB_SUCCESS;
|
return LIBUSB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1072,7 +1105,7 @@ void linux_hotplug_enumerate(uint8_t busnum, uint8_t devaddr, const char *sys_na
|
||||||
usbi_mutex_static_unlock(&active_contexts_lock);
|
usbi_mutex_static_unlock(&active_contexts_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void linux_hotplug_disconnected(uint8_t busnum, uint8_t devaddr, const char *sys_name)
|
void linux_device_disconnected(uint8_t busnum, uint8_t devaddr, const char *sys_name)
|
||||||
{
|
{
|
||||||
struct libusb_context *ctx;
|
struct libusb_context *ctx;
|
||||||
struct libusb_device *dev;
|
struct libusb_device *dev;
|
||||||
|
@ -1083,6 +1116,7 @@ void linux_hotplug_disconnected(uint8_t busnum, uint8_t devaddr, const char *sys
|
||||||
dev = usbi_get_device_by_session_id (ctx, session_id);
|
dev = usbi_get_device_by_session_id (ctx, session_id);
|
||||||
if (NULL != dev) {
|
if (NULL != dev) {
|
||||||
usbi_disconnect_device (dev);
|
usbi_disconnect_device (dev);
|
||||||
|
libusb_unref_device(dev);
|
||||||
} else {
|
} else {
|
||||||
usbi_dbg("device not found for session %x", session_id);
|
usbi_dbg("device not found for session %x", session_id);
|
||||||
}
|
}
|
||||||
|
@ -1247,8 +1281,20 @@ static int op_open(struct libusb_device_handle *handle)
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
hpriv->fd = _get_usbfs_fd(handle->dev, O_RDWR, 0);
|
hpriv->fd = _get_usbfs_fd(handle->dev, O_RDWR, 0);
|
||||||
if (hpriv->fd < 0)
|
if (hpriv->fd < 0) {
|
||||||
|
if (hpriv->fd == LIBUSB_ERROR_NO_DEVICE) {
|
||||||
|
/* device will still be marked as attached if hotplug monitor thread
|
||||||
|
* hasn't processed remove event yet */
|
||||||
|
usbi_mutex_static_lock(&linux_hotplug_lock);
|
||||||
|
if (handle->dev->attached) {
|
||||||
|
usbi_dbg("open failed with no device, but device still attached");
|
||||||
|
linux_device_disconnected(handle->dev->bus_number,
|
||||||
|
handle->dev->device_address, NULL);
|
||||||
|
}
|
||||||
|
usbi_mutex_static_unlock(&linux_hotplug_lock);
|
||||||
|
}
|
||||||
return hpriv->fd;
|
return hpriv->fd;
|
||||||
|
}
|
||||||
|
|
||||||
r = ioctl(hpriv->fd, IOCTL_USBFS_GET_CAPABILITIES, &hpriv->caps);
|
r = ioctl(hpriv->fd, IOCTL_USBFS_GET_CAPABILITIES, &hpriv->caps);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
|
@ -1449,6 +1495,56 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int do_streams_ioctl(struct libusb_device_handle *handle, long req,
|
||||||
|
uint32_t num_streams, unsigned char *endpoints, int num_endpoints)
|
||||||
|
{
|
||||||
|
int r, fd = _device_handle_priv(handle)->fd;
|
||||||
|
struct usbfs_streams *streams;
|
||||||
|
|
||||||
|
if (num_endpoints > 30) /* Max 15 in + 15 out eps */
|
||||||
|
return LIBUSB_ERROR_INVALID_PARAM;
|
||||||
|
|
||||||
|
streams = malloc(sizeof(struct usbfs_streams) + num_endpoints);
|
||||||
|
if (!streams)
|
||||||
|
return LIBUSB_ERROR_NO_MEM;
|
||||||
|
|
||||||
|
streams->num_streams = num_streams;
|
||||||
|
streams->num_eps = num_endpoints;
|
||||||
|
memcpy(streams->eps, endpoints, num_endpoints);
|
||||||
|
|
||||||
|
r = ioctl(fd, req, streams);
|
||||||
|
|
||||||
|
free(streams);
|
||||||
|
|
||||||
|
if (r < 0) {
|
||||||
|
if (errno == ENOTTY)
|
||||||
|
return LIBUSB_ERROR_NOT_SUPPORTED;
|
||||||
|
else if (errno == EINVAL)
|
||||||
|
return LIBUSB_ERROR_INVALID_PARAM;
|
||||||
|
else if (errno == ENODEV)
|
||||||
|
return LIBUSB_ERROR_NO_DEVICE;
|
||||||
|
|
||||||
|
usbi_err(HANDLE_CTX(handle),
|
||||||
|
"streams-ioctl failed error %d errno %d", r, errno);
|
||||||
|
return LIBUSB_ERROR_OTHER;
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int op_alloc_streams(struct libusb_device_handle *handle,
|
||||||
|
uint32_t num_streams, unsigned char *endpoints, int num_endpoints)
|
||||||
|
{
|
||||||
|
return do_streams_ioctl(handle, IOCTL_USBFS_ALLOC_STREAMS,
|
||||||
|
num_streams, endpoints, num_endpoints);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int op_free_streams(struct libusb_device_handle *handle,
|
||||||
|
unsigned char *endpoints, int num_endpoints)
|
||||||
|
{
|
||||||
|
return do_streams_ioctl(handle, IOCTL_USBFS_FREE_STREAMS, 0,
|
||||||
|
endpoints, num_endpoints);
|
||||||
|
}
|
||||||
|
|
||||||
static int op_kernel_driver_active(struct libusb_device_handle *handle,
|
static int op_kernel_driver_active(struct libusb_device_handle *handle,
|
||||||
int interface)
|
int interface)
|
||||||
{
|
{
|
||||||
|
@ -1656,8 +1752,7 @@ static void free_iso_urbs(struct linux_transfer_priv *tpriv)
|
||||||
tpriv->iso_urbs = NULL;
|
tpriv->iso_urbs = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int submit_bulk_transfer(struct usbi_transfer *itransfer,
|
static int submit_bulk_transfer(struct usbi_transfer *itransfer)
|
||||||
unsigned char urb_type)
|
|
||||||
{
|
{
|
||||||
struct libusb_transfer *transfer =
|
struct libusb_transfer *transfer =
|
||||||
USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
||||||
|
@ -1745,7 +1840,19 @@ static int submit_bulk_transfer(struct usbi_transfer *itransfer,
|
||||||
for (i = 0; i < num_urbs; i++) {
|
for (i = 0; i < num_urbs; i++) {
|
||||||
struct usbfs_urb *urb = &urbs[i];
|
struct usbfs_urb *urb = &urbs[i];
|
||||||
urb->usercontext = itransfer;
|
urb->usercontext = itransfer;
|
||||||
urb->type = urb_type;
|
switch (transfer->type) {
|
||||||
|
case LIBUSB_TRANSFER_TYPE_BULK:
|
||||||
|
urb->type = USBFS_URB_TYPE_BULK;
|
||||||
|
urb->stream_id = 0;
|
||||||
|
break;
|
||||||
|
case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
|
||||||
|
urb->type = USBFS_URB_TYPE_BULK;
|
||||||
|
urb->stream_id = itransfer->stream_id;
|
||||||
|
break;
|
||||||
|
case LIBUSB_TRANSFER_TYPE_INTERRUPT:
|
||||||
|
urb->type = USBFS_URB_TYPE_INTERRUPT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
urb->endpoint = transfer->endpoint;
|
urb->endpoint = transfer->endpoint;
|
||||||
urb->buffer = transfer->buffer + (i * bulk_buffer_len);
|
urb->buffer = transfer->buffer + (i * bulk_buffer_len);
|
||||||
/* don't set the short not ok flag for the last URB */
|
/* don't set the short not ok flag for the last URB */
|
||||||
|
@ -1775,7 +1882,7 @@ static int submit_bulk_transfer(struct usbi_transfer *itransfer,
|
||||||
"submiturb failed error %d errno=%d", r, errno);
|
"submiturb failed error %d errno=%d", r, errno);
|
||||||
r = LIBUSB_ERROR_IO;
|
r = LIBUSB_ERROR_IO;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if the first URB submission fails, we can simply free up and
|
/* if the first URB submission fails, we can simply free up and
|
||||||
* return failure immediately. */
|
* return failure immediately. */
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
|
@ -1790,7 +1897,7 @@ static int submit_bulk_transfer(struct usbi_transfer *itransfer,
|
||||||
* complications:
|
* complications:
|
||||||
* - discarding is asynchronous - discarded urbs will be reaped
|
* - discarding is asynchronous - discarded urbs will be reaped
|
||||||
* later. the user must not have freed the transfer when the
|
* later. the user must not have freed the transfer when the
|
||||||
* discarded URBs are reaped, otherwise libusbx will be using
|
* discarded URBs are reaped, otherwise libusb will be using
|
||||||
* freed memory.
|
* freed memory.
|
||||||
* - the earlier URBs may have completed successfully and we do
|
* - the earlier URBs may have completed successfully and we do
|
||||||
* not want to throw away any data.
|
* not want to throw away any data.
|
||||||
|
@ -1952,7 +2059,7 @@ static int submit_iso_transfer(struct usbi_transfer *itransfer)
|
||||||
* complications:
|
* complications:
|
||||||
* - discarding is asynchronous - discarded urbs will be reaped
|
* - discarding is asynchronous - discarded urbs will be reaped
|
||||||
* later. the user must not have freed the transfer when the
|
* later. the user must not have freed the transfer when the
|
||||||
* discarded URBs are reaped, otherwise libusbx will be using
|
* discarded URBs are reaped, otherwise libusb will be using
|
||||||
* freed memory.
|
* freed memory.
|
||||||
* - the earlier URBs may have completed successfully and we do
|
* - the earlier URBs may have completed successfully and we do
|
||||||
* not want to throw away any data.
|
* not want to throw away any data.
|
||||||
|
@ -2028,9 +2135,10 @@ static int op_submit_transfer(struct usbi_transfer *itransfer)
|
||||||
case LIBUSB_TRANSFER_TYPE_CONTROL:
|
case LIBUSB_TRANSFER_TYPE_CONTROL:
|
||||||
return submit_control_transfer(itransfer);
|
return submit_control_transfer(itransfer);
|
||||||
case LIBUSB_TRANSFER_TYPE_BULK:
|
case LIBUSB_TRANSFER_TYPE_BULK:
|
||||||
return submit_bulk_transfer(itransfer, USBFS_URB_TYPE_BULK);
|
case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
|
||||||
|
return submit_bulk_transfer(itransfer);
|
||||||
case LIBUSB_TRANSFER_TYPE_INTERRUPT:
|
case LIBUSB_TRANSFER_TYPE_INTERRUPT:
|
||||||
return submit_bulk_transfer(itransfer, USBFS_URB_TYPE_INTERRUPT);
|
return submit_bulk_transfer(itransfer);
|
||||||
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
||||||
return submit_iso_transfer(itransfer);
|
return submit_iso_transfer(itransfer);
|
||||||
default:
|
default:
|
||||||
|
@ -2048,6 +2156,7 @@ static int op_cancel_transfer(struct usbi_transfer *itransfer)
|
||||||
|
|
||||||
switch (transfer->type) {
|
switch (transfer->type) {
|
||||||
case LIBUSB_TRANSFER_TYPE_BULK:
|
case LIBUSB_TRANSFER_TYPE_BULK:
|
||||||
|
case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
|
||||||
if (tpriv->reap_action == ERROR)
|
if (tpriv->reap_action == ERROR)
|
||||||
break;
|
break;
|
||||||
/* else, fall through */
|
/* else, fall through */
|
||||||
|
@ -2078,6 +2187,7 @@ static void op_clear_transfer_priv(struct usbi_transfer *itransfer)
|
||||||
switch (transfer->type) {
|
switch (transfer->type) {
|
||||||
case LIBUSB_TRANSFER_TYPE_CONTROL:
|
case LIBUSB_TRANSFER_TYPE_CONTROL:
|
||||||
case LIBUSB_TRANSFER_TYPE_BULK:
|
case LIBUSB_TRANSFER_TYPE_BULK:
|
||||||
|
case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
|
||||||
case LIBUSB_TRANSFER_TYPE_INTERRUPT:
|
case LIBUSB_TRANSFER_TYPE_INTERRUPT:
|
||||||
usbi_mutex_lock(&itransfer->lock);
|
usbi_mutex_lock(&itransfer->lock);
|
||||||
if (tpriv->urbs)
|
if (tpriv->urbs)
|
||||||
|
@ -2127,7 +2237,7 @@ static int handle_bulk_completion(struct usbi_transfer *itransfer,
|
||||||
*
|
*
|
||||||
* When this happens, our objectives are not to lose any "surplus" data,
|
* When this happens, our objectives are not to lose any "surplus" data,
|
||||||
* and also to stick it at the end of the previously-received data
|
* and also to stick it at the end of the previously-received data
|
||||||
* (closing any holes), so that libusbx reports the total amount of
|
* (closing any holes), so that libusb reports the total amount of
|
||||||
* transferred data and presents it in a contiguous chunk.
|
* transferred data and presents it in a contiguous chunk.
|
||||||
*/
|
*/
|
||||||
if (urb->actual_length > 0) {
|
if (urb->actual_length > 0) {
|
||||||
|
@ -2446,6 +2556,7 @@ static int reap_for_handle(struct libusb_device_handle *handle)
|
||||||
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
||||||
return handle_iso_completion(itransfer, urb);
|
return handle_iso_completion(itransfer, urb);
|
||||||
case LIBUSB_TRANSFER_TYPE_BULK:
|
case LIBUSB_TRANSFER_TYPE_BULK:
|
||||||
|
case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
|
||||||
case LIBUSB_TRANSFER_TYPE_INTERRUPT:
|
case LIBUSB_TRANSFER_TYPE_INTERRUPT:
|
||||||
return handle_bulk_completion(itransfer, urb);
|
return handle_bulk_completion(itransfer, urb);
|
||||||
case LIBUSB_TRANSFER_TYPE_CONTROL:
|
case LIBUSB_TRANSFER_TYPE_CONTROL:
|
||||||
|
@ -2479,9 +2590,22 @@ static int op_handle_events(struct libusb_context *ctx,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!hpriv || hpriv->fd != pollfd->fd) {
|
||||||
|
usbi_err(ctx, "cannot find handle for fd %d\n",
|
||||||
|
pollfd->fd);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (pollfd->revents & POLLERR) {
|
if (pollfd->revents & POLLERR) {
|
||||||
usbi_remove_pollfd(HANDLE_CTX(handle), hpriv->fd);
|
usbi_remove_pollfd(HANDLE_CTX(handle), hpriv->fd);
|
||||||
usbi_handle_disconnect(handle);
|
usbi_handle_disconnect(handle);
|
||||||
|
/* device will still be marked as attached if hotplug monitor thread
|
||||||
|
* hasn't processed remove event yet */
|
||||||
|
usbi_mutex_static_lock(&linux_hotplug_lock);
|
||||||
|
if (handle->dev->attached)
|
||||||
|
linux_device_disconnected(handle->dev->bus_number,
|
||||||
|
handle->dev->device_address, NULL);
|
||||||
|
usbi_mutex_static_unlock(&linux_hotplug_lock);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2543,6 +2667,9 @@ const struct usbi_os_backend linux_usbfs_backend = {
|
||||||
.clear_halt = op_clear_halt,
|
.clear_halt = op_clear_halt,
|
||||||
.reset_device = op_reset_device,
|
.reset_device = op_reset_device,
|
||||||
|
|
||||||
|
.alloc_streams = op_alloc_streams,
|
||||||
|
.free_streams = op_free_streams,
|
||||||
|
|
||||||
.kernel_driver_active = op_kernel_driver_active,
|
.kernel_driver_active = op_kernel_driver_active,
|
||||||
.detach_kernel_driver = op_detach_kernel_driver,
|
.detach_kernel_driver = op_detach_kernel_driver,
|
||||||
.attach_kernel_driver = op_attach_kernel_driver,
|
.attach_kernel_driver = op_attach_kernel_driver,
|
|
@ -94,7 +94,10 @@ struct usbfs_urb {
|
||||||
int buffer_length;
|
int buffer_length;
|
||||||
int actual_length;
|
int actual_length;
|
||||||
int start_frame;
|
int start_frame;
|
||||||
int number_of_packets;
|
union {
|
||||||
|
int number_of_packets; /* Only used for isoc urbs */
|
||||||
|
unsigned int stream_id; /* Only used with bulk streams */
|
||||||
|
};
|
||||||
int error_count;
|
int error_count;
|
||||||
unsigned int signr;
|
unsigned int signr;
|
||||||
void *usercontext;
|
void *usercontext;
|
||||||
|
@ -132,6 +135,12 @@ struct usbfs_disconnect_claim {
|
||||||
char driver[USBFS_MAXDRIVERNAME + 1];
|
char driver[USBFS_MAXDRIVERNAME + 1];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct usbfs_streams {
|
||||||
|
unsigned int num_streams; /* Not used by USBDEVFS_FREE_STREAMS */
|
||||||
|
unsigned int num_eps;
|
||||||
|
unsigned char eps[0];
|
||||||
|
};
|
||||||
|
|
||||||
#define IOCTL_USBFS_CONTROL _IOWR('U', 0, struct usbfs_ctrltransfer)
|
#define IOCTL_USBFS_CONTROL _IOWR('U', 0, struct usbfs_ctrltransfer)
|
||||||
#define IOCTL_USBFS_BULK _IOWR('U', 2, struct usbfs_bulktransfer)
|
#define IOCTL_USBFS_BULK _IOWR('U', 2, struct usbfs_bulktransfer)
|
||||||
#define IOCTL_USBFS_RESETEP _IOR('U', 3, unsigned int)
|
#define IOCTL_USBFS_RESETEP _IOR('U', 3, unsigned int)
|
||||||
|
@ -155,6 +164,8 @@ struct usbfs_disconnect_claim {
|
||||||
#define IOCTL_USBFS_RELEASE_PORT _IOR('U', 25, unsigned int)
|
#define IOCTL_USBFS_RELEASE_PORT _IOR('U', 25, unsigned int)
|
||||||
#define IOCTL_USBFS_GET_CAPABILITIES _IOR('U', 26, __u32)
|
#define IOCTL_USBFS_GET_CAPABILITIES _IOR('U', 26, __u32)
|
||||||
#define IOCTL_USBFS_DISCONNECT_CLAIM _IOR('U', 27, struct usbfs_disconnect_claim)
|
#define IOCTL_USBFS_DISCONNECT_CLAIM _IOR('U', 27, struct usbfs_disconnect_claim)
|
||||||
|
#define IOCTL_USBFS_ALLOC_STREAMS _IOR('U', 28, struct usbfs_streams)
|
||||||
|
#define IOCTL_USBFS_FREE_STREAMS _IOR('U', 29, struct usbfs_streams)
|
||||||
|
|
||||||
extern usbi_mutex_static_t linux_hotplug_lock;
|
extern usbi_mutex_static_t linux_hotplug_lock;
|
||||||
|
|
||||||
|
@ -170,7 +181,7 @@ void linux_netlink_hotplug_poll(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void linux_hotplug_enumerate(uint8_t busnum, uint8_t devaddr, const char *sys_name);
|
void linux_hotplug_enumerate(uint8_t busnum, uint8_t devaddr, const char *sys_name);
|
||||||
void linux_hotplug_disconnected(uint8_t busnum, uint8_t devaddr, const char *sys_name);
|
void linux_device_disconnected(uint8_t busnum, uint8_t devaddr, const char *sys_name);
|
||||||
|
|
||||||
int linux_get_device_address (struct libusb_context *ctx, int detached,
|
int linux_get_device_address (struct libusb_context *ctx, int detached,
|
||||||
uint8_t *busnum, uint8_t *devaddr, const char *dev_node,
|
uint8_t *busnum, uint8_t *devaddr, const char *dev_node,
|
|
@ -47,36 +47,36 @@ struct handle_priv {
|
||||||
/*
|
/*
|
||||||
* Backend functions
|
* Backend functions
|
||||||
*/
|
*/
|
||||||
static int obsd_get_device_list(struct libusb_context *,
|
static int netbsd_get_device_list(struct libusb_context *,
|
||||||
struct discovered_devs **);
|
struct discovered_devs **);
|
||||||
static int obsd_open(struct libusb_device_handle *);
|
static int netbsd_open(struct libusb_device_handle *);
|
||||||
static void obsd_close(struct libusb_device_handle *);
|
static void netbsd_close(struct libusb_device_handle *);
|
||||||
|
|
||||||
static int obsd_get_device_descriptor(struct libusb_device *, unsigned char *,
|
static int netbsd_get_device_descriptor(struct libusb_device *, unsigned char *,
|
||||||
int *);
|
int *);
|
||||||
static int obsd_get_active_config_descriptor(struct libusb_device *,
|
static int netbsd_get_active_config_descriptor(struct libusb_device *,
|
||||||
unsigned char *, size_t, int *);
|
unsigned char *, size_t, int *);
|
||||||
static int obsd_get_config_descriptor(struct libusb_device *, uint8_t,
|
static int netbsd_get_config_descriptor(struct libusb_device *, uint8_t,
|
||||||
unsigned char *, size_t, int *);
|
unsigned char *, size_t, int *);
|
||||||
|
|
||||||
static int obsd_get_configuration(struct libusb_device_handle *, int *);
|
static int netbsd_get_configuration(struct libusb_device_handle *, int *);
|
||||||
static int obsd_set_configuration(struct libusb_device_handle *, int);
|
static int netbsd_set_configuration(struct libusb_device_handle *, int);
|
||||||
|
|
||||||
static int obsd_claim_interface(struct libusb_device_handle *, int);
|
static int netbsd_claim_interface(struct libusb_device_handle *, int);
|
||||||
static int obsd_release_interface(struct libusb_device_handle *, int);
|
static int netbsd_release_interface(struct libusb_device_handle *, int);
|
||||||
|
|
||||||
static int obsd_set_interface_altsetting(struct libusb_device_handle *, int,
|
static int netbsd_set_interface_altsetting(struct libusb_device_handle *, int,
|
||||||
int);
|
int);
|
||||||
static int obsd_clear_halt(struct libusb_device_handle *, unsigned char);
|
static int netbsd_clear_halt(struct libusb_device_handle *, unsigned char);
|
||||||
static int obsd_reset_device(struct libusb_device_handle *);
|
static int netbsd_reset_device(struct libusb_device_handle *);
|
||||||
static void obsd_destroy_device(struct libusb_device *);
|
static void netbsd_destroy_device(struct libusb_device *);
|
||||||
|
|
||||||
static int obsd_submit_transfer(struct usbi_transfer *);
|
static int netbsd_submit_transfer(struct usbi_transfer *);
|
||||||
static int obsd_cancel_transfer(struct usbi_transfer *);
|
static int netbsd_cancel_transfer(struct usbi_transfer *);
|
||||||
static void obsd_clear_transfer_priv(struct usbi_transfer *);
|
static void netbsd_clear_transfer_priv(struct usbi_transfer *);
|
||||||
static int obsd_handle_events(struct libusb_context *ctx, struct pollfd *,
|
static int netbsd_handle_events(struct libusb_context *ctx, struct pollfd *,
|
||||||
nfds_t, int);
|
nfds_t, int);
|
||||||
static int obsd_clock_gettime(int, struct timespec *);
|
static int netbsd_clock_gettime(int, struct timespec *);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Private functions
|
* Private functions
|
||||||
|
@ -87,44 +87,47 @@ static int _sync_control_transfer(struct usbi_transfer *);
|
||||||
static int _sync_gen_transfer(struct usbi_transfer *);
|
static int _sync_gen_transfer(struct usbi_transfer *);
|
||||||
static int _access_endpoint(struct libusb_transfer *);
|
static int _access_endpoint(struct libusb_transfer *);
|
||||||
|
|
||||||
const struct usbi_os_backend openbsd_backend = {
|
const struct usbi_os_backend netbsd_backend = {
|
||||||
"Synchronous OpenBSD backend",
|
"Synchronous NetBSD backend",
|
||||||
0,
|
0,
|
||||||
NULL, /* init() */
|
NULL, /* init() */
|
||||||
NULL, /* exit() */
|
NULL, /* exit() */
|
||||||
obsd_get_device_list,
|
netbsd_get_device_list,
|
||||||
NULL, /* hotplug_poll */
|
NULL, /* hotplug_poll */
|
||||||
obsd_open,
|
netbsd_open,
|
||||||
obsd_close,
|
netbsd_close,
|
||||||
|
|
||||||
obsd_get_device_descriptor,
|
netbsd_get_device_descriptor,
|
||||||
obsd_get_active_config_descriptor,
|
netbsd_get_active_config_descriptor,
|
||||||
obsd_get_config_descriptor,
|
netbsd_get_config_descriptor,
|
||||||
NULL, /* get_config_descriptor_by_value() */
|
NULL, /* get_config_descriptor_by_value() */
|
||||||
|
|
||||||
obsd_get_configuration,
|
netbsd_get_configuration,
|
||||||
obsd_set_configuration,
|
netbsd_set_configuration,
|
||||||
|
|
||||||
obsd_claim_interface,
|
netbsd_claim_interface,
|
||||||
obsd_release_interface,
|
netbsd_release_interface,
|
||||||
|
|
||||||
obsd_set_interface_altsetting,
|
netbsd_set_interface_altsetting,
|
||||||
obsd_clear_halt,
|
netbsd_clear_halt,
|
||||||
obsd_reset_device,
|
netbsd_reset_device,
|
||||||
|
|
||||||
|
NULL, /* alloc_streams */
|
||||||
|
NULL, /* free_streams */
|
||||||
|
|
||||||
NULL, /* kernel_driver_active() */
|
NULL, /* kernel_driver_active() */
|
||||||
NULL, /* detach_kernel_driver() */
|
NULL, /* detach_kernel_driver() */
|
||||||
NULL, /* attach_kernel_driver() */
|
NULL, /* attach_kernel_driver() */
|
||||||
|
|
||||||
obsd_destroy_device,
|
netbsd_destroy_device,
|
||||||
|
|
||||||
obsd_submit_transfer,
|
netbsd_submit_transfer,
|
||||||
obsd_cancel_transfer,
|
netbsd_cancel_transfer,
|
||||||
obsd_clear_transfer_priv,
|
netbsd_clear_transfer_priv,
|
||||||
|
|
||||||
obsd_handle_events,
|
netbsd_handle_events,
|
||||||
|
|
||||||
obsd_clock_gettime,
|
netbsd_clock_gettime,
|
||||||
sizeof(struct device_priv),
|
sizeof(struct device_priv),
|
||||||
sizeof(struct handle_priv),
|
sizeof(struct handle_priv),
|
||||||
0, /* transfer_priv_size */
|
0, /* transfer_priv_size */
|
||||||
|
@ -132,7 +135,7 @@ const struct usbi_os_backend openbsd_backend = {
|
||||||
};
|
};
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_get_device_list(struct libusb_context * ctx,
|
netbsd_get_device_list(struct libusb_context * ctx,
|
||||||
struct discovered_devs **discdevs)
|
struct discovered_devs **discdevs)
|
||||||
{
|
{
|
||||||
struct libusb_device *dev;
|
struct libusb_device *dev;
|
||||||
|
@ -161,9 +164,7 @@ obsd_get_device_list(struct libusb_context * ctx,
|
||||||
session_id = (di.udi_bus << 8 | di.udi_addr);
|
session_id = (di.udi_bus << 8 | di.udi_addr);
|
||||||
dev = usbi_get_device_by_session_id(ctx, session_id);
|
dev = usbi_get_device_by_session_id(ctx, session_id);
|
||||||
|
|
||||||
if (dev) {
|
if (dev == NULL) {
|
||||||
dev = libusb_ref_device(dev);
|
|
||||||
} else {
|
|
||||||
dev = usbi_alloc_device(ctx, session_id);
|
dev = usbi_alloc_device(ctx, session_id);
|
||||||
if (dev == NULL)
|
if (dev == NULL)
|
||||||
return (LIBUSB_ERROR_NO_MEM);
|
return (LIBUSB_ERROR_NO_MEM);
|
||||||
|
@ -207,7 +208,7 @@ error:
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_open(struct libusb_device_handle *handle)
|
netbsd_open(struct libusb_device_handle *handle)
|
||||||
{
|
{
|
||||||
struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv;
|
struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv;
|
||||||
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
||||||
|
@ -228,7 +229,7 @@ obsd_open(struct libusb_device_handle *handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
obsd_close(struct libusb_device_handle *handle)
|
netbsd_close(struct libusb_device_handle *handle)
|
||||||
{
|
{
|
||||||
struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv;
|
struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv;
|
||||||
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
||||||
|
@ -245,7 +246,7 @@ obsd_close(struct libusb_device_handle *handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_get_device_descriptor(struct libusb_device *dev, unsigned char *buf,
|
netbsd_get_device_descriptor(struct libusb_device *dev, unsigned char *buf,
|
||||||
int *host_endian)
|
int *host_endian)
|
||||||
{
|
{
|
||||||
struct device_priv *dpriv = (struct device_priv *)dev->os_priv;
|
struct device_priv *dpriv = (struct device_priv *)dev->os_priv;
|
||||||
|
@ -260,7 +261,7 @@ obsd_get_device_descriptor(struct libusb_device *dev, unsigned char *buf,
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_get_active_config_descriptor(struct libusb_device *dev,
|
netbsd_get_active_config_descriptor(struct libusb_device *dev,
|
||||||
unsigned char *buf, size_t len, int *host_endian)
|
unsigned char *buf, size_t len, int *host_endian)
|
||||||
{
|
{
|
||||||
struct device_priv *dpriv = (struct device_priv *)dev->os_priv;
|
struct device_priv *dpriv = (struct device_priv *)dev->os_priv;
|
||||||
|
@ -279,7 +280,7 @@ obsd_get_active_config_descriptor(struct libusb_device *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_get_config_descriptor(struct libusb_device *dev, uint8_t idx,
|
netbsd_get_config_descriptor(struct libusb_device *dev, uint8_t idx,
|
||||||
unsigned char *buf, size_t len, int *host_endian)
|
unsigned char *buf, size_t len, int *host_endian)
|
||||||
{
|
{
|
||||||
struct device_priv *dpriv = (struct device_priv *)dev->os_priv;
|
struct device_priv *dpriv = (struct device_priv *)dev->os_priv;
|
||||||
|
@ -317,7 +318,7 @@ obsd_get_config_descriptor(struct libusb_device *dev, uint8_t idx,
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_get_configuration(struct libusb_device_handle *handle, int *config)
|
netbsd_get_configuration(struct libusb_device_handle *handle, int *config)
|
||||||
{
|
{
|
||||||
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
||||||
|
|
||||||
|
@ -332,7 +333,7 @@ obsd_get_configuration(struct libusb_device_handle *handle, int *config)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_set_configuration(struct libusb_device_handle *handle, int config)
|
netbsd_set_configuration(struct libusb_device_handle *handle, int config)
|
||||||
{
|
{
|
||||||
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
||||||
|
|
||||||
|
@ -345,7 +346,7 @@ obsd_set_configuration(struct libusb_device_handle *handle, int config)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_claim_interface(struct libusb_device_handle *handle, int iface)
|
netbsd_claim_interface(struct libusb_device_handle *handle, int iface)
|
||||||
{
|
{
|
||||||
struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv;
|
struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv;
|
||||||
int i;
|
int i;
|
||||||
|
@ -357,7 +358,7 @@ obsd_claim_interface(struct libusb_device_handle *handle, int iface)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_release_interface(struct libusb_device_handle *handle, int iface)
|
netbsd_release_interface(struct libusb_device_handle *handle, int iface)
|
||||||
{
|
{
|
||||||
struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv;
|
struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv;
|
||||||
int i;
|
int i;
|
||||||
|
@ -370,7 +371,7 @@ obsd_release_interface(struct libusb_device_handle *handle, int iface)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_set_interface_altsetting(struct libusb_device_handle *handle, int iface,
|
netbsd_set_interface_altsetting(struct libusb_device_handle *handle, int iface,
|
||||||
int altsetting)
|
int altsetting)
|
||||||
{
|
{
|
||||||
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
||||||
|
@ -390,7 +391,7 @@ obsd_set_interface_altsetting(struct libusb_device_handle *handle, int iface,
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_clear_halt(struct libusb_device_handle *handle, unsigned char endpoint)
|
netbsd_clear_halt(struct libusb_device_handle *handle, unsigned char endpoint)
|
||||||
{
|
{
|
||||||
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
||||||
struct usb_ctl_request req;
|
struct usb_ctl_request req;
|
||||||
|
@ -410,7 +411,7 @@ obsd_clear_halt(struct libusb_device_handle *handle, unsigned char endpoint)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_reset_device(struct libusb_device_handle *handle)
|
netbsd_reset_device(struct libusb_device_handle *handle)
|
||||||
{
|
{
|
||||||
usbi_dbg("");
|
usbi_dbg("");
|
||||||
|
|
||||||
|
@ -418,7 +419,7 @@ obsd_reset_device(struct libusb_device_handle *handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
obsd_destroy_device(struct libusb_device *dev)
|
netbsd_destroy_device(struct libusb_device *dev)
|
||||||
{
|
{
|
||||||
struct device_priv *dpriv = (struct device_priv *)dev->os_priv;
|
struct device_priv *dpriv = (struct device_priv *)dev->os_priv;
|
||||||
|
|
||||||
|
@ -428,7 +429,7 @@ obsd_destroy_device(struct libusb_device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_submit_transfer(struct usbi_transfer *itransfer)
|
netbsd_submit_transfer(struct usbi_transfer *itransfer)
|
||||||
{
|
{
|
||||||
struct libusb_transfer *transfer;
|
struct libusb_transfer *transfer;
|
||||||
struct handle_priv *hpriv;
|
struct handle_priv *hpriv;
|
||||||
|
@ -460,6 +461,9 @@ obsd_submit_transfer(struct usbi_transfer *itransfer)
|
||||||
}
|
}
|
||||||
err = _sync_gen_transfer(itransfer);
|
err = _sync_gen_transfer(itransfer);
|
||||||
break;
|
break;
|
||||||
|
case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
|
||||||
|
err = LIBUSB_ERROR_NOT_SUPPORTED;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
|
@ -472,7 +476,7 @@ obsd_submit_transfer(struct usbi_transfer *itransfer)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_cancel_transfer(struct usbi_transfer *itransfer)
|
netbsd_cancel_transfer(struct usbi_transfer *itransfer)
|
||||||
{
|
{
|
||||||
usbi_dbg("");
|
usbi_dbg("");
|
||||||
|
|
||||||
|
@ -480,7 +484,7 @@ obsd_cancel_transfer(struct usbi_transfer *itransfer)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
obsd_clear_transfer_priv(struct usbi_transfer *itransfer)
|
netbsd_clear_transfer_priv(struct usbi_transfer *itransfer)
|
||||||
{
|
{
|
||||||
usbi_dbg("");
|
usbi_dbg("");
|
||||||
|
|
||||||
|
@ -488,7 +492,7 @@ obsd_clear_transfer_priv(struct usbi_transfer *itransfer)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_handle_events(struct libusb_context *ctx, struct pollfd *fds, nfds_t nfds,
|
netbsd_handle_events(struct libusb_context *ctx, struct pollfd *fds, nfds_t nfds,
|
||||||
int num_ready)
|
int num_ready)
|
||||||
{
|
{
|
||||||
struct libusb_device_handle *handle;
|
struct libusb_device_handle *handle;
|
||||||
|
@ -548,7 +552,7 @@ obsd_handle_events(struct libusb_context *ctx, struct pollfd *fds, nfds_t nfds,
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
obsd_clock_gettime(int clkid, struct timespec *tp)
|
netbsd_clock_gettime(int clkid, struct timespec *tp)
|
||||||
{
|
{
|
||||||
usbi_dbg("clock %d", clkid);
|
usbi_dbg("clock %d", clkid);
|
||||||
|
|
||||||
|
@ -641,7 +645,7 @@ _sync_control_transfer(struct usbi_transfer *itransfer)
|
||||||
|
|
||||||
req.ucr_request.bmRequestType = setup->bmRequestType;
|
req.ucr_request.bmRequestType = setup->bmRequestType;
|
||||||
req.ucr_request.bRequest = setup->bRequest;
|
req.ucr_request.bRequest = setup->bRequest;
|
||||||
/* Don't use USETW, libusbx already deals with the endianness */
|
/* Don't use USETW, libusb already deals with the endianness */
|
||||||
(*(uint16_t *)req.ucr_request.wValue) = setup->wValue;
|
(*(uint16_t *)req.ucr_request.wValue) = setup->wValue;
|
||||||
(*(uint16_t *)req.ucr_request.wIndex) = setup->wIndex;
|
(*(uint16_t *)req.ucr_request.wIndex) = setup->wIndex;
|
||||||
(*(uint16_t *)req.ucr_request.wLength) = setup->wLength;
|
(*(uint16_t *)req.ucr_request.wLength) = setup->wLength;
|
|
@ -0,0 +1,832 @@
|
||||||
|
/*
|
||||||
|
* Copyright © 2011-2013 Martin Pieuchot <mpi@openbsd.org>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <dev/usb/usb.h>
|
||||||
|
|
||||||
|
#include "libusb.h"
|
||||||
|
#include "libusbi.h"
|
||||||
|
|
||||||
|
struct device_priv {
|
||||||
|
char *devname; /* name of the ugen(4) node */
|
||||||
|
int fd; /* device file descriptor */
|
||||||
|
|
||||||
|
unsigned char *cdesc; /* active config descriptor */
|
||||||
|
usb_device_descriptor_t ddesc; /* usb device descriptor */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct handle_priv {
|
||||||
|
int pipe[2]; /* for event notification */
|
||||||
|
int endpoints[USB_MAX_ENDPOINTS];
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Backend functions
|
||||||
|
*/
|
||||||
|
static int obsd_get_device_list(struct libusb_context *,
|
||||||
|
struct discovered_devs **);
|
||||||
|
static int obsd_open(struct libusb_device_handle *);
|
||||||
|
static void obsd_close(struct libusb_device_handle *);
|
||||||
|
|
||||||
|
static int obsd_get_device_descriptor(struct libusb_device *, unsigned char *,
|
||||||
|
int *);
|
||||||
|
static int obsd_get_active_config_descriptor(struct libusb_device *,
|
||||||
|
unsigned char *, size_t, int *);
|
||||||
|
static int obsd_get_config_descriptor(struct libusb_device *, uint8_t,
|
||||||
|
unsigned char *, size_t, int *);
|
||||||
|
|
||||||
|
static int obsd_get_configuration(struct libusb_device_handle *, int *);
|
||||||
|
static int obsd_set_configuration(struct libusb_device_handle *, int);
|
||||||
|
|
||||||
|
static int obsd_claim_interface(struct libusb_device_handle *, int);
|
||||||
|
static int obsd_release_interface(struct libusb_device_handle *, int);
|
||||||
|
|
||||||
|
static int obsd_set_interface_altsetting(struct libusb_device_handle *, int,
|
||||||
|
int);
|
||||||
|
static int obsd_clear_halt(struct libusb_device_handle *, unsigned char);
|
||||||
|
static int obsd_reset_device(struct libusb_device_handle *);
|
||||||
|
static void obsd_destroy_device(struct libusb_device *);
|
||||||
|
|
||||||
|
static int obsd_submit_transfer(struct usbi_transfer *);
|
||||||
|
static int obsd_cancel_transfer(struct usbi_transfer *);
|
||||||
|
static void obsd_clear_transfer_priv(struct usbi_transfer *);
|
||||||
|
static int obsd_handle_events(struct libusb_context *ctx, struct pollfd *,
|
||||||
|
nfds_t, int);
|
||||||
|
static int obsd_clock_gettime(int, struct timespec *);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Private functions
|
||||||
|
*/
|
||||||
|
static int _errno_to_libusb(int);
|
||||||
|
static int _cache_active_config_descriptor(struct libusb_device *);
|
||||||
|
static int _sync_control_transfer(struct usbi_transfer *);
|
||||||
|
static int _sync_gen_transfer(struct usbi_transfer *);
|
||||||
|
static int _access_endpoint(struct libusb_transfer *);
|
||||||
|
|
||||||
|
static int _bus_open(int);
|
||||||
|
|
||||||
|
|
||||||
|
const struct usbi_os_backend openbsd_backend = {
|
||||||
|
"Synchronous OpenBSD backend",
|
||||||
|
0,
|
||||||
|
NULL, /* init() */
|
||||||
|
NULL, /* exit() */
|
||||||
|
obsd_get_device_list,
|
||||||
|
NULL, /* hotplug_poll */
|
||||||
|
obsd_open,
|
||||||
|
obsd_close,
|
||||||
|
|
||||||
|
obsd_get_device_descriptor,
|
||||||
|
obsd_get_active_config_descriptor,
|
||||||
|
obsd_get_config_descriptor,
|
||||||
|
NULL, /* get_config_descriptor_by_value() */
|
||||||
|
|
||||||
|
obsd_get_configuration,
|
||||||
|
obsd_set_configuration,
|
||||||
|
|
||||||
|
obsd_claim_interface,
|
||||||
|
obsd_release_interface,
|
||||||
|
|
||||||
|
obsd_set_interface_altsetting,
|
||||||
|
obsd_clear_halt,
|
||||||
|
obsd_reset_device,
|
||||||
|
|
||||||
|
NULL, /* alloc_streams */
|
||||||
|
NULL, /* free_streams */
|
||||||
|
|
||||||
|
NULL, /* kernel_driver_active() */
|
||||||
|
NULL, /* detach_kernel_driver() */
|
||||||
|
NULL, /* attach_kernel_driver() */
|
||||||
|
|
||||||
|
obsd_destroy_device,
|
||||||
|
|
||||||
|
obsd_submit_transfer,
|
||||||
|
obsd_cancel_transfer,
|
||||||
|
obsd_clear_transfer_priv,
|
||||||
|
|
||||||
|
obsd_handle_events,
|
||||||
|
|
||||||
|
obsd_clock_gettime,
|
||||||
|
sizeof(struct device_priv),
|
||||||
|
sizeof(struct handle_priv),
|
||||||
|
0, /* transfer_priv_size */
|
||||||
|
0, /* add_iso_packet_size */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define DEVPATH "/dev/"
|
||||||
|
#define USBDEV DEVPATH "usb"
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_get_device_list(struct libusb_context * ctx,
|
||||||
|
struct discovered_devs **discdevs)
|
||||||
|
{
|
||||||
|
struct discovered_devs *ddd;
|
||||||
|
struct libusb_device *dev;
|
||||||
|
struct device_priv *dpriv;
|
||||||
|
struct usb_device_info di;
|
||||||
|
struct usb_device_ddesc dd;
|
||||||
|
unsigned long session_id;
|
||||||
|
char devices[USB_MAX_DEVICES];
|
||||||
|
char busnode[16];
|
||||||
|
char *udevname;
|
||||||
|
int fd, addr, i, j;
|
||||||
|
|
||||||
|
usbi_dbg("");
|
||||||
|
|
||||||
|
for (i = 0; i < 8; i++) {
|
||||||
|
snprintf(busnode, sizeof(busnode), USBDEV "%d", i);
|
||||||
|
|
||||||
|
if ((fd = open(busnode, O_RDWR)) < 0) {
|
||||||
|
if (errno != ENOENT && errno != ENXIO)
|
||||||
|
usbi_err(ctx, "could not open %s", busnode);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
bzero(devices, sizeof(devices));
|
||||||
|
for (addr = 1; addr < USB_MAX_DEVICES; addr++) {
|
||||||
|
if (devices[addr])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
di.udi_addr = addr;
|
||||||
|
if (ioctl(fd, USB_DEVICEINFO, &di) < 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XXX If ugen(4) is attached to the USB device
|
||||||
|
* it will be used.
|
||||||
|
*/
|
||||||
|
udevname = NULL;
|
||||||
|
for (j = 0; j < USB_MAX_DEVNAMES; j++)
|
||||||
|
if (!strncmp("ugen", di.udi_devnames[j], 4)) {
|
||||||
|
udevname = strdup(di.udi_devnames[j]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
session_id = (di.udi_bus << 8 | di.udi_addr);
|
||||||
|
dev = usbi_get_device_by_session_id(ctx, session_id);
|
||||||
|
|
||||||
|
if (dev == NULL) {
|
||||||
|
dev = usbi_alloc_device(ctx, session_id);
|
||||||
|
if (dev == NULL) {
|
||||||
|
close(fd);
|
||||||
|
return (LIBUSB_ERROR_NO_MEM);
|
||||||
|
}
|
||||||
|
|
||||||
|
dev->bus_number = di.udi_bus;
|
||||||
|
dev->device_address = di.udi_addr;
|
||||||
|
dev->speed = di.udi_speed;
|
||||||
|
|
||||||
|
dpriv = (struct device_priv *)dev->os_priv;
|
||||||
|
dpriv->fd = -1;
|
||||||
|
dpriv->cdesc = NULL;
|
||||||
|
dpriv->devname = udevname;
|
||||||
|
|
||||||
|
dd.udd_bus = di.udi_bus;
|
||||||
|
dd.udd_addr = di.udi_addr;
|
||||||
|
if (ioctl(fd, USB_DEVICE_GET_DDESC, &dd) < 0) {
|
||||||
|
libusb_unref_device(dev);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
dpriv->ddesc = dd.udd_desc;
|
||||||
|
|
||||||
|
if (_cache_active_config_descriptor(dev)) {
|
||||||
|
libusb_unref_device(dev);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (usbi_sanitize_device(dev)) {
|
||||||
|
libusb_unref_device(dev);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ddd = discovered_devs_append(*discdevs, dev);
|
||||||
|
if (ddd == NULL) {
|
||||||
|
close(fd);
|
||||||
|
return (LIBUSB_ERROR_NO_MEM);
|
||||||
|
}
|
||||||
|
libusb_unref_device(dev);
|
||||||
|
|
||||||
|
*discdevs = ddd;
|
||||||
|
devices[addr] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (LIBUSB_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_open(struct libusb_device_handle *handle)
|
||||||
|
{
|
||||||
|
struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv;
|
||||||
|
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
||||||
|
char devnode[16];
|
||||||
|
|
||||||
|
if (dpriv->devname) {
|
||||||
|
/*
|
||||||
|
* Only open ugen(4) attached devices read-write, all
|
||||||
|
* read-only operations are done through the bus node.
|
||||||
|
*/
|
||||||
|
snprintf(devnode, sizeof(devnode), DEVPATH "%s.00",
|
||||||
|
dpriv->devname);
|
||||||
|
dpriv->fd = open(devnode, O_RDWR);
|
||||||
|
if (dpriv->fd < 0)
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
|
||||||
|
usbi_dbg("open %s: fd %d", devnode, dpriv->fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pipe(hpriv->pipe) < 0)
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
|
||||||
|
return usbi_add_pollfd(HANDLE_CTX(handle), hpriv->pipe[0], POLLIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
obsd_close(struct libusb_device_handle *handle)
|
||||||
|
{
|
||||||
|
struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv;
|
||||||
|
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
||||||
|
|
||||||
|
if (dpriv->devname) {
|
||||||
|
usbi_dbg("close: fd %d", dpriv->fd);
|
||||||
|
|
||||||
|
close(dpriv->fd);
|
||||||
|
dpriv->fd = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
usbi_remove_pollfd(HANDLE_CTX(handle), hpriv->pipe[0]);
|
||||||
|
|
||||||
|
close(hpriv->pipe[0]);
|
||||||
|
close(hpriv->pipe[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_get_device_descriptor(struct libusb_device *dev, unsigned char *buf,
|
||||||
|
int *host_endian)
|
||||||
|
{
|
||||||
|
struct device_priv *dpriv = (struct device_priv *)dev->os_priv;
|
||||||
|
|
||||||
|
usbi_dbg("");
|
||||||
|
|
||||||
|
memcpy(buf, &dpriv->ddesc, DEVICE_DESC_LENGTH);
|
||||||
|
|
||||||
|
*host_endian = 0;
|
||||||
|
|
||||||
|
return (LIBUSB_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_get_active_config_descriptor(struct libusb_device *dev,
|
||||||
|
unsigned char *buf, size_t len, int *host_endian)
|
||||||
|
{
|
||||||
|
struct device_priv *dpriv = (struct device_priv *)dev->os_priv;
|
||||||
|
usb_config_descriptor_t *ucd = (usb_config_descriptor_t *)dpriv->cdesc;
|
||||||
|
|
||||||
|
len = MIN(len, UGETW(ucd->wTotalLength));
|
||||||
|
|
||||||
|
usbi_dbg("len %d", len);
|
||||||
|
|
||||||
|
memcpy(buf, dpriv->cdesc, len);
|
||||||
|
|
||||||
|
*host_endian = 0;
|
||||||
|
|
||||||
|
return (len);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_get_config_descriptor(struct libusb_device *dev, uint8_t idx,
|
||||||
|
unsigned char *buf, size_t len, int *host_endian)
|
||||||
|
{
|
||||||
|
struct usb_device_fdesc udf;
|
||||||
|
int fd, err;
|
||||||
|
|
||||||
|
if ((fd = _bus_open(dev->bus_number)) < 0)
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
|
||||||
|
udf.udf_bus = dev->bus_number;
|
||||||
|
udf.udf_addr = dev->device_address;
|
||||||
|
udf.udf_config_index = idx;
|
||||||
|
udf.udf_size = len;
|
||||||
|
udf.udf_data = buf;
|
||||||
|
|
||||||
|
usbi_dbg("index %d, len %d", udf.udf_config_index, len);
|
||||||
|
|
||||||
|
if (ioctl(fd, USB_DEVICE_GET_FDESC, &udf) < 0) {
|
||||||
|
err = errno;
|
||||||
|
close(fd);
|
||||||
|
return _errno_to_libusb(err);
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
*host_endian = 0;
|
||||||
|
|
||||||
|
return (len);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_get_configuration(struct libusb_device_handle *handle, int *config)
|
||||||
|
{
|
||||||
|
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
||||||
|
usb_config_descriptor_t *ucd = (usb_config_descriptor_t *)dpriv->cdesc;
|
||||||
|
|
||||||
|
*config = ucd->bConfigurationValue;
|
||||||
|
|
||||||
|
usbi_dbg("bConfigurationValue %d", *config);
|
||||||
|
|
||||||
|
return (LIBUSB_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_set_configuration(struct libusb_device_handle *handle, int config)
|
||||||
|
{
|
||||||
|
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
||||||
|
|
||||||
|
if (dpriv->devname == NULL)
|
||||||
|
return (LIBUSB_ERROR_NOT_SUPPORTED);
|
||||||
|
|
||||||
|
usbi_dbg("bConfigurationValue %d", config);
|
||||||
|
|
||||||
|
if (ioctl(dpriv->fd, USB_SET_CONFIG, &config) < 0)
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
|
||||||
|
return _cache_active_config_descriptor(handle->dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_claim_interface(struct libusb_device_handle *handle, int iface)
|
||||||
|
{
|
||||||
|
struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < USB_MAX_ENDPOINTS; i++)
|
||||||
|
hpriv->endpoints[i] = -1;
|
||||||
|
|
||||||
|
return (LIBUSB_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_release_interface(struct libusb_device_handle *handle, int iface)
|
||||||
|
{
|
||||||
|
struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < USB_MAX_ENDPOINTS; i++)
|
||||||
|
if (hpriv->endpoints[i] >= 0)
|
||||||
|
close(hpriv->endpoints[i]);
|
||||||
|
|
||||||
|
return (LIBUSB_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_set_interface_altsetting(struct libusb_device_handle *handle, int iface,
|
||||||
|
int altsetting)
|
||||||
|
{
|
||||||
|
struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv;
|
||||||
|
struct usb_alt_interface intf;
|
||||||
|
|
||||||
|
if (dpriv->devname == NULL)
|
||||||
|
return (LIBUSB_ERROR_NOT_SUPPORTED);
|
||||||
|
|
||||||
|
usbi_dbg("iface %d, setting %d", iface, altsetting);
|
||||||
|
|
||||||
|
memset(&intf, 0, sizeof(intf));
|
||||||
|
|
||||||
|
intf.uai_interface_index = iface;
|
||||||
|
intf.uai_alt_no = altsetting;
|
||||||
|
|
||||||
|
if (ioctl(dpriv->fd, USB_SET_ALTINTERFACE, &intf) < 0)
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
|
||||||
|
return (LIBUSB_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_clear_halt(struct libusb_device_handle *handle, unsigned char endpoint)
|
||||||
|
{
|
||||||
|
struct usb_ctl_request req;
|
||||||
|
int fd, err;
|
||||||
|
|
||||||
|
if ((fd = _bus_open(handle->dev->bus_number)) < 0)
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
|
||||||
|
usbi_dbg("");
|
||||||
|
|
||||||
|
req.ucr_addr = handle->dev->device_address;
|
||||||
|
req.ucr_request.bmRequestType = UT_WRITE_ENDPOINT;
|
||||||
|
req.ucr_request.bRequest = UR_CLEAR_FEATURE;
|
||||||
|
USETW(req.ucr_request.wValue, UF_ENDPOINT_HALT);
|
||||||
|
USETW(req.ucr_request.wIndex, endpoint);
|
||||||
|
USETW(req.ucr_request.wLength, 0);
|
||||||
|
|
||||||
|
if (ioctl(fd, USB_REQUEST, &req) < 0) {
|
||||||
|
err = errno;
|
||||||
|
close(fd);
|
||||||
|
return _errno_to_libusb(err);
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
return (LIBUSB_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_reset_device(struct libusb_device_handle *handle)
|
||||||
|
{
|
||||||
|
usbi_dbg("");
|
||||||
|
|
||||||
|
return (LIBUSB_ERROR_NOT_SUPPORTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
obsd_destroy_device(struct libusb_device *dev)
|
||||||
|
{
|
||||||
|
struct device_priv *dpriv = (struct device_priv *)dev->os_priv;
|
||||||
|
|
||||||
|
usbi_dbg("");
|
||||||
|
|
||||||
|
free(dpriv->cdesc);
|
||||||
|
free(dpriv->devname);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_submit_transfer(struct usbi_transfer *itransfer)
|
||||||
|
{
|
||||||
|
struct libusb_transfer *transfer;
|
||||||
|
struct handle_priv *hpriv;
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
|
usbi_dbg("");
|
||||||
|
|
||||||
|
transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
||||||
|
hpriv = (struct handle_priv *)transfer->dev_handle->os_priv;
|
||||||
|
|
||||||
|
switch (transfer->type) {
|
||||||
|
case LIBUSB_TRANSFER_TYPE_CONTROL:
|
||||||
|
err = _sync_control_transfer(itransfer);
|
||||||
|
break;
|
||||||
|
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
||||||
|
if (IS_XFEROUT(transfer)) {
|
||||||
|
/* Isochronous write is not supported */
|
||||||
|
err = LIBUSB_ERROR_NOT_SUPPORTED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
err = _sync_gen_transfer(itransfer);
|
||||||
|
break;
|
||||||
|
case LIBUSB_TRANSFER_TYPE_BULK:
|
||||||
|
case LIBUSB_TRANSFER_TYPE_INTERRUPT:
|
||||||
|
if (IS_XFEROUT(transfer) &&
|
||||||
|
transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET) {
|
||||||
|
err = LIBUSB_ERROR_NOT_SUPPORTED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
err = _sync_gen_transfer(itransfer);
|
||||||
|
break;
|
||||||
|
case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
|
||||||
|
err = LIBUSB_ERROR_NOT_SUPPORTED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err)
|
||||||
|
return (err);
|
||||||
|
|
||||||
|
if (write(hpriv->pipe[1], &itransfer, sizeof(itransfer)) < 0)
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
|
||||||
|
return (LIBUSB_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_cancel_transfer(struct usbi_transfer *itransfer)
|
||||||
|
{
|
||||||
|
usbi_dbg("");
|
||||||
|
|
||||||
|
return (LIBUSB_ERROR_NOT_SUPPORTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
obsd_clear_transfer_priv(struct usbi_transfer *itransfer)
|
||||||
|
{
|
||||||
|
usbi_dbg("");
|
||||||
|
|
||||||
|
/* Nothing to do */
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_handle_events(struct libusb_context *ctx, struct pollfd *fds, nfds_t nfds,
|
||||||
|
int num_ready)
|
||||||
|
{
|
||||||
|
struct libusb_device_handle *handle;
|
||||||
|
struct handle_priv *hpriv = NULL;
|
||||||
|
struct usbi_transfer *itransfer;
|
||||||
|
struct pollfd *pollfd;
|
||||||
|
int i, err = 0;
|
||||||
|
|
||||||
|
usbi_dbg("");
|
||||||
|
|
||||||
|
pthread_mutex_lock(&ctx->open_devs_lock);
|
||||||
|
for (i = 0; i < nfds && num_ready > 0; i++) {
|
||||||
|
pollfd = &fds[i];
|
||||||
|
|
||||||
|
if (!pollfd->revents)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
hpriv = NULL;
|
||||||
|
num_ready--;
|
||||||
|
list_for_each_entry(handle, &ctx->open_devs, list,
|
||||||
|
struct libusb_device_handle) {
|
||||||
|
hpriv = (struct handle_priv *)handle->os_priv;
|
||||||
|
|
||||||
|
if (hpriv->pipe[0] == pollfd->fd)
|
||||||
|
break;
|
||||||
|
|
||||||
|
hpriv = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NULL == hpriv) {
|
||||||
|
usbi_dbg("fd %d is not an event pipe!", pollfd->fd);
|
||||||
|
err = ENOENT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pollfd->revents & POLLERR) {
|
||||||
|
usbi_remove_pollfd(HANDLE_CTX(handle), hpriv->pipe[0]);
|
||||||
|
usbi_handle_disconnect(handle);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (read(hpriv->pipe[0], &itransfer, sizeof(itransfer)) < 0) {
|
||||||
|
err = errno;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((err = usbi_handle_transfer_completion(itransfer,
|
||||||
|
LIBUSB_TRANSFER_COMPLETED)))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&ctx->open_devs_lock);
|
||||||
|
|
||||||
|
if (err)
|
||||||
|
return _errno_to_libusb(err);
|
||||||
|
|
||||||
|
return (LIBUSB_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
obsd_clock_gettime(int clkid, struct timespec *tp)
|
||||||
|
{
|
||||||
|
usbi_dbg("clock %d", clkid);
|
||||||
|
|
||||||
|
if (clkid == USBI_CLOCK_REALTIME)
|
||||||
|
return clock_gettime(CLOCK_REALTIME, tp);
|
||||||
|
|
||||||
|
if (clkid == USBI_CLOCK_MONOTONIC)
|
||||||
|
return clock_gettime(CLOCK_MONOTONIC, tp);
|
||||||
|
|
||||||
|
return (LIBUSB_ERROR_INVALID_PARAM);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
_errno_to_libusb(int err)
|
||||||
|
{
|
||||||
|
usbi_dbg("error: %s (%d)", strerror(err), err);
|
||||||
|
|
||||||
|
switch (err) {
|
||||||
|
case EIO:
|
||||||
|
return (LIBUSB_ERROR_IO);
|
||||||
|
case EACCES:
|
||||||
|
return (LIBUSB_ERROR_ACCESS);
|
||||||
|
case ENOENT:
|
||||||
|
return (LIBUSB_ERROR_NO_DEVICE);
|
||||||
|
case ENOMEM:
|
||||||
|
return (LIBUSB_ERROR_NO_MEM);
|
||||||
|
case ETIMEDOUT:
|
||||||
|
return (LIBUSB_ERROR_TIMEOUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (LIBUSB_ERROR_OTHER);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
_cache_active_config_descriptor(struct libusb_device *dev)
|
||||||
|
{
|
||||||
|
struct device_priv *dpriv = (struct device_priv *)dev->os_priv;
|
||||||
|
struct usb_device_cdesc udc;
|
||||||
|
struct usb_device_fdesc udf;
|
||||||
|
unsigned char* buf;
|
||||||
|
int fd, len, err;
|
||||||
|
|
||||||
|
if ((fd = _bus_open(dev->bus_number)) < 0)
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
|
||||||
|
usbi_dbg("fd %d, addr %d", fd, dev->device_address);
|
||||||
|
|
||||||
|
udc.udc_bus = dev->bus_number;
|
||||||
|
udc.udc_addr = dev->device_address;
|
||||||
|
udc.udc_config_index = USB_CURRENT_CONFIG_INDEX;
|
||||||
|
if (ioctl(fd, USB_DEVICE_GET_CDESC, &udc) < 0) {
|
||||||
|
err = errno;
|
||||||
|
close(fd);
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
}
|
||||||
|
|
||||||
|
usbi_dbg("active bLength %d", udc.udc_desc.bLength);
|
||||||
|
|
||||||
|
len = UGETW(udc.udc_desc.wTotalLength);
|
||||||
|
buf = malloc(len);
|
||||||
|
if (buf == NULL)
|
||||||
|
return (LIBUSB_ERROR_NO_MEM);
|
||||||
|
|
||||||
|
udf.udf_bus = dev->bus_number;
|
||||||
|
udf.udf_addr = dev->device_address;
|
||||||
|
udf.udf_config_index = udc.udc_config_index;
|
||||||
|
udf.udf_size = len;
|
||||||
|
udf.udf_data = buf;
|
||||||
|
|
||||||
|
usbi_dbg("index %d, len %d", udf.udf_config_index, len);
|
||||||
|
|
||||||
|
if (ioctl(fd, USB_DEVICE_GET_FDESC, &udf) < 0) {
|
||||||
|
err = errno;
|
||||||
|
close(fd);
|
||||||
|
free(buf);
|
||||||
|
return _errno_to_libusb(err);
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
if (dpriv->cdesc)
|
||||||
|
free(dpriv->cdesc);
|
||||||
|
dpriv->cdesc = buf;
|
||||||
|
|
||||||
|
return (LIBUSB_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
_sync_control_transfer(struct usbi_transfer *itransfer)
|
||||||
|
{
|
||||||
|
struct libusb_transfer *transfer;
|
||||||
|
struct libusb_control_setup *setup;
|
||||||
|
struct device_priv *dpriv;
|
||||||
|
struct usb_ctl_request req;
|
||||||
|
|
||||||
|
transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
||||||
|
dpriv = (struct device_priv *)transfer->dev_handle->dev->os_priv;
|
||||||
|
setup = (struct libusb_control_setup *)transfer->buffer;
|
||||||
|
|
||||||
|
usbi_dbg("type %x request %x value %x index %d length %d timeout %d",
|
||||||
|
setup->bmRequestType, setup->bRequest,
|
||||||
|
libusb_le16_to_cpu(setup->wValue),
|
||||||
|
libusb_le16_to_cpu(setup->wIndex),
|
||||||
|
libusb_le16_to_cpu(setup->wLength), transfer->timeout);
|
||||||
|
|
||||||
|
req.ucr_addr = transfer->dev_handle->dev->device_address;
|
||||||
|
req.ucr_request.bmRequestType = setup->bmRequestType;
|
||||||
|
req.ucr_request.bRequest = setup->bRequest;
|
||||||
|
/* Don't use USETW, libusb already deals with the endianness */
|
||||||
|
(*(uint16_t *)req.ucr_request.wValue) = setup->wValue;
|
||||||
|
(*(uint16_t *)req.ucr_request.wIndex) = setup->wIndex;
|
||||||
|
(*(uint16_t *)req.ucr_request.wLength) = setup->wLength;
|
||||||
|
req.ucr_data = transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE;
|
||||||
|
|
||||||
|
if ((transfer->flags & LIBUSB_TRANSFER_SHORT_NOT_OK) == 0)
|
||||||
|
req.ucr_flags = USBD_SHORT_XFER_OK;
|
||||||
|
|
||||||
|
if (dpriv->devname == NULL) {
|
||||||
|
/*
|
||||||
|
* XXX If the device is not attached to ugen(4) it is
|
||||||
|
* XXX still possible to submit a control transfer but
|
||||||
|
* XXX with the default timeout only.
|
||||||
|
*/
|
||||||
|
int fd, err;
|
||||||
|
|
||||||
|
if ((fd = _bus_open(transfer->dev_handle->dev->bus_number)) < 0)
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
|
||||||
|
if ((ioctl(fd, USB_REQUEST, &req)) < 0) {
|
||||||
|
err = errno;
|
||||||
|
close(fd);
|
||||||
|
return _errno_to_libusb(err);
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
|
} else {
|
||||||
|
if ((ioctl(dpriv->fd, USB_SET_TIMEOUT, &transfer->timeout)) < 0)
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
|
||||||
|
if ((ioctl(dpriv->fd, USB_DO_REQUEST, &req)) < 0)
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
}
|
||||||
|
|
||||||
|
itransfer->transferred = req.ucr_actlen;
|
||||||
|
|
||||||
|
usbi_dbg("transferred %d", itransfer->transferred);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
_access_endpoint(struct libusb_transfer *transfer)
|
||||||
|
{
|
||||||
|
struct handle_priv *hpriv;
|
||||||
|
struct device_priv *dpriv;
|
||||||
|
char devnode[16];
|
||||||
|
int fd, endpt;
|
||||||
|
mode_t mode;
|
||||||
|
|
||||||
|
hpriv = (struct handle_priv *)transfer->dev_handle->os_priv;
|
||||||
|
dpriv = (struct device_priv *)transfer->dev_handle->dev->os_priv;
|
||||||
|
|
||||||
|
endpt = UE_GET_ADDR(transfer->endpoint);
|
||||||
|
mode = IS_XFERIN(transfer) ? O_RDONLY : O_WRONLY;
|
||||||
|
|
||||||
|
usbi_dbg("endpoint %d mode %d", endpt, mode);
|
||||||
|
|
||||||
|
if (hpriv->endpoints[endpt] < 0) {
|
||||||
|
/* Pick the right endpoint node */
|
||||||
|
snprintf(devnode, sizeof(devnode), DEVPATH "%s.%02d",
|
||||||
|
dpriv->devname, endpt);
|
||||||
|
|
||||||
|
/* We may need to read/write to the same endpoint later. */
|
||||||
|
if (((fd = open(devnode, O_RDWR)) < 0) && (errno == ENXIO))
|
||||||
|
if ((fd = open(devnode, mode)) < 0)
|
||||||
|
return (-1);
|
||||||
|
|
||||||
|
hpriv->endpoints[endpt] = fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (hpriv->endpoints[endpt]);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
_sync_gen_transfer(struct usbi_transfer *itransfer)
|
||||||
|
{
|
||||||
|
struct libusb_transfer *transfer;
|
||||||
|
struct device_priv *dpriv;
|
||||||
|
int fd, nr = 1;
|
||||||
|
|
||||||
|
transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
|
||||||
|
dpriv = (struct device_priv *)transfer->dev_handle->dev->os_priv;
|
||||||
|
|
||||||
|
if (dpriv->devname == NULL)
|
||||||
|
return (LIBUSB_ERROR_NOT_SUPPORTED);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bulk, Interrupt or Isochronous transfer depends on the
|
||||||
|
* endpoint and thus the node to open.
|
||||||
|
*/
|
||||||
|
if ((fd = _access_endpoint(transfer)) < 0)
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
|
||||||
|
if ((ioctl(fd, USB_SET_TIMEOUT, &transfer->timeout)) < 0)
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
|
||||||
|
if (IS_XFERIN(transfer)) {
|
||||||
|
if ((transfer->flags & LIBUSB_TRANSFER_SHORT_NOT_OK) == 0)
|
||||||
|
if ((ioctl(fd, USB_SET_SHORT_XFER, &nr)) < 0)
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
|
||||||
|
nr = read(fd, transfer->buffer, transfer->length);
|
||||||
|
} else {
|
||||||
|
nr = write(fd, transfer->buffer, transfer->length);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nr < 0)
|
||||||
|
return _errno_to_libusb(errno);
|
||||||
|
|
||||||
|
itransfer->transferred = nr;
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
_bus_open(int number)
|
||||||
|
{
|
||||||
|
char busnode[16];
|
||||||
|
|
||||||
|
snprintf(busnode, sizeof(busnode), USBDEV "%d", number);
|
||||||
|
|
||||||
|
return open(busnode, O_RDWR);
|
||||||
|
}
|
|
@ -22,7 +22,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* poll() and pipe() Windows compatibility layer for libusbx 1.0
|
* poll() and pipe() Windows compatibility layer for libusb 1.0
|
||||||
*
|
*
|
||||||
* The way this layer works is by using OVERLAPPED with async I/O transfers, as
|
* The way this layer works is by using OVERLAPPED with async I/O transfers, as
|
||||||
* OVERLAPPED have an associated event which is flagged for I/O completion.
|
* OVERLAPPED have an associated event which is flagged for I/O completion.
|
||||||
|
@ -252,7 +252,7 @@ void exit_polling(void)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create a fake pipe.
|
* Create a fake pipe.
|
||||||
* As libusbx only uses pipes for signaling, all we need from a pipe is an
|
* As libusb only uses pipes for signaling, all we need from a pipe is an
|
||||||
* event. To that extent, we create a single wfd and overlapped as a means
|
* event. To that extent, we create a single wfd and overlapped as a means
|
||||||
* to access that event.
|
* to access that event.
|
||||||
*/
|
*/
|
||||||
|
@ -428,7 +428,7 @@ struct winfd fd_to_winfd(int fd)
|
||||||
|
|
||||||
CHECK_INIT_POLLING;
|
CHECK_INIT_POLLING;
|
||||||
|
|
||||||
if (fd <= 0)
|
if (fd < 0)
|
||||||
return INVALID_WINFD;
|
return INVALID_WINFD;
|
||||||
|
|
||||||
for (i=0; i<MAX_FDS; i++) {
|
for (i=0; i<MAX_FDS; i++) {
|
|
@ -40,14 +40,20 @@
|
||||||
|
|
||||||
#define DUMMY_HANDLE ((HANDLE)(LONG_PTR)-2)
|
#define DUMMY_HANDLE ((HANDLE)(LONG_PTR)-2)
|
||||||
|
|
||||||
|
/* Windows versions */
|
||||||
enum windows_version {
|
enum windows_version {
|
||||||
WINDOWS_UNSUPPORTED,
|
WINDOWS_CE = -2,
|
||||||
WINDOWS_CE,
|
WINDOWS_UNDEFINED = -1,
|
||||||
WINDOWS_XP,
|
WINDOWS_UNSUPPORTED = 0,
|
||||||
WINDOWS_2003, // also includes XP 64
|
WINDOWS_XP = 0x51,
|
||||||
WINDOWS_VISTA_AND_LATER,
|
WINDOWS_2003 = 0x52, // Also XP x64
|
||||||
|
WINDOWS_VISTA = 0x60,
|
||||||
|
WINDOWS_7 = 0x61,
|
||||||
|
WINDOWS_8 = 0x62,
|
||||||
|
WINDOWS_8_1_OR_LATER = 0x63,
|
||||||
|
WINDOWS_MAX
|
||||||
};
|
};
|
||||||
extern enum windows_version windows_version;
|
extern int windows_version;
|
||||||
|
|
||||||
#define MAX_FDS 256
|
#define MAX_FDS 256
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* libusbx synchronization using POSIX Threads
|
* libusb synchronization using POSIX Threads
|
||||||
*
|
*
|
||||||
* Copyright © 2011 Vitali Lovich <vlovich@aliph.com>
|
* Copyright © 2011 Vitali Lovich <vlovich@aliph.com>
|
||||||
* Copyright © 2011 Peter Stuge <peter@stuge.se>
|
* Copyright © 2011 Peter Stuge <peter@stuge.se>
|
||||||
|
@ -63,7 +63,9 @@ finish:
|
||||||
int usbi_get_tid(void)
|
int usbi_get_tid(void)
|
||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
#if defined(__linux__)
|
#if defined(__ANDROID__)
|
||||||
|
ret = gettid();
|
||||||
|
#elif defined(__linux__)
|
||||||
ret = syscall(SYS_gettid);
|
ret = syscall(SYS_gettid);
|
||||||
#elif defined(__OpenBSD__)
|
#elif defined(__OpenBSD__)
|
||||||
/* The following only works with OpenBSD > 5.1 as it requires
|
/* The following only works with OpenBSD > 5.1 as it requires
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* libusbx synchronization using POSIX Threads
|
* libusb synchronization using POSIX Threads
|
||||||
*
|
*
|
||||||
* Copyright © 2010 Peter Stuge <peter@stuge.se>
|
* Copyright © 2010 Peter Stuge <peter@stuge.se>
|
||||||
*
|
*
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* libusbx synchronization on Microsoft Windows
|
* libusb synchronization on Microsoft Windows
|
||||||
*
|
*
|
||||||
* Copyright © 2010 Michael Plante <michael.plante@gmail.com>
|
* Copyright © 2010 Michael Plante <michael.plante@gmail.com>
|
||||||
*
|
*
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* libusbx synchronization on Microsoft Windows
|
* libusb synchronization on Microsoft Windows
|
||||||
*
|
*
|
||||||
* Copyright © 2010 Michael Plante <michael.plante@gmail.com>
|
* Copyright © 2010 Michael Plante <michael.plante@gmail.com>
|
||||||
*
|
*
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Windows CE backend for libusbx 1.0
|
* Windows CE backend for libusb 1.0
|
||||||
* Copyright © 2011-2013 RealVNC Ltd.
|
* Copyright © 2011-2013 RealVNC Ltd.
|
||||||
* Large portions taken from Windows backend, which is
|
* Large portions taken from Windows backend, which is
|
||||||
* Copyright © 2009-2010 Pete Batard <pbatard@gmail.com>
|
* Copyright © 2009-2010 Pete Batard <pbatard@gmail.com>
|
||||||
|
@ -38,7 +38,7 @@ unsigned __stdcall wince_clock_gettime_threaded(void* param);
|
||||||
uint64_t hires_frequency, hires_ticks_to_ps;
|
uint64_t hires_frequency, hires_ticks_to_ps;
|
||||||
int errno;
|
int errno;
|
||||||
const uint64_t epoch_time = UINT64_C(116444736000000000); // 1970.01.01 00:00:000 in MS Filetime
|
const uint64_t epoch_time = UINT64_C(116444736000000000); // 1970.01.01 00:00:000 in MS Filetime
|
||||||
enum windows_version windows_version = WINDOWS_CE;
|
int windows_version = WINDOWS_CE;
|
||||||
static int concurrent_usage = -1;
|
static int concurrent_usage = -1;
|
||||||
// Timer thread
|
// Timer thread
|
||||||
// NB: index 0 is for monotonic and 1 is for the thread exit event
|
// NB: index 0 is for monotonic and 1 is for the thread exit event
|
||||||
|
@ -234,6 +234,12 @@ static int wince_init(struct libusb_context *ctx)
|
||||||
usbi_err(ctx, "Unable to create timer thread - aborting");
|
usbi_err(ctx, "Unable to create timer thread - aborting");
|
||||||
goto init_exit;
|
goto init_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Wait for timer thread to init before continuing.
|
||||||
|
if (WaitForSingleObject(timer_response, INFINITE) != WAIT_OBJECT_0) {
|
||||||
|
usbi_err(ctx, "Failed to wait for timer thread to become ready - aborting");
|
||||||
|
goto init_exit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// At this stage, either we went through full init successfully, or didn't need to
|
// At this stage, either we went through full init successfully, or didn't need to
|
||||||
r = LIBUSB_SUCCESS;
|
r = LIBUSB_SUCCESS;
|
||||||
|
@ -366,7 +372,6 @@ static int wince_get_device_list(
|
||||||
if (dev) {
|
if (dev) {
|
||||||
usbi_dbg("using existing device for %d/%d (session %ld)",
|
usbi_dbg("using existing device for %d/%d (session %ld)",
|
||||||
bus_addr, dev_addr, session_id);
|
bus_addr, dev_addr, session_id);
|
||||||
libusb_ref_device(dev);
|
|
||||||
// Release just this element in the device list (as we already hold a
|
// Release just this element in the device list (as we already hold a
|
||||||
// reference to it).
|
// reference to it).
|
||||||
UkwReleaseDeviceList(driver_handle, &devices[i], 1);
|
UkwReleaseDeviceList(driver_handle, &devices[i], 1);
|
||||||
|
@ -684,6 +689,8 @@ static int wince_submit_transfer(
|
||||||
return wince_submit_control_or_bulk_transfer(itransfer);
|
return wince_submit_control_or_bulk_transfer(itransfer);
|
||||||
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
||||||
return wince_submit_iso_transfer(itransfer);
|
return wince_submit_iso_transfer(itransfer);
|
||||||
|
case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
|
||||||
|
return LIBUSB_ERROR_NOT_SUPPORTED;
|
||||||
default:
|
default:
|
||||||
usbi_err(TRANSFER_CTX(transfer), "unknown endpoint type %d", transfer->type);
|
usbi_err(TRANSFER_CTX(transfer), "unknown endpoint type %d", transfer->type);
|
||||||
return LIBUSB_ERROR_INVALID_PARAM;
|
return LIBUSB_ERROR_INVALID_PARAM;
|
||||||
|
@ -796,6 +803,8 @@ static void wince_handle_callback (struct usbi_transfer *itransfer, uint32_t io_
|
||||||
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
||||||
wince_transfer_callback (itransfer, io_result, io_size);
|
wince_transfer_callback (itransfer, io_result, io_size);
|
||||||
break;
|
break;
|
||||||
|
case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
|
||||||
|
return LIBUSB_ERROR_NOT_SUPPORTED;
|
||||||
default:
|
default:
|
||||||
usbi_err(ITRANSFER_CTX(itransfer), "unknown endpoint type %d", transfer->type);
|
usbi_err(ITRANSFER_CTX(itransfer), "unknown endpoint type %d", transfer->type);
|
||||||
}
|
}
|
||||||
|
@ -877,6 +886,11 @@ unsigned __stdcall wince_clock_gettime_threaded(void* param)
|
||||||
usbi_dbg("hires timer available (Frequency: %"PRIu64" Hz)", hires_frequency);
|
usbi_dbg("hires timer available (Frequency: %"PRIu64" Hz)", hires_frequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Signal wince_init() that we're ready to service requests
|
||||||
|
if (ReleaseSemaphore(timer_response, 1, NULL) == 0) {
|
||||||
|
usbi_dbg("unable to release timer semaphore: %s", windows_error_str(0));
|
||||||
|
}
|
||||||
|
|
||||||
// Main loop - wait for requests
|
// Main loop - wait for requests
|
||||||
while (1) {
|
while (1) {
|
||||||
timer_index = WaitForMultipleObjects(2, timer_request, FALSE, INFINITE) - WAIT_OBJECT_0;
|
timer_index = WaitForMultipleObjects(2, timer_request, FALSE, INFINITE) - WAIT_OBJECT_0;
|
||||||
|
@ -911,7 +925,7 @@ unsigned __stdcall wince_clock_gettime_threaded(void* param)
|
||||||
nb_responses = InterlockedExchange((LONG*)&request_count[0], 0);
|
nb_responses = InterlockedExchange((LONG*)&request_count[0], 0);
|
||||||
if ( (nb_responses)
|
if ( (nb_responses)
|
||||||
&& (ReleaseSemaphore(timer_response, nb_responses, NULL) == 0) ) {
|
&& (ReleaseSemaphore(timer_response, nb_responses, NULL) == 0) ) {
|
||||||
usbi_dbg("unable to release timer semaphore %d: %s", windows_error_str(0));
|
usbi_dbg("unable to release timer semaphore: %s", windows_error_str(0));
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
case 1: // time to quit
|
case 1: // time to quit
|
||||||
|
@ -995,6 +1009,9 @@ const struct usbi_os_backend wince_backend = {
|
||||||
wince_clear_halt,
|
wince_clear_halt,
|
||||||
wince_reset_device,
|
wince_reset_device,
|
||||||
|
|
||||||
|
NULL, /* alloc_streams */
|
||||||
|
NULL, /* free_streams */
|
||||||
|
|
||||||
wince_kernel_driver_active,
|
wince_kernel_driver_active,
|
||||||
wince_detach_kernel_driver,
|
wince_detach_kernel_driver,
|
||||||
wince_attach_kernel_driver,
|
wince_attach_kernel_driver,
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Windows CE backend for libusbx 1.0
|
* Windows CE backend for libusb 1.0
|
||||||
* Copyright © 2011-2013 RealVNC Ltd.
|
* Copyright © 2011-2013 RealVNC Ltd.
|
||||||
* Portions taken from Windows backend, which is
|
* Portions taken from Windows backend, which is
|
||||||
* Copyright © 2009-2010 Pete Batard <pbatard@gmail.com>
|
* Copyright © 2009-2010 Pete Batard <pbatard@gmail.com>
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
// This backend dynamically loads ceusbkwrapper.dll and doesn't include
|
// This backend dynamically loads ceusbkwrapper.dll and doesn't include
|
||||||
// ceusbkwrapper.h directly to simplify the build process. The kernel
|
// ceusbkwrapper.h directly to simplify the build process. The kernel
|
||||||
// side wrapper driver is built using the platform image build tools,
|
// side wrapper driver is built using the platform image build tools,
|
||||||
// which makes it difficult to reference directly from the libusbx build
|
// which makes it difficult to reference directly from the libusb build
|
||||||
// system.
|
// system.
|
||||||
struct UKW_DEVICE_PRIV;
|
struct UKW_DEVICE_PRIV;
|
||||||
typedef struct UKW_DEVICE_PRIV *UKW_DEVICE;
|
typedef struct UKW_DEVICE_PRIV *UKW_DEVICE;
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Windows backend common header for libusbx 1.0
|
* Windows backend common header for libusb 1.0
|
||||||
*
|
*
|
||||||
* This file brings together header code common between
|
* This file brings together header code common between
|
||||||
* the desktop Windows and Windows CE backends.
|
* the desktop Windows and Windows CE backends.
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* windows backend for libusbx 1.0
|
* windows backend for libusb 1.0
|
||||||
* Copyright © 2009-2012 Pete Batard <pete@akeo.ie>
|
* Copyright © 2009-2012 Pete Batard <pete@akeo.ie>
|
||||||
* With contributions from Michael Plante, Orin Eman et al.
|
* With contributions from Michael Plante, Orin Eman et al.
|
||||||
* Parts of this code adapted from libusb-win32-v1 by Stephan Meyer
|
* Parts of this code adapted from libusb-win32-v1 by Stephan Meyer
|
||||||
|
@ -100,7 +100,8 @@ static int composite_copy_transfer_data(int sub_api, struct usbi_transfer *itran
|
||||||
// Global variables
|
// Global variables
|
||||||
uint64_t hires_frequency, hires_ticks_to_ps;
|
uint64_t hires_frequency, hires_ticks_to_ps;
|
||||||
const uint64_t epoch_time = UINT64_C(116444736000000000); // 1970.01.01 00:00:000 in MS Filetime
|
const uint64_t epoch_time = UINT64_C(116444736000000000); // 1970.01.01 00:00:000 in MS Filetime
|
||||||
enum windows_version windows_version = WINDOWS_UNSUPPORTED;
|
int windows_version = WINDOWS_UNDEFINED;
|
||||||
|
static char windows_version_str[128] = "Windows Undefined";
|
||||||
// Concurrency
|
// Concurrency
|
||||||
static int concurrent_usage = -1;
|
static int concurrent_usage = -1;
|
||||||
usbi_mutex_t autoclaim_lock;
|
usbi_mutex_t autoclaim_lock;
|
||||||
|
@ -158,6 +159,20 @@ static char err_string[ERR_BUFFER_SIZE];
|
||||||
|
|
||||||
safe_sprintf(err_string, ERR_BUFFER_SIZE, "[%u] ", error_code);
|
safe_sprintf(err_string, ERR_BUFFER_SIZE, "[%u] ", error_code);
|
||||||
|
|
||||||
|
// Translate codes returned by SetupAPI. The ones we are dealing with are either
|
||||||
|
// in 0x0000xxxx or 0xE000xxxx and can be distinguished from standard error codes.
|
||||||
|
// See http://msdn.microsoft.com/en-us/library/windows/hardware/ff545011.aspx
|
||||||
|
switch (error_code & 0xE0000000) {
|
||||||
|
case 0:
|
||||||
|
error_code = HRESULT_FROM_WIN32(error_code); // Still leaves ERROR_SUCCESS unmodified
|
||||||
|
break;
|
||||||
|
case 0xE0000000:
|
||||||
|
error_code = 0x80000000 | (FACILITY_SETUPAPI << 16) | (error_code & 0x0000FFFF);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
size = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error_code,
|
size = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error_code,
|
||||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), &err_string[safe_strlen(err_string)],
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), &err_string[safe_strlen(err_string)],
|
||||||
ERR_BUFFER_SIZE - (DWORD)safe_strlen(err_string), NULL);
|
ERR_BUFFER_SIZE - (DWORD)safe_strlen(err_string), NULL);
|
||||||
|
@ -195,7 +210,7 @@ static char* sanitize_path(const char* path)
|
||||||
size = safe_strlen(path)+1;
|
size = safe_strlen(path)+1;
|
||||||
root_size = sizeof(root_prefix)-1;
|
root_size = sizeof(root_prefix)-1;
|
||||||
|
|
||||||
// Microsoft indiscriminatly uses '\\?\', '\\.\', '##?#" or "##.#" for root prefixes.
|
// Microsoft indiscriminately uses '\\?\', '\\.\', '##?#" or "##.#" for root prefixes.
|
||||||
if (!((size > 3) && (((path[0] == '\\') && (path[1] == '\\') && (path[3] == '\\')) ||
|
if (!((size > 3) && (((path[0] == '\\') && (path[1] == '\\') && (path[3] == '\\')) ||
|
||||||
((path[0] == '#') && (path[1] == '#') && (path[3] == '#'))))) {
|
((path[0] == '#') && (path[1] == '#') && (path[3] == '#'))))) {
|
||||||
add_root = root_size;
|
add_root = root_size;
|
||||||
|
@ -207,7 +222,7 @@ static char* sanitize_path(const char* path)
|
||||||
|
|
||||||
safe_strcpy(&ret_path[add_root], size-add_root, path);
|
safe_strcpy(&ret_path[add_root], size-add_root, path);
|
||||||
|
|
||||||
// Ensure consistancy with root prefix
|
// Ensure consistency with root prefix
|
||||||
for (j=0; j<root_size; j++)
|
for (j=0; j<root_size; j++)
|
||||||
ret_path[j] = root_prefix[j];
|
ret_path[j] = root_prefix[j];
|
||||||
|
|
||||||
|
@ -790,17 +805,128 @@ static void auto_release(struct usbi_transfer *itransfer)
|
||||||
usbi_mutex_unlock(&autoclaim_lock);
|
usbi_mutex_unlock(&autoclaim_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Windows version dtection */
|
||||||
|
static BOOL is_x64(void)
|
||||||
|
{
|
||||||
|
BOOL ret = FALSE;
|
||||||
|
// Detect if we're running a 32 or 64 bit system
|
||||||
|
if (sizeof(uintptr_t) < 8) {
|
||||||
|
DLL_LOAD_PREFIXED(Kernel32.dll, p, IsWow64Process, FALSE);
|
||||||
|
if (pIsWow64Process != NULL) {
|
||||||
|
(*pIsWow64Process)(GetCurrentProcess(), &ret);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ret = TRUE;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void get_windows_version(void)
|
||||||
|
{
|
||||||
|
OSVERSIONINFOEXA vi, vi2;
|
||||||
|
const char* w = 0;
|
||||||
|
const char* w64 = "32 bit";
|
||||||
|
char* vptr;
|
||||||
|
size_t vlen;
|
||||||
|
unsigned major, minor;
|
||||||
|
ULONGLONG major_equal, minor_equal;
|
||||||
|
BOOL ws;
|
||||||
|
|
||||||
|
memset(&vi, 0, sizeof(vi));
|
||||||
|
vi.dwOSVersionInfoSize = sizeof(vi);
|
||||||
|
if (!GetVersionExA((OSVERSIONINFOA *)&vi)) {
|
||||||
|
memset(&vi, 0, sizeof(vi));
|
||||||
|
vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA);
|
||||||
|
if (!GetVersionExA((OSVERSIONINFOA *)&vi))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
|
||||||
|
|
||||||
|
if (vi.dwMajorVersion > 6 || (vi.dwMajorVersion == 6 && vi.dwMinorVersion >= 2)) {
|
||||||
|
// Starting with Windows 8.1 Preview, GetVersionEx() does no longer report the actual OS version
|
||||||
|
// See: http://msdn.microsoft.com/en-us/library/windows/desktop/dn302074.aspx
|
||||||
|
|
||||||
|
major_equal = VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL);
|
||||||
|
for (major = vi.dwMajorVersion; major <= 9; major++) {
|
||||||
|
memset(&vi2, 0, sizeof(vi2));
|
||||||
|
vi2.dwOSVersionInfoSize = sizeof(vi2); vi2.dwMajorVersion = major;
|
||||||
|
if (!VerifyVersionInfoA(&vi2, VER_MAJORVERSION, major_equal))
|
||||||
|
continue;
|
||||||
|
if (vi.dwMajorVersion < major) {
|
||||||
|
vi.dwMajorVersion = major; vi.dwMinorVersion = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
minor_equal = VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL);
|
||||||
|
for (minor = vi.dwMinorVersion; minor <= 9; minor++) {
|
||||||
|
memset(&vi2, 0, sizeof(vi2)); vi2.dwOSVersionInfoSize = sizeof(vi2);
|
||||||
|
vi2.dwMinorVersion = minor;
|
||||||
|
if (!VerifyVersionInfoA(&vi2, VER_MINORVERSION, minor_equal))
|
||||||
|
continue;
|
||||||
|
vi.dwMinorVersion = minor;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vi.dwMajorVersion <= 0xf && vi.dwMinorVersion <= 0xf) {
|
||||||
|
ws = (vi.wProductType <= VER_NT_WORKSTATION);
|
||||||
|
windows_version = vi.dwMajorVersion << 4 | vi.dwMinorVersion;
|
||||||
|
switch (windows_version) {
|
||||||
|
case 0x50: w = "2000";
|
||||||
|
break;
|
||||||
|
case 0x51: w = "XP";
|
||||||
|
break;
|
||||||
|
case 0x52: w = ("2003");
|
||||||
|
break;
|
||||||
|
case 0x60: w = (ws?"Vista":"2008");
|
||||||
|
break;
|
||||||
|
case 0x61: w = (ws?"7":"2008_R2");
|
||||||
|
break;
|
||||||
|
case 0x62: w = (ws?"8":"2012");
|
||||||
|
break;
|
||||||
|
case 0x63: w = (ws?"8.1":"2012_R2");
|
||||||
|
break;
|
||||||
|
case 0x64: w = (ws?"8.2":"2012_R3");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (windows_version < 0x50)
|
||||||
|
windows_version = WINDOWS_UNSUPPORTED;
|
||||||
|
else
|
||||||
|
w = "9 or later";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_x64())
|
||||||
|
w64 = "64-bit";
|
||||||
|
|
||||||
|
vptr = &windows_version_str[sizeof("Windows ") - 1];
|
||||||
|
vlen = sizeof(windows_version_str) - sizeof("Windows ") - 1;
|
||||||
|
if (!w)
|
||||||
|
safe_sprintf(vptr, vlen, "%s %u.%u %s", (vi.dwPlatformId==VER_PLATFORM_WIN32_NT?"NT":"??"),
|
||||||
|
(unsigned)vi.dwMajorVersion, (unsigned)vi.dwMinorVersion, w64);
|
||||||
|
else if (vi.wServicePackMinor)
|
||||||
|
safe_sprintf(vptr, vlen, "%s SP%u.%u %s", w, vi.wServicePackMajor, vi.wServicePackMinor, w64);
|
||||||
|
else if (vi.wServicePackMajor)
|
||||||
|
safe_sprintf(vptr, vlen, "%s SP%u %s", w, vi.wServicePackMajor, w64);
|
||||||
|
else
|
||||||
|
safe_sprintf(vptr, vlen, "%s %s", w, w64);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* init: libusbx backend init function
|
* init: libusb backend init function
|
||||||
*
|
*
|
||||||
* This function enumerates the HCDs (Host Controller Drivers) and populates our private HCD list
|
* This function enumerates the HCDs (Host Controller Drivers) and populates our private HCD list
|
||||||
* In our implementation, we equate Windows' "HCD" to libusbx's "bus". Note that bus is zero indexed.
|
* In our implementation, we equate Windows' "HCD" to libusb's "bus". Note that bus is zero indexed.
|
||||||
* HCDs are not expected to change after init (might not hold true for hot pluggable USB PCI card?)
|
* HCDs are not expected to change after init (might not hold true for hot pluggable USB PCI card?)
|
||||||
*/
|
*/
|
||||||
static int windows_init(struct libusb_context *ctx)
|
static int windows_init(struct libusb_context *ctx)
|
||||||
{
|
{
|
||||||
int i, r = LIBUSB_ERROR_OTHER;
|
int i, r = LIBUSB_ERROR_OTHER;
|
||||||
OSVERSIONINFO os_version;
|
|
||||||
HANDLE semaphore;
|
HANDLE semaphore;
|
||||||
char sem_name[11+1+8]; // strlen(libusb_init)+'\0'+(32-bit hex PID)
|
char sem_name[11+1+8]; // strlen(libusb_init)+'\0'+(32-bit hex PID)
|
||||||
|
|
||||||
|
@ -822,19 +948,8 @@ static int windows_init(struct libusb_context *ctx)
|
||||||
// NB: concurrent usage supposes that init calls are equally balanced with
|
// NB: concurrent usage supposes that init calls are equally balanced with
|
||||||
// exit calls. If init is called more than exit, we will not exit properly
|
// exit calls. If init is called more than exit, we will not exit properly
|
||||||
if ( ++concurrent_usage == 0 ) { // First init?
|
if ( ++concurrent_usage == 0 ) { // First init?
|
||||||
// Detect OS version
|
get_windows_version();
|
||||||
memset(&os_version, 0, sizeof(OSVERSIONINFO));
|
usbi_dbg(windows_version_str);
|
||||||
os_version.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
|
||||||
windows_version = WINDOWS_UNSUPPORTED;
|
|
||||||
if ((GetVersionEx(&os_version) != 0) && (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT)) {
|
|
||||||
if ((os_version.dwMajorVersion == 5) && (os_version.dwMinorVersion == 1)) {
|
|
||||||
windows_version = WINDOWS_XP;
|
|
||||||
} else if ((os_version.dwMajorVersion == 5) && (os_version.dwMinorVersion == 2)) {
|
|
||||||
windows_version = WINDOWS_2003; // also includes XP 64
|
|
||||||
} else if (os_version.dwMajorVersion >= 6) {
|
|
||||||
windows_version = WINDOWS_VISTA_AND_LATER;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (windows_version == WINDOWS_UNSUPPORTED) {
|
if (windows_version == WINDOWS_UNSUPPORTED) {
|
||||||
usbi_err(ctx, "This version of Windows is NOT supported");
|
usbi_err(ctx, "This version of Windows is NOT supported");
|
||||||
r = LIBUSB_ERROR_NOT_SUPPORTED;
|
r = LIBUSB_ERROR_NOT_SUPPORTED;
|
||||||
|
@ -886,6 +1001,12 @@ static int windows_init(struct libusb_context *ctx)
|
||||||
}
|
}
|
||||||
SetThreadAffinityMask(timer_thread, 0);
|
SetThreadAffinityMask(timer_thread, 0);
|
||||||
|
|
||||||
|
// Wait for timer thread to init before continuing.
|
||||||
|
if (WaitForSingleObject(timer_response, INFINITE) != WAIT_OBJECT_0) {
|
||||||
|
usbi_err(ctx, "Failed to wait for timer thread to become ready - aborting");
|
||||||
|
goto init_exit;
|
||||||
|
}
|
||||||
|
|
||||||
// Create a hash table to store session ids. Second parameter is better if prime
|
// Create a hash table to store session ids. Second parameter is better if prime
|
||||||
htab_create(ctx, HTAB_SIZE);
|
htab_create(ctx, HTAB_SIZE);
|
||||||
}
|
}
|
||||||
|
@ -1008,6 +1129,7 @@ static int cache_config_descriptors(struct libusb_device *dev, HANDLE hub_handle
|
||||||
|
|
||||||
// Dummy call to get the required data size. Initial failures are reported as info rather
|
// Dummy call to get the required data size. Initial failures are reported as info rather
|
||||||
// than error as they can occur for non-penalizing situations, such as with some hubs.
|
// than error as they can occur for non-penalizing situations, such as with some hubs.
|
||||||
|
// coverity[tainted_data_argument]
|
||||||
if (!DeviceIoControl(hub_handle, IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, &cd_buf_short, size,
|
if (!DeviceIoControl(hub_handle, IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, &cd_buf_short, size,
|
||||||
&cd_buf_short, size, &ret_size, NULL)) {
|
&cd_buf_short, size, &ret_size, NULL)) {
|
||||||
usbi_info(ctx, "could not access configuration descriptor (dummy) for '%s': %s", device_id, windows_error_str(0));
|
usbi_info(ctx, "could not access configuration descriptor (dummy) for '%s': %s", device_id, windows_error_str(0));
|
||||||
|
@ -1058,14 +1180,14 @@ static int cache_config_descriptors(struct libusb_device *dev, HANDLE hub_handle
|
||||||
// Cache the descriptor
|
// Cache the descriptor
|
||||||
priv->config_descriptor[i] = (unsigned char*) malloc(cd_data->wTotalLength);
|
priv->config_descriptor[i] = (unsigned char*) malloc(cd_data->wTotalLength);
|
||||||
if (priv->config_descriptor[i] == NULL)
|
if (priv->config_descriptor[i] == NULL)
|
||||||
return LIBUSB_ERROR_NO_MEM;
|
LOOP_BREAK(LIBUSB_ERROR_NO_MEM);
|
||||||
memcpy(priv->config_descriptor[i], cd_data, cd_data->wTotalLength);
|
memcpy(priv->config_descriptor[i], cd_data, cd_data->wTotalLength);
|
||||||
}
|
}
|
||||||
return LIBUSB_SUCCESS;
|
return LIBUSB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Populate a libusbx device structure
|
* Populate a libusb device structure
|
||||||
*/
|
*/
|
||||||
static int init_device(struct libusb_device* dev, struct libusb_device* parent_dev,
|
static int init_device(struct libusb_device* dev, struct libusb_device* parent_dev,
|
||||||
uint8_t port_number, char* device_id, DWORD devinst)
|
uint8_t port_number, char* device_id, DWORD devinst)
|
||||||
|
@ -1073,14 +1195,16 @@ static int init_device(struct libusb_device* dev, struct libusb_device* parent_d
|
||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
DWORD size;
|
DWORD size;
|
||||||
USB_NODE_CONNECTION_INFORMATION_EX conn_info;
|
USB_NODE_CONNECTION_INFORMATION_EX conn_info;
|
||||||
|
USB_NODE_CONNECTION_INFORMATION_EX_V2 conn_info_v2;
|
||||||
struct windows_device_priv *priv, *parent_priv;
|
struct windows_device_priv *priv, *parent_priv;
|
||||||
struct libusb_context *ctx = DEVICE_CTX(dev);
|
struct libusb_context *ctx;
|
||||||
struct libusb_device* tmp_dev;
|
struct libusb_device* tmp_dev;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
if ((dev == NULL) || (parent_dev == NULL)) {
|
if ((dev == NULL) || (parent_dev == NULL)) {
|
||||||
return LIBUSB_ERROR_NOT_FOUND;
|
return LIBUSB_ERROR_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
ctx = DEVICE_CTX(dev);
|
||||||
priv = _device_priv(dev);
|
priv = _device_priv(dev);
|
||||||
parent_priv = _device_priv(parent_dev);
|
parent_priv = _device_priv(parent_dev);
|
||||||
if (parent_priv->apib->id != USB_API_HUB) {
|
if (parent_priv->apib->id != USB_API_HUB) {
|
||||||
|
@ -1097,8 +1221,10 @@ static int init_device(struct libusb_device* dev, struct libusb_device* parent_d
|
||||||
if (tmp_dev->bus_number != 0) {
|
if (tmp_dev->bus_number != 0) {
|
||||||
usbi_dbg("got bus number from ancestor #%d", i);
|
usbi_dbg("got bus number from ancestor #%d", i);
|
||||||
parent_dev->bus_number = tmp_dev->bus_number;
|
parent_dev->bus_number = tmp_dev->bus_number;
|
||||||
|
libusb_unref_device(tmp_dev);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
libusb_unref_device(tmp_dev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (parent_dev->bus_number == 0) {
|
if (parent_dev->bus_number == 0) {
|
||||||
|
@ -1110,7 +1236,7 @@ static int init_device(struct libusb_device* dev, struct libusb_device* parent_d
|
||||||
dev->port_number = port_number;
|
dev->port_number = port_number;
|
||||||
priv->depth = parent_priv->depth + 1;
|
priv->depth = parent_priv->depth + 1;
|
||||||
priv->parent_dev = parent_dev;
|
priv->parent_dev = parent_dev;
|
||||||
dev->parent_dev = libusb_ref_device(parent_dev);
|
dev->parent_dev = parent_dev;
|
||||||
|
|
||||||
// If the device address is already set, we can stop here
|
// If the device address is already set, we can stop here
|
||||||
if (dev->device_address != 0) {
|
if (dev->device_address != 0) {
|
||||||
|
@ -1126,6 +1252,7 @@ static int init_device(struct libusb_device* dev, struct libusb_device* parent_d
|
||||||
}
|
}
|
||||||
size = sizeof(conn_info);
|
size = sizeof(conn_info);
|
||||||
conn_info.ConnectionIndex = (ULONG)port_number;
|
conn_info.ConnectionIndex = (ULONG)port_number;
|
||||||
|
// coverity[tainted_data_argument]
|
||||||
if (!DeviceIoControl(handle, IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX, &conn_info, size,
|
if (!DeviceIoControl(handle, IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX, &conn_info, size,
|
||||||
&conn_info, size, &size, NULL)) {
|
&conn_info, size, &size, NULL)) {
|
||||||
usbi_warn(ctx, "could not get node connection information for device '%s': %s",
|
usbi_warn(ctx, "could not get node connection information for device '%s': %s",
|
||||||
|
@ -1147,6 +1274,23 @@ static int init_device(struct libusb_device* dev, struct libusb_device* parent_d
|
||||||
dev->num_configurations = 0;
|
dev->num_configurations = 0;
|
||||||
priv->dev_descriptor.bNumConfigurations = 0;
|
priv->dev_descriptor.bNumConfigurations = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// In their great wisdom, Microsoft decided to BREAK the USB speed report between Windows 7 and Windows 8
|
||||||
|
if (windows_version >= WINDOWS_8) {
|
||||||
|
memset(&conn_info_v2, 0, sizeof(conn_info_v2));
|
||||||
|
size = sizeof(conn_info_v2);
|
||||||
|
conn_info_v2.ConnectionIndex = (ULONG)port_number;
|
||||||
|
conn_info_v2.Length = size;
|
||||||
|
conn_info_v2.SupportedUsbProtocols.Usb300 = 1;
|
||||||
|
if (!DeviceIoControl(handle, IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX_V2,
|
||||||
|
&conn_info_v2, size, &conn_info_v2, size, &size, NULL)) {
|
||||||
|
usbi_warn(ctx, "could not get node connection information (V2) for device '%s': %s",
|
||||||
|
device_id, windows_error_str(0));
|
||||||
|
} else if (conn_info_v2.Flags.DeviceIsOperatingAtSuperSpeedOrHigher) {
|
||||||
|
conn_info.Speed = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
safe_closehandle(handle);
|
safe_closehandle(handle);
|
||||||
|
|
||||||
if (conn_info.DeviceAddress > UINT8_MAX) {
|
if (conn_info.DeviceAddress > UINT8_MAX) {
|
||||||
|
@ -1224,7 +1368,7 @@ static void get_api_type(struct libusb_context *ctx, HDEVINFO *dev_info,
|
||||||
for (k=0; k<3; k++) {
|
for (k=0; k<3; k++) {
|
||||||
j = get_sub_api(lookup[k].list, i);
|
j = get_sub_api(lookup[k].list, i);
|
||||||
if (j >= 0) {
|
if (j >= 0) {
|
||||||
usbi_dbg("matched %s name against %s API",
|
usbi_dbg("matched %s name against %s",
|
||||||
lookup[k].designation, (i!=USB_API_WINUSBX)?usb_api_backend[i].designation:sub_api_name[j]);
|
lookup[k].designation, (i!=USB_API_WINUSBX)?usb_api_backend[i].designation:sub_api_name[j]);
|
||||||
*api = i;
|
*api = i;
|
||||||
*sub_api = j;
|
*sub_api = j;
|
||||||
|
@ -1317,7 +1461,7 @@ static int set_hid_interface(struct libusb_context* ctx, struct libusb_device* d
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* get_device_list: libusbx backend device enumeration function
|
* get_device_list: libusb backend device enumeration function
|
||||||
*/
|
*/
|
||||||
static int windows_get_device_list(struct libusb_context *ctx, struct discovered_devs **_discdevs)
|
static int windows_get_device_list(struct libusb_context *ctx, struct discovered_devs **_discdevs)
|
||||||
{
|
{
|
||||||
|
@ -1467,7 +1611,7 @@ static int windows_get_device_list(struct libusb_context *ctx, struct discovered
|
||||||
if (!pSetupDiGetDeviceRegistryPropertyA(dev_info, &dev_info_data, SPDRP_DRIVER,
|
if (!pSetupDiGetDeviceRegistryPropertyA(dev_info, &dev_info_data, SPDRP_DRIVER,
|
||||||
®_type, (BYTE*)strbuf, size, &size)) {
|
®_type, (BYTE*)strbuf, size, &size)) {
|
||||||
usbi_info(ctx, "The following device has no driver: '%s'", dev_id_path);
|
usbi_info(ctx, "The following device has no driver: '%s'", dev_id_path);
|
||||||
usbi_info(ctx, "libusbx will not be able to access it.");
|
usbi_info(ctx, "libusb will not be able to access it.");
|
||||||
}
|
}
|
||||||
// ...and to add the additional device interface GUIDs
|
// ...and to add the additional device interface GUIDs
|
||||||
key = pSetupDiOpenDevRegKey(dev_info, &dev_info_data, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);
|
key = pSetupDiOpenDevRegKey(dev_info, &dev_info_data, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);
|
||||||
|
@ -1531,6 +1675,7 @@ static int windows_get_device_list(struct libusb_context *ctx, struct discovered
|
||||||
parent_priv = _device_priv(parent_dev);
|
parent_priv = _device_priv(parent_dev);
|
||||||
// virtual USB devices are also listed during GEN - don't process these yet
|
// virtual USB devices are also listed during GEN - don't process these yet
|
||||||
if ( (pass == GEN_PASS) && (parent_priv->apib->id != USB_API_HUB) ) {
|
if ( (pass == GEN_PASS) && (parent_priv->apib->id != USB_API_HUB) ) {
|
||||||
|
libusb_unref_device(parent_dev);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1553,20 +1698,20 @@ static int windows_get_device_list(struct libusb_context *ctx, struct discovered
|
||||||
LOOP_BREAK(LIBUSB_ERROR_NO_MEM);
|
LOOP_BREAK(LIBUSB_ERROR_NO_MEM);
|
||||||
}
|
}
|
||||||
windows_device_priv_init(dev);
|
windows_device_priv_init(dev);
|
||||||
// Keep track of devices that need unref
|
|
||||||
unref_list[unref_cur++] = dev;
|
|
||||||
if (unref_cur >= unref_size) {
|
|
||||||
unref_size += 64;
|
|
||||||
unref_list = usbi_reallocf(unref_list, unref_size*sizeof(libusb_device*));
|
|
||||||
if (unref_list == NULL) {
|
|
||||||
usbi_err(ctx, "could not realloc list for unref - aborting.");
|
|
||||||
LOOP_BREAK(LIBUSB_ERROR_NO_MEM);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
usbi_dbg("found existing device for session [%X] (%d.%d)",
|
usbi_dbg("found existing device for session [%X] (%d.%d)",
|
||||||
session_id, dev->bus_number, dev->device_address);
|
session_id, dev->bus_number, dev->device_address);
|
||||||
}
|
}
|
||||||
|
// Keep track of devices that need unref
|
||||||
|
unref_list[unref_cur++] = dev;
|
||||||
|
if (unref_cur >= unref_size) {
|
||||||
|
unref_size += 64;
|
||||||
|
unref_list = usbi_reallocf(unref_list, unref_size*sizeof(libusb_device*));
|
||||||
|
if (unref_list == NULL) {
|
||||||
|
usbi_err(ctx, "could not realloc list for unref - aborting.");
|
||||||
|
LOOP_BREAK(LIBUSB_ERROR_NO_MEM);
|
||||||
|
}
|
||||||
|
}
|
||||||
priv = _device_priv(dev);
|
priv = _device_priv(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1652,6 +1797,7 @@ static int windows_get_device_list(struct libusb_context *ctx, struct discovered
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
libusb_unref_device(parent_dev);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1663,16 +1809,18 @@ static int windows_get_device_list(struct libusb_context *ctx, struct discovered
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unref newly allocated devs
|
// Unref newly allocated devs
|
||||||
for (i=0; i<unref_cur; i++) {
|
if (unref_list != NULL) {
|
||||||
safe_unref_device(unref_list[i]);
|
for (i=0; i<unref_cur; i++) {
|
||||||
|
safe_unref_device(unref_list[i]);
|
||||||
|
}
|
||||||
|
free(unref_list);
|
||||||
}
|
}
|
||||||
safe_free(unref_list);
|
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* exit: libusbx backend deinitialization function
|
* exit: libusb backend deinitialization function
|
||||||
*/
|
*/
|
||||||
static void windows_exit(void)
|
static void windows_exit(void)
|
||||||
{
|
{
|
||||||
|
@ -1759,7 +1907,7 @@ static int windows_get_config_descriptor(struct libusb_device *dev, uint8_t conf
|
||||||
memcpy(buffer, priv->config_descriptor[config_index], size);
|
memcpy(buffer, priv->config_descriptor[config_index], size);
|
||||||
*host_endian = 0;
|
*host_endian = 0;
|
||||||
|
|
||||||
return size;
|
return (int)size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1995,6 +2143,8 @@ static int windows_submit_transfer(struct usbi_transfer *itransfer)
|
||||||
return submit_bulk_transfer(itransfer);
|
return submit_bulk_transfer(itransfer);
|
||||||
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
||||||
return submit_iso_transfer(itransfer);
|
return submit_iso_transfer(itransfer);
|
||||||
|
case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
|
||||||
|
return LIBUSB_ERROR_NOT_SUPPORTED;
|
||||||
default:
|
default:
|
||||||
usbi_err(TRANSFER_CTX(transfer), "unknown endpoint type %d", transfer->type);
|
usbi_err(TRANSFER_CTX(transfer), "unknown endpoint type %d", transfer->type);
|
||||||
return LIBUSB_ERROR_INVALID_PARAM;
|
return LIBUSB_ERROR_INVALID_PARAM;
|
||||||
|
@ -2028,6 +2178,8 @@ static int windows_cancel_transfer(struct usbi_transfer *itransfer)
|
||||||
case LIBUSB_TRANSFER_TYPE_INTERRUPT:
|
case LIBUSB_TRANSFER_TYPE_INTERRUPT:
|
||||||
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
||||||
return windows_abort_transfers(itransfer);
|
return windows_abort_transfers(itransfer);
|
||||||
|
case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
|
||||||
|
return LIBUSB_ERROR_NOT_SUPPORTED;
|
||||||
default:
|
default:
|
||||||
usbi_err(ITRANSFER_CTX(itransfer), "unknown endpoint type %d", transfer->type);
|
usbi_err(ITRANSFER_CTX(itransfer), "unknown endpoint type %d", transfer->type);
|
||||||
return LIBUSB_ERROR_INVALID_PARAM;
|
return LIBUSB_ERROR_INVALID_PARAM;
|
||||||
|
@ -2068,7 +2220,7 @@ static void windows_transfer_callback(struct usbi_transfer *itransfer, uint32_t
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
usbi_err(ITRANSFER_CTX(itransfer), "detected I/O error %d: %s", io_result, windows_error_str(0));
|
usbi_err(ITRANSFER_CTX(itransfer), "detected I/O error %d: %s", io_result, windows_error_str(io_result));
|
||||||
status = LIBUSB_TRANSFER_ERROR;
|
status = LIBUSB_TRANSFER_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2087,6 +2239,9 @@ static void windows_handle_callback (struct usbi_transfer *itransfer, uint32_t i
|
||||||
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
|
||||||
windows_transfer_callback (itransfer, io_result, io_size);
|
windows_transfer_callback (itransfer, io_result, io_size);
|
||||||
break;
|
break;
|
||||||
|
case LIBUSB_TRANSFER_TYPE_BULK_STREAM:
|
||||||
|
usbi_warn(ITRANSFER_CTX(itransfer), "bulk stream transfers are not yet supported on this platform");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
usbi_err(ITRANSFER_CTX(itransfer), "unknown endpoint type %d", transfer->type);
|
usbi_err(ITRANSFER_CTX(itransfer), "unknown endpoint type %d", transfer->type);
|
||||||
}
|
}
|
||||||
|
@ -2172,6 +2327,11 @@ unsigned __stdcall windows_clock_gettime_threaded(void* param)
|
||||||
usbi_dbg("hires timer available (Frequency: %"PRIu64" Hz)", hires_frequency);
|
usbi_dbg("hires timer available (Frequency: %"PRIu64" Hz)", hires_frequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Signal windows_init() that we're ready to service requests
|
||||||
|
if (ReleaseSemaphore(timer_response, 1, NULL) == 0) {
|
||||||
|
usbi_dbg("unable to release timer semaphore: %s", windows_error_str(0));
|
||||||
|
}
|
||||||
|
|
||||||
// Main loop - wait for requests
|
// Main loop - wait for requests
|
||||||
while (1) {
|
while (1) {
|
||||||
timer_index = WaitForMultipleObjects(2, timer_request, FALSE, INFINITE) - WAIT_OBJECT_0;
|
timer_index = WaitForMultipleObjects(2, timer_request, FALSE, INFINITE) - WAIT_OBJECT_0;
|
||||||
|
@ -2193,7 +2353,7 @@ unsigned __stdcall windows_clock_gettime_threaded(void* param)
|
||||||
case 0:
|
case 0:
|
||||||
WaitForSingleObject(timer_mutex, INFINITE);
|
WaitForSingleObject(timer_mutex, INFINITE);
|
||||||
// Requests to this thread are for hires always
|
// Requests to this thread are for hires always
|
||||||
if (QueryPerformanceCounter(&hires_counter) != 0) {
|
if ((QueryPerformanceCounter(&hires_counter) != 0) && (hires_frequency != 0)) {
|
||||||
timer_tp.tv_sec = (long)(hires_counter.QuadPart / hires_frequency);
|
timer_tp.tv_sec = (long)(hires_counter.QuadPart / hires_frequency);
|
||||||
timer_tp.tv_nsec = (long)(((hires_counter.QuadPart % hires_frequency)/1000) * hires_ticks_to_ps);
|
timer_tp.tv_nsec = (long)(((hires_counter.QuadPart % hires_frequency)/1000) * hires_ticks_to_ps);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2206,7 +2366,7 @@ unsigned __stdcall windows_clock_gettime_threaded(void* param)
|
||||||
nb_responses = InterlockedExchange((LONG*)&request_count[0], 0);
|
nb_responses = InterlockedExchange((LONG*)&request_count[0], 0);
|
||||||
if ( (nb_responses)
|
if ( (nb_responses)
|
||||||
&& (ReleaseSemaphore(timer_response, nb_responses, NULL) == 0) ) {
|
&& (ReleaseSemaphore(timer_response, nb_responses, NULL) == 0) ) {
|
||||||
usbi_dbg("unable to release timer semaphore %d: %s", windows_error_str(0));
|
usbi_dbg("unable to release timer semaphore: %s", windows_error_str(0));
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
case 1: // time to quit
|
case 1: // time to quit
|
||||||
|
@ -2288,6 +2448,9 @@ const struct usbi_os_backend windows_backend = {
|
||||||
windows_clear_halt,
|
windows_clear_halt,
|
||||||
windows_reset_device,
|
windows_reset_device,
|
||||||
|
|
||||||
|
NULL, /* alloc_streams */
|
||||||
|
NULL, /* free_streams */
|
||||||
|
|
||||||
windows_kernel_driver_active,
|
windows_kernel_driver_active,
|
||||||
windows_detach_kernel_driver,
|
windows_detach_kernel_driver,
|
||||||
windows_attach_kernel_driver,
|
windows_attach_kernel_driver,
|
||||||
|
@ -2366,7 +2529,7 @@ static int common_configure_endpoints(int sub_api, struct libusb_device_handle *
|
||||||
return LIBUSB_SUCCESS;
|
return LIBUSB_SUCCESS;
|
||||||
}
|
}
|
||||||
// These names must be uppercase
|
// These names must be uppercase
|
||||||
const char* hub_driver_names[] = {"USBHUB", "USBHUB3", "NUSB3HUB", "RUSB3HUB", "FLXHCIH", "TIHUB3", "ETRONHUB3", "VIAHUB3", "ASMTHUB3", "IUSB3HUB"};
|
const char* hub_driver_names[] = {"USBHUB", "USBHUB3", "USB3HUB", "NUSB3HUB", "RUSB3HUB", "FLXHCIH", "TIHUB3", "ETRONHUB3", "VIAHUB3", "ASMTHUB3", "IUSB3HUB", "VUSB3HUB", "AMDHUB30"};
|
||||||
const char* composite_driver_names[] = {"USBCCGP"};
|
const char* composite_driver_names[] = {"USBCCGP"};
|
||||||
const char* winusbx_driver_names[] = WINUSBX_DRV_NAMES;
|
const char* winusbx_driver_names[] = WINUSBX_DRV_NAMES;
|
||||||
const char* hid_driver_names[] = {"HIDUSB", "MOUHID", "KBDHID"};
|
const char* hid_driver_names[] = {"HIDUSB", "MOUHID", "KBDHID"};
|
||||||
|
@ -2726,11 +2889,10 @@ static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev
|
||||||
usbi_err(ctx, "could not open device %s: %s", filter_path, windows_error_str(0));
|
usbi_err(ctx, "could not open device %s: %s", filter_path, windows_error_str(0));
|
||||||
} else {
|
} else {
|
||||||
WinUSBX[sub_api].Free(winusb_handle);
|
WinUSBX[sub_api].Free(winusb_handle);
|
||||||
if (!WinUSBX[sub_api].Initialize(file_handle, &winusb_handle)) {
|
if (WinUSBX[sub_api].Initialize(file_handle, &winusb_handle))
|
||||||
continue;
|
found_filter = true;
|
||||||
}
|
else
|
||||||
found_filter = true;
|
usbi_err(ctx, "could not initialize filter driver for %s", filter_path);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4146,19 +4308,21 @@ static int hid_copy_transfer_data(int sub_api, struct usbi_transfer *itransfer,
|
||||||
if (transfer_priv->hid_buffer != NULL) {
|
if (transfer_priv->hid_buffer != NULL) {
|
||||||
// If we have a valid hid_buffer, it means the transfer was async
|
// If we have a valid hid_buffer, it means the transfer was async
|
||||||
if (transfer_priv->hid_dest != NULL) { // Data readout
|
if (transfer_priv->hid_dest != NULL) { // Data readout
|
||||||
// First, check for overflow
|
if (corrected_size > 0) {
|
||||||
if (corrected_size > transfer_priv->hid_expected_size) {
|
// First, check for overflow
|
||||||
usbi_err(ctx, "OVERFLOW!");
|
if (corrected_size > transfer_priv->hid_expected_size) {
|
||||||
corrected_size = (uint32_t)transfer_priv->hid_expected_size;
|
usbi_err(ctx, "OVERFLOW!");
|
||||||
r = LIBUSB_TRANSFER_OVERFLOW;
|
corrected_size = (uint32_t)transfer_priv->hid_expected_size;
|
||||||
}
|
r = LIBUSB_TRANSFER_OVERFLOW;
|
||||||
|
}
|
||||||
|
|
||||||
if (transfer_priv->hid_buffer[0] == 0) {
|
if (transfer_priv->hid_buffer[0] == 0) {
|
||||||
// Discard the 1 byte report ID prefix
|
// Discard the 1 byte report ID prefix
|
||||||
corrected_size--;
|
corrected_size--;
|
||||||
memcpy(transfer_priv->hid_dest, transfer_priv->hid_buffer+1, corrected_size);
|
memcpy(transfer_priv->hid_dest, transfer_priv->hid_buffer+1, corrected_size);
|
||||||
} else {
|
} else {
|
||||||
memcpy(transfer_priv->hid_dest, transfer_priv->hid_buffer, corrected_size);
|
memcpy(transfer_priv->hid_dest, transfer_priv->hid_buffer, corrected_size);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
transfer_priv->hid_dest = NULL;
|
transfer_priv->hid_dest = NULL;
|
||||||
}
|
}
|
||||||
|
@ -4286,7 +4450,7 @@ static int composite_submit_control_transfer(int sub_api, struct usbi_transfer *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
usbi_err(ctx, "no libusbx supported interfaces to complete request");
|
usbi_err(ctx, "no libusb supported interfaces to complete request");
|
||||||
return LIBUSB_ERROR_NOT_FOUND;
|
return LIBUSB_ERROR_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Windows backend for libusbx 1.0
|
* Windows backend for libusb 1.0
|
||||||
* Copyright © 2009-2012 Pete Batard <pete@akeo.ie>
|
* Copyright © 2009-2012 Pete Batard <pete@akeo.ie>
|
||||||
* With contributions from Michael Plante, Orin Eman et al.
|
* With contributions from Michael Plante, Orin Eman et al.
|
||||||
* Parts of this code adapted from libusb-win32-v1 by Stephan Meyer
|
* Parts of this code adapted from libusb-win32-v1 by Stephan Meyer
|
||||||
|
@ -40,6 +40,11 @@
|
||||||
#define SPDRP_INSTALL_STATE 34
|
#define SPDRP_INSTALL_STATE 34
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Missing from MinGW
|
||||||
|
#if !defined(FACILITY_SETUPAPI)
|
||||||
|
#define FACILITY_SETUPAPI 15
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__CYGWIN__ )
|
#if defined(__CYGWIN__ )
|
||||||
#define _stricmp stricmp
|
#define _stricmp stricmp
|
||||||
// cygwin produces a warning unless these prototypes are defined
|
// cygwin produces a warning unless these prototypes are defined
|
||||||
|
@ -305,6 +310,9 @@ struct driver_lookup {
|
||||||
/* OLE32 dependency */
|
/* OLE32 dependency */
|
||||||
DLL_DECLARE_PREFIXED(WINAPI, HRESULT, p, CLSIDFromString, (LPCOLESTR, LPCLSID));
|
DLL_DECLARE_PREFIXED(WINAPI, HRESULT, p, CLSIDFromString, (LPCOLESTR, LPCLSID));
|
||||||
|
|
||||||
|
/* This call is only available from XP SP2 */
|
||||||
|
DLL_DECLARE_PREFIXED(WINAPI, BOOL, p, IsWow64Process, (HANDLE, PBOOL));
|
||||||
|
|
||||||
/* SetupAPI dependencies */
|
/* SetupAPI dependencies */
|
||||||
DLL_DECLARE_PREFIXED(WINAPI, HDEVINFO, p, SetupDiGetClassDevsA, (const GUID*, PCSTR, HWND, DWORD));
|
DLL_DECLARE_PREFIXED(WINAPI, HDEVINFO, p, SetupDiGetClassDevsA, (const GUID*, PCSTR, HWND, DWORD));
|
||||||
DLL_DECLARE_PREFIXED(WINAPI, BOOL, p, SetupDiEnumDeviceInfo, (HDEVINFO, DWORD, PSP_DEVINFO_DATA));
|
DLL_DECLARE_PREFIXED(WINAPI, BOOL, p, SetupDiEnumDeviceInfo, (HDEVINFO, DWORD, PSP_DEVINFO_DATA));
|
||||||
|
@ -359,6 +367,9 @@ typedef RETURN_TYPE CONFIGRET;
|
||||||
#if !defined(USB_GET_HUB_CAPABILITIES_EX)
|
#if !defined(USB_GET_HUB_CAPABILITIES_EX)
|
||||||
#define USB_GET_HUB_CAPABILITIES_EX 276
|
#define USB_GET_HUB_CAPABILITIES_EX 276
|
||||||
#endif
|
#endif
|
||||||
|
#if !defined(USB_GET_NODE_CONNECTION_INFORMATION_EX_V2)
|
||||||
|
#define USB_GET_NODE_CONNECTION_INFORMATION_EX_V2 279
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef METHOD_BUFFERED
|
#ifndef METHOD_BUFFERED
|
||||||
#define METHOD_BUFFERED 0
|
#define METHOD_BUFFERED 0
|
||||||
|
@ -419,6 +430,9 @@ DLL_DECLARE(WINAPI, CONFIGRET, CM_Get_Device_IDA, (DEVINST, PCHAR, ULONG, ULONG)
|
||||||
#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX \
|
#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX \
|
||||||
CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||||
|
|
||||||
|
#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX_V2 \
|
||||||
|
CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX_V2, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||||
|
|
||||||
#define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \
|
#define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \
|
||||||
CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||||
|
|
||||||
|
@ -559,6 +573,32 @@ typedef struct USB_NODE_CONNECTION_INFORMATION_EX {
|
||||||
// USB_PIPE_INFO PipeList[0];
|
// USB_PIPE_INFO PipeList[0];
|
||||||
} USB_NODE_CONNECTION_INFORMATION_EX, *PUSB_NODE_CONNECTION_INFORMATION_EX;
|
} USB_NODE_CONNECTION_INFORMATION_EX, *PUSB_NODE_CONNECTION_INFORMATION_EX;
|
||||||
|
|
||||||
|
typedef union _USB_PROTOCOLS {
|
||||||
|
ULONG ul;
|
||||||
|
struct {
|
||||||
|
ULONG Usb110:1;
|
||||||
|
ULONG Usb200:1;
|
||||||
|
ULONG Usb300:1;
|
||||||
|
ULONG ReservedMBZ:29;
|
||||||
|
};
|
||||||
|
} USB_PROTOCOLS, *PUSB_PROTOCOLS;
|
||||||
|
|
||||||
|
typedef union _USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS {
|
||||||
|
ULONG ul;
|
||||||
|
struct {
|
||||||
|
ULONG DeviceIsOperatingAtSuperSpeedOrHigher:1;
|
||||||
|
ULONG DeviceIsSuperSpeedCapableOrHigher:1;
|
||||||
|
ULONG ReservedMBZ:30;
|
||||||
|
};
|
||||||
|
} USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS, *PUSB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS;
|
||||||
|
|
||||||
|
typedef struct _USB_NODE_CONNECTION_INFORMATION_EX_V2 {
|
||||||
|
ULONG ConnectionIndex;
|
||||||
|
ULONG Length;
|
||||||
|
USB_PROTOCOLS SupportedUsbProtocols;
|
||||||
|
USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS Flags;
|
||||||
|
} USB_NODE_CONNECTION_INFORMATION_EX_V2, *PUSB_NODE_CONNECTION_INFORMATION_EX_V2;
|
||||||
|
|
||||||
typedef struct USB_HUB_CAP_FLAGS {
|
typedef struct USB_HUB_CAP_FLAGS {
|
||||||
ULONG HubIsHighSpeedCapable:1;
|
ULONG HubIsHighSpeedCapable:1;
|
||||||
ULONG HubIsHighSpeed:1;
|
ULONG HubIsHighSpeed:1;
|
|
@ -35,7 +35,7 @@ static size_t usbi_locale = 0;
|
||||||
* How to add a new \ref libusb_strerror() translation:
|
* How to add a new \ref libusb_strerror() translation:
|
||||||
* <ol>
|
* <ol>
|
||||||
* <li> Download the latest \c strerror.c from:<br>
|
* <li> Download the latest \c strerror.c from:<br>
|
||||||
* https://raw.github.com/libusbx/libusbx/master/libusb/sterror.c </li>
|
* https://raw.github.com/libusb/libusb/master/libusb/sterror.c </li>
|
||||||
* <li> Open the file in an UTF-8 capable editor </li>
|
* <li> Open the file in an UTF-8 capable editor </li>
|
||||||
* <li> Add the 2 letter <a href="http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes">ISO 639-1</a>
|
* <li> Add the 2 letter <a href="http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes">ISO 639-1</a>
|
||||||
* code for your locale at the end of \c usbi_locale_supported[]<br>
|
* code for your locale at the end of \c usbi_locale_supported[]<br>
|
||||||
|
@ -53,11 +53,11 @@ static size_t usbi_locale = 0;
|
||||||
* }
|
* }
|
||||||
* };\endcode </li>
|
* };\endcode </li>
|
||||||
* <li> Translate each of the English messages from the section you copied into your language </li>
|
* <li> Translate each of the English messages from the section you copied into your language </li>
|
||||||
* <li> Save the file (in UTF-8 format) and send it to \c libusbx-devel@lists.sourceforge.net </li>
|
* <li> Save the file (in UTF-8 format) and send it to \c libusb-devel\@lists.sourceforge.net </li>
|
||||||
* </ol>
|
* </ol>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char* usbi_locale_supported[] = { "en", "nl", "fr" };
|
static const char* usbi_locale_supported[] = { "en", "nl", "fr", "ru" };
|
||||||
static const char* usbi_localized_errors[ARRAYSIZE(usbi_locale_supported)][LIBUSB_ERROR_COUNT] = {
|
static const char* usbi_localized_errors[ARRAYSIZE(usbi_locale_supported)][LIBUSB_ERROR_COUNT] = {
|
||||||
{ /* English (en) */
|
{ /* English (en) */
|
||||||
"Success",
|
"Success",
|
||||||
|
@ -103,7 +103,22 @@ static const char* usbi_localized_errors[ARRAYSIZE(usbi_locale_supported)][LIBUS
|
||||||
"Appel système abandonné (peut-être à cause d’un signal)",
|
"Appel système abandonné (peut-être à cause d’un signal)",
|
||||||
"Mémoire insuffisante",
|
"Mémoire insuffisante",
|
||||||
"Opération non supportée or non implémentée sur cette plateforme",
|
"Opération non supportée or non implémentée sur cette plateforme",
|
||||||
"Autre erreur"
|
"Autre erreur",
|
||||||
|
}, { /* Russian (ru) */
|
||||||
|
"Успех",
|
||||||
|
"Ошибка ввода/вывода",
|
||||||
|
"Неверный параметр",
|
||||||
|
"Доступ запрещён (не хватает прав)",
|
||||||
|
"Устройство отсутствует (возможно, оно было отсоединено)",
|
||||||
|
"Элемент не найден",
|
||||||
|
"Ресурс занят",
|
||||||
|
"Истекло время ожидания операции",
|
||||||
|
"Переполнение",
|
||||||
|
"Ошибка канала",
|
||||||
|
"Системный вызов прерван (возможно, сигналом)",
|
||||||
|
"Память исчерпана",
|
||||||
|
"Операция не поддерживается данной платформой",
|
||||||
|
"Неизвестная ошибка"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Synchronous I/O functions for libusbx
|
* Synchronous I/O functions for libusb
|
||||||
* Copyright © 2007-2008 Daniel Drake <dsd@gentoo.org>
|
* Copyright © 2007-2008 Daniel Drake <dsd@gentoo.org>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
/**
|
/**
|
||||||
* @defgroup syncio Synchronous device I/O
|
* @defgroup syncio Synchronous device I/O
|
||||||
*
|
*
|
||||||
* This page documents libusbx's synchronous (blocking) API for USB device I/O.
|
* This page documents libusb's synchronous (blocking) API for USB device I/O.
|
||||||
* This interface is easy to use but has some limitations. More advanced users
|
* This interface is easy to use but has some limitations. More advanced users
|
||||||
* may wish to consider using the \ref asyncio "asynchronous I/O API" instead.
|
* may wish to consider using the \ref asyncio "asynchronous I/O API" instead.
|
||||||
*/
|
*/
|
||||||
|
@ -222,9 +222,9 @@ static int do_sync_bulk_transfer(struct libusb_device_handle *dev_handle,
|
||||||
* Not all of the data may have been written.
|
* Not all of the data may have been written.
|
||||||
*
|
*
|
||||||
* Also check <tt>transferred</tt> when dealing with a timeout error code.
|
* Also check <tt>transferred</tt> when dealing with a timeout error code.
|
||||||
* libusbx may have to split your transfer into a number of chunks to satisfy
|
* libusb may have to split your transfer into a number of chunks to satisfy
|
||||||
* underlying O/S requirements, meaning that the timeout may expire after
|
* underlying O/S requirements, meaning that the timeout may expire after
|
||||||
* the first few chunks have completed. libusbx is careful not to lose any data
|
* the first few chunks have completed. libusb is careful not to lose any data
|
||||||
* that may have been transferred; do not assume that timeout conditions
|
* that may have been transferred; do not assume that timeout conditions
|
||||||
* indicate a complete lack of I/O.
|
* indicate a complete lack of I/O.
|
||||||
*
|
*
|
||||||
|
@ -270,9 +270,9 @@ int API_EXPORTED libusb_bulk_transfer(struct libusb_device_handle *dev_handle,
|
||||||
* writes. Not all of the data may have been written.
|
* writes. Not all of the data may have been written.
|
||||||
*
|
*
|
||||||
* Also check <tt>transferred</tt> when dealing with a timeout error code.
|
* Also check <tt>transferred</tt> when dealing with a timeout error code.
|
||||||
* libusbx may have to split your transfer into a number of chunks to satisfy
|
* libusb may have to split your transfer into a number of chunks to satisfy
|
||||||
* underlying O/S requirements, meaning that the timeout may expire after
|
* underlying O/S requirements, meaning that the timeout may expire after
|
||||||
* the first few chunks have completed. libusbx is careful not to lose any data
|
* the first few chunks have completed. libusb is careful not to lose any data
|
||||||
* that may have been transferred; do not assume that timeout conditions
|
* that may have been transferred; do not assume that timeout conditions
|
||||||
* indicate a complete lack of I/O.
|
* indicate a complete lack of I/O.
|
||||||
*
|
*
|
|
@ -7,7 +7,7 @@
|
||||||
#define LIBUSB_MINOR 0
|
#define LIBUSB_MINOR 0
|
||||||
#endif
|
#endif
|
||||||
#ifndef LIBUSB_MICRO
|
#ifndef LIBUSB_MICRO
|
||||||
#define LIBUSB_MICRO 16
|
#define LIBUSB_MICRO 19
|
||||||
#endif
|
#endif
|
||||||
#ifndef LIBUSB_NANO
|
#ifndef LIBUSB_NANO
|
||||||
#define LIBUSB_NANO 0
|
#define LIBUSB_NANO 0
|
|
@ -0,0 +1 @@
|
||||||
|
#define LIBUSB_NANO 10903
|
|
@ -25,6 +25,9 @@
|
||||||
/* Uncomment to start with debug message logging enabled */
|
/* Uncomment to start with debug message logging enabled */
|
||||||
// #define ENABLE_DEBUG_LOGGING 1
|
// #define ENABLE_DEBUG_LOGGING 1
|
||||||
|
|
||||||
|
/* Uncomment to enabling logging to system log */
|
||||||
|
// #define USE_SYSTEM_LOGGING_FACILITY
|
||||||
|
|
||||||
/* type of second poll() argument */
|
/* type of second poll() argument */
|
||||||
#define POLL_NFDS_TYPE unsigned int
|
#define POLL_NFDS_TYPE unsigned int
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
/*
|
||||||
|
* errno.h
|
||||||
|
* This file has no copyright assigned and is placed in the Public Domain.
|
||||||
|
* This file is a part of the mingw-runtime package.
|
||||||
|
* No warranty is given; refer to the file DISCLAIMER within the package.
|
||||||
|
*
|
||||||
|
* Error numbers and access to error reporting.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _ERRNO_H_
|
||||||
|
#define _ERRNO_H_
|
||||||
|
|
||||||
|
#include <crtdefs.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Error numbers.
|
||||||
|
* TODO: Can't be sure of some of these assignments, I guessed from the
|
||||||
|
* names given by strerror and the defines in the Cygnus errno.h. A lot
|
||||||
|
* of the names from the Cygnus errno.h are not represented, and a few
|
||||||
|
* of the descriptions returned by strerror do not obviously match
|
||||||
|
* their error naming.
|
||||||
|
*/
|
||||||
|
#define EPERM 1 /* Operation not permitted */
|
||||||
|
#define ENOFILE 2 /* No such file or directory */
|
||||||
|
#define ENOENT 2
|
||||||
|
#define ESRCH 3 /* No such process */
|
||||||
|
#define EINTR 4 /* Interrupted function call */
|
||||||
|
#define EIO 5 /* Input/output error */
|
||||||
|
#define ENXIO 6 /* No such device or address */
|
||||||
|
#define E2BIG 7 /* Arg list too long */
|
||||||
|
#define ENOEXEC 8 /* Exec format error */
|
||||||
|
#define EBADF 9 /* Bad file descriptor */
|
||||||
|
#define ECHILD 10 /* No child processes */
|
||||||
|
#define EAGAIN 11 /* Resource temporarily unavailable */
|
||||||
|
#define ENOMEM 12 /* Not enough space */
|
||||||
|
#define EACCES 13 /* Permission denied */
|
||||||
|
#define EFAULT 14 /* Bad address */
|
||||||
|
/* 15 - Unknown Error */
|
||||||
|
#define EBUSY 16 /* strerror reports "Resource device" */
|
||||||
|
#define EEXIST 17 /* File exists */
|
||||||
|
#define EXDEV 18 /* Improper link (cross-device link?) */
|
||||||
|
#define ENODEV 19 /* No such device */
|
||||||
|
#define ENOTDIR 20 /* Not a directory */
|
||||||
|
#define EISDIR 21 /* Is a directory */
|
||||||
|
#define EINVAL 22 /* Invalid argument */
|
||||||
|
#define ENFILE 23 /* Too many open files in system */
|
||||||
|
#define EMFILE 24 /* Too many open files */
|
||||||
|
#define ENOTTY 25 /* Inappropriate I/O control operation */
|
||||||
|
/* 26 - Unknown Error */
|
||||||
|
#define EFBIG 27 /* File too large */
|
||||||
|
#define ENOSPC 28 /* No space left on device */
|
||||||
|
#define ESPIPE 29 /* Invalid seek (seek on a pipe?) */
|
||||||
|
#define EROFS 30 /* Read-only file system */
|
||||||
|
#define EMLINK 31 /* Too many links */
|
||||||
|
#define EPIPE 32 /* Broken pipe */
|
||||||
|
#define EDOM 33 /* Domain error (math functions) */
|
||||||
|
#define ERANGE 34 /* Result too large (possibly too small) */
|
||||||
|
/* 35 - Unknown Error */
|
||||||
|
#define EDEADLOCK 36 /* Resource deadlock avoided (non-Cyg) */
|
||||||
|
#define EDEADLK 36
|
||||||
|
#if 0
|
||||||
|
/* 37 - Unknown Error */
|
||||||
|
#define ENAMETOOLONG 38 /* Filename too long (91 in Cyg?) */
|
||||||
|
#define ENOLCK 39 /* No locks available (46 in Cyg?) */
|
||||||
|
#define ENOSYS 40 /* Function not implemented (88 in Cyg?) */
|
||||||
|
#define ENOTEMPTY 41 /* Directory not empty (90 in Cyg?) */
|
||||||
|
#define EILSEQ 42 /* Illegal byte sequence */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE: ENAMETOOLONG and ENOTEMPTY conflict with definitions in the
|
||||||
|
* sockets.h header provided with windows32api-0.1.2.
|
||||||
|
* You should go and put an #if 0 ... #endif around the whole block
|
||||||
|
* of errors (look at the comment above them).
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef RC_INVOKED
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Definitions of errno. For _doserrno, sys_nerr and * sys_errlist, see
|
||||||
|
* stdlib.h.
|
||||||
|
*/
|
||||||
|
#if defined(_UWIN) || defined(_WIN32_WCE)
|
||||||
|
#undef errno
|
||||||
|
extern int errno;
|
||||||
|
#else
|
||||||
|
_CRTIMP int* __cdecl _errno(void);
|
||||||
|
#define errno (*_errno())
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* Not RC_INVOKED */
|
||||||
|
|
||||||
|
#endif /* Not _ERRNO_H_ */
|
|
@ -0,0 +1,170 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>fxload</ProjectName>
|
||||||
|
<ProjectGuid>{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}</ProjectGuid>
|
||||||
|
<RootNamespace>examples</RootNamespace>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\examples\getopt;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;__GNU_LIBRARY__;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\examples\getopt;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;__GNU_LIBRARY__;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\examples\getopt;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;__GNU_LIBRARY__;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\examples\getopt;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;__GNU_LIBRARY__;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\ezusb.c" />
|
||||||
|
<ClCompile Include="..\examples\fxload.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include=".\libusb_static_2010.vcxproj">
|
||||||
|
<Project>{349ee8f9-7d25-4909-aaf5-ff3fade72187}</Project>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="getopt_2010.vcxproj">
|
||||||
|
<Project>{ae83e1b4-ce06-47ee-b7a3-c3a1d7c2d71e}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\examples\ezusb.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{651ff73d-037b-4903-8dd3-56e9950be25c}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\fxload.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\examples\ezusb.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\examples\ezusb.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,174 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>fxload</ProjectName>
|
||||||
|
<ProjectGuid>{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}</ProjectGuid>
|
||||||
|
<RootNamespace>examples</RootNamespace>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\examples\getopt;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;__GNU_LIBRARY__;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\examples\getopt;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;__GNU_LIBRARY__;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\examples\getopt;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;__GNU_LIBRARY__;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\examples\getopt;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;__GNU_LIBRARY__;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\ezusb.c" />
|
||||||
|
<ClCompile Include="..\examples\fxload.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include=".\libusb_static_2012.vcxproj">
|
||||||
|
<Project>{349ee8f9-7d25-4909-aaf5-ff3fade72187}</Project>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="getopt_2012.vcxproj">
|
||||||
|
<Project>{ae83e1b4-ce06-47ee-b7a3-c3a1d7c2d71e}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\examples\ezusb.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{651ff73d-037b-4903-8dd3-56e9950be25c}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\fxload.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\examples\ezusb.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\examples\ezusb.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,174 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>fxload</ProjectName>
|
||||||
|
<ProjectGuid>{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}</ProjectGuid>
|
||||||
|
<RootNamespace>examples</RootNamespace>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\examples\getopt;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;__GNU_LIBRARY__;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\examples\getopt;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;__GNU_LIBRARY__;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\examples\getopt;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;__GNU_LIBRARY__;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\examples\getopt;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;__GNU_LIBRARY__;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\ezusb.c" />
|
||||||
|
<ClCompile Include="..\examples\fxload.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include=".\libusb_static_2013.vcxproj">
|
||||||
|
<Project>{349ee8f9-7d25-4909-aaf5-ff3fade72187}</Project>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="getopt_2013.vcxproj">
|
||||||
|
<Project>{ae83e1b4-ce06-47ee-b7a3-c3a1d7c2d71e}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\examples\ezusb.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,23 @@
|
||||||
|
TARGETNAME=fxload
|
||||||
|
TARGETTYPE=PROGRAM
|
||||||
|
386_STDCALL=0
|
||||||
|
|
||||||
|
_NT_TARGET_VERSION= $(_NT_TARGET_VERSION_WINXP)
|
||||||
|
|
||||||
|
!IFNDEF MSC_WARNING_LEVEL
|
||||||
|
MSC_WARNING_LEVEL=/W3
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IFDEF STATIC_LIBC
|
||||||
|
USE_LIBCMT=1
|
||||||
|
!ELSE
|
||||||
|
USE_MSVCRT=1
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
UMTYPE=console
|
||||||
|
INCLUDES=..\..\msvc;..\..\libusb;..\getopt;$(DDK_INC_PATH)
|
||||||
|
C_DEFINES=$(C_DEFINES) /D__GNU_LIBRARY__
|
||||||
|
UMLIBS=..\..\libusb\os\obj$(BUILD_ALT_DIR)\*\libusb-1.0.lib \
|
||||||
|
..\getopt\getopt_ddkbuild\obj$(BUILD_ALT_DIR)\*\getopt.lib
|
||||||
|
SOURCES=..\ezusb.c \
|
||||||
|
..\fxload.c
|
|
@ -0,0 +1,288 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="9.00"
|
||||||
|
Name="getopt"
|
||||||
|
ProjectGUID="{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}"
|
||||||
|
RootNamespace="getopt"
|
||||||
|
TargetFrameworkVersion="196613"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
<Platform
|
||||||
|
Name="x64"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)\lib"
|
||||||
|
IntermediateDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)\lib\getopt"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
PreprocessorDefinitions="HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
WarningLevel="3"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
IgnoreAllDefaultLibraries="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|x64"
|
||||||
|
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)\lib"
|
||||||
|
IntermediateDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)\lib\getopt"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
PreprocessorDefinitions="HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
WarningLevel="3"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
IgnoreAllDefaultLibraries="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)\lib"
|
||||||
|
IntermediateDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)\lib\getopt"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="2"
|
||||||
|
PreprocessorDefinitions="HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
IgnoreAllDefaultLibraries="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|x64"
|
||||||
|
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)\lib"
|
||||||
|
IntermediateDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)\lib\getopt"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
PreprocessorDefinitions="HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
IgnoreAllDefaultLibraries="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\examples\getopt\getopt.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\examples\getopt\getopt1.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\examples\getopt\getopt.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
|
@ -0,0 +1,131 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}</ProjectGuid>
|
||||||
|
<RootNamespace>getopt</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\getopt\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\getopt\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\getopt\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\getopt\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PreprocessorDefinitions>HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<PreprocessorDefinitions>HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<PreprocessorDefinitions>HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<PreprocessorDefinitions>HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\getopt\getopt.c" />
|
||||||
|
<ClCompile Include="..\examples\getopt\getopt1.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\examples\getopt\getopt.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\getopt\getopt.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\examples\getopt\getopt1.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\examples\getopt\getopt.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,136 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}</ProjectGuid>
|
||||||
|
<RootNamespace>getopt</RootNamespace>
|
||||||
|
<ProjectName>getopt</ProjectName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\getopt\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\getopt\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\getopt\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\getopt\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PreprocessorDefinitions>HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<PreprocessorDefinitions>HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<PreprocessorDefinitions>HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<PreprocessorDefinitions>HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\getopt\getopt.c" />
|
||||||
|
<ClCompile Include="..\examples\getopt\getopt1.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\examples\getopt\getopt.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\getopt\getopt.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\examples\getopt\getopt1.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\examples\getopt\getopt.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,136 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}</ProjectGuid>
|
||||||
|
<RootNamespace>getopt</RootNamespace>
|
||||||
|
<ProjectName>getopt</ProjectName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\getopt\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\getopt\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\getopt\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\getopt\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PreprocessorDefinitions>HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<PreprocessorDefinitions>HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<PreprocessorDefinitions>HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<PreprocessorDefinitions>HAVE_STRING_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\getopt\getopt.c" />
|
||||||
|
<ClCompile Include="..\examples\getopt\getopt1.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\examples\getopt\getopt.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,20 @@
|
||||||
|
TARGETTYPE=LIBRARY
|
||||||
|
TARGETNAME=getopt
|
||||||
|
386_STDCALL=0
|
||||||
|
|
||||||
|
_NT_TARGET_VERSION= $(_NT_TARGET_VERSION_WINXP)
|
||||||
|
|
||||||
|
!IFNDEF MSC_WARNING_LEVEL
|
||||||
|
MSC_WARNING_LEVEL=/W3
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
USE_MSVCRT=1
|
||||||
|
|
||||||
|
INCLUDES=$(DDK_INC_PATH)
|
||||||
|
C_DEFINES = $(C_DEFINES) /DDDKBUILD /DHAVE_STRING_H
|
||||||
|
|
||||||
|
TARGETLIBS=$(SDK_LIB_PATH)\kernel32.lib \
|
||||||
|
$(SDK_LIB_PATH)\user32.lib
|
||||||
|
|
||||||
|
SOURCES=..\getopt1.c \
|
||||||
|
..\getopt.c
|
|
@ -0,0 +1,163 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>hotplugtest</ProjectName>
|
||||||
|
<ProjectGuid>{99D2AC64-DC66-4422-91CE-6715C403C9E5}</ProjectGuid>
|
||||||
|
<RootNamespace>examples</RootNamespace>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\hotplugtest.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include=".\libusb_static_2010.vcxproj">
|
||||||
|
<Project>{349ee8f9-7d25-4909-aaf5-ff3fade72187}</Project>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\hotplugtest.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,167 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>hotplugtest</ProjectName>
|
||||||
|
<ProjectGuid>{99D2AC64-DC66-4422-91CE-6715C403C9E5}</ProjectGuid>
|
||||||
|
<RootNamespace>examples</RootNamespace>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\hotplugtest.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include=".\libusb_static_2012.vcxproj">
|
||||||
|
<Project>{349ee8f9-7d25-4909-aaf5-ff3fade72187}</Project>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\hotplugtest.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,167 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>hotplugtest</ProjectName>
|
||||||
|
<ProjectGuid>{99D2AC64-DC66-4422-91CE-6715C403C9E5}</ProjectGuid>
|
||||||
|
<RootNamespace>examples</RootNamespace>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\hotplugtest.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include=".\libusb_static_2013.vcxproj">
|
||||||
|
<Project>{349ee8f9-7d25-4909-aaf5-ff3fade72187}</Project>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,20 @@
|
||||||
|
TARGETNAME=hotplugtest
|
||||||
|
TARGETTYPE=PROGRAM
|
||||||
|
386_STDCALL=0
|
||||||
|
|
||||||
|
_NT_TARGET_VERSION= $(_NT_TARGET_VERSION_WINXP)
|
||||||
|
|
||||||
|
!IFNDEF MSC_WARNING_LEVEL
|
||||||
|
MSC_WARNING_LEVEL=/W3
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IFDEF STATIC_LIBC
|
||||||
|
USE_LIBCMT=1
|
||||||
|
!ELSE
|
||||||
|
USE_MSVCRT=1
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
UMTYPE=console
|
||||||
|
INCLUDES=..\..\msvc;..\..\libusb;$(DDK_INC_PATH)
|
||||||
|
UMLIBS=..\..\libusb\os\obj$(BUILD_ALT_DIR)\*\libusb-1.0.lib
|
||||||
|
SOURCES=..\hotplugtest.c
|
|
@ -0,0 +1,295 @@
|
||||||
|
/**
|
||||||
|
* This file has no copyright assigned and is placed in the Public Domain.
|
||||||
|
* This file was original part of the w64 mingw-runtime package.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||||
|
*
|
||||||
|
* Modified for libusb/MSVC: Pete Batard <pbatard@gmail.com>
|
||||||
|
*
|
||||||
|
* This source code is offered for use in the public domain. You may
|
||||||
|
* use, modify or distribute it freely.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful but
|
||||||
|
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||||
|
* DISCLAIMED. This includes but is not limited to warranties of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* Date: 2010-04-02
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _MSC_VER
|
||||||
|
#error This header should only be used with Microsoft compilers
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 7.8 Format conversion of integer types <inttypes.h> */
|
||||||
|
|
||||||
|
#ifndef _INTTYPES_H_
|
||||||
|
#define _INTTYPES_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
intmax_t quot;
|
||||||
|
intmax_t rem;
|
||||||
|
} imaxdiv_t;
|
||||||
|
|
||||||
|
|
||||||
|
/* 7.8.1 Macros for format specifiers
|
||||||
|
*
|
||||||
|
* MS runtime does not yet understand C9x standard "ll"
|
||||||
|
* length specifier. It appears to treat "ll" as "l".
|
||||||
|
* The non-standard I64 length specifier causes warning in GCC,
|
||||||
|
* but understood by MS runtime functions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* fprintf macros for signed types */
|
||||||
|
#define PRId8 "d"
|
||||||
|
#define PRId16 "d"
|
||||||
|
#define PRId32 "d"
|
||||||
|
#define PRId64 "I64d"
|
||||||
|
|
||||||
|
#define PRIdLEAST8 "d"
|
||||||
|
#define PRIdLEAST16 "d"
|
||||||
|
#define PRIdLEAST32 "d"
|
||||||
|
#define PRIdLEAST64 "I64d"
|
||||||
|
|
||||||
|
#define PRIdFAST8 "d"
|
||||||
|
#define PRIdFAST16 "d"
|
||||||
|
#define PRIdFAST32 "d"
|
||||||
|
#define PRIdFAST64 "I64d"
|
||||||
|
|
||||||
|
#define PRIdMAX "I64d"
|
||||||
|
|
||||||
|
#define PRIi8 "i"
|
||||||
|
#define PRIi16 "i"
|
||||||
|
#define PRIi32 "i"
|
||||||
|
#define PRIi64 "I64i"
|
||||||
|
|
||||||
|
#define PRIiLEAST8 "i"
|
||||||
|
#define PRIiLEAST16 "i"
|
||||||
|
#define PRIiLEAST32 "i"
|
||||||
|
#define PRIiLEAST64 "I64i"
|
||||||
|
|
||||||
|
#define PRIiFAST8 "i"
|
||||||
|
#define PRIiFAST16 "i"
|
||||||
|
#define PRIiFAST32 "i"
|
||||||
|
#define PRIiFAST64 "I64i"
|
||||||
|
|
||||||
|
#define PRIiMAX "I64i"
|
||||||
|
|
||||||
|
#define PRIo8 "o"
|
||||||
|
#define PRIo16 "o"
|
||||||
|
#define PRIo32 "o"
|
||||||
|
#define PRIo64 "I64o"
|
||||||
|
|
||||||
|
#define PRIoLEAST8 "o"
|
||||||
|
#define PRIoLEAST16 "o"
|
||||||
|
#define PRIoLEAST32 "o"
|
||||||
|
#define PRIoLEAST64 "I64o"
|
||||||
|
|
||||||
|
#define PRIoFAST8 "o"
|
||||||
|
#define PRIoFAST16 "o"
|
||||||
|
#define PRIoFAST32 "o"
|
||||||
|
#define PRIoFAST64 "I64o"
|
||||||
|
|
||||||
|
#define PRIoMAX "I64o"
|
||||||
|
|
||||||
|
/* fprintf macros for unsigned types */
|
||||||
|
#define PRIu8 "u"
|
||||||
|
#define PRIu16 "u"
|
||||||
|
#define PRIu32 "u"
|
||||||
|
#define PRIu64 "I64u"
|
||||||
|
|
||||||
|
|
||||||
|
#define PRIuLEAST8 "u"
|
||||||
|
#define PRIuLEAST16 "u"
|
||||||
|
#define PRIuLEAST32 "u"
|
||||||
|
#define PRIuLEAST64 "I64u"
|
||||||
|
|
||||||
|
#define PRIuFAST8 "u"
|
||||||
|
#define PRIuFAST16 "u"
|
||||||
|
#define PRIuFAST32 "u"
|
||||||
|
#define PRIuFAST64 "I64u"
|
||||||
|
|
||||||
|
#define PRIuMAX "I64u"
|
||||||
|
|
||||||
|
#define PRIx8 "x"
|
||||||
|
#define PRIx16 "x"
|
||||||
|
#define PRIx32 "x"
|
||||||
|
#define PRIx64 "I64x"
|
||||||
|
|
||||||
|
#define PRIxLEAST8 "x"
|
||||||
|
#define PRIxLEAST16 "x"
|
||||||
|
#define PRIxLEAST32 "x"
|
||||||
|
#define PRIxLEAST64 "I64x"
|
||||||
|
|
||||||
|
#define PRIxFAST8 "x"
|
||||||
|
#define PRIxFAST16 "x"
|
||||||
|
#define PRIxFAST32 "x"
|
||||||
|
#define PRIxFAST64 "I64x"
|
||||||
|
|
||||||
|
#define PRIxMAX "I64x"
|
||||||
|
|
||||||
|
#define PRIX8 "X"
|
||||||
|
#define PRIX16 "X"
|
||||||
|
#define PRIX32 "X"
|
||||||
|
#define PRIX64 "I64X"
|
||||||
|
|
||||||
|
#define PRIXLEAST8 "X"
|
||||||
|
#define PRIXLEAST16 "X"
|
||||||
|
#define PRIXLEAST32 "X"
|
||||||
|
#define PRIXLEAST64 "I64X"
|
||||||
|
|
||||||
|
#define PRIXFAST8 "X"
|
||||||
|
#define PRIXFAST16 "X"
|
||||||
|
#define PRIXFAST32 "X"
|
||||||
|
#define PRIXFAST64 "I64X"
|
||||||
|
|
||||||
|
#define PRIXMAX "I64X"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fscanf macros for signed int types
|
||||||
|
* NOTE: if 32-bit int is used for int_fast8_t and int_fast16_t
|
||||||
|
* (see stdint.h, 7.18.1.3), FAST8 and FAST16 should have
|
||||||
|
* no length identifiers
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SCNd16 "hd"
|
||||||
|
#define SCNd32 "d"
|
||||||
|
#define SCNd64 "I64d"
|
||||||
|
|
||||||
|
#define SCNdLEAST16 "hd"
|
||||||
|
#define SCNdLEAST32 "d"
|
||||||
|
#define SCNdLEAST64 "I64d"
|
||||||
|
|
||||||
|
#define SCNdFAST16 "hd"
|
||||||
|
#define SCNdFAST32 "d"
|
||||||
|
#define SCNdFAST64 "I64d"
|
||||||
|
|
||||||
|
#define SCNdMAX "I64d"
|
||||||
|
|
||||||
|
#define SCNi16 "hi"
|
||||||
|
#define SCNi32 "i"
|
||||||
|
#define SCNi64 "I64i"
|
||||||
|
|
||||||
|
#define SCNiLEAST16 "hi"
|
||||||
|
#define SCNiLEAST32 "i"
|
||||||
|
#define SCNiLEAST64 "I64i"
|
||||||
|
|
||||||
|
#define SCNiFAST16 "hi"
|
||||||
|
#define SCNiFAST32 "i"
|
||||||
|
#define SCNiFAST64 "I64i"
|
||||||
|
|
||||||
|
#define SCNiMAX "I64i"
|
||||||
|
|
||||||
|
#define SCNo16 "ho"
|
||||||
|
#define SCNo32 "o"
|
||||||
|
#define SCNo64 "I64o"
|
||||||
|
|
||||||
|
#define SCNoLEAST16 "ho"
|
||||||
|
#define SCNoLEAST32 "o"
|
||||||
|
#define SCNoLEAST64 "I64o"
|
||||||
|
|
||||||
|
#define SCNoFAST16 "ho"
|
||||||
|
#define SCNoFAST32 "o"
|
||||||
|
#define SCNoFAST64 "I64o"
|
||||||
|
|
||||||
|
#define SCNoMAX "I64o"
|
||||||
|
|
||||||
|
#define SCNx16 "hx"
|
||||||
|
#define SCNx32 "x"
|
||||||
|
#define SCNx64 "I64x"
|
||||||
|
|
||||||
|
#define SCNxLEAST16 "hx"
|
||||||
|
#define SCNxLEAST32 "x"
|
||||||
|
#define SCNxLEAST64 "I64x"
|
||||||
|
|
||||||
|
#define SCNxFAST16 "hx"
|
||||||
|
#define SCNxFAST32 "x"
|
||||||
|
#define SCNxFAST64 "I64x"
|
||||||
|
|
||||||
|
#define SCNxMAX "I64x"
|
||||||
|
|
||||||
|
/* fscanf macros for unsigned int types */
|
||||||
|
|
||||||
|
#define SCNu16 "hu"
|
||||||
|
#define SCNu32 "u"
|
||||||
|
#define SCNu64 "I64u"
|
||||||
|
|
||||||
|
#define SCNuLEAST16 "hu"
|
||||||
|
#define SCNuLEAST32 "u"
|
||||||
|
#define SCNuLEAST64 "I64u"
|
||||||
|
|
||||||
|
#define SCNuFAST16 "hu"
|
||||||
|
#define SCNuFAST32 "u"
|
||||||
|
#define SCNuFAST64 "I64u"
|
||||||
|
|
||||||
|
#define SCNuMAX "I64u"
|
||||||
|
|
||||||
|
#ifdef _WIN64
|
||||||
|
#define PRIdPTR "I64d"
|
||||||
|
#define PRIiPTR "I64i"
|
||||||
|
#define PRIoPTR "I64o"
|
||||||
|
#define PRIuPTR "I64u"
|
||||||
|
#define PRIxPTR "I64x"
|
||||||
|
#define PRIXPTR "I64X"
|
||||||
|
#define SCNdPTR "I64d"
|
||||||
|
#define SCNiPTR "I64i"
|
||||||
|
#define SCNoPTR "I64o"
|
||||||
|
#define SCNxPTR "I64x"
|
||||||
|
#define SCNuPTR "I64u"
|
||||||
|
#else
|
||||||
|
#define PRIdPTR "d"
|
||||||
|
#define PRIiPTR "i"
|
||||||
|
#define PRIoPTR "o"
|
||||||
|
#define PRIuPTR "u"
|
||||||
|
#define PRIxPTR "x"
|
||||||
|
#define PRIXPTR "X"
|
||||||
|
#define SCNdPTR "d"
|
||||||
|
#define SCNiPTR "i"
|
||||||
|
#define SCNoPTR "o"
|
||||||
|
#define SCNxPTR "x"
|
||||||
|
#define SCNuPTR "u"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
|
||||||
|
/*
|
||||||
|
* no length modifier for char types prior to C9x
|
||||||
|
* MS runtime scanf appears to treat "hh" as "h"
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* signed char */
|
||||||
|
#define SCNd8 "hhd"
|
||||||
|
#define SCNdLEAST8 "hhd"
|
||||||
|
#define SCNdFAST8 "hhd"
|
||||||
|
|
||||||
|
#define SCNi8 "hhi"
|
||||||
|
#define SCNiLEAST8 "hhi"
|
||||||
|
#define SCNiFAST8 "hhi"
|
||||||
|
|
||||||
|
#define SCNo8 "hho"
|
||||||
|
#define SCNoLEAST8 "hho"
|
||||||
|
#define SCNoFAST8 "hho"
|
||||||
|
|
||||||
|
#define SCNx8 "hhx"
|
||||||
|
#define SCNxLEAST8 "hhx"
|
||||||
|
#define SCNxFAST8 "hhx"
|
||||||
|
|
||||||
|
/* unsigned char */
|
||||||
|
#define SCNu8 "hhu"
|
||||||
|
#define SCNuLEAST8 "hhu"
|
||||||
|
#define SCNuFAST8 "hhu"
|
||||||
|
#endif /* __STDC_VERSION__ >= 199901 */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* ndef _INTTYPES_H */
|
|
@ -0,0 +1,71 @@
|
||||||
|
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||||
|
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "libusb_dll"=".\libusb_dll.dsp" - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "libusb_static"=".\libusb_static.dsp" - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "listdevs"=".\listdevs.dsp" - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name libusb_static
|
||||||
|
End Project Dependency
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "xusb"=".\xusb.dsp" - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name libusb_static
|
||||||
|
End Project Dependency
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Global:
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<3>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
|
@ -0,0 +1,95 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||||
|
# Visual Studio 2005
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (static)", "libusb_static_2005.vcproj", "{5AB6B770-1925-48D5-ABC2-930F3259C020}"
|
||||||
|
ProjectSection(WebsiteProperties) = preProject
|
||||||
|
Debug.AspNetCompiler.Debug = "True"
|
||||||
|
Release.AspNetCompiler.Debug = "False"
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (dll)", "libusb_dll_2005.vcproj", "{8224C054-5968-4238-832C-167155E7ECC3}"
|
||||||
|
ProjectSection(WebsiteProperties) = preProject
|
||||||
|
Debug.AspNetCompiler.Debug = "True"
|
||||||
|
Release.AspNetCompiler.Debug = "False"
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "listdevs", "listdevs_2005.vcproj", "{98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}"
|
||||||
|
ProjectSection(WebsiteProperties) = preProject
|
||||||
|
Debug.AspNetCompiler.Debug = "True"
|
||||||
|
Release.AspNetCompiler.Debug = "False"
|
||||||
|
EndProjectSection
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{5AB6B770-1925-48D5-ABC2-930F3259C020} = {5AB6B770-1925-48D5-ABC2-930F3259C020}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xusb", "xusb_2005.vcproj", "{08A6FA39-21B7-4A05-9252-2F9864A5E5A4}"
|
||||||
|
ProjectSection(WebsiteProperties) = preProject
|
||||||
|
Debug.AspNetCompiler.Debug = "True"
|
||||||
|
Release.AspNetCompiler.Debug = "False"
|
||||||
|
EndProjectSection
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{5AB6B770-1925-48D5-ABC2-930F3259C020} = {5AB6B770-1925-48D5-ABC2-930F3259C020}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress", "stress_2005.vcproj", "{53942EFF-C810-458D-B3CB-EE5CE9F1E781}"
|
||||||
|
ProjectSection(WebsiteProperties) = preProject
|
||||||
|
Debug.AspNetCompiler.Debug = "True"
|
||||||
|
Release.AspNetCompiler.Debug = "False"
|
||||||
|
EndProjectSection
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{5AB6B770-1925-48D5-ABC2-930F3259C020} = {5AB6B770-1925-48D5-ABC2-930F3259C020}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Release|Win32 = Release|Win32
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{5AB6B770-1925-48D5-ABC2-930F3259C020}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{5AB6B770-1925-48D5-ABC2-930F3259C020}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{5AB6B770-1925-48D5-ABC2-930F3259C020}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{5AB6B770-1925-48D5-ABC2-930F3259C020}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{5AB6B770-1925-48D5-ABC2-930F3259C020}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{5AB6B770-1925-48D5-ABC2-930F3259C020}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{5AB6B770-1925-48D5-ABC2-930F3259C020}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{5AB6B770-1925-48D5-ABC2-930F3259C020}.Release|x64.Build.0 = Release|x64
|
||||||
|
{8224C054-5968-4238-832C-167155E7ECC3}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{8224C054-5968-4238-832C-167155E7ECC3}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{8224C054-5968-4238-832C-167155E7ECC3}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{8224C054-5968-4238-832C-167155E7ECC3}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{8224C054-5968-4238-832C-167155E7ECC3}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{8224C054-5968-4238-832C-167155E7ECC3}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{8224C054-5968-4238-832C-167155E7ECC3}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{8224C054-5968-4238-832C-167155E7ECC3}.Release|x64.Build.0 = Release|x64
|
||||||
|
{98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Release|x64.Build.0 = Release|x64
|
||||||
|
{08A6FA39-21B7-4A05-9252-2F9864A5E5A4}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{08A6FA39-21B7-4A05-9252-2F9864A5E5A4}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{08A6FA39-21B7-4A05-9252-2F9864A5E5A4}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{08A6FA39-21B7-4A05-9252-2F9864A5E5A4}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{08A6FA39-21B7-4A05-9252-2F9864A5E5A4}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{08A6FA39-21B7-4A05-9252-2F9864A5E5A4}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{08A6FA39-21B7-4A05-9252-2F9864A5E5A4}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{08A6FA39-21B7-4A05-9252-2F9864A5E5A4}.Release|x64.Build.0 = Release|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|x64.Build.0 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
|
@ -0,0 +1,94 @@
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||||
|
# Visual Studio 2010
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (static)", "libusb_static_2010.vcxproj", "{349EE8F9-7D25-4909-AAF5-FF3FADE72187}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (dll)", "libusb_dll_2010.vcxproj", "{349EE8FA-7D25-4909-AAF5-FF3FADE72187}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "listdevs", "listdevs_2010.vcxproj", "{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xusb", "xusb_2010.vcxproj", "{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fxload", "fxload_2010.vcxproj", "{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E} = {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "getopt", "getopt_2010.vcxproj", "{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress", "stress_2010.vcxproj", "{53942EFF-C810-458D-B3CB-EE5CE9F1E781}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hotplugtest", "hotplugtest_2010.vcxproj", "{99D2AC64-DC66-4422-91CE-6715C403C9E5}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Release|Win32 = Release|Win32
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.Build.0 = Release|x64
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|x64.Build.0 = Release|x64
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|x64.Build.0 = Release|x64
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Release|x64.Build.0 = Release|x64
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|x64.Build.0 = Release|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|x64.Build.0 = Release|x64
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Release|x64.Build.0 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
|
@ -0,0 +1,94 @@
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 2012
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (static)", "libusb_static_2012.vcxproj", "{349EE8F9-7D25-4909-AAF5-FF3FADE72187}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (dll)", "libusb_dll_2012.vcxproj", "{349EE8FA-7D25-4909-AAF5-FF3FADE72187}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "listdevs", "listdevs_2012.vcxproj", "{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xusb", "xusb_2012.vcxproj", "{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fxload", "fxload_2012.vcxproj", "{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E} = {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "getopt", "getopt_2012.vcxproj", "{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress", "stress_2012.vcxproj", "{53942EFF-C810-458D-B3CB-EE5CE9F1E781}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hotplugtest", "hotplugtest_2012.vcxproj", "{99D2AC64-DC66-4422-91CE-6715C403C9E5}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Release|Win32 = Release|Win32
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.Build.0 = Release|x64
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|x64.Build.0 = Release|x64
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|x64.Build.0 = Release|x64
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Release|x64.Build.0 = Release|x64
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|x64.Build.0 = Release|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|x64.Build.0 = Release|x64
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Release|x64.Build.0 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
|
@ -0,0 +1,100 @@
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 2013
|
||||||
|
VisualStudioVersion = 12.0.21005.1
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (static)", "libusb_static_2013.vcxproj", "{349EE8F9-7D25-4909-AAF5-FF3FADE72187}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (dll)", "libusb_dll_2013.vcxproj", "{349EE8FA-7D25-4909-AAF5-FF3FADE72187}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "listdevs", "listdevs_2013.vcxproj", "{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xusb", "xusb_2013.vcxproj", "{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fxload", "fxload_2013.vcxproj", "{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E} = {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "getopt", "getopt_2013.vcxproj", "{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress", "stress_2013.vcxproj", "{53942EFF-C810-458D-B3CB-EE5CE9F1E781}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hotplugtest", "hotplugtest_2013.vcxproj", "{99D2AC64-DC66-4422-91CE-6715C403C9E5}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Release|Win32 = Release|Win32
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.Build.0 = Release|x64
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Release|x64.Build.0 = Release|x64
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|x64.Build.0 = Release|x64
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|x64.Build.0 = Release|x64
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{9E166F7A-A793-9FB6-0A67-F0AED8AE8C88}.Release|x64.Build.0 = Release|x64
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|x64.Build.0 = Release|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{53942EFF-C810-458D-B3CB-EE5CE9F1E781}.Release|x64.Build.0 = Release|x64
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{99D2AC64-DC66-4422-91CE-6715C403C9E5}.Release|x64.Build.0 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
|
@ -0,0 +1,194 @@
|
||||||
|
# Microsoft Developer Studio Project File - Name="libusb_dll" - Package Owner=<4>
|
||||||
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
|
||||||
|
|
||||||
|
CFG=libusb_dll - Win32 Debug
|
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
|
!MESSAGE use the Export Makefile command and run
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "libusb_dll.mak".
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "libusb_dll.mak" CFG="libusb_dll - Win32 Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "libusb_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
|
!MESSAGE "libusb_dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
|
!MESSAGE
|
||||||
|
|
||||||
|
# Begin Project
|
||||||
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
# PROP Scc_ProjName ""
|
||||||
|
# PROP Scc_LocalPath ""
|
||||||
|
CPP=cl.exe
|
||||||
|
MTL=midl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "libusb_dll - Win32 Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release"
|
||||||
|
# PROP BASE Intermediate_Dir "Release"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "../Win32/Release/dll"
|
||||||
|
# PROP Intermediate_Dir "../Win32/Release/dll"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "LIBUSB_DLL_EXPORTS" /YX /FD /c
|
||||||
|
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../libusb" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /U "_MBCS" /D "_USRDLL" /FR /FD /EHsc /c
|
||||||
|
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||||
|
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||||
|
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
|
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Win32/Release/dll/libusb-1.0.dll"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "libusb_dll - Win32 Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "../Win32/Debug/dll"
|
||||||
|
# PROP Intermediate_Dir "../Win32/Debug/dll"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "LIBUSB_DLL_EXPORTS" /YX /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "../libusb" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /U "_MBCS" /D "_USRDLL" /FR /FD /EHsc /c
|
||||||
|
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
|
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo /n
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
|
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Win32/Debug/dll/libusb-1.0.dll"
|
||||||
|
# SUBTRACT LINK32 /pdb:none /incremental:no
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "libusb_dll - Win32 Release"
|
||||||
|
# Name "libusb_dll - Win32 Debug"
|
||||||
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\core.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\os\darwin_usb.c
|
||||||
|
# PROP Exclude_From_Build 1
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\descriptor.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\io.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE="..\libusb\libusb-1.0.rc"
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE="..\libusb\libusb-1.0.def"
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\os\linux_usbfs.c
|
||||||
|
# PROP Exclude_From_Build 1
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\os\poll_windows.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\sync.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\os\threads_windows.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\os\windows_usb.c
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Header Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\config.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\os\darwin_usb.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\libusb.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\libusbi.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\os\linux_usbfs.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\os\poll_posix.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\os\poll_windows.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\os\threads_posix.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\os\threads_windows.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\os\windows_usb.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\libusb\os\windows_common.h
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Resource Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||||
|
# End Group
|
||||||
|
# End Target
|
||||||
|
# End Project
|
|
@ -0,0 +1,436 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="libusb-1.0 (dll)"
|
||||||
|
ProjectGUID="{8224C054-5968-4238-832C-167155E7ECC3}"
|
||||||
|
RootNamespace="libusbdll"
|
||||||
|
Keyword="Win32Proj"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
<Platform
|
||||||
|
Name="x64"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="..\$(PlatformName)\$(ConfigurationName)\dll"
|
||||||
|
IntermediateDirectory="..\$(PlatformName)\$(ConfigurationName)\dll\libusb-1.0"
|
||||||
|
ConfigurationType="2"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=".;..\libusb"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)\libusb-1.0.dll"
|
||||||
|
LinkIncremental="2"
|
||||||
|
ModuleDefinitionFile="..\libusb\libusb-1.0.def"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|x64"
|
||||||
|
OutputDirectory="..\$(PlatformName)\$(ConfigurationName)\dll"
|
||||||
|
IntermediateDirectory="..\$(PlatformName)\$(ConfigurationName)\dll\libusb-1.0"
|
||||||
|
ConfigurationType="2"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=".;..\libusb"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)\libusb-1.0.dll"
|
||||||
|
LinkIncremental="2"
|
||||||
|
ModuleDefinitionFile="..\libusb\libusb-1.0.def"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="2"
|
||||||
|
TargetMachine="17"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="..\$(PlatformName)\$(ConfigurationName)\dll"
|
||||||
|
IntermediateDirectory="..\$(PlatformName)\$(ConfigurationName)\dll\libusb-1.0"
|
||||||
|
ConfigurationType="2"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=".;..\libusb"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)\libusb-1.0.dll"
|
||||||
|
LinkIncremental="1"
|
||||||
|
ModuleDefinitionFile="..\libusb\libusb-1.0.def"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="2"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|x64"
|
||||||
|
OutputDirectory="..\$(PlatformName)\$(ConfigurationName)\dll"
|
||||||
|
IntermediateDirectory="..\$(PlatformName)\$(ConfigurationName)\dll\libusb-1.0"
|
||||||
|
ConfigurationType="2"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=".;..\libusb"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)\libusb-1.0.dll"
|
||||||
|
LinkIncremental="1"
|
||||||
|
ModuleDefinitionFile="..\libusb\libusb-1.0.def"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="2"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="17"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\core.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\descriptor.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\hotplug.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\io.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\os\poll_windows.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\strerror.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\sync.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\os\threads_windows.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\os\windows_usb.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\config.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\hotplug.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\libusb.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\libusbi.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\os\poll_windows.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\os\threads_windows.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\os\windows_usb.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\os\windows_common.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Resource Files"
|
||||||
|
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||||
|
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\libusb-1.0.def"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\libusb-1.0.rc"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
|
@ -0,0 +1,170 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>libusb-1.0 (dll)</ProjectName>
|
||||||
|
<ProjectGuid>{349EE8FA-7D25-4909-AAF5-FF3FADE72187}</ProjectGuid>
|
||||||
|
<RootNamespace>libusbdll</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\</IntDir>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">libusb-1.0</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
||||||
|
<ModuleDefinitionFile>..\libusb\libusb-1.0.def</ModuleDefinitionFile>
|
||||||
|
<EmbedManagedResourceFile>libusb-1.0.rc;%(EmbedManagedResourceFile)</EmbedManagedResourceFile>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_WIN64;_DEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
||||||
|
<ModuleDefinitionFile>..\libusb\libusb-1.0.def</ModuleDefinitionFile>
|
||||||
|
<EmbedManagedResourceFile>libusb-1.0.rc;%(EmbedManagedResourceFile)</EmbedManagedResourceFile>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
||||||
|
<ModuleDefinitionFile>..\libusb\libusb-1.0.def</ModuleDefinitionFile>
|
||||||
|
<EmbedManagedResourceFile>libusb-1.0.rc;%(EmbedManagedResourceFile)</EmbedManagedResourceFile>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_WIN64;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
||||||
|
<ModuleDefinitionFile>..\libusb\libusb-1.0.def</ModuleDefinitionFile>
|
||||||
|
<EmbedManagedResourceFile>libusb-1.0.rc;%(EmbedManagedResourceFile)</EmbedManagedResourceFile>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\libusb\core.c" />
|
||||||
|
<ClCompile Include="..\libusb\descriptor.c" />
|
||||||
|
<ClCompile Include="..\libusb\hotplug.c" />
|
||||||
|
<ClCompile Include="..\libusb\io.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\poll_windows.c" />
|
||||||
|
<ClCompile Include="..\libusb\strerror.c" />
|
||||||
|
<ClCompile Include="..\libusb\sync.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\threads_windows.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\windows_usb.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include=".\config.h" />
|
||||||
|
<ClInclude Include="..\libusb\hotplug.h" />
|
||||||
|
<ClInclude Include="..\libusb\libusb.h" />
|
||||||
|
<ClInclude Include="..\libusb\libusbi.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\poll_windows.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\threads_windows.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\windows_usb.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\windows_common.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\libusb\libusb-1.0.def" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\libusb\libusb-1.0.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,81 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{d81e81ca-b13e-4a15-b54b-b12b41361e6b}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\libusb\core.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\descriptor.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\hotplug.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\io.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\os\poll_windows.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\strerror.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\sync.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\os\threads_windows.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\os\windows_usb.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include=".\config.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\hotplug.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\libusb.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\libusbi.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\os\poll_windows.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\os\threads_windows.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\os\windows_usb.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\os\windows_common.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\libusb\libusb-1.0.def">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\libusb\libusb-1.0.rc">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,175 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>libusb-1.0 (dll)</ProjectName>
|
||||||
|
<ProjectGuid>{349EE8FA-7D25-4909-AAF5-FF3FADE72187}</ProjectGuid>
|
||||||
|
<RootNamespace>libusbdll</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\</IntDir>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">libusb-1.0</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
||||||
|
<ModuleDefinitionFile>..\libusb\libusb-1.0.def</ModuleDefinitionFile>
|
||||||
|
<EmbedManagedResourceFile>libusb-1.0.rc;%(EmbedManagedResourceFile)</EmbedManagedResourceFile>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_WIN64;_DEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
||||||
|
<ModuleDefinitionFile>..\libusb\libusb-1.0.def</ModuleDefinitionFile>
|
||||||
|
<EmbedManagedResourceFile>libusb-1.0.rc;%(EmbedManagedResourceFile)</EmbedManagedResourceFile>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
||||||
|
<ModuleDefinitionFile>..\libusb\libusb-1.0.def</ModuleDefinitionFile>
|
||||||
|
<EmbedManagedResourceFile>libusb-1.0.rc;%(EmbedManagedResourceFile)</EmbedManagedResourceFile>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_WIN64;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
||||||
|
<ModuleDefinitionFile>..\libusb\libusb-1.0.def</ModuleDefinitionFile>
|
||||||
|
<EmbedManagedResourceFile>libusb-1.0.rc;%(EmbedManagedResourceFile)</EmbedManagedResourceFile>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\libusb\core.c" />
|
||||||
|
<ClCompile Include="..\libusb\descriptor.c" />
|
||||||
|
<ClCompile Include="..\libusb\hotplug.c" />
|
||||||
|
<ClCompile Include="..\libusb\io.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\poll_windows.c" />
|
||||||
|
<ClCompile Include="..\libusb\strerror.c" />
|
||||||
|
<ClCompile Include="..\libusb\sync.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\threads_windows.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\windows_usb.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\libusb\hotplug.h" />
|
||||||
|
<ClInclude Include="..\libusb\version.h" />
|
||||||
|
<ClInclude Include="..\libusb\version_nano.h" />
|
||||||
|
<ClInclude Include=".\config.h" />
|
||||||
|
<ClInclude Include="..\libusb\libusb.h" />
|
||||||
|
<ClInclude Include="..\libusb\libusbi.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\poll_windows.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\threads_windows.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\windows_usb.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\libusb\libusb-1.0.def" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\libusb\libusb-1.0.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,84 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{d81e81ca-b13e-4a15-b54b-b12b41361e6b}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\libusb\core.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\descriptor.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\io.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\os\poll_windows.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\strerror.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\sync.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\os\threads_windows.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\os\windows_usb.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\hotplug.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include=".\config.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\libusb.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\libusbi.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\os\poll_windows.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\os\threads_windows.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\os\windows_usb.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\version.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\version_nano.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\hotplug.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\libusb\libusb-1.0.def">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\libusb\libusb-1.0.rc">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,175 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>libusb-1.0 (dll)</ProjectName>
|
||||||
|
<ProjectGuid>{349EE8FA-7D25-4909-AAF5-FF3FADE72187}</ProjectGuid>
|
||||||
|
<RootNamespace>libusbdll</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\</IntDir>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">libusb-1.0</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
||||||
|
<ModuleDefinitionFile>..\libusb\libusb-1.0.def</ModuleDefinitionFile>
|
||||||
|
<EmbedManagedResourceFile>libusb-1.0.rc;%(EmbedManagedResourceFile)</EmbedManagedResourceFile>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_WIN64;_DEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
||||||
|
<ModuleDefinitionFile>..\libusb\libusb-1.0.def</ModuleDefinitionFile>
|
||||||
|
<EmbedManagedResourceFile>libusb-1.0.rc;%(EmbedManagedResourceFile)</EmbedManagedResourceFile>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
||||||
|
<ModuleDefinitionFile>..\libusb\libusb-1.0.def</ModuleDefinitionFile>
|
||||||
|
<EmbedManagedResourceFile>libusb-1.0.rc;%(EmbedManagedResourceFile)</EmbedManagedResourceFile>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_WIN64;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
||||||
|
<ModuleDefinitionFile>..\libusb\libusb-1.0.def</ModuleDefinitionFile>
|
||||||
|
<EmbedManagedResourceFile>libusb-1.0.rc;%(EmbedManagedResourceFile)</EmbedManagedResourceFile>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\libusb\core.c" />
|
||||||
|
<ClCompile Include="..\libusb\descriptor.c" />
|
||||||
|
<ClCompile Include="..\libusb\hotplug.c" />
|
||||||
|
<ClCompile Include="..\libusb\io.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\poll_windows.c" />
|
||||||
|
<ClCompile Include="..\libusb\strerror.c" />
|
||||||
|
<ClCompile Include="..\libusb\sync.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\threads_windows.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\windows_usb.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\libusb\hotplug.h" />
|
||||||
|
<ClInclude Include="..\libusb\version.h" />
|
||||||
|
<ClInclude Include="..\libusb\version_nano.h" />
|
||||||
|
<ClInclude Include=".\config.h" />
|
||||||
|
<ClInclude Include="..\libusb\libusb.h" />
|
||||||
|
<ClInclude Include="..\libusb\libusbi.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\poll_windows.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\threads_windows.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\windows_usb.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\libusb\libusb-1.0.def" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\libusb\libusb-1.0.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
File diff suppressed because it is too large
Load Diff
|
@ -1,174 +1,174 @@
|
||||||
# Microsoft Developer Studio Project File - Name="libusb_static" - Package Owner=<4>
|
# Microsoft Developer Studio Project File - Name="libusb_static" - Package Owner=<4>
|
||||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||||
# ** DO NOT EDIT **
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
# TARGTYPE "Win32 (x86) Static Library" 0x0104
|
# TARGTYPE "Win32 (x86) Static Library" 0x0104
|
||||||
|
|
||||||
CFG=libusb_static - Win32 Debug
|
CFG=libusb_static - Win32 Debug
|
||||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
!MESSAGE use the Export Makefile command and run
|
!MESSAGE use the Export Makefile command and run
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE NMAKE /f "libusb_static.mak".
|
!MESSAGE NMAKE /f "libusb_static.mak".
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE NMAKE /f "libusb_static.mak" CFG="libusb_static - Win32 Debug"
|
!MESSAGE NMAKE /f "libusb_static.mak" CFG="libusb_static - Win32 Debug"
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE Possible choices for configuration are:
|
!MESSAGE Possible choices for configuration are:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE "libusb_static - Win32 Release" (based on "Win32 (x86) Static Library")
|
!MESSAGE "libusb_static - Win32 Release" (based on "Win32 (x86) Static Library")
|
||||||
!MESSAGE "libusb_static - Win32 Debug" (based on "Win32 (x86) Static Library")
|
!MESSAGE "libusb_static - Win32 Debug" (based on "Win32 (x86) Static Library")
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
|
|
||||||
# Begin Project
|
# Begin Project
|
||||||
# PROP AllowPerConfigDependencies 0
|
# PROP AllowPerConfigDependencies 0
|
||||||
# PROP Scc_ProjName ""
|
# PROP Scc_ProjName ""
|
||||||
# PROP Scc_LocalPath ""
|
# PROP Scc_LocalPath ""
|
||||||
CPP=cl.exe
|
CPP=cl.exe
|
||||||
RSC=rc.exe
|
RSC=rc.exe
|
||||||
|
|
||||||
!IF "$(CFG)" == "libusb_static - Win32 Release"
|
!IF "$(CFG)" == "libusb_static - Win32 Release"
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
# PROP BASE Use_MFC 0
|
||||||
# PROP BASE Use_Debug_Libraries 0
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
# PROP BASE Output_Dir "Release"
|
# PROP BASE Output_Dir "Release"
|
||||||
# PROP BASE Intermediate_Dir "Release"
|
# PROP BASE Intermediate_Dir "Release"
|
||||||
# PROP BASE Target_Dir ""
|
# PROP BASE Target_Dir ""
|
||||||
# PROP Use_MFC 0
|
# PROP Use_MFC 0
|
||||||
# PROP Use_Debug_Libraries 0
|
# PROP Use_Debug_Libraries 0
|
||||||
# PROP Output_Dir "../Win32/Release/lib"
|
# PROP Output_Dir "../Win32/Release/lib"
|
||||||
# PROP Intermediate_Dir "../Win32/Release/lib"
|
# PROP Intermediate_Dir "../Win32/Release/lib"
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_LIB" /YX /FD /c
|
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_LIB" /YX /FD /c
|
||||||
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../libusb" /D "WIN32" /D "NDEBUG" /D "_UNICODE" /D "UNICODE" /U "_MBCS" /D "_LIB" /FR /FD /EHsc /c
|
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../libusb" /D "WIN32" /D "NDEBUG" /D "_UNICODE" /D "UNICODE" /U "_MBCS" /D "_LIB" /FR /FD /EHsc /c
|
||||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||||
BSC32=bscmake.exe
|
BSC32=bscmake.exe
|
||||||
# ADD BASE BSC32 /nologo
|
# ADD BASE BSC32 /nologo
|
||||||
# ADD BSC32 /nologo
|
# ADD BSC32 /nologo
|
||||||
LIB32=link.exe -lib
|
LIB32=link.exe -lib
|
||||||
# ADD BASE LIB32 /nologo
|
# ADD BASE LIB32 /nologo
|
||||||
# ADD LIB32 /nologo /out:"../Win32/Release/lib/libusb-1.0.lib"
|
# ADD LIB32 /nologo /out:"../Win32/Release/lib/libusb-1.0.lib"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "libusb_static - Win32 Debug"
|
!ELSEIF "$(CFG)" == "libusb_static - Win32 Debug"
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
# PROP BASE Use_MFC 0
|
||||||
# PROP BASE Use_Debug_Libraries 1
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
# PROP BASE Output_Dir "Debug"
|
# PROP BASE Output_Dir "Debug"
|
||||||
# PROP BASE Intermediate_Dir "Debug"
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
# PROP BASE Target_Dir ""
|
# PROP BASE Target_Dir ""
|
||||||
# PROP Use_MFC 0
|
# PROP Use_MFC 0
|
||||||
# PROP Use_Debug_Libraries 1
|
# PROP Use_Debug_Libraries 1
|
||||||
# PROP Output_Dir "../Win32/Debug/lib"
|
# PROP Output_Dir "../Win32/Debug/lib"
|
||||||
# PROP Intermediate_Dir "../Win32/Debug/lib"
|
# PROP Intermediate_Dir "../Win32/Debug/lib"
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_LIB" /YX /FD /GZ /c
|
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_LIB" /YX /FD /GZ /c
|
||||||
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "../libusb" /D "WIN32" /D "_DEBUG" /D "_UNICODE" /D "UNICODE" /U "_MBCS" /D "_LIB" /FR /FD /GZ /EHsc /c
|
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "../libusb" /D "WIN32" /D "_DEBUG" /D "_UNICODE" /D "UNICODE" /U "_MBCS" /D "_LIB" /FR /FD /GZ /EHsc /c
|
||||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
BSC32=bscmake.exe
|
BSC32=bscmake.exe
|
||||||
# ADD BASE BSC32 /nologo
|
# ADD BASE BSC32 /nologo
|
||||||
# ADD BSC32 /nologo /n
|
# ADD BSC32 /nologo /n
|
||||||
LIB32=link.exe -lib
|
LIB32=link.exe -lib
|
||||||
# ADD BASE LIB32 /nologo
|
# ADD BASE LIB32 /nologo
|
||||||
# ADD LIB32 /nologo /out:"../Win32/Debug/lib/libusb-1.0.lib"
|
# ADD LIB32 /nologo /out:"../Win32/Debug/lib/libusb-1.0.lib"
|
||||||
|
|
||||||
!ENDIF
|
!ENDIF
|
||||||
|
|
||||||
# Begin Target
|
# Begin Target
|
||||||
|
|
||||||
# Name "libusb_static - Win32 Release"
|
# Name "libusb_static - Win32 Release"
|
||||||
# Name "libusb_static - Win32 Debug"
|
# Name "libusb_static - Win32 Debug"
|
||||||
# Begin Group "Source Files"
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\core.c
|
SOURCE=..\libusb\core.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\os\darwin_usb.c
|
SOURCE=..\libusb\os\darwin_usb.c
|
||||||
# PROP Exclude_From_Build 1
|
# PROP Exclude_From_Build 1
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\descriptor.c
|
SOURCE=..\libusb\descriptor.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\io.c
|
SOURCE=..\libusb\io.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\os\linux_usbfs.c
|
SOURCE=..\libusb\os\linux_usbfs.c
|
||||||
# PROP Exclude_From_Build 1
|
# PROP Exclude_From_Build 1
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\os\poll_windows.c
|
SOURCE=..\libusb\os\poll_windows.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\sync.c
|
SOURCE=..\libusb\sync.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\os\threads_windows.c
|
SOURCE=..\libusb\os\threads_windows.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\os\windows_usb.c
|
SOURCE=..\libusb\os\windows_usb.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
# Begin Group "Header Files"
|
# Begin Group "Header Files"
|
||||||
|
|
||||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\config.h
|
SOURCE=.\config.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\os\darwin_usb.h
|
SOURCE=..\libusb\os\darwin_usb.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\libusb.h
|
SOURCE=..\libusb\libusb.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\libusbi.h
|
SOURCE=..\libusb\libusbi.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\os\linux_usbfs.h
|
SOURCE=..\libusb\os\linux_usbfs.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\os\poll_posix.h
|
SOURCE=..\libusb\os\poll_posix.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\os\poll_windows.h
|
SOURCE=..\libusb\os\poll_windows.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\os\threads_posix.h
|
SOURCE=..\libusb\os\threads_posix.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\os\threads_windows.h
|
SOURCE=..\libusb\os\threads_windows.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\os\windows_usb.h
|
SOURCE=..\libusb\os\windows_usb.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\libusb\os\windows_common.h
|
SOURCE=..\libusb\os\windows_common.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
# End Target
|
# End Target
|
||||||
# End Project
|
# End Project
|
|
@ -0,0 +1,362 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="libusb-1.0 (static)"
|
||||||
|
ProjectGUID="{5AB6B770-1925-48D5-ABC2-930F3259C020}"
|
||||||
|
RootNamespace="libusb"
|
||||||
|
Keyword="Win32Proj"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
<Platform
|
||||||
|
Name="x64"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="..\$(PlatformName)\$(ConfigurationName)\lib"
|
||||||
|
IntermediateDirectory="..\$(PlatformName)\$(ConfigurationName)\lib\libusb-1.0"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=".;..\libusb"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="$(OutDir)\libusb-1.0.lib"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="..\$(PlatformName)\$(ConfigurationName)\lib"
|
||||||
|
IntermediateDirectory="..\$(PlatformName)\$(ConfigurationName)\lib\libusb-1.0"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=".;..\libusb"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="$(OutDir)\libusb-1.0.lib"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|x64"
|
||||||
|
OutputDirectory="..\$(PlatformName)\$(ConfigurationName)\lib"
|
||||||
|
IntermediateDirectory="..\$(PlatformName)\$(ConfigurationName)\lib\libusb-1.0"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=".;..\libusb"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="$(OutDir)\libusb-1.0.lib"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|x64"
|
||||||
|
OutputDirectory="..\$(PlatformName)\$(ConfigurationName)\lib"
|
||||||
|
IntermediateDirectory="..\$(PlatformName)\$(ConfigurationName)\lib\libusb-1.0"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=".;..\libusb"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="$(OutDir)\libusb-1.0.lib"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\core.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\descriptor.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\hotplug.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\io.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\strerror.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\sync.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\os\threads_windows.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\os\poll_windows.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\os\windows_usb.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\config.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\hotplug.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\libusb.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\libusbi.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\os\threads_windows.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\os\poll_windows.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\os\windows_usb.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libusb\os\windows_common.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
|
@ -0,0 +1,156 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>libusb-1.0 (static)</ProjectName>
|
||||||
|
<ProjectGuid>{349EE8F9-7D25-4909-AAF5-FF3FADE72187}</ProjectGuid>
|
||||||
|
<RootNamespace>libusb</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\</IntDir>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">libusb-1.0</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_WIN64;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_WIN64;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\libusb\core.c" />
|
||||||
|
<ClCompile Include="..\libusb\descriptor.c" />
|
||||||
|
<ClCompile Include="..\libusb\hotplug.c" />
|
||||||
|
<ClCompile Include="..\libusb\io.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\poll_windows.c" />
|
||||||
|
<ClCompile Include="..\libusb\strerror.c" />
|
||||||
|
<ClCompile Include="..\libusb\sync.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\threads_windows.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\windows_usb.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include=".\config.h" />
|
||||||
|
<ClInclude Include="..\libusb\hotplug.h" />
|
||||||
|
<ClInclude Include="..\libusb\version.h" />
|
||||||
|
<ClInclude Include="..\libusb\version_nano.h" />
|
||||||
|
<ClInclude Include="..\libusb\libusb.h" />
|
||||||
|
<ClInclude Include="..\libusb\libusbi.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\poll_windows.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\threads_windows.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\windows_usb.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\windows_common.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -1,74 +1,74 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Filter Include="Source Files">
|
<Filter Include="Source Files">
|
||||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="Header Files">
|
<Filter Include="Header Files">
|
||||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\libusb\core.c">
|
<ClCompile Include="..\libusb\core.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\libusb\descriptor.c">
|
<ClCompile Include="..\libusb\descriptor.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\libusb\io.c">
|
<ClCompile Include="..\libusb\io.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\libusb\os\poll_windows.c">
|
<ClCompile Include="..\libusb\os\poll_windows.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\libusb\strerror.c">
|
<ClCompile Include="..\libusb\strerror.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\libusb\sync.c">
|
<ClCompile Include="..\libusb\sync.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\libusb\os\threads_windows.c">
|
<ClCompile Include="..\libusb\os\threads_windows.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\libusb\os\windows_usb.c">
|
<ClCompile Include="..\libusb\os\windows_usb.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\libusb\hotplug.c">
|
<ClCompile Include="..\libusb\hotplug.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include=".\config.h">
|
<ClInclude Include=".\config.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\libusb\libusb.h">
|
<ClInclude Include="..\libusb\libusb.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\libusb\libusbi.h">
|
<ClInclude Include="..\libusb\libusbi.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\libusb\os\poll_windows.h">
|
<ClInclude Include="..\libusb\os\poll_windows.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\libusb\os\threads_windows.h">
|
<ClInclude Include="..\libusb\os\threads_windows.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\libusb\os\windows_usb.h">
|
<ClInclude Include="..\libusb\os\windows_usb.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\libusb\os\windows_common.h">
|
<ClInclude Include="..\libusb\os\windows_common.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\libusb\version_nano.h">
|
<ClInclude Include="..\libusb\version_nano.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\libusb\version.h">
|
<ClInclude Include="..\libusb\version.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\libusb\hotplug.h">
|
<ClInclude Include="..\libusb\hotplug.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -0,0 +1,160 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>libusb-1.0 (static)</ProjectName>
|
||||||
|
<ProjectGuid>{349EE8F9-7D25-4909-AAF5-FF3FADE72187}</ProjectGuid>
|
||||||
|
<RootNamespace>libusb</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\</IntDir>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">libusb-1.0</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_WIN64;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_WIN64;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\libusb\core.c" />
|
||||||
|
<ClCompile Include="..\libusb\descriptor.c" />
|
||||||
|
<ClCompile Include="..\libusb\hotplug.c" />
|
||||||
|
<ClCompile Include="..\libusb\io.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\poll_windows.c" />
|
||||||
|
<ClCompile Include="..\libusb\strerror.c" />
|
||||||
|
<ClCompile Include="..\libusb\sync.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\threads_windows.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\windows_usb.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\libusb\hotplug.h" />
|
||||||
|
<ClInclude Include="..\libusb\version.h" />
|
||||||
|
<ClInclude Include="..\libusb\version_nano.h" />
|
||||||
|
<ClInclude Include=".\config.h" />
|
||||||
|
<ClInclude Include="..\libusb\libusb.h" />
|
||||||
|
<ClInclude Include="..\libusb\libusbi.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\poll_windows.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\threads_windows.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\windows_usb.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\windows_common.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,74 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\libusb\core.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\descriptor.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\io.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\os\poll_windows.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\strerror.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\sync.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\os\threads_windows.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\os\windows_usb.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libusb\hotplug.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include=".\config.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\libusb.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\libusbi.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\os\poll_windows.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\os\threads_windows.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\os\windows_usb.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\os\windows_common.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\version_nano.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\version.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libusb\hotplug.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,160 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>libusb-1.0 (static)</ProjectName>
|
||||||
|
<ProjectGuid>{349EE8F9-7D25-4909-AAF5-FF3FADE72187}</ProjectGuid>
|
||||||
|
<RootNamespace>libusb</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup>
|
||||||
|
<Import Project="..\..\..\Source\VSProps\Base.props" />
|
||||||
|
<Import Project="..\..\..\Source\VSProps\ClDisableAllWarnings.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\</IntDir>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">libusb-1.0</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">libusb-1.0</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_WIN64;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_WIN32;_WIN64;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib>
|
||||||
|
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
||||||
|
</Lib>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\libusb\core.c" />
|
||||||
|
<ClCompile Include="..\libusb\descriptor.c" />
|
||||||
|
<ClCompile Include="..\libusb\hotplug.c" />
|
||||||
|
<ClCompile Include="..\libusb\io.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\poll_windows.c" />
|
||||||
|
<ClCompile Include="..\libusb\strerror.c" />
|
||||||
|
<ClCompile Include="..\libusb\sync.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\threads_windows.c" />
|
||||||
|
<ClCompile Include="..\libusb\os\windows_usb.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\libusb\hotplug.h" />
|
||||||
|
<ClInclude Include="..\libusb\version.h" />
|
||||||
|
<ClInclude Include="..\libusb\version_nano.h" />
|
||||||
|
<ClInclude Include=".\config.h" />
|
||||||
|
<ClInclude Include="..\libusb\libusb.h" />
|
||||||
|
<ClInclude Include="..\libusb\libusbi.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\poll_windows.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\threads_windows.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\windows_usb.h" />
|
||||||
|
<ClInclude Include="..\libusb\os\windows_common.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,246 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||||
|
# Visual Studio 2005
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (dll)", "libusb_dll_wince.vcproj", "{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "listdevs", "listdevs_wince.vcproj", "{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xusb", "xusb_wince.vcproj", "{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (static)", "libusb_static_wince.vcproj", "{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stress", "stress_wince.vcproj", "{61476624-3354-48C8-9334-85AC0D624640}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|STANDARDSDK_500 (ARMV4I) = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
Debug|STANDARDSDK_500 (MIPSII) = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
Debug|STANDARDSDK_500 (MIPSII_FP) = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
Debug|STANDARDSDK_500 (MIPSIV) = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
Debug|STANDARDSDK_500 (MIPSIV_FP) = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
Debug|STANDARDSDK_500 (SH4) = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
Debug|STANDARDSDK_500 (x86) = Debug|STANDARDSDK_500 (x86)
|
||||||
|
Release|STANDARDSDK_500 (ARMV4I) = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
Release|STANDARDSDK_500 (MIPSII) = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
Release|STANDARDSDK_500 (MIPSII_FP) = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
Release|STANDARDSDK_500 (MIPSIV) = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
Release|STANDARDSDK_500 (MIPSIV_FP) = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
Release|STANDARDSDK_500 (SH4) = Release|STANDARDSDK_500 (SH4)
|
||||||
|
Release|STANDARDSDK_500 (x86) = Release|STANDARDSDK_500 (x86)
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (ARMV4I).ActiveCfg = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (ARMV4I).Build.0 = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (ARMV4I).Deploy.0 = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (MIPSII).ActiveCfg = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (MIPSII).Build.0 = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (MIPSII).Deploy.0 = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (MIPSII_FP).ActiveCfg = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (MIPSII_FP).Build.0 = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (MIPSII_FP).Deploy.0 = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (MIPSIV).ActiveCfg = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (MIPSIV).Build.0 = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (MIPSIV).Deploy.0 = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (MIPSIV_FP).ActiveCfg = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (MIPSIV_FP).Build.0 = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (MIPSIV_FP).Deploy.0 = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (SH4).ActiveCfg = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (SH4).Build.0 = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (SH4).Deploy.0 = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (x86).ActiveCfg = Debug|STANDARDSDK_500 (x86)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (x86).Build.0 = Debug|STANDARDSDK_500 (x86)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Debug|STANDARDSDK_500 (x86).Deploy.0 = Debug|STANDARDSDK_500 (x86)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (ARMV4I).ActiveCfg = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (ARMV4I).Build.0 = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (ARMV4I).Deploy.0 = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (MIPSII).ActiveCfg = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (MIPSII).Build.0 = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (MIPSII).Deploy.0 = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (MIPSII_FP).ActiveCfg = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (MIPSII_FP).Build.0 = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (MIPSII_FP).Deploy.0 = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (MIPSIV).ActiveCfg = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (MIPSIV).Build.0 = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (MIPSIV).Deploy.0 = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (MIPSIV_FP).ActiveCfg = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (MIPSIV_FP).Build.0 = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (MIPSIV_FP).Deploy.0 = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (SH4).ActiveCfg = Release|STANDARDSDK_500 (SH4)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (SH4).Build.0 = Release|STANDARDSDK_500 (SH4)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (SH4).Deploy.0 = Release|STANDARDSDK_500 (SH4)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (x86).ActiveCfg = Release|STANDARDSDK_500 (x86)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (x86).Build.0 = Release|STANDARDSDK_500 (x86)
|
||||||
|
{6A49B75F-FB1C-45C0-B7C3-A7698255E7E9}.Release|STANDARDSDK_500 (x86).Deploy.0 = Release|STANDARDSDK_500 (x86)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (ARMV4I).ActiveCfg = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (ARMV4I).Build.0 = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (ARMV4I).Deploy.0 = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (MIPSII).ActiveCfg = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (MIPSII).Build.0 = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (MIPSII).Deploy.0 = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (MIPSII_FP).ActiveCfg = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (MIPSII_FP).Build.0 = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (MIPSII_FP).Deploy.0 = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (MIPSIV).ActiveCfg = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (MIPSIV).Build.0 = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (MIPSIV).Deploy.0 = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (MIPSIV_FP).ActiveCfg = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (MIPSIV_FP).Build.0 = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (MIPSIV_FP).Deploy.0 = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (SH4).ActiveCfg = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (SH4).Build.0 = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (SH4).Deploy.0 = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (x86).ActiveCfg = Debug|STANDARDSDK_500 (x86)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (x86).Build.0 = Debug|STANDARDSDK_500 (x86)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Debug|STANDARDSDK_500 (x86).Deploy.0 = Debug|STANDARDSDK_500 (x86)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (ARMV4I).ActiveCfg = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (ARMV4I).Build.0 = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (ARMV4I).Deploy.0 = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (MIPSII).ActiveCfg = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (MIPSII).Build.0 = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (MIPSII).Deploy.0 = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (MIPSII_FP).ActiveCfg = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (MIPSII_FP).Build.0 = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (MIPSII_FP).Deploy.0 = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (MIPSIV).ActiveCfg = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (MIPSIV).Build.0 = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (MIPSIV).Deploy.0 = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (MIPSIV_FP).ActiveCfg = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (MIPSIV_FP).Build.0 = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (MIPSIV_FP).Deploy.0 = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (SH4).ActiveCfg = Release|STANDARDSDK_500 (SH4)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (SH4).Build.0 = Release|STANDARDSDK_500 (SH4)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (SH4).Deploy.0 = Release|STANDARDSDK_500 (SH4)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (x86).ActiveCfg = Release|STANDARDSDK_500 (x86)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (x86).Build.0 = Release|STANDARDSDK_500 (x86)
|
||||||
|
{960C3BC3-26D6-49C7-ACE4-0AE65CC049E6}.Release|STANDARDSDK_500 (x86).Deploy.0 = Release|STANDARDSDK_500 (x86)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (ARMV4I).ActiveCfg = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (ARMV4I).Build.0 = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (ARMV4I).Deploy.0 = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (MIPSII).ActiveCfg = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (MIPSII).Build.0 = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (MIPSII).Deploy.0 = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (MIPSII_FP).ActiveCfg = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (MIPSII_FP).Build.0 = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (MIPSII_FP).Deploy.0 = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (MIPSIV).ActiveCfg = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (MIPSIV).Build.0 = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (MIPSIV).Deploy.0 = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (MIPSIV_FP).ActiveCfg = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (MIPSIV_FP).Build.0 = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (MIPSIV_FP).Deploy.0 = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (SH4).ActiveCfg = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (SH4).Build.0 = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (SH4).Deploy.0 = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (x86).ActiveCfg = Debug|STANDARDSDK_500 (x86)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (x86).Build.0 = Debug|STANDARDSDK_500 (x86)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Debug|STANDARDSDK_500 (x86).Deploy.0 = Debug|STANDARDSDK_500 (x86)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (ARMV4I).ActiveCfg = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (ARMV4I).Build.0 = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (ARMV4I).Deploy.0 = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (MIPSII).ActiveCfg = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (MIPSII).Build.0 = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (MIPSII).Deploy.0 = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (MIPSII_FP).ActiveCfg = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (MIPSII_FP).Build.0 = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (MIPSII_FP).Deploy.0 = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (MIPSIV).ActiveCfg = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (MIPSIV).Build.0 = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (MIPSIV).Deploy.0 = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (MIPSIV_FP).ActiveCfg = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (MIPSIV_FP).Build.0 = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (MIPSIV_FP).Deploy.0 = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (SH4).ActiveCfg = Release|STANDARDSDK_500 (SH4)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (SH4).Build.0 = Release|STANDARDSDK_500 (SH4)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (SH4).Deploy.0 = Release|STANDARDSDK_500 (SH4)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (x86).ActiveCfg = Release|STANDARDSDK_500 (x86)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (x86).Build.0 = Release|STANDARDSDK_500 (x86)
|
||||||
|
{93F53A7E-6DEF-469A-ABD4-A5AD02A0A511}.Release|STANDARDSDK_500 (x86).Deploy.0 = Release|STANDARDSDK_500 (x86)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (ARMV4I).ActiveCfg = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (ARMV4I).Build.0 = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (ARMV4I).Deploy.0 = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (MIPSII).ActiveCfg = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (MIPSII).Build.0 = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (MIPSII).Deploy.0 = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (MIPSII_FP).ActiveCfg = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (MIPSII_FP).Build.0 = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (MIPSII_FP).Deploy.0 = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (MIPSIV).ActiveCfg = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (MIPSIV).Build.0 = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (MIPSIV).Deploy.0 = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (MIPSIV_FP).ActiveCfg = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (MIPSIV_FP).Build.0 = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (MIPSIV_FP).Deploy.0 = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (SH4).ActiveCfg = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (SH4).Build.0 = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (SH4).Deploy.0 = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (x86).ActiveCfg = Debug|STANDARDSDK_500 (x86)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (x86).Build.0 = Debug|STANDARDSDK_500 (x86)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Debug|STANDARDSDK_500 (x86).Deploy.0 = Debug|STANDARDSDK_500 (x86)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (ARMV4I).ActiveCfg = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (ARMV4I).Build.0 = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (ARMV4I).Deploy.0 = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (MIPSII).ActiveCfg = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (MIPSII).Build.0 = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (MIPSII).Deploy.0 = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (MIPSII_FP).ActiveCfg = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (MIPSII_FP).Build.0 = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (MIPSII_FP).Deploy.0 = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (MIPSIV).ActiveCfg = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (MIPSIV).Build.0 = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (MIPSIV).Deploy.0 = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (MIPSIV_FP).ActiveCfg = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (MIPSIV_FP).Build.0 = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (MIPSIV_FP).Deploy.0 = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (SH4).ActiveCfg = Release|STANDARDSDK_500 (SH4)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (SH4).Build.0 = Release|STANDARDSDK_500 (SH4)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (SH4).Deploy.0 = Release|STANDARDSDK_500 (SH4)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (x86).ActiveCfg = Release|STANDARDSDK_500 (x86)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (x86).Build.0 = Release|STANDARDSDK_500 (x86)
|
||||||
|
{CE67BEFB-37EA-4F5C-A60E-F2D0CC91B6AA}.Release|STANDARDSDK_500 (x86).Deploy.0 = Release|STANDARDSDK_500 (x86)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (ARMV4I).ActiveCfg = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (ARMV4I).Build.0 = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (ARMV4I).Deploy.0 = Debug|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (MIPSII).ActiveCfg = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (MIPSII).Build.0 = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (MIPSII).Deploy.0 = Debug|STANDARDSDK_500 (MIPSII)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (MIPSII_FP).ActiveCfg = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (MIPSII_FP).Build.0 = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (MIPSII_FP).Deploy.0 = Debug|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (MIPSIV).ActiveCfg = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (MIPSIV).Build.0 = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (MIPSIV).Deploy.0 = Debug|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (MIPSIV_FP).ActiveCfg = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (MIPSIV_FP).Build.0 = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (MIPSIV_FP).Deploy.0 = Debug|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (SH4).ActiveCfg = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (SH4).Build.0 = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (SH4).Deploy.0 = Debug|STANDARDSDK_500 (SH4)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (x86).ActiveCfg = Debug|STANDARDSDK_500 (x86)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (x86).Build.0 = Debug|STANDARDSDK_500 (x86)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Debug|STANDARDSDK_500 (x86).Deploy.0 = Debug|STANDARDSDK_500 (x86)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (ARMV4I).ActiveCfg = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (ARMV4I).Build.0 = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (ARMV4I).Deploy.0 = Release|STANDARDSDK_500 (ARMV4I)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (MIPSII).ActiveCfg = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (MIPSII).Build.0 = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (MIPSII).Deploy.0 = Release|STANDARDSDK_500 (MIPSII)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (MIPSII_FP).ActiveCfg = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (MIPSII_FP).Build.0 = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (MIPSII_FP).Deploy.0 = Release|STANDARDSDK_500 (MIPSII_FP)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (MIPSIV).ActiveCfg = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (MIPSIV).Build.0 = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (MIPSIV).Deploy.0 = Release|STANDARDSDK_500 (MIPSIV)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (MIPSIV_FP).ActiveCfg = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (MIPSIV_FP).Build.0 = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (MIPSIV_FP).Deploy.0 = Release|STANDARDSDK_500 (MIPSIV_FP)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (SH4).ActiveCfg = Release|STANDARDSDK_500 (SH4)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (SH4).Build.0 = Release|STANDARDSDK_500 (SH4)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (SH4).Deploy.0 = Release|STANDARDSDK_500 (SH4)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (x86).ActiveCfg = Release|STANDARDSDK_500 (x86)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (x86).Build.0 = Release|STANDARDSDK_500 (x86)
|
||||||
|
{61476624-3354-48C8-9334-85AC0D624640}.Release|STANDARDSDK_500 (x86).Deploy.0 = Release|STANDARDSDK_500 (x86)
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
|
@ -0,0 +1,103 @@
|
||||||
|
# Microsoft Developer Studio Project File - Name="listdevs" - Package Owner=<4>
|
||||||
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||||
|
|
||||||
|
CFG=listdevs - Win32 Debug
|
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
|
!MESSAGE use the Export Makefile command and run
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "listdevs.mak".
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "listdevs.mak" CFG="listdevs - Win32 Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "listdevs - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE "listdevs - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE
|
||||||
|
|
||||||
|
# Begin Project
|
||||||
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
# PROP Scc_ProjName ""
|
||||||
|
# PROP Scc_LocalPath ""
|
||||||
|
CPP=cl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "listdevs - Win32 Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release"
|
||||||
|
# PROP BASE Intermediate_Dir "Release"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "../Win32/Release/examples"
|
||||||
|
# PROP Intermediate_Dir "../Win32/Release/examples/listdevs"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /FD /c
|
||||||
|
# ADD CPP /nologo /MD /W3 /GX /O2 /I "../libusb" /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /U "_MBCS" /FR /FD /EHsc /c
|
||||||
|
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "listdevs - Win32 Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "../Win32/Debug/examples"
|
||||||
|
# PROP Intermediate_Dir "../Win32/Debug/examples/listdevs"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../libusb" /I "." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /U "_MBCS" /FR /FD /GZ /EHsc /c
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo /n "../Win32/Debug/dll/core.sbr" "../Win32/Debug/dll/descriptor.sbr" "../Win32/Debug/dll/io.sbr" "../Win32/Debug/dll/sync.sbr" "../Win32/Debug/dll/poll_windows.sbr" "../Win32/Debug/dll/threads_windows.sbr" "../Win32/Debug/dll/windows_usb.sbr"
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
|
||||||
|
# SUBTRACT LINK32 /pdb:none
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "listdevs - Win32 Release"
|
||||||
|
# Name "listdevs - Win32 Debug"
|
||||||
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\examples\listdevs.c
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Header Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Resource Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||||
|
# End Group
|
||||||
|
# End Target
|
||||||
|
# End Project
|
|
@ -0,0 +1,360 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="listdevs"
|
||||||
|
ProjectGUID="{98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}"
|
||||||
|
RootNamespace="examples"
|
||||||
|
Keyword="Win32Proj"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
<Platform
|
||||||
|
Name="x64"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="..\$(PlatformName)\$(ConfigurationName)\examples"
|
||||||
|
IntermediateDirectory="..\$(PlatformName)\$(ConfigurationName)\examples\$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories="..\libusb"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkIncremental="2"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="..\$(PlatformName)\$(ConfigurationName)\examples"
|
||||||
|
IntermediateDirectory="..\$(PlatformName)\$(ConfigurationName)\examples\$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories="..\libusb"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkIncremental="1"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|x64"
|
||||||
|
OutputDirectory="..\$(PlatformName)\$(ConfigurationName)\examples"
|
||||||
|
IntermediateDirectory="..\$(PlatformName)\$(ConfigurationName)\examples\$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories="..\libusb"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkIncremental="2"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
TargetMachine="17"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|x64"
|
||||||
|
OutputDirectory="..\$(PlatformName)\$(ConfigurationName)\examples"
|
||||||
|
IntermediateDirectory="..\$(PlatformName)\$(ConfigurationName)\examples\$(ProjectName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories="..\libusb"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkIncremental="1"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="17"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\examples\listdevs.c"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|x64"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Detect64BitPortabilityProblems="false"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
|
@ -0,0 +1,165 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>listdevs</ProjectName>
|
||||||
|
<ProjectGuid>{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}</ProjectGuid>
|
||||||
|
<RootNamespace>examples</RootNamespace>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>$(TargetDir)$(ProjectName).pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>$(TargetDir)$(ProjectName).pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<ProgramDatabaseFile>$(TargetDir)$(ProjectName).pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<ProgramDatabaseFile>$(TargetDir)$(ProjectName).pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\listdevs.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include=".\libusb_static_2010.vcxproj">
|
||||||
|
<Project>{349ee8f9-7d25-4909-aaf5-ff3fade72187}</Project>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\listdevs.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,169 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>listdevs</ProjectName>
|
||||||
|
<ProjectGuid>{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}</ProjectGuid>
|
||||||
|
<RootNamespace>examples</RootNamespace>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>$(TargetDir)$(ProjectName).pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>$(TargetDir)$(ProjectName).pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<ProgramDatabaseFile>$(TargetDir)$(ProjectName).pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<ProgramDatabaseFile>$(TargetDir)$(ProjectName).pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\listdevs.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include=".\libusb_static_2012.vcxproj">
|
||||||
|
<Project>{349ee8f9-7d25-4909-aaf5-ff3fade72187}</Project>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\listdevs.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,169 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>listdevs</ProjectName>
|
||||||
|
<ProjectGuid>{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}</ProjectGuid>
|
||||||
|
<RootNamespace>examples</RootNamespace>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>$(TargetDir)$(ProjectName).pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>$(TargetDir)$(ProjectName).pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<ProgramDatabaseFile>$(TargetDir)$(ProjectName).pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<BuildLog>
|
||||||
|
<Path>$(IntDir)$(ProjectName).htm</Path>
|
||||||
|
</BuildLog>
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<ProgramDatabaseFile>$(TargetDir)$(ProjectName).pdb</ProgramDatabaseFile>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\examples\listdevs.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include=".\libusb_static_2013.vcxproj">
|
||||||
|
<Project>{349ee8f9-7d25-4909-aaf5-ff3fade72187}</Project>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,19 @@
|
||||||
|
TARGETNAME=listdevs
|
||||||
|
TARGETTYPE=PROGRAM
|
||||||
|
386_STDCALL=0
|
||||||
|
|
||||||
|
_NT_TARGET_VERSION= $(_NT_TARGET_VERSION_WINXP)
|
||||||
|
!IFNDEF MSC_WARNING_LEVEL
|
||||||
|
MSC_WARNING_LEVEL=/W3
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IFDEF STATIC_LIBC
|
||||||
|
USE_LIBCMT=1
|
||||||
|
!ELSE
|
||||||
|
USE_MSVCRT=1
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
UMTYPE=console
|
||||||
|
INCLUDES=..\..\libusb;$(DDK_INC_PATH)
|
||||||
|
UMLIBS=..\..\libusb\os\obj$(BUILD_ALT_DIR)\*\libusb-1.0.lib
|
||||||
|
SOURCES=..\listdevs.c
|
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue