Export to GitHub

btstack - issue #211

[PATCH] Win32-Cygwin with USB support


Posted on Nov 12, 2011 by Happy Bird

Attached are patches adding Win32 USB support to btstack. From usbForWin32.c: // Compatibility layer to allow apps using the libusb-1.0 to use libusb-win32 // (which uses the libusb-0.1 API). Only the parts required by btstack are // implemented. // We don't use the libusb-1.0 support for Win32 because it currently uses // the WinUSB driver which can't handle Bluetooth devices.

Attached are three/four patches 1. usb1aa.patch -- Various general fixes and tidying-up to hci_tranport_usb.c and daemon.c: Missed libusb_free_config_descriptor, missed "\n"s in logging strings, tv uninitialised, setting libusb_state twice, check of length of bulk_write.

  1. usb1.patch -- Make some changes to hci_tranport_usb.c to support use on Win32/Cygwin. Includes the above changes too. The Win32 support needs the next patch in place to work.

  2. usb2_Win32Cygwin.patch -- Secondly my libusb-1.0 to libusb-win32/0.1 compat layer. The two new files contains the license as used by the existing files in btstack. The modified version of libusb.h contains a GPL-style license…

  3. cfgin3.patch -- Change configure.in to not require USB_VENDOR_ID and USB_PRODUCT_ID as the USB device look-up functions in hci_tranport_usb.c seem to work fine -- on my Windows box at least.

To use on Win32: 1. Download the btstack sources. 2. Download the libusb-win (libusb-0.1) binaries. (I used libusb-win32-bin-1.2.5.0.zip). 3. Run its inf-wizard.exe app with administrator privileges, select the Bluetooth dongle you wish to use, and install the driver. 4. In btstack as normal run ./bootstrap.sh, ./configure, and make. For ./configure use the following command which enables USB support and adds the USB compat layer and libusb-win32 usage. Change the vendor-id and product-id values to suit the dongle, and the path to suit the location of the libusb-win32 installation.

./configure --with-hci-transport=usb --with-vendor-id=0x1234 --with-product-id=0x4567 PLATFORM_SOURCES="usbForWin32.c" LIBUSB_CFLAGS=" " CPPFLAGS="-I/tmp/libusb-win32-bin-1.2.5.0/include" LIBUSB_LIBS="-lusb"

  1. Run BTDaemon.exe as usual and one of the example apps and all should be well.

Notes on minor items. • In the "configure" command I originally used LIBUSB_CFLAGS but they didn't seem to appear in the Makefile and thus I changed to using CPPFLAGS. On investigation it appears that "configure.in" has both CFLAGS and CPPFLAGS, but that CFLAGS is not used in creating the makefiles. I wasn't sure whether add CFLAGS to the makefiles, or to simply remove all usage of CFLAGS in configure.in.

Attachments

Comment #1

Posted on Nov 20, 2011 by Happy Bird

Patches usb1aa.patch and cfgin3NotRequireVendorProduct.patch are independent of Win32/Cygwin. Therefore they can/should be applied now and the Win32 bits left for later analysis/application.

  • usb1aa.patch -- fixes some small bugs in src/hci_transport_usb.c

  • cfgin3NotRequireVendorProduct.patch -- Enables the use of the automatic USB search for a BT radio, not requiring USB_VENDOR_ID, USB_PRODUCT_ID.

Comment #2

Posted on Nov 28, 2011 by Happy Bird

A new version of the USB Win32 compat layer: Correctly NULL terminate the libusb_get_device_list return value -- only really important when no dongles are plugged-in.

As before: Patches usb1aa.patch and cfgin3NotRequireVendorProduct.patch are independent of Win32/Cygwin. Therefore they can/should be applied now and the Win32 bits left for later analysis/application.

Attachments

Comment #3

Posted on Nov 13, 2014 by Swift Ox

Hi Alan! Long time ago, you've ported BTstack and submitted the patches above. I think I did apply the general ones at that time. I've also figured I get a stab at getting BTstack to run on Windows and libusb-1.0 since that's available now and uses the stable WinUSB backend. It's compiled using MINGW and MSYS. The code in example/libusb assumes that libusb has been installed in the default /usr/local. I'll probably clean it up a bit and move the Makefile to platforms/libusb/example. Let me know if you give it a try. Cheers, Matthias

Status: Fixed

Labels:
Type-Defect Priority-Medium