blob: d250c79111ba14d6e9c4aa8c5ffae15673f43f5e [file] [log] [blame]
// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MIST_USB_ENDPOINT_DESCRIPTOR_H_
#define MIST_USB_ENDPOINT_DESCRIPTOR_H_
#include <stdint.h>
#include <ostream> // NOLINT(readability/streams)
#include <string>
#include <base/macros.h>
#include "mist/usb_constants.h"
struct libusb_endpoint_descriptor;
namespace mist {
// A USB endpoint descriptor, which wraps a libusb_endpoint_descriptor C struct
// from libusb 1.0 into a C++ object.
class UsbEndpointDescriptor {
public:
// Constructs a UsbEndpointDescriptor object by taking a raw pointer to a
// libusb_endpoint_descriptor struct as |endpoint_descriptor|. The ownership
// of |endpoint_descriptor| is not transferred, and thus it should outlive
// this object.
explicit UsbEndpointDescriptor(
const libusb_endpoint_descriptor* endpoint_descriptor);
~UsbEndpointDescriptor() = default;
// Getters for retrieving fields of the libusb_endpoint_descriptor struct.
uint8_t GetLength() const;
uint8_t GetDescriptorType() const;
uint8_t GetEndpointAddress() const;
uint8_t GetEndpointNumber() const;
uint8_t GetAttributes() const;
uint16_t GetMaxPacketSize() const;
uint8_t GetInterval() const;
UsbDirection GetDirection() const;
UsbTransferType GetTransferType() const;
// Returns a string describing the properties of this object for logging
// purpose.
std::string ToString() const;
private:
const libusb_endpoint_descriptor* const endpoint_descriptor_;
DISALLOW_COPY_AND_ASSIGN(UsbEndpointDescriptor);
};
} // namespace mist
// Output stream operator provided to facilitate logging.
std::ostream& operator<<(
std::ostream& stream,
const mist::UsbEndpointDescriptor& endpoint_descriptor);
#endif // MIST_USB_ENDPOINT_DESCRIPTOR_H_