• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  /** \file
18    This file consists of implementation of class AdbInterfaceObject that
19    encapsulates a generic interface on our USB device.
20  */
21  
22  #include "stdafx.h"
23  #include "adb_interface.h"
24  
AdbInterfaceObject(const wchar_t * interf_name)25  AdbInterfaceObject::AdbInterfaceObject(const wchar_t* interf_name)
26      : AdbObjectHandle(AdbObjectTypeInterface),
27        interface_name_(interf_name) {
28    ATLASSERT(NULL != interf_name);
29  }
30  
~AdbInterfaceObject()31  AdbInterfaceObject::~AdbInterfaceObject() {
32  }
33  
GetInterfaceName(void * buffer,unsigned long * buffer_char_size,bool ansi)34  bool AdbInterfaceObject::GetInterfaceName(void* buffer,
35                                            unsigned long* buffer_char_size,
36                                            bool ansi) {
37    if (NULL == buffer_char_size) {
38      SetLastError(ERROR_INVALID_PARAMETER);
39      return false;
40    }
41  
42    // Lets see if buffer is big enough
43    ULONG name_len = static_cast<ULONG>(interface_name_.length() + 1);
44    if ((NULL == buffer) || (*buffer_char_size < name_len)) {
45      *buffer_char_size = name_len;
46      SetLastError(ERROR_INSUFFICIENT_BUFFER);
47      return false;
48    }
49  
50    if (!ansi) {
51      // If user asked for wide char name just return it
52      wcscpy(reinterpret_cast<wchar_t*>(buffer), interface_name().c_str());
53      return true;
54    }
55  
56    // We need to convert name from wide char to ansi string
57    int res = WideCharToMultiByte(CP_ACP,
58                                  0,
59                                  interface_name().c_str(),
60                                  static_cast<int>(name_len),
61                                  reinterpret_cast<PSTR>(buffer),
62                                  static_cast<int>(*buffer_char_size),
63                                  NULL,
64                                  NULL);
65    return (res != 0);
66  }
67  
GetUsbDeviceDescriptor(USB_DEVICE_DESCRIPTOR * desc)68  bool AdbInterfaceObject::GetUsbDeviceDescriptor(USB_DEVICE_DESCRIPTOR* desc) {
69    if (!IsOpened()) {
70      SetLastError(ERROR_INVALID_HANDLE);
71      return false;
72    }
73  
74    if (NULL == desc) {
75      SetLastError(ERROR_INVALID_PARAMETER);
76      return false;
77    }
78  
79    CopyMemory(desc, usb_device_descriptor(), sizeof(USB_DEVICE_DESCRIPTOR));
80  
81    return true;
82  }
83  
GetUsbConfigurationDescriptor(USB_CONFIGURATION_DESCRIPTOR * desc)84  bool AdbInterfaceObject::GetUsbConfigurationDescriptor(
85      USB_CONFIGURATION_DESCRIPTOR* desc) {
86    if (!IsOpened()) {
87      SetLastError(ERROR_INVALID_HANDLE);
88      return false;
89    }
90  
91    if (NULL == desc) {
92      SetLastError(ERROR_INVALID_PARAMETER);
93      return false;
94    }
95  
96    CopyMemory(desc, usb_config_descriptor(),
97               sizeof(USB_CONFIGURATION_DESCRIPTOR));
98  
99    return true;
100  }
101  
GetUsbInterfaceDescriptor(USB_INTERFACE_DESCRIPTOR * desc)102  bool AdbInterfaceObject::GetUsbInterfaceDescriptor(
103      USB_INTERFACE_DESCRIPTOR* desc) {
104    if (!IsOpened()) {
105      SetLastError(ERROR_INVALID_HANDLE);
106      return false;
107    }
108  
109    if (NULL == desc) {
110      SetLastError(ERROR_INVALID_PARAMETER);
111      return false;
112    }
113  
114    CopyMemory(desc, usb_interface_descriptor(), sizeof(USB_INTERFACE_DESCRIPTOR));
115  
116    return true;
117  }
118