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