xref: /aosp_15_r20/development/host/windows/usb/api/adb_interface.h (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
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