// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@available(added=7)
library fuchsia.hardware.usb.composite;

using fuchsia.hardware.usb.descriptor;
using zx;

@transport("Banjo")
@banjo_layout("ddk-protocol")
closed protocol UsbComposite {
    /// Returns the length of the additional descriptor list.
    strict GetAdditionalDescriptorLength() -> (struct {
        length uint64;
    });
    /// Returns the USB descriptors following the interface's existing descriptors.
    strict GetAdditionalDescriptorList() -> (struct {
        s zx.Status;
        desc vector<uint8>:MAX;
    });
    /// Marks the interface as claimed and appends the interface descriptor to the
    /// interface's existing descriptors.
    strict ClaimInterface(struct {
        desc fuchsia.hardware.usb.descriptor.UsbInterfaceDescriptor;
        length uint32;
    }) -> (struct {
        s zx.Status;
    });
};
