1*90c8c64dSAndroid Build Coastguard Worker /* 2*90c8c64dSAndroid Build Coastguard Worker * Copyright (C) 2006 The Android Open Source Project 3*90c8c64dSAndroid Build Coastguard Worker * 4*90c8c64dSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*90c8c64dSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*90c8c64dSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*90c8c64dSAndroid Build Coastguard Worker * 8*90c8c64dSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*90c8c64dSAndroid Build Coastguard Worker * 10*90c8c64dSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*90c8c64dSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*90c8c64dSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*90c8c64dSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*90c8c64dSAndroid Build Coastguard Worker * limitations under the License. 15*90c8c64dSAndroid Build Coastguard Worker */ 16*90c8c64dSAndroid Build Coastguard Worker 17*90c8c64dSAndroid Build Coastguard Worker #ifndef ANDROID_USB_API_ADB_INTERFACE_H__ 18*90c8c64dSAndroid Build Coastguard Worker #define ANDROID_USB_API_ADB_INTERFACE_H__ 19*90c8c64dSAndroid Build Coastguard Worker /** \file 20*90c8c64dSAndroid Build Coastguard Worker This file consists of declaration of class AdbInterfaceObject that 21*90c8c64dSAndroid Build Coastguard Worker encapsulates a generic interface on our USB device. 22*90c8c64dSAndroid Build Coastguard Worker */ 23*90c8c64dSAndroid Build Coastguard Worker 24*90c8c64dSAndroid Build Coastguard Worker #include "adb_object_handle.h" 25*90c8c64dSAndroid Build Coastguard Worker 26*90c8c64dSAndroid Build Coastguard Worker // 'AdbInterfaceObject::interface_name_' : class 'std::basic_string<_E,_Tr,_A>' 27*90c8c64dSAndroid Build Coastguard Worker // needs to have dll-interface to be used by clients of class 28*90c8c64dSAndroid Build Coastguard Worker // 'AdbInterfaceObject' We're ok with that, since interface_name_ will not 29*90c8c64dSAndroid Build Coastguard Worker // be referenced by name from outside of this class. 30*90c8c64dSAndroid Build Coastguard Worker #pragma warning(disable: 4251) 31*90c8c64dSAndroid Build Coastguard Worker /** \brief Encapsulates an interface on our USB device. 32*90c8c64dSAndroid Build Coastguard Worker 33*90c8c64dSAndroid Build Coastguard Worker This is an abstract class that implements functionality common for both, 34*90c8c64dSAndroid Build Coastguard Worker legacy, and WinUsb based interfaces. 35*90c8c64dSAndroid Build Coastguard Worker */ 36*90c8c64dSAndroid Build Coastguard Worker class ADBWIN_API_CLASS AdbInterfaceObject : public AdbObjectHandle { 37*90c8c64dSAndroid Build Coastguard Worker public: 38*90c8c64dSAndroid Build Coastguard Worker /** \brief Constructs the object. 39*90c8c64dSAndroid Build Coastguard Worker 40*90c8c64dSAndroid Build Coastguard Worker @param[in] interf_name Name of the interface 41*90c8c64dSAndroid Build Coastguard Worker */ 42*90c8c64dSAndroid Build Coastguard Worker explicit AdbInterfaceObject(const wchar_t* interf_name); 43*90c8c64dSAndroid Build Coastguard Worker 44*90c8c64dSAndroid Build Coastguard Worker protected: 45*90c8c64dSAndroid Build Coastguard Worker /** \brief Destructs the object. 46*90c8c64dSAndroid Build Coastguard Worker 47*90c8c64dSAndroid Build Coastguard Worker We hide destructor in order to prevent ourseves from accidentaly allocating 48*90c8c64dSAndroid Build Coastguard Worker instances on the stack. If such attemp occur, compiler will error. 49*90c8c64dSAndroid Build Coastguard Worker */ 50*90c8c64dSAndroid Build Coastguard Worker virtual ~AdbInterfaceObject(); 51*90c8c64dSAndroid Build Coastguard Worker 52*90c8c64dSAndroid Build Coastguard Worker // 53*90c8c64dSAndroid Build Coastguard Worker // Abstract 54*90c8c64dSAndroid Build Coastguard Worker // 55*90c8c64dSAndroid Build Coastguard Worker 56*90c8c64dSAndroid Build Coastguard Worker public: 57*90c8c64dSAndroid Build Coastguard Worker /** \brief Gets serial number for interface's device. 58*90c8c64dSAndroid Build Coastguard Worker 59*90c8c64dSAndroid Build Coastguard Worker @param[out] buffer Buffer for the serail number string. Can be NULL in 60*90c8c64dSAndroid Build Coastguard Worker which case buffer_char_size will contain number of characters 61*90c8c64dSAndroid Build Coastguard Worker required for the string. 62*90c8c64dSAndroid Build Coastguard Worker @param[in,out] buffer_char_size On the way in supplies size (in characters) 63*90c8c64dSAndroid Build Coastguard Worker of the buffer. On the way out, if method failed and GetLastError 64*90c8c64dSAndroid Build Coastguard Worker reports ERROR_INSUFFICIENT_BUFFER, will contain number of characters 65*90c8c64dSAndroid Build Coastguard Worker required for the name. 66*90c8c64dSAndroid Build Coastguard Worker @param[in] ansi If true the name will be returned as single character 67*90c8c64dSAndroid Build Coastguard Worker string. Otherwise name will be returned as wide character string. 68*90c8c64dSAndroid Build Coastguard Worker @return true on success, false on failure. If false is returned 69*90c8c64dSAndroid Build Coastguard Worker GetLastError() provides extended error information. 70*90c8c64dSAndroid Build Coastguard Worker */ 71*90c8c64dSAndroid Build Coastguard Worker virtual bool GetSerialNumber(void* buffer, 72*90c8c64dSAndroid Build Coastguard Worker unsigned long* buffer_char_size, 73*90c8c64dSAndroid Build Coastguard Worker bool ansi) = 0; 74*90c8c64dSAndroid Build Coastguard Worker 75*90c8c64dSAndroid Build Coastguard Worker 76*90c8c64dSAndroid Build Coastguard Worker /** \brief Gets information about an endpoint on this interface. 77*90c8c64dSAndroid Build Coastguard Worker 78*90c8c64dSAndroid Build Coastguard Worker @param[in] endpoint_index Zero-based endpoint index. There are two 79*90c8c64dSAndroid Build Coastguard Worker shortcuts for this parameter: ADB_QUERY_BULK_WRITE_ENDPOINT_INDEX 80*90c8c64dSAndroid Build Coastguard Worker and ADB_QUERY_BULK_READ_ENDPOINT_INDEX that provide infor about 81*90c8c64dSAndroid Build Coastguard Worker (default?) bulk write and read endpoints respectively. 82*90c8c64dSAndroid Build Coastguard Worker @param[out] info Upon successful completion will have endpoint information. 83*90c8c64dSAndroid Build Coastguard Worker @return true on success, false on failure. If false is returned 84*90c8c64dSAndroid Build Coastguard Worker GetLastError() provides extended error information. 85*90c8c64dSAndroid Build Coastguard Worker */ 86*90c8c64dSAndroid Build Coastguard Worker virtual bool GetEndpointInformation(UCHAR endpoint_index, 87*90c8c64dSAndroid Build Coastguard Worker AdbEndpointInformation* info) = 0; 88*90c8c64dSAndroid Build Coastguard Worker 89*90c8c64dSAndroid Build Coastguard Worker /** \brief Opens an endpoint on this interface. 90*90c8c64dSAndroid Build Coastguard Worker 91*90c8c64dSAndroid Build Coastguard Worker @param[in] endpoint_index Zero-based endpoint index. There are two 92*90c8c64dSAndroid Build Coastguard Worker shortcuts for this parameter: ADB_QUERY_BULK_WRITE_ENDPOINT_INDEX 93*90c8c64dSAndroid Build Coastguard Worker and ADB_QUERY_BULK_READ_ENDPOINT_INDEX that provide infor about 94*90c8c64dSAndroid Build Coastguard Worker (default?) bulk write and read endpoints respectively. 95*90c8c64dSAndroid Build Coastguard Worker @param[in] access_type Desired access type. In the current implementation 96*90c8c64dSAndroid Build Coastguard Worker this parameter has no effect on the way endpoint is opened. It's 97*90c8c64dSAndroid Build Coastguard Worker always read / write access. 98*90c8c64dSAndroid Build Coastguard Worker @param[in] sharing_mode Desired share mode. In the current implementation 99*90c8c64dSAndroid Build Coastguard Worker this parameter has no effect on the way endpoint is opened. It's 100*90c8c64dSAndroid Build Coastguard Worker always shared for read / write. 101*90c8c64dSAndroid Build Coastguard Worker @return Handle to the opened endpoint object or NULL on failure. 102*90c8c64dSAndroid Build Coastguard Worker If NULL is returned GetLastError() provides extended information 103*90c8c64dSAndroid Build Coastguard Worker about the error that occurred. 104*90c8c64dSAndroid Build Coastguard Worker */ 105*90c8c64dSAndroid Build Coastguard Worker virtual ADBAPIHANDLE OpenEndpoint(UCHAR endpoint_index, 106*90c8c64dSAndroid Build Coastguard Worker AdbOpenAccessType access_type, 107*90c8c64dSAndroid Build Coastguard Worker AdbOpenSharingMode sharing_mode) = 0; 108*90c8c64dSAndroid Build Coastguard Worker 109*90c8c64dSAndroid Build Coastguard Worker // 110*90c8c64dSAndroid Build Coastguard Worker // Operations 111*90c8c64dSAndroid Build Coastguard Worker // 112*90c8c64dSAndroid Build Coastguard Worker 113*90c8c64dSAndroid Build Coastguard Worker public: 114*90c8c64dSAndroid Build Coastguard Worker /** \brief Gets interface device name. 115*90c8c64dSAndroid Build Coastguard Worker 116*90c8c64dSAndroid Build Coastguard Worker @param[out] buffer Buffer for the name. Can be NULL in which case 117*90c8c64dSAndroid Build Coastguard Worker buffer_char_size will contain number of characters required to fit 118*90c8c64dSAndroid Build Coastguard Worker the name. 119*90c8c64dSAndroid Build Coastguard Worker @param[in,out] buffer_char_size On the way in supplies size (in characters) 120*90c8c64dSAndroid Build Coastguard Worker of the buffer. On the way out if method failed and GetLastError 121*90c8c64dSAndroid Build Coastguard Worker reports ERROR_INSUFFICIENT_BUFFER will contain number of characters 122*90c8c64dSAndroid Build Coastguard Worker required to fit the name. 123*90c8c64dSAndroid Build Coastguard Worker @param[in] ansi If true the name will be returned as single character 124*90c8c64dSAndroid Build Coastguard Worker string. Otherwise name will be returned as wide character string. 125*90c8c64dSAndroid Build Coastguard Worker @return true on success, false on failure. If false is returned 126*90c8c64dSAndroid Build Coastguard Worker GetLastError() provides extended error information. 127*90c8c64dSAndroid Build Coastguard Worker */ 128*90c8c64dSAndroid Build Coastguard Worker virtual bool GetInterfaceName(void* buffer, 129*90c8c64dSAndroid Build Coastguard Worker unsigned long* buffer_char_size, 130*90c8c64dSAndroid Build Coastguard Worker bool ansi); 131*90c8c64dSAndroid Build Coastguard Worker 132*90c8c64dSAndroid Build Coastguard Worker /** \brief Gets device descriptor for the USB device associated with 133*90c8c64dSAndroid Build Coastguard Worker this interface. 134*90c8c64dSAndroid Build Coastguard Worker 135*90c8c64dSAndroid Build Coastguard Worker @param[out] desc Upon successful completion will have usb device 136*90c8c64dSAndroid Build Coastguard Worker descriptor. 137*90c8c64dSAndroid Build Coastguard Worker @return true on success, false on failure. If false is returned 138*90c8c64dSAndroid Build Coastguard Worker GetLastError() provides extended error information. 139*90c8c64dSAndroid Build Coastguard Worker */ 140*90c8c64dSAndroid Build Coastguard Worker virtual bool GetUsbDeviceDescriptor(USB_DEVICE_DESCRIPTOR* desc); 141*90c8c64dSAndroid Build Coastguard Worker 142*90c8c64dSAndroid Build Coastguard Worker /** \brief Gets descriptor for the selected USB device configuration. 143*90c8c64dSAndroid Build Coastguard Worker 144*90c8c64dSAndroid Build Coastguard Worker @param[out] desc Upon successful completion will have usb device 145*90c8c64dSAndroid Build Coastguard Worker configuration descriptor. 146*90c8c64dSAndroid Build Coastguard Worker @return true on success, false on failure. If false is returned 147*90c8c64dSAndroid Build Coastguard Worker GetLastError() provides extended error information. 148*90c8c64dSAndroid Build Coastguard Worker */ 149*90c8c64dSAndroid Build Coastguard Worker virtual bool GetUsbConfigurationDescriptor( 150*90c8c64dSAndroid Build Coastguard Worker USB_CONFIGURATION_DESCRIPTOR* desc); 151*90c8c64dSAndroid Build Coastguard Worker 152*90c8c64dSAndroid Build Coastguard Worker /** \brief Gets descriptor for this interface. 153*90c8c64dSAndroid Build Coastguard Worker 154*90c8c64dSAndroid Build Coastguard Worker @param[out] desc Upon successful completion will have interface 155*90c8c64dSAndroid Build Coastguard Worker descriptor. 156*90c8c64dSAndroid Build Coastguard Worker @return true on success, false on failure. If false is returned 157*90c8c64dSAndroid Build Coastguard Worker GetLastError() provides extended error information. 158*90c8c64dSAndroid Build Coastguard Worker */ 159*90c8c64dSAndroid Build Coastguard Worker virtual bool GetUsbInterfaceDescriptor(USB_INTERFACE_DESCRIPTOR* desc); 160*90c8c64dSAndroid Build Coastguard Worker 161*90c8c64dSAndroid Build Coastguard Worker public: 162*90c8c64dSAndroid Build Coastguard Worker /// Gets name of the USB interface (device name) for this object interface_name()163*90c8c64dSAndroid Build Coastguard Worker const std::wstring& interface_name() const { 164*90c8c64dSAndroid Build Coastguard Worker return interface_name_; 165*90c8c64dSAndroid Build Coastguard Worker } 166*90c8c64dSAndroid Build Coastguard Worker 167*90c8c64dSAndroid Build Coastguard Worker /// This is a helper for extracting object from the AdbObjectHandleMap Type()168*90c8c64dSAndroid Build Coastguard Worker static AdbObjectType Type() { 169*90c8c64dSAndroid Build Coastguard Worker return AdbObjectTypeInterface; 170*90c8c64dSAndroid Build Coastguard Worker } 171*90c8c64dSAndroid Build Coastguard Worker 172*90c8c64dSAndroid Build Coastguard Worker /// Gets cached usb device descriptor usb_device_descriptor()173*90c8c64dSAndroid Build Coastguard Worker const USB_DEVICE_DESCRIPTOR* usb_device_descriptor() const { 174*90c8c64dSAndroid Build Coastguard Worker return &usb_device_descriptor_; 175*90c8c64dSAndroid Build Coastguard Worker } 176*90c8c64dSAndroid Build Coastguard Worker 177*90c8c64dSAndroid Build Coastguard Worker /// Gets cached usb configuration descriptor usb_config_descriptor()178*90c8c64dSAndroid Build Coastguard Worker const USB_CONFIGURATION_DESCRIPTOR* usb_config_descriptor() const { 179*90c8c64dSAndroid Build Coastguard Worker return &usb_config_descriptor_; 180*90c8c64dSAndroid Build Coastguard Worker } 181*90c8c64dSAndroid Build Coastguard Worker 182*90c8c64dSAndroid Build Coastguard Worker /// Gets cached usb interface descriptor usb_interface_descriptor()183*90c8c64dSAndroid Build Coastguard Worker const USB_INTERFACE_DESCRIPTOR* usb_interface_descriptor() const { 184*90c8c64dSAndroid Build Coastguard Worker return &usb_interface_descriptor_; 185*90c8c64dSAndroid Build Coastguard Worker } 186*90c8c64dSAndroid Build Coastguard Worker 187*90c8c64dSAndroid Build Coastguard Worker protected: 188*90c8c64dSAndroid Build Coastguard Worker /// Cached usb device descriptor 189*90c8c64dSAndroid Build Coastguard Worker USB_DEVICE_DESCRIPTOR usb_device_descriptor_; 190*90c8c64dSAndroid Build Coastguard Worker 191*90c8c64dSAndroid Build Coastguard Worker /// Cached usb configuration descriptor 192*90c8c64dSAndroid Build Coastguard Worker USB_CONFIGURATION_DESCRIPTOR usb_config_descriptor_; 193*90c8c64dSAndroid Build Coastguard Worker 194*90c8c64dSAndroid Build Coastguard Worker /// Cached usb interface descriptor 195*90c8c64dSAndroid Build Coastguard Worker USB_INTERFACE_DESCRIPTOR usb_interface_descriptor_; 196*90c8c64dSAndroid Build Coastguard Worker 197*90c8c64dSAndroid Build Coastguard Worker private: 198*90c8c64dSAndroid Build Coastguard Worker /// Name of the USB interface (device name) for this object 199*90c8c64dSAndroid Build Coastguard Worker std::wstring interface_name_; 200*90c8c64dSAndroid Build Coastguard Worker }; 201*90c8c64dSAndroid Build Coastguard Worker #pragma warning(default: 4251) 202*90c8c64dSAndroid Build Coastguard Worker 203*90c8c64dSAndroid Build Coastguard Worker #endif // ANDROID_USB_API_ADB_INTERFACE_H__ 204