| /* | |
| * Copyright (C) 2006 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. | |
| */ | |
| /** \file | |
| This file consists of implementation of class AdbInterfaceObject that | |
| encapsulates a generic interface on our USB device. | |
| */ | |
| #include "stdafx.h" | |
| #include "adb_interface.h" | |
| AdbInterfaceObject::AdbInterfaceObject(const wchar_t* interf_name) | |
| : AdbObjectHandle(AdbObjectTypeInterface), | |
| interface_name_(interf_name) { | |
| ATLASSERT(NULL != interf_name); | |
| } | |
| AdbInterfaceObject::~AdbInterfaceObject() { | |
| } | |
| bool AdbInterfaceObject::GetInterfaceName(void* buffer, | |
| unsigned long* buffer_char_size, | |
| bool ansi) { | |
| if (NULL == buffer_char_size) { | |
| SetLastError(ERROR_INVALID_PARAMETER); | |
| return false; | |
| } | |
| // Lets see if buffer is big enough | |
| ULONG name_len = static_cast<ULONG>(interface_name_.length() + 1); | |
| if ((NULL == buffer) || (*buffer_char_size < name_len)) { | |
| *buffer_char_size = name_len; | |
| SetLastError(ERROR_INSUFFICIENT_BUFFER); | |
| return false; | |
| } | |
| if (!ansi) { | |
| // If user asked for wide char name just return it | |
| wcscpy(reinterpret_cast<wchar_t*>(buffer), interface_name().c_str()); | |
| return true; | |
| } | |
| // We need to convert name from wide char to ansi string | |
| int res = WideCharToMultiByte(CP_ACP, | |
| 0, | |
| interface_name().c_str(), | |
| static_cast<int>(name_len), | |
| reinterpret_cast<PSTR>(buffer), | |
| static_cast<int>(*buffer_char_size), | |
| NULL, | |
| NULL); | |
| return (res != 0); | |
| } | |
| bool AdbInterfaceObject::GetUsbDeviceDescriptor(USB_DEVICE_DESCRIPTOR* desc) { | |
| if (!IsOpened()) { | |
| SetLastError(ERROR_INVALID_HANDLE); | |
| return false; | |
| } | |
| if (NULL == desc) { | |
| SetLastError(ERROR_INVALID_PARAMETER); | |
| return false; | |
| } | |
| CopyMemory(desc, usb_device_descriptor(), sizeof(USB_DEVICE_DESCRIPTOR)); | |
| return true; | |
| } | |
| bool AdbInterfaceObject::GetUsbConfigurationDescriptor( | |
| USB_CONFIGURATION_DESCRIPTOR* desc) { | |
| if (!IsOpened()) { | |
| SetLastError(ERROR_INVALID_HANDLE); | |
| return false; | |
| } | |
| if (NULL == desc) { | |
| SetLastError(ERROR_INVALID_PARAMETER); | |
| return false; | |
| } | |
| CopyMemory(desc, usb_config_descriptor(), | |
| sizeof(USB_CONFIGURATION_DESCRIPTOR)); | |
| return true; | |
| } | |
| bool AdbInterfaceObject::GetUsbInterfaceDescriptor( | |
| USB_INTERFACE_DESCRIPTOR* desc) { | |
| if (!IsOpened()) { | |
| SetLastError(ERROR_INVALID_HANDLE); | |
| return false; | |
| } | |
| if (NULL == desc) { | |
| SetLastError(ERROR_INVALID_PARAMETER); | |
| return false; | |
| } | |
| CopyMemory(desc, usb_interface_descriptor(), sizeof(USB_INTERFACE_DESCRIPTOR)); | |
| return true; | |
| } |