// 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;

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.
    GetChannel(resource struct {
        ch zx.handle:CHANNEL;
    });
    GetChannel2(resource struct {
        server_end server_end:fuchsia.camera2.hal.Controller;
    });
    GetDebugChannel(resource struct {
        server_end server_end:fuchsia.camera2.debug.Debug;
    });
};
