1dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine/* 2dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * Copyright (C) 2006 The Android Open Source Project 3dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * 4dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * Licensed under the Apache License, Version 2.0 (the "License"); 5dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * you may not use this file except in compliance with the License. 6dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * You may obtain a copy of the License at 7dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * 8dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * http://www.apache.org/licenses/LICENSE-2.0 9dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * 10dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * Unless required by applicable law or agreed to in writing, software 11dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * distributed under the License is distributed on an "AS IS" BASIS, 12dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * See the License for the specific language governing permissions and 14dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * limitations under the License. 15dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine */ 16dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine 17dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine/** \file 188267511c96e3226e45a0be773ee442b66261824dvchtchetkine This file consists of implementation of class AdbEndpointObject that 198267511c96e3226e45a0be773ee442b66261824dvchtchetkine encapsulates a handle opened to an endpoint on our device. 20dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine*/ 21dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine 22dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine#include "stdafx.h" 23dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine#include "adb_endpoint_object.h" 24dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine 25dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkineAdbEndpointObject::AdbEndpointObject(AdbInterfaceObject* parent_interf, 26dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine UCHAR endpoint_id, 27dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine UCHAR endpoint_index) 28dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine : AdbObjectHandle(AdbObjectTypeEndpoint), 29dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine parent_interface_(parent_interf), 30dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine endpoint_id_(endpoint_id), 31dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine endpoint_index_(endpoint_index) { 32dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine if (NULL != parent_interface_) 33dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine parent_interface_->AddRef(); 34dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine} 35dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine 36dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkineAdbEndpointObject::~AdbEndpointObject() { 37dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine if (NULL != parent_interface_) 38dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine parent_interface_->Release(); 39dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine} 40dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine 41dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkinebool AdbEndpointObject::GetEndpointInformation(AdbEndpointInformation* info) { 42dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine if (!IsOpened()) { 43dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine SetLastError(ERROR_INVALID_HANDLE); 44dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine return false; 45dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine } 46dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine 47dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine return parent_interface()->GetEndpointInformation(endpoint_index(), info); 48dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine} 49dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine 50dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkineADBAPIHANDLE AdbEndpointObject::AsyncRead(void* buffer, 51dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine ULONG bytes_to_read, 52dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine ULONG* bytes_read, 53dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine HANDLE event_handle, 54dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine ULONG time_out) { 55dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine return CommonAsyncReadWrite(true, 56dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine buffer, 57dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine bytes_to_read, 58dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine bytes_read, 59dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine event_handle, 60dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine time_out); 61dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine} 62dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine 63dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkineADBAPIHANDLE AdbEndpointObject::AsyncWrite(void* buffer, 64dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine ULONG bytes_to_write, 65dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine ULONG* bytes_written, 66dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine HANDLE event_handle, 67dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine ULONG time_out) { 68dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine return CommonAsyncReadWrite(false, 69dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine buffer, 70dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine bytes_to_write, 71dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine bytes_written, 72dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine event_handle, 73dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine time_out); 74dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine} 75dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine 76dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkinebool AdbEndpointObject::SyncRead(void* buffer, 77dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine ULONG bytes_to_read, 78dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine ULONG* bytes_read, 79dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine ULONG time_out) { 80dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine return CommonSyncReadWrite(true, 81dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine buffer, 82dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine bytes_to_read, 83dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine bytes_read, 84dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine time_out); 85dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine} 86dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine 87dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkinebool AdbEndpointObject::SyncWrite(void* buffer, 88dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine ULONG bytes_to_write, 89dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine ULONG* bytes_written, 90dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine ULONG time_out) { 91dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine return CommonSyncReadWrite(false, 92dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine buffer, 93dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine bytes_to_write, 94dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine bytes_written, 95dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine time_out); 96dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine} 97