You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
6.7 KiB
191 lines
6.7 KiB
/*
|
|
* Copyright (C) 2009 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_API_LEGACY_H_
|
|
#define ANDROID_USB_API_ADB_API_LEGACY_H_
|
|
/** \file
|
|
This file consists of declarations of constants and structures required
|
|
for supporting communications of this API with a legacy (custom) USB
|
|
driver.
|
|
*/
|
|
|
|
// Enables compillation for "straight" C
|
|
#ifdef __cplusplus
|
|
#define EXTERN_C extern "C"
|
|
#else
|
|
#define EXTERN_C extern
|
|
typedef int bool;
|
|
#define true 1
|
|
#define false 0
|
|
#endif
|
|
|
|
/// Name for the default bulk read pipe
|
|
#define DEVICE_BULK_READ_PIPE_NAME L"BulkRead"
|
|
|
|
/// Name for the default bulk write pipe
|
|
#define DEVICE_BULK_WRITE_PIPE_NAME L"BulkWrite"
|
|
|
|
/// Prefix for an index-based pipe name
|
|
#define DEVICE_PIPE_NAME_PREFIX L"PIPE_"
|
|
|
|
/** \name IOCTL codes for the driver
|
|
*/
|
|
///@{
|
|
|
|
/// Control code for IOCTL that gets USB_DEVICE_DESCRIPTOR
|
|
#define ADB_CTL_GET_USB_DEVICE_DESCRIPTOR 10
|
|
|
|
/// Control code for IOCTL that gets USB_CONFIGURATION_DESCRIPTOR
|
|
#define ADB_CTL_GET_USB_CONFIGURATION_DESCRIPTOR 11
|
|
|
|
/// Control code for IOCTL that gets USB_INTERFACE_DESCRIPTOR
|
|
#define ADB_CTL_GET_USB_INTERFACE_DESCRIPTOR 12
|
|
|
|
/// Control code for IOCTL that gets endpoint information
|
|
#define ADB_CTL_GET_ENDPOINT_INFORMATION 13
|
|
|
|
/// Control code for bulk read IOCTL
|
|
#define ADB_CTL_BULK_READ 14
|
|
|
|
/// Control code for bulk write IOCTL
|
|
#define ADB_CTL_BULK_WRITE 15
|
|
|
|
/// Control code for IOCTL that gets device serial number
|
|
#define ADB_CTL_GET_SERIAL_NUMBER 16
|
|
|
|
/// IOCTL that gets USB_DEVICE_DESCRIPTOR
|
|
#define ADB_IOCTL_GET_USB_DEVICE_DESCRIPTOR \
|
|
CTL_CODE(FILE_DEVICE_UNKNOWN, \
|
|
ADB_CTL_GET_USB_DEVICE_DESCRIPTOR, \
|
|
METHOD_BUFFERED, \
|
|
FILE_READ_ACCESS)
|
|
|
|
/// IOCTL that gets USB_CONFIGURATION_DESCRIPTOR
|
|
#define ADB_IOCTL_GET_USB_CONFIGURATION_DESCRIPTOR \
|
|
CTL_CODE(FILE_DEVICE_UNKNOWN, \
|
|
ADB_CTL_GET_USB_CONFIGURATION_DESCRIPTOR, \
|
|
METHOD_BUFFERED, \
|
|
FILE_READ_ACCESS)
|
|
|
|
/// IOCTL that gets USB_INTERFACE_DESCRIPTOR
|
|
#define ADB_IOCTL_GET_USB_INTERFACE_DESCRIPTOR \
|
|
CTL_CODE(FILE_DEVICE_UNKNOWN, \
|
|
ADB_CTL_GET_USB_INTERFACE_DESCRIPTOR, \
|
|
METHOD_BUFFERED, \
|
|
FILE_READ_ACCESS)
|
|
|
|
/// IOCTL that gets endpoint information
|
|
#define ADB_IOCTL_GET_ENDPOINT_INFORMATION \
|
|
CTL_CODE(FILE_DEVICE_UNKNOWN, \
|
|
ADB_CTL_GET_ENDPOINT_INFORMATION, \
|
|
METHOD_BUFFERED, \
|
|
FILE_READ_ACCESS)
|
|
|
|
/// Bulk read IOCTL
|
|
#define ADB_IOCTL_BULK_READ \
|
|
CTL_CODE(FILE_DEVICE_UNKNOWN, \
|
|
ADB_CTL_BULK_READ, \
|
|
METHOD_OUT_DIRECT, \
|
|
FILE_READ_ACCESS)
|
|
|
|
// For bulk write IOCTL we send request data in the form of AdbBulkTransfer
|
|
// structure and output buffer is just ULONG that receives number of bytes
|
|
// actually written. Since both of these are tiny we can use buffered I/O
|
|
// for this IOCTL.
|
|
/// Bulk write IOCTL
|
|
#define ADB_IOCTL_BULK_WRITE \
|
|
CTL_CODE(FILE_DEVICE_UNKNOWN, \
|
|
ADB_CTL_BULK_WRITE, \
|
|
METHOD_BUFFERED, \
|
|
FILE_WRITE_ACCESS)
|
|
|
|
/// IOCTL that gets device serial number
|
|
#define ADB_IOCTL_GET_SERIAL_NUMBER \
|
|
CTL_CODE(FILE_DEVICE_UNKNOWN, \
|
|
ADB_CTL_GET_SERIAL_NUMBER, \
|
|
METHOD_BUFFERED, \
|
|
FILE_READ_ACCESS)
|
|
|
|
///@}
|
|
|
|
/** Structure AdbQueryEndpointInformation formats input for
|
|
ADB_IOCTL_GET_ENDPOINT_INFORMATION IOCTL request
|
|
*/
|
|
struct AdbQueryEndpointInformation {
|
|
/// Zero-based endpoint index for which information is queried.
|
|
/// See ADB_QUERY_BULK_xxx_ENDPOINT_INDEX for shortcuts.
|
|
UCHAR endpoint_index;
|
|
};
|
|
|
|
/** Structure AdbBulkTransfer formats parameters for ADB_CTL_BULK_READ and
|
|
ADB_CTL_BULK_WRITE IOCTL requests.
|
|
*/
|
|
struct AdbBulkTransfer {
|
|
/// Time in milliseconds to complete this request
|
|
ULONG time_out;
|
|
|
|
/// Size of the data to transfer. This parameter is used only for
|
|
/// ADB_CTL_BULK_WRITE request. For ADB_CTL_BULK_READ requests transfer
|
|
/// size is defined by the output buffer size.
|
|
ULONG transfer_size;
|
|
|
|
/// Initializes statically allocated structure
|
|
__forceinline AdbBulkTransfer() {
|
|
time_out = 0;
|
|
transfer_size = 0;
|
|
for_x64 = 0;
|
|
}
|
|
|
|
/// Provides access to protected write_buffer field
|
|
void* GetWriteBuffer() {
|
|
return write_buffer;
|
|
}
|
|
|
|
/// Provides access to protected write_buffer field
|
|
const void* GetWriteBuffer() const {
|
|
return write_buffer;
|
|
}
|
|
|
|
/// Sets write_buffer field.
|
|
void SetWriteBuffer(void* buffer) {
|
|
// For 32-bit we must zero out high 32 bit of the address, so 64-bit
|
|
// driver will see valid address when accessing 64-bit write_buffer.
|
|
for_x64 = 0;
|
|
write_buffer = buffer;
|
|
}
|
|
|
|
protected:
|
|
/// Pointer to the actual buffer for ADB_CTL_BULK_WRITE request. This field
|
|
/// is not used in ADB_CTL_BULK_READ request. Note that in order to support
|
|
/// compatibility between 32-bit and 64-bit versions of both, driver and
|
|
/// application we must sizeof this field to the max pointer sizeof (which
|
|
/// is 64 bit in our case). The idea is that if IOCTL was issued by a 64-bit
|
|
/// process to a 64-bit driver, write_buffer will be valid 64-bit pointer to
|
|
/// the write buffer. Same is true for 32-bit app talking to 32-bit driver.
|
|
/// If, however, a 32-bit app is talking to 64-bit driver, then write_buffer
|
|
/// initialized by 32-bit app will contain 32-bit address, which will be
|
|
/// correctly picked up ("extended") by 64-bit driver. Since when setting
|
|
/// this field by a 32-bit app requires some extra work (see SetWriteBuffer)
|
|
/// we hide this field, making it accessible only throug the accessor
|
|
/// methods (Get/SetWriteBuffer).
|
|
union {
|
|
void* write_buffer;
|
|
__int64 for_x64;
|
|
};
|
|
};
|
|
|
|
#endif // ANDROID_USB_API_ADB_API_LEGACY_H_
|