// Copyright 2020 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.camera3;

const uint32 MAX_WATCH_DEVICES_EVENTS = 256;

using DeviceId = uint64;

/// The DeviceWatcher provides clients a mechanism to discover camera devices present on the
/// system. This is a temporary mechanism intended to be replaced by go/drivers-as-components,
/// which will allow multiple instances of the same protocol to exist side-by-side. Clients are
/// not required to maintain a connection to the Watcher in order to use established Camera
/// connections.
[Discoverable]
protocol DeviceWatcher {
    /// Returns a list of available camera IDs when it has changed from the previously returned
    /// list of IDs, or when it is called by a client for the first time. The returned list may be
    /// empty, indicating no cameras are available. The IDs returned to the client will remain
    /// consistent with respect to the physical devices they represent for the duration of the
    /// client's connection. Events will be sorted first by event type - `existing`, `added`,
    /// `removed`. Within each event type range, IDs will be provided in ascending order. Events
    /// are coalesced by the server, so a given ID will only appear once in each list of events.
    WatchDevices() -> (vector<WatchDevicesEvent>:MAX_WATCH_DEVICES_EVENTS events);

    /// Acquires a camera interface for the given ID. If any clients already exist for this camera,
    /// the request is closed with the ZX_ERR_ALREADY_BOUND epitaph.
    ConnectToDevice(DeviceId id, request<Device> request);
};

union WatchDevicesEvent {
    /// Indicates an existing camera with the provided ID is still available.
    1: DeviceId existing;

    /// Indicates a new camera with the provided ID is now available.
    2: DeviceId added;

    /// Indicates an existing camera with the provided ID is no longer available.
    3: DeviceId removed;
};
