1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#pragma once 18 19#include <sys/types.h> 20 21// USB host/client interface. 22 23#define ADB_USB_INTERFACE(handle_ref_type) \ 24 void usb_init(); \ 25 void usb_cleanup(); \ 26 int usb_write(handle_ref_type h, const void* data, int len); \ 27 int usb_read(handle_ref_type h, void* data, int len); \ 28 int usb_close(handle_ref_type h); \ 29 void usb_kick(handle_ref_type h); \ 30 size_t usb_get_max_packet_size(handle_ref_type) 31 32#if defined(_WIN32) || !ADB_HOST 33// Windows and the daemon have a single implementation. 34 35struct usb_handle; 36ADB_USB_INTERFACE(usb_handle*); 37 38#else // linux host || darwin 39// Linux and Darwin clients have native and libusb implementations. 40 41namespace libusb { 42 struct usb_handle; 43 ADB_USB_INTERFACE(libusb::usb_handle*); 44} 45 46namespace native { 47 struct usb_handle; 48 ADB_USB_INTERFACE(native::usb_handle*); 49} 50 51// Empty base that both implementations' opaque handles inherit from. 52struct usb_handle { 53}; 54 55ADB_USB_INTERFACE(::usb_handle*); 56 57#endif // linux host || darwin 58 59 60// USB device detection. 61int is_adb_interface(int usb_class, int usb_subclass, int usb_protocol); 62 63bool should_use_libusb(); 64