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