// 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.
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;
    });
};
