Home | History | Annotate | Download | only in api
      1 /*
      2  * Copyright (C) 2006 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 #ifndef ANDROID_USB_API_ADBWINAPI_H__
     18 #define ANDROID_USB_API_ADBWINAPI_H__
     19 
     20 /** \file
     21   This file consists of declarations of routines exported by the API as well
     22   as types, structures, and constants definitions used in the API.
     23 */
     24 
     25 // Enables compillation for "straight" C
     26 #ifdef __cplusplus
     27   #define EXTERN_C    extern "C"
     28 #else
     29   #define EXTERN_C    extern
     30   typedef int bool;
     31   #define true  1
     32   #define false 0
     33 #endif
     34 
     35 /** \brief Enumerates ADB endpoint types.
     36 
     37   This enum is taken from WDF_USB_PIPE_TYPE enum found in WDK.
     38 */
     39 typedef enum _AdbEndpointType {
     40   /// Unknown (invalid, or not initialized) endpoint type.
     41   AdbEndpointTypeInvalid = 0,
     42 
     43   /// Endpoint is device control pipe.
     44   AdbEndpointTypeControl,
     45 
     46   /// Endpoint is isochronous r/w pipe.
     47   AdbEndpointTypeIsochronous,
     48 
     49   /// Endpoint is a bulk r/w pipe.
     50   AdbEndpointTypeBulk,
     51 
     52   /// Endpoint is an interrupt r/w pipe.
     53   AdbEndpointTypeInterrupt,
     54 } AdbEndpointType;
     55 
     56 /** \brief Endpoint desriptor.
     57 
     58   This structure is based on WDF_USB_PIPE_INFORMATION structure found in WDK.
     59 */
     60 typedef struct _AdbEndpointInformation {
     61   /// Maximum packet size this endpoint is capable of.
     62   unsigned long max_packet_size;
     63 
     64   /// Maximum size of one transfer which should be sent to the host controller.
     65   unsigned long max_transfer_size;
     66 
     67   /// ADB endpoint type.
     68   AdbEndpointType endpoint_type;
     69 
     70   /// Raw endpoint address on the device as described by its descriptor.
     71   unsigned char endpoint_address;
     72 
     73   /// Polling interval.
     74   unsigned char polling_interval;
     75 
     76   /// Which alternate setting this structure is relevant for.
     77   unsigned char setting_index;
     78 } AdbEndpointInformation;
     79 
     80 /// Shortcut to default write bulk endpoint in zero-based endpoint index API.
     81 #define ADB_QUERY_BULK_WRITE_ENDPOINT_INDEX  0xFC
     82 
     83 /// Shortcut to default read bulk endpoint in zero-based endpoint index API.
     84 #define ADB_QUERY_BULK_READ_ENDPOINT_INDEX  0xFE
     85 
     86 // {F72FE0D4-CBCB-407d-8814-9ED673D0DD6B}
     87 /// Our USB class id that driver uses to register our device.
     88 #define ANDROID_USB_CLASS_ID \
     89 {0xf72fe0d4, 0xcbcb, 0x407d, {0x88, 0x14, 0x9e, 0xd6, 0x73, 0xd0, 0xdd, 0x6b}};
     90 
     91 /// Defines vendor ID for HCT devices.
     92 #define DEVICE_VENDOR_ID                  0x0BB4
     93 
     94 /// Defines product ID for the device with single interface.
     95 #define DEVICE_SINGLE_PRODUCT_ID          0x0C01
     96 
     97 /// Defines product ID for the Dream composite device.
     98 #define DEVICE_COMPOSITE_PRODUCT_ID       0x0C02
     99 
    100 /// Defines product ID for the Magic composite device.
    101 #define DEVICE_MAGIC_COMPOSITE_PRODUCT_ID 0x0C03
    102 
    103 /// Defines interface ID for the device.
    104 #define DEVICE_INTERFACE_ID               0x01
    105 
    106 /// Defines vendor ID for the device
    107 #define DEVICE_EMULATOR_VENDOR_ID         0x18D1
    108 
    109 /// Defines product ID for a SoftUSB device simulator that is used to test
    110 /// the driver in isolation from hardware.
    111 #define DEVICE_EMULATOR_PROD_ID           0xDDDD
    112 
    113 // The following ifdef block is the standard way of creating macros which make
    114 // exporting  from a DLL simpler. All files within this DLL are compiled with
    115 // the ADBWIN_EXPORTS symbol defined on the command line. this symbol should
    116 // not be defined on any project that uses this DLL. This way any other project
    117 // whose source files include this file see ADBWIN_API functions as being
    118 // imported from a DLL, whereas this DLL sees symbols defined with this macro
    119 // as being exported.
    120 #ifdef ADBWIN_EXPORTS
    121 #define ADBWIN_API EXTERN_C __declspec(dllexport)
    122 #define ADBWIN_API_CLASS     __declspec(dllexport)
    123 #else
    124 #define ADBWIN_API EXTERN_C __declspec(dllimport)
    125 #define ADBWIN_API_CLASS     __declspec(dllimport)
    126 #endif
    127 
    128 /** \brief Handle to an API object.
    129 
    130   To access USB interface and its components clients must first obtain a
    131   handle to the required object. API Objects that are represented by a
    132   handle are:
    133   1. Interface enumerator that provides access to a list of interfaces that
    134      match certain criterias that were specified when interface enumerator
    135      has been created. This handle is created in AdbEnumInterfaces routine.
    136   2. Interface that is the major object this API deals with. In Windows
    137      model of the USB stack each USB device (that is physical device,
    138      attached to a USB port) exposes one or more interfaces that become the
    139      major entities through which that device gets accessed. Each of these
    140      interfaces are represented as Windows Device Objects on the USB stack.
    141      So, to this extent, at least as this API is concerned, terms "interface"
    142      and "device" are interchangeable, since each interface is represented by
    143      a device object on the Windows USB stack. This handle is created in
    144      either AdbCreateInterface or AdbCreateInterfaceByName routines.
    145   3. Endpoint object (also called a pipe) represents an endpoint on interface
    146      through which all I/O operations are performed. This handle is created in
    147      one of these routines: AdbOpenEndpoint, AdbOpenDefaultBulkReadEndpoint,
    148      or AdbOpenDefaultBulkWriteEndpoint.
    149   4. I/O completion object that tracks completion information of asynchronous
    150      I/O performed on an endpoint. When an endpoint object gets opened through
    151      this API it is opened for asynchronous (or overlapped) I/O. And each time
    152      an asynchronous I/O is performed by this API an I/O completion object is
    153      created to track the result of that I/O when it gets completed. Clients
    154      of the API can then use a handle to I/O completion object to query for
    155      the status and result of asynchronous I/O as well as wait for this I/O
    156      completion. This handle is created in one of these routines:
    157      AdbReadEndpointAsync, or AdbWriteEndpointAsync.
    158   After object is no longer needed by the client, its handle must be closed
    159   using AdbCloseHandle routine.
    160 */
    161 typedef void* ADBAPIHANDLE;
    162 
    163 /** \brief Defines access type with which an I/O object (endpoint)
    164   should be opened.
    165 */
    166 typedef enum _AdbOpenAccessType {
    167   /// Opens for read and write access.
    168   AdbOpenAccessTypeReadWrite,
    169 
    170   /// Opens for read only access.
    171   AdbOpenAccessTypeRead,
    172 
    173   /// Opens for write only access.
    174   AdbOpenAccessTypeWrite,
    175 
    176   /// Opens for querying information.
    177   AdbOpenAccessTypeQueryInfo,
    178 } AdbOpenAccessType;
    179 
    180 /** \brief Defines sharing mode with which an I/O object (endpoint)
    181   should be opened.
    182 */
    183 typedef enum _AdbOpenSharingMode {
    184   /// Shares read and write.
    185   AdbOpenSharingModeReadWrite,
    186 
    187   /// Shares only read.
    188   AdbOpenSharingModeRead,
    189 
    190   /// Shares only write.
    191   AdbOpenSharingModeWrite,
    192 
    193   /// Opens exclusive.
    194   AdbOpenSharingModeExclusive,
    195 } AdbOpenSharingMode;
    196 
    197 /** \brief Provides information about an interface.
    198 */
    199 typedef struct _AdbInterfaceInfo {
    200   /// Inteface's class id (see SP_DEVICE_INTERFACE_DATA for details)
    201   GUID          class_id;
    202 
    203   /// Interface flags (see SP_DEVICE_INTERFACE_DATA for details)
    204   unsigned long flags;
    205 
    206   /// Device name for the interface (see SP_DEVICE_INTERFACE_DETAIL_DATA
    207   /// for details)
    208   wchar_t       device_name[1];
    209 } AdbInterfaceInfo;
    210 
    211 /** \brief Creates USB interface enumerator
    212 
    213   This routine enumerates all USB interfaces that match provided class ID.
    214   This routine uses SetupDiGetClassDevs SDK routine to enumerate devices that
    215   match class ID and then SetupDiEnumDeviceInterfaces SDK routine is called
    216   to enumerate interfaces on the devices.
    217   @param[in] class_id Device class ID, assigned by the driver.
    218   @param[in] exclude_not_present If true enumation will include only those
    219          devices that are currently present.
    220   @param[in] exclude_removed If true interfaces with SPINT_REMOVED flag set
    221          will be not included in the enumeration.
    222   @param[in] active_only If true only active interfaces (with flag
    223            SPINT_ACTIVE set) will be included in the enumeration.
    224   @return Handle to the enumerator object or NULL on failure. If NULL is
    225           returned GetLastError() provides extended error information.
    226 */
    227 ADBWIN_API ADBAPIHANDLE __cdecl AdbEnumInterfaces(GUID class_id,
    228                                           bool exclude_not_present,
    229                                           bool exclude_removed,
    230                                           bool active_only);
    231 
    232 /** \brief Gets next interface information
    233 
    234   @param[in] adb_handle Handle to interface enumerator object obtained via
    235          AdbEnumInterfaces call.
    236   @param[out] info Upon successful completion will receive interface
    237          information. Can be NULL. If it is NULL, upon return from this
    238          routine size parameter will contain memory size required for the
    239          next entry.
    240   @param[in,out] size On the way in provides size of the memory buffer
    241          addressed by info parameter. On the way out (only if buffer was not
    242          big enough) will provide memory size required for the next entry.
    243   @return true on success, false on error. If false is returned
    244           GetLastError() provides extended error information.
    245           ERROR_INSUFFICIENT_BUFFER indicates that buffer provided in info
    246           parameter was not big enough and size parameter contains memory size
    247           required for the next entry. ERROR_NO_MORE_ITEMS indicates that
    248           enumeration is over and there are no more entries to return.
    249 */
    250 ADBWIN_API bool __cdecl AdbNextInterface(ADBAPIHANDLE adb_handle,
    251                                  AdbInterfaceInfo* info,
    252                                  unsigned long* size);
    253 
    254 /** \brief Resets enumerator so next call to AdbNextInterface will start
    255   from the beginning.
    256 
    257   @param[in] adb_handle Handle to interface enumerator object obtained via
    258          AdbEnumInterfaces call.
    259   @return true on success, false on error. If false is returned GetLastError()
    260           provides extended error information.
    261 */
    262 ADBWIN_API bool __cdecl AdbResetInterfaceEnum(ADBAPIHANDLE adb_handle);
    263 
    264 /** \brief Creates USB interface object
    265 
    266   This routine creates an object that represents a USB interface.
    267   @param[in] interface_name Name of the interface.
    268   @return Handle to the interface object or NULL on failure. If NULL is
    269           returned GetLastError() provides extended error information.
    270 */
    271 ADBWIN_API ADBAPIHANDLE __cdecl AdbCreateInterfaceByName(const wchar_t* interface_name);
    272 
    273 /** \brief Creates USB interface object based on vendor, product and
    274   interface IDs.
    275 
    276   This routine creates and object that represents a USB interface on our
    277   device. It uses AdbCreateInterfaceByName to actually do the create.
    278   @param[in] class_id Device class ID, assigned by the driver.
    279   @param[in] vendor_id Device vendor ID
    280   @param[in] product_id Device product ID
    281   @param[in] interface_id Device interface ID. This parameter is optional.
    282          Value 0xFF indicates that interface should be addressed by vendor
    283          and product IDs only.
    284   @return Handle to the interface object or NULL on failure. If NULL is
    285           returned GetLastError() provides extended error information.
    286 */
    287 ADBWIN_API ADBAPIHANDLE __cdecl AdbCreateInterface(GUID class_id,
    288                                            unsigned short vendor_id,
    289                                            unsigned short product_id,
    290                                            unsigned char interface_id);
    291 
    292 /** \brief Gets interface name.
    293 
    294   @param[in] adb_interface A handle to interface object created with
    295          AdbCreateInterface call.
    296   @param[out] buffer Buffer for the name. Can be NULL in which case
    297          buffer_char_size will contain number of characters required for
    298          the name.
    299   @param[in,out] buffer_char_size On the way in supplies size (in characters)
    300          of the buffer. On the way out, if method failed and GetLastError
    301          reports ERROR_INSUFFICIENT_BUFFER, will contain number of characters
    302          required for the name.
    303   @param[in] ansi If true the name will be returned as single character
    304          string. Otherwise name will be returned as wide character string.
    305   @return true on success, false on failure. If false is returned
    306           GetLastError() provides extended error information.
    307 */
    308 ADBWIN_API bool __cdecl AdbGetInterfaceName(ADBAPIHANDLE adb_interface,
    309                                     void* buffer,
    310                                     unsigned long* buffer_char_size,
    311                                     bool ansi);
    312 
    313 /** \brief Gets serial number for interface's device.
    314 
    315   @param[in] adb_interface A handle to interface object created with
    316          AdbCreateInterface call.
    317   @param[out] buffer Buffer for the serail number string. Can be NULL in which
    318          case buffer_char_size will contain number of characters required for
    319          the string.
    320   @param[in,out] buffer_char_size On the way in supplies size (in characters)
    321          of the buffer. On the way out, if method failed and GetLastError
    322          reports ERROR_INSUFFICIENT_BUFFER, will contain number of characters
    323          required for the name.
    324   @param[in] ansi If true the name will be returned as single character
    325          string. Otherwise name will be returned as wide character string.
    326   @return true on success, false on failure. If false is returned
    327           GetLastError() provides extended error information.
    328 */
    329 ADBWIN_API bool __cdecl AdbGetSerialNumber(ADBAPIHANDLE adb_interface,
    330                                    void* buffer,
    331                                    unsigned long* buffer_char_size,
    332                                    bool ansi);
    333 
    334 /** \brief Gets device descriptor for the USB device associated with
    335   the given interface.
    336 
    337   @param[in] adb_interface A handle to interface object created with
    338          AdbCreateInterface call.
    339   @param[out] desc Upon successful completion will have usb device
    340          descriptor.
    341   @return true on success, false on failure. If false is returned
    342           GetLastError() provides extended error information.
    343 */
    344 ADBWIN_API bool __cdecl AdbGetUsbDeviceDescriptor(ADBAPIHANDLE adb_interface,
    345                                           USB_DEVICE_DESCRIPTOR* desc);
    346 
    347 /** \brief Gets descriptor for the selected USB device configuration.
    348 
    349   @param[in] adb_interface A handle to interface object created with
    350          AdbCreateInterface call.
    351   @param[out] desc Upon successful completion will have usb device
    352          configuration descriptor.
    353   @return true on success, false on failure. If false is returned
    354           GetLastError() provides extended error information.
    355 */
    356 ADBWIN_API bool __cdecl AdbGetUsbConfigurationDescriptor(
    357                     ADBAPIHANDLE adb_interface,
    358                     USB_CONFIGURATION_DESCRIPTOR* desc);
    359 
    360 /** \brief Gets descriptor for the given interface.
    361 
    362   @param[in] adb_interface A handle to interface object created with
    363          AdbCreateInterface call.
    364   @param[out] desc Upon successful completion will have usb device
    365          configuration descriptor.
    366   @return true on success, false on failure. If false is returned
    367           GetLastError() provides extended error information.
    368 */
    369 ADBWIN_API bool __cdecl AdbGetUsbInterfaceDescriptor(ADBAPIHANDLE adb_interface,
    370                                              USB_INTERFACE_DESCRIPTOR* desc);
    371 
    372 /** \brief Gets information about an endpoint on the given interface.
    373 
    374   @param[in] adb_interface A handle to interface object created with
    375          AdbCreateInterface call.
    376   @param[in] endpoint_index Zero-based endpoint index. There are two
    377          shortcuts for this parameter: ADB_QUERY_BULK_WRITE_ENDPOINT_INDEX
    378          and ADB_QUERY_BULK_READ_ENDPOINT_INDEX that provide information
    379          about bulk write and bulk read endpoints respectively.
    380   @param[out] info Upon successful completion will have endpoint information.
    381   @return true on success, false on failure. If false is returned
    382           GetLastError() provides extended error information.
    383 */
    384 ADBWIN_API bool __cdecl AdbGetEndpointInformation(ADBAPIHANDLE adb_interface,
    385                                           unsigned char endpoint_index,
    386                                           AdbEndpointInformation* info);
    387 
    388 /** \brief Gets information about default bulk read endpoint on the given
    389   interface.
    390 
    391   @param[in] adb_interface A handle to interface object created with
    392          AdbCreateInterface call.
    393   @param[out] info Upon successful completion will have endpoint information.
    394   @return true on success, false on failure. If false is returned
    395           GetLastError() provides extended error information.
    396 */
    397 ADBWIN_API bool __cdecl AdbGetDefaultBulkReadEndpointInformation(
    398                     ADBAPIHANDLE adb_interface,
    399                     AdbEndpointInformation* info);
    400 
    401 /** \brief Gets information about default bulk write endpoint on the given
    402   interface.
    403 
    404   @param[in] adb_interface A handle to interface object created with
    405          AdbCreateInterface call.
    406   @param[out] info Upon successful completion will have endpoint information.
    407   @return true on success, false on failure. If false is returned
    408           GetLastError() provides extended error information.
    409 */
    410 ADBWIN_API bool __cdecl AdbGetDefaultBulkWriteEndpointInformation(
    411                     ADBAPIHANDLE adb_interface,
    412                     AdbEndpointInformation* info);
    413 
    414 /** \brief Opens an endpoint on the given interface.
    415 
    416   Endpoints are always opened for overlapped I/O.
    417   @param[in] adb_interface A handle to interface object created with
    418          AdbCreateInterface call.
    419   @param[in] endpoint_index Zero-based endpoint index. There are two
    420          shortcuts for this parameter: ADB_QUERY_BULK_WRITE_ENDPOINT_INDEX
    421          and ADB_QUERY_BULK_READ_ENDPOINT_INDEX that provide information
    422          about bulk write and bulk read endpoints respectively.
    423   @param[in] access_type Desired access type. In the current implementation
    424          this parameter has no effect on the way endpoint is opened. It's
    425          always read / write access.
    426   @param[in] sharing_mode Desired share mode. In the current implementation
    427          this parameter has no effect on the way endpoint is opened. It's
    428          always shared for read / write.
    429   @return Handle to the opened endpoint object or NULL on failure. If NULL is
    430           returned GetLastError() provides extended error information.
    431 */
    432 ADBWIN_API ADBAPIHANDLE __cdecl AdbOpenEndpoint(ADBAPIHANDLE adb_interface,
    433                                         unsigned char endpoint_index,
    434                                         AdbOpenAccessType access_type,
    435                                         AdbOpenSharingMode sharing_mode);
    436 
    437 /** \brief Opens default bulk read endpoint on the given interface.
    438 
    439   Endpoints are always opened for overlapped I/O.
    440   @param[in] adb_interface A handle to interface object created with
    441          AdbCreateInterface call.
    442   @param[in] access_type Desired access type. In the current implementation
    443          this parameter has no effect on the way endpoint is opened. It's
    444          always read / write access.
    445   @param[in] sharing_mode Desired share mode. In the current implementation
    446          this parameter has no effect on the way endpoint is opened. It's
    447          always shared for read / write.
    448   @return Handle to the opened endpoint object or NULL on failure. If NULL is
    449           returned GetLastError() provides extended error information.
    450 */
    451 ADBWIN_API ADBAPIHANDLE __cdecl AdbOpenDefaultBulkReadEndpoint(
    452                             ADBAPIHANDLE adb_interface,
    453                             AdbOpenAccessType access_type,
    454                             AdbOpenSharingMode sharing_mode);
    455 
    456 /** \brief Opens default bulk write endpoint on the given interface.
    457 
    458   Endpoints are always opened for overlapped I/O.
    459   @param[in] adb_interface A handle to interface object created with
    460          AdbCreateInterface call.
    461   @param[in] access_type Desired access type. In the current implementation
    462          this parameter has no effect on the way endpoint is opened. It's
    463          always read / write access.
    464   @param[in] sharing_mode Desired share mode. In the current implementation
    465          this parameter has no effect on the way endpoint is opened. It's
    466          always shared for read / write.
    467   @return Handle to the opened endpoint object or NULL on failure. If NULL is
    468           returned GetLastError() provides extended error information.
    469 */
    470 ADBWIN_API ADBAPIHANDLE __cdecl AdbOpenDefaultBulkWriteEndpoint(
    471                             ADBAPIHANDLE adb_interface,
    472                             AdbOpenAccessType access_type,
    473                             AdbOpenSharingMode sharing_mode);
    474 
    475 /** \brief Gets handle to interface object for the given endpoint
    476 
    477   @param[in] adb_endpoint A handle to opened endpoint object, obtained via one
    478          of the AdbOpenXxxEndpoint calls.
    479   @return Handle to the interface for this endpoint or NULL on failure. If NULL
    480           is returned GetLastError() provides extended error information.
    481 */
    482 ADBWIN_API ADBAPIHANDLE __cdecl AdbGetEndpointInterface(ADBAPIHANDLE adb_endpoint);
    483 
    484 /** \brief Gets information about the given endpoint.
    485 
    486   @param[in] adb_endpoint A handle to opened endpoint object, obtained via one
    487          of the AdbOpenXxxEndpoint calls.
    488   @param[out] info Upon successful completion will have endpoint information.
    489   @return true on success, false on failure. If false is returned
    490           GetLastError() provides extended error information.
    491 */
    492 ADBWIN_API bool __cdecl AdbQueryInformationEndpoint(ADBAPIHANDLE adb_endpoint,
    493                                             AdbEndpointInformation* info);
    494 
    495 /** \brief Asynchronously reads from the given endpoint.
    496 
    497   @param[in] adb_endpoint A handle to opened endpoint object, obtained via one
    498          of the AdbOpenXxxEndpoint calls.
    499   @param[out] buffer Pointer to the buffer that receives the data.
    500   @param[in] bytes_to_read Number of bytes to be read.
    501   @param[out] bytes_read Number of bytes read. Can be NULL.
    502   @param[in] event_handle Event handle that should be signaled when async I/O
    503          completes. Can be NULL. If it's not NULL this handle will be used to
    504          initialize OVERLAPPED structure for this I/O.
    505   @param[in] time_out A timeout (in milliseconds) required for this I/O to
    506          complete. Zero value for this parameter means that there is no
    507          timeout for this I/O.
    508   @return A handle to IO completion object or NULL on failure. If NULL is
    509           returned GetLastError() provides extended error information.
    510 */
    511 ADBWIN_API ADBAPIHANDLE __cdecl AdbReadEndpointAsync(ADBAPIHANDLE adb_endpoint,
    512                                              void* buffer,
    513                                              unsigned long bytes_to_read,
    514                                              unsigned long* bytes_read,
    515                                              unsigned long time_out,
    516                                              HANDLE event_handle);
    517 
    518 /** \brief Asynchronously writes to the given endpoint.
    519 
    520   @param[in] adb_endpoint A handle to opened endpoint object, obtained via one
    521          of the AdbOpenXxxEndpoint calls.
    522   @param[in] buffer Pointer to the buffer containing the data to be written.
    523   @param[in] bytes_to_write Number of bytes to be written.
    524   @param[out] bytes_written Number of bytes written. Can be NULL.
    525   @param[in] event_handle Event handle that should be signaled when async I/O
    526          completes. Can be NULL. If it's not NULL this handle will be used to
    527          initialize OVERLAPPED structure for this I/O.
    528   @param[in] time_out A timeout (in milliseconds) required for this I/O to
    529          complete. Zero value for this parameter means that there is no
    530          timeout for this I/O.
    531   @return A handle to IO completion object or NULL on failure. If NULL is
    532           returned GetLastError() provides extended error information.
    533 */
    534 ADBWIN_API ADBAPIHANDLE __cdecl AdbWriteEndpointAsync(ADBAPIHANDLE adb_endpoint,
    535                                               void* buffer,
    536                                               unsigned long bytes_to_write,
    537                                               unsigned long* bytes_written,
    538                                               unsigned long time_out,
    539                                               HANDLE event_handle);
    540 
    541 /** \brief Synchronously reads from the given endpoint.
    542 
    543   @param[in] adb_endpoint A handle to opened endpoint object, obtained via one
    544          of the AdbOpenXxxEndpoint calls.
    545   @param[out] buffer Pointer to the buffer that receives the data.
    546   @param[in] bytes_to_read Number of bytes to be read.
    547   @param[out] bytes_read Number of bytes read. Can be NULL.
    548   @param[in] time_out A timeout (in milliseconds) required for this I/O to
    549          complete. Zero value for this parameter means that there is no
    550          timeout for this I/O.
    551   @return true on success and false on failure. If false is
    552           returned GetLastError() provides extended error information.
    553 */
    554 ADBWIN_API bool __cdecl AdbReadEndpointSync(ADBAPIHANDLE adb_endpoint,
    555                                     void* buffer,
    556                                     unsigned long bytes_to_read,
    557                                     unsigned long* bytes_read,
    558                                     unsigned long time_out);
    559 
    560 /** \brief Synchronously writes to the given endpoint.
    561 
    562   @param[in] adb_endpoint A handle to opened endpoint object, obtained via one
    563          of the AdbOpenXxxEndpoint calls.
    564   @param[in] buffer Pointer to the buffer containing the data to be written.
    565   @param[in] bytes_to_write Number of bytes to be written.
    566   @param[out] bytes_written Number of bytes written. Can be NULL.
    567   @param[in] time_out A timeout (in milliseconds) required for this I/O to
    568          complete. Zero value for this parameter means that there is no
    569          timeout for this I/O.
    570   @return true on success and false on failure. If false is
    571           returned GetLastError() provides extended error information.
    572 */
    573 ADBWIN_API bool __cdecl AdbWriteEndpointSync(ADBAPIHANDLE adb_endpoint,
    574                                      void* buffer,
    575                                      unsigned long bytes_to_write,
    576                                      unsigned long* bytes_written,
    577                                      unsigned long time_out);
    578 
    579 /** \brief Gets overlapped I/O result for async I/O performed on the
    580   given endpoint.
    581 
    582   @param[in] adb_io_completion A handle to an I/O completion object returned
    583          from AdbRead/WriteAsync routines.
    584   @param[out] ovl_data Buffer for the copy of this object's OVERLAPPED
    585          structure. Can be NULL.
    586   @param[out] bytes_transferred Pointer to a variable that receives the
    587          number of bytes that were actually transferred by a read or write
    588          operation. See SDK doc on GetOvelappedResult for more information.
    589          Unlike regular GetOvelappedResult call this parameter can be NULL.
    590   @param[in] wait If this parameter is true, the method does not return
    591          until the operation has been completed. If this parameter is false
    592          and the operation is still pending, the method returns false and
    593          the GetLastError function returns ERROR_IO_INCOMPLETE.
    594   @return true if I/O has been completed or false on failure or if request
    595          is not yet completed. If false is returned GetLastError() provides
    596          extended error information. If GetLastError returns
    597          ERROR_IO_INCOMPLETE it means that I/O is not yet completed.
    598 */
    599 ADBWIN_API bool __cdecl AdbGetOvelappedIoResult(ADBAPIHANDLE adb_io_completion,
    600                                         LPOVERLAPPED overlapped,
    601                                         unsigned long* bytes_transferred,
    602                                         bool wait);
    603 
    604 /** \brief Checks if overlapped I/O has been completed.
    605 
    606   @param[in] adb_io_completion A handle to an I/O completion object returned
    607          from AdbRead/WriteAsync routines.
    608   @return true if I/O has been completed or false if it's still
    609           incomplete. Regardless of the returned value, caller should
    610           check GetLastError to validate that handle was OK.
    611 */
    612 ADBWIN_API bool __cdecl AdbHasOvelappedIoComplated(ADBAPIHANDLE adb_io_completion);
    613 
    614 /** \brief Closes handle previously opened with one of the API calls
    615 
    616   @param[in] adb_handle ADB handle previously opened with one of the API calls
    617   @return true on success or false on failure. If false is returned
    618           GetLastError() provides extended error information.
    619 */
    620 ADBWIN_API bool __cdecl AdbCloseHandle(ADBAPIHANDLE adb_handle);
    621 
    622 #endif  // ANDROID_USB_API_ADBWINAPI_H__
    623