/* * 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. */ #ifndef ANDROID_USB_ADB_API_PRIVATE_DEFINES_H__ #define ANDROID_USB_ADB_API_PRIVATE_DEFINES_H__ /** \file This file consists of private definitions used inside the API */ #include "adb_api.h" /** \brief Encapsulates an entry in the array of enumerated interfaces. */ class AdbInstanceEnumEntry { public: /** \brief Constructs an empty object. */ AdbInstanceEnumEntry() : flags_(0) { ZeroMemory(&class_id_, sizeof(class_id_)); } /** \brief Copy constructor */ AdbInstanceEnumEntry(const AdbInstanceEnumEntry& proto) { Set(proto.device_name().c_str(), proto.class_id(), proto.flags()); } /** \brief Constructs the object with parameters. */ AdbInstanceEnumEntry(const wchar_t* dev_name, GUID cls_id, DWORD flgs) { Set(dev_name, cls_id, flgs); } /** \brief Destructs the object. */ ~AdbInstanceEnumEntry() { } /// Operator = AdbInstanceEnumEntry& operator=(const AdbInstanceEnumEntry& proto) { Set(proto.device_name().c_str(), proto.class_id(), proto.flags()); return *this; } /// Initializes instance with parameters void Set(const wchar_t* dev_name, GUID cls_id, DWORD flgs) { device_name_ = dev_name; class_id_ = cls_id; flags_ = flgs; } /// Calculates memory size needed to save this entry into AdbInterfaceInfo /// structure ULONG GetFlatSize() const { return static_cast<ULONG>(FIELD_OFFSET(AdbInterfaceInfo, device_name) + (device_name_.length() + 1) * sizeof(wchar_t)); } /** \brief Saves this entry into AdbInterfaceInfo structure. @param[in] info Buffer to save this entry to. Must be big enough to fit it. Use GetFlatSize() method to get buffer size needed for that. */ void Save(AdbInterfaceInfo* info) const { info->class_id = class_id(); info->flags = flags(); wcscpy(info->device_name, device_name().c_str()); } /// Gets interface's device name const std::wstring& device_name() const { return device_name_; } /// Gets inteface's class id GUID class_id() const { return class_id_; } /// Gets interface flags DWORD flags() const { return flags_; } private: /// Inteface's class id (see SP_DEVICE_INTERFACE_DATA) GUID class_id_; /// Interface's device name std::wstring device_name_; /// Interface flags (see SP_DEVICE_INTERFACE_DATA) DWORD flags_; }; /// Defines array of enumerated interface entries typedef std::vector< AdbInstanceEnumEntry > AdbEnumInterfaceArray; #endif // ANDROID_USB_ADB_API_PRIVATE_DEFINES_H__