// Copyright 2023 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.

library fuchsia.hardware.usb;

using zx;
using fuchsia.hardware.usb.endpoint;

@discoverable
closed protocol Usb {
    /// Connects to endpoint. Returns
    ///  * ZX_ERR_NOT_FOUND: if endpoint address does not exist.
    ///  * ZX_ERR_ALREADY_BOUND: if the endpoint is already bound.
    strict ConnectToEndpoint(resource struct {
        ep_addr uint8;
        ep server_end:fuchsia.hardware.usb.endpoint.Endpoint;
    }) -> () error zx.Status;

    // TODO(https://fxbug.dev/42178882): More functions to come. Equivalents to
    // //sdk/banjo/fuchsia.hardware.usb/usb.fidl
};

service UsbService {
    device client_end:Usb;
};
