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 25 AdbInterfaceObject::AdbInterfaceObject(const wchar_t* interf_name) 26 : AdbObjectHandle(AdbObjectTypeInterface), 27 interface_name_(interf_name) { 28 ATLASSERT(NULL != interf_name); 29 } 30 31 AdbInterfaceObject::~AdbInterfaceObject() { 32 } 33 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 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 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 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