// Copyright 2019 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.camera;

using fuchsia.camera2.debug;
using fuchsia.camera2.hal;
using zx;

closed protocol Device {
    /// Note: this method obtains a channel to the capture device which
    /// communicates using a non-simple fidl interface.  Once the
    /// system has been updated to support normal fidl protocols, this method
    /// can be replaced with the protocol itself.
    /// Additionally, while the camera stack is migrating from camera to
    /// camera2, two methods are available, corresponding to the two
    /// versions of the protocol.
    strict GetChannel(resource struct {
        ch zx.Handle:CHANNEL;
    });
    strict GetChannel2(resource struct {
        server_end server_end:fuchsia.camera2.hal.Controller;
    });
    strict GetDebugChannel(resource struct {
        server_end server_end:fuchsia.camera2.debug.Debug;
    });
};
