/* | |
* 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__ |