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