Index: head/devel/android-tools-fastboot/files/usb_freebsd.cpp =================================================================== --- head/devel/android-tools-fastboot/files/usb_freebsd.cpp (revision 448528) +++ head/devel/android-tools-fastboot/files/usb_freebsd.cpp (revision 448529) @@ -1,208 +1,208 @@ /* * Copyright (C) 2011 Hans Petter Selasky. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include #include #include #include #include #include "usb.h" struct usb_handle { libusb_device_handle *handle; libusb_device *dev; unsigned char ep_in; unsigned char ep_out; unsigned char iface; }; class LibusbUsbTransport : public Transport { public: explicit LibusbUsbTransport(std::unique_ptr handle): h(std::move(handle)) {} ~LibusbUsbTransport() override = default; ssize_t Read(void *_data, size_t len) override; ssize_t Write(const void *_data, size_t len) override; int Close() override; private: std::unique_ptr h; DISALLOW_COPY_AND_ASSIGN(LibusbUsbTransport); }; static int probe(std::unique_ptr &h, ifc_match_func callback) { usb_ifc_info info; libusb_device_descriptor ddesc; libusb_config_descriptor *pcfg; int i, j; if (libusb_open(h->dev, &h->handle) < 0) return (-1); if (libusb_get_device_descriptor(h->dev, &ddesc) < 0) { libusb_close(h->handle); return (-1); } memset(&info, 0, sizeof(info)); info.dev_vendor = ddesc.idVendor; info.dev_product = ddesc.idProduct; info.dev_class = ddesc.bDeviceClass; info.dev_subclass = ddesc.bDeviceSubClass; info.dev_protocol = ddesc.bDeviceProtocol; info.writable = 1; - snprintf(info.device_path, sizeof(info.device_path), "ugen%d.%d", + snprintf(info.device_path, sizeof(info.device_path), "usb:%d:%d", libusb_get_bus_number(h->dev), libusb_get_device_address(h->dev)); if (ddesc.iSerialNumber != 0) { libusb_get_string_descriptor_ascii(h->handle, ddesc.iSerialNumber, (unsigned char *)info.serial_number, sizeof(info.serial_number)); } if (libusb_get_active_config_descriptor(h->dev, &pcfg)) { libusb_close(h->handle); return (-1); } for (i = 0; i < pcfg->bNumInterfaces; i++) { h->ep_in = 0; h->ep_out = 0; h->iface = i; for (j = 0; j < pcfg->interface[i].altsetting[0].bNumEndpoints; j++) { unsigned char temp = pcfg->interface[i].altsetting[0]. endpoint[j].bEndpointAddress; unsigned char type = pcfg->interface[i].altsetting[0]. endpoint[j].bmAttributes & 0x03; /* check for BULK endpoint */ if ((type & 0x03) == 0x02) { /* check for IN endpoint */ if (temp & 0x80) h->ep_in = temp; else h->ep_out = temp; } } info.ifc_class = pcfg->interface[i].altsetting[0].bInterfaceClass; info.ifc_subclass = pcfg->interface[i].altsetting[0].bInterfaceSubClass; info.ifc_protocol = pcfg->interface[i].altsetting[0].bInterfaceProtocol; info.has_bulk_in = (h->ep_in != 0); info.has_bulk_out = (h->ep_out != 0); if (libusb_claim_interface(h->handle, h->iface) < 0) continue; if (callback(&info) == 0) { libusb_free_config_descriptor(pcfg); return (0); } libusb_release_interface(h->handle, h->iface); } libusb_free_config_descriptor(pcfg); libusb_close(h->handle); return (-1); } static std::unique_ptr enumerate(ifc_match_func callback) { static libusb_context *ctx = NULL; std::unique_ptr h; libusb_device **ppdev; ssize_t ndev; ssize_t x; if (ctx == NULL) libusb_init(&ctx); ndev = libusb_get_device_list(ctx, &ppdev); for (x = 0; x < ndev; x++) { h.reset(new usb_handle); h->dev = ppdev[x]; if (probe(h, callback) == 0) { libusb_ref_device(h->dev); libusb_free_device_list(ppdev, 1); return (h); } } h.reset(); libusb_free_device_list(ppdev, 1); return (nullptr); } ssize_t LibusbUsbTransport::Write(const void *_data, size_t len) { int actlen; if (libusb_bulk_transfer(h->handle, h->ep_out, (unsigned char *)_data, len, &actlen, 0) < 0) return (-1); return (actlen); } ssize_t LibusbUsbTransport::Read(void *_data, size_t len) { int actlen; if (libusb_bulk_transfer(h->handle, h->ep_in, (unsigned char *)_data, len, &actlen, 0) < 0) return (-1); return (actlen); } int LibusbUsbTransport::Close() { libusb_close(h->handle); h->handle = NULL; libusb_unref_device(h->dev); h.reset(); return (0); } Transport * usb_open(ifc_match_func callback) { std::unique_ptr h = enumerate(callback); return (h ? new LibusbUsbTransport(std::move(h)) : nullptr); } Index: head/devel/android-tools-fastboot-devel/Makefile =================================================================== --- head/devel/android-tools-fastboot-devel/Makefile (revision 448528) +++ head/devel/android-tools-fastboot-devel/Makefile (revision 448529) @@ -1,20 +1,19 @@ # $FreeBSD$ # Hint: git describe --abbrev=12 --match android-o-preview-2 DISTVERSION= o-preview-2-332 DISTVERSIONSUFFIX= -gd1e9e7bc06f0 PORTREVISION= 1 PKGNAMESUFFIX= -devel GH_MYTAG= ${DISTVERSIONPREFIX}${DISTVERSION:C/-[0-9]*$//} GH_TAGNAME= ${GH_MYTAG}-50-gebf42931:extras \ ${GH_MYTAG}-43-ga63b41e:libselinux CONFLICTS_INSTALL= ${PORTNAME}-[0-9]* MASTERDIR= ${.CURDIR}/../android-tools-fastboot DISTINFO_FILE= ${.CURDIR}/distinfo -FILESDIR= ${.CURDIR}/files EXTRA_PATCHES= ${.CURDIR}/files/patch-* .include "${MASTERDIR}/Makefile" Index: head/devel/android-tools-fastboot-devel/files/pkg-message.in =================================================================== --- head/devel/android-tools-fastboot-devel/files/pkg-message.in (revision 448528) +++ head/devel/android-tools-fastboot-devel/files/pkg-message.in (nonexistent) @@ -1,7 +0,0 @@ -The port installed fastboot(1) under %%PREFIX%%/bin. However, there's -a different fastboot(8) under /sbin. To avoid accidentally invoking -the wrong command make sure either to - -- adjust PATH environment variable to have fastboot(1) found first -- create a shell alias with absolute path to fastboot(1) -- create a symlink with different name in PATH e.g., under ~/bin Property changes on: head/devel/android-tools-fastboot-devel/files/pkg-message.in ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/devel/android-tools-fastboot-devel/files/usb_freebsd.cpp =================================================================== --- head/devel/android-tools-fastboot-devel/files/usb_freebsd.cpp (revision 448528) +++ head/devel/android-tools-fastboot-devel/files/usb_freebsd.cpp (nonexistent) @@ -1,208 +0,0 @@ -/* - * Copyright (C) 2011 Hans Petter Selasky. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#include - -#include "usb.h" - -struct usb_handle { - libusb_device_handle *handle; - libusb_device *dev; - unsigned char ep_in; - unsigned char ep_out; - unsigned char iface; -}; - -class LibusbUsbTransport : public Transport { -public: - explicit LibusbUsbTransport(std::unique_ptr handle): - h(std::move(handle)) {} - ~LibusbUsbTransport() override = default; - - ssize_t Read(void *_data, size_t len) override; - ssize_t Write(const void *_data, size_t len) override; - int Close() override; - -private: - std::unique_ptr h; - - DISALLOW_COPY_AND_ASSIGN(LibusbUsbTransport); -}; - -static int -probe(std::unique_ptr &h, ifc_match_func callback) -{ - usb_ifc_info info; - libusb_device_descriptor ddesc; - libusb_config_descriptor *pcfg; - int i, j; - - if (libusb_open(h->dev, &h->handle) < 0) - return (-1); - - if (libusb_get_device_descriptor(h->dev, &ddesc) < 0) { - libusb_close(h->handle); - return (-1); - } - memset(&info, 0, sizeof(info)); - - info.dev_vendor = ddesc.idVendor; - info.dev_product = ddesc.idProduct; - info.dev_class = ddesc.bDeviceClass; - info.dev_subclass = ddesc.bDeviceSubClass; - info.dev_protocol = ddesc.bDeviceProtocol; - info.writable = 1; - - snprintf(info.device_path, sizeof(info.device_path), "usb:%d:%d", - libusb_get_bus_number(h->dev), libusb_get_device_address(h->dev)); - - if (ddesc.iSerialNumber != 0) { - libusb_get_string_descriptor_ascii(h->handle, ddesc.iSerialNumber, - (unsigned char *)info.serial_number, sizeof(info.serial_number)); - } - if (libusb_get_active_config_descriptor(h->dev, &pcfg)) { - libusb_close(h->handle); - return (-1); - } - - for (i = 0; i < pcfg->bNumInterfaces; i++) { - - h->ep_in = 0; - h->ep_out = 0; - h->iface = i; - - for (j = 0; j < pcfg->interface[i].altsetting[0].bNumEndpoints; j++) { - - unsigned char temp = pcfg->interface[i].altsetting[0]. - endpoint[j].bEndpointAddress; - unsigned char type = pcfg->interface[i].altsetting[0]. - endpoint[j].bmAttributes & 0x03; - - /* check for BULK endpoint */ - if ((type & 0x03) == 0x02) { - /* check for IN endpoint */ - if (temp & 0x80) - h->ep_in = temp; - else - h->ep_out = temp; - } - } - - info.ifc_class = pcfg->interface[i].altsetting[0].bInterfaceClass; - info.ifc_subclass = pcfg->interface[i].altsetting[0].bInterfaceSubClass; - info.ifc_protocol = pcfg->interface[i].altsetting[0].bInterfaceProtocol; - info.has_bulk_in = (h->ep_in != 0); - info.has_bulk_out = (h->ep_out != 0); - - if (libusb_claim_interface(h->handle, h->iface) < 0) - continue; - - if (callback(&info) == 0) { - libusb_free_config_descriptor(pcfg); - return (0); - } - libusb_release_interface(h->handle, h->iface); - } - - libusb_free_config_descriptor(pcfg); - libusb_close(h->handle); - return (-1); -} - -static std::unique_ptr -enumerate(ifc_match_func callback) -{ - static libusb_context *ctx = NULL; - std::unique_ptr h; - libusb_device **ppdev; - ssize_t ndev; - ssize_t x; - - if (ctx == NULL) - libusb_init(&ctx); - - ndev = libusb_get_device_list(ctx, &ppdev); - for (x = 0; x < ndev; x++) { - - h.reset(new usb_handle); - - h->dev = ppdev[x]; - - if (probe(h, callback) == 0) { - libusb_ref_device(h->dev); - libusb_free_device_list(ppdev, 1); - return (h); - } - } - h.reset(); - libusb_free_device_list(ppdev, 1); - return (nullptr); -} - -ssize_t -LibusbUsbTransport::Write(const void *_data, size_t len) -{ - int actlen; - - if (libusb_bulk_transfer(h->handle, h->ep_out, - (unsigned char *)_data, len, &actlen, 0) < 0) - return (-1); - return (actlen); -} - -ssize_t -LibusbUsbTransport::Read(void *_data, size_t len) -{ - int actlen; - - if (libusb_bulk_transfer(h->handle, h->ep_in, - (unsigned char *)_data, len, &actlen, 0) < 0) - return (-1); - return (actlen); -} - -int -LibusbUsbTransport::Close() -{ - libusb_close(h->handle); - h->handle = NULL; - libusb_unref_device(h->dev); - h.reset(); - return (0); -} - -Transport * -usb_open(ifc_match_func callback) -{ - std::unique_ptr h = enumerate(callback); - return (h ? new LibusbUsbTransport(std::move(h)) : nullptr); -} Property changes on: head/devel/android-tools-fastboot-devel/files/usb_freebsd.cpp ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property