// 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 zx;
using fuchsia.camera2.hal;

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(zx.handle:CHANNEL ch);
    GetChannel2(request<fuchsia.camera2.hal.Controller> server_end);
};
