/* | |
* 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_API_ADB_INTERFACE_ENUM_H__ | |
#define ANDROID_USB_API_ADB_INTERFACE_ENUM_H__ | |
/** \file | |
This file consists of declaration of AdbInterfaceEnumObject class that | |
encapsulates enumerator of USB interfaces available through this API. | |
*/ | |
#include "adb_object_handle.h" | |
/** \brief Enumerator of USB interfaces available through this API. | |
*/ | |
class AdbInterfaceEnumObject : public AdbObjectHandle { | |
public: | |
/** \brief Constructs the object. | |
*/ | |
AdbInterfaceEnumObject(); | |
protected: | |
/** \brief Destructs the object. | |
We hide destructor in order to prevent ourseves from accidentaly allocating | |
instances on the stack. If such attemp occur, compiler will error. | |
*/ | |
virtual ~AdbInterfaceEnumObject(); | |
public: | |
/** \brief Enumerates all interfaces for the given device class. | |
This routine uses SetupDiGetClassDevs to get our device info and calls | |
EnumerateDeviceInterfaces to perform the enumeration. | |
@param[in] class_id Device class ID that is specified by our USB driver | |
@param[in] exclude_not_present If set include only those devices that are | |
currently present. | |
@param[in] exclude_removed If true interfaces with SPINT_REMOVED flag set | |
will be not included in the enumeration. | |
@param[in] active_only If true only active interfaces (with flag | |
SPINT_ACTIVE set) will be included in the enumeration. | |
@return True on success, false on failure, in which case GetLastError() | |
provides extended information about the error that occurred. | |
*/ | |
bool InitializeEnum(GUID class_id, | |
bool exclude_not_present, | |
bool exclude_removed, | |
bool active_only); | |
/** \brief Gets next enumerated interface information | |
@param[out] info Upon successful completion will receive interface | |
information. Can be NULL. If it is NULL, upon return from this | |
method *size will have memory size required to fit this entry. | |
@param[in,out] size On the way in provides size of the memory buffer | |
addressed by info param. On the way out (only if buffer is not | |
big enough) will provide memory size required to fit this entry. | |
@return true on success, false on error. If false is returned | |
GetLastError() provides extended information about the error that | |
occurred. ERROR_INSUFFICIENT_BUFFER indicates that buffer provided | |
in info param was not big enough and *size specifies memory size | |
required to fit this entry. ERROR_NO_MORE_ITEMS indicates that | |
enumeration is over and there are no more entries to return. | |
*/ | |
bool Next(AdbInterfaceInfo* info, ULONG* size); | |
/** \brief Makes enumerator to start from the beginning. | |
@return true on success, false on error. If false is returned | |
GetLastError() provides extended information about the error that | |
occurred. | |
*/ | |
bool Reset(); | |
// This is a helper for extracting object from the AdbObjectHandleMap | |
static AdbObjectType Type() { | |
return AdbObjectTypeInterfaceEnumerator; | |
} | |
protected: | |
/// Array of interfaces enumerated with this object | |
AdbEnumInterfaceArray interfaces_; | |
/// Current enumerator | |
AdbEnumInterfaceArray::iterator current_interface_; | |
}; | |
#endif // ANDROID_USB_API_ADB_INTERFACE_ENUM_H__ |