blob: 4cb967b1965a2ae0fc24e94f330bb489e7a9d768 [file] [log] [blame]
// 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;
alias 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.
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.
/// Please note that it is entirely possible for the list returned to be temporarily empty even
/// if the local camera hardware is hardwired (vs plug-in like USB). The empty list condition
/// is temporary on such a platform.
/// Camera applications should tolerate an empty list returned, and attempt to retry the
/// `WatchDevices()` call.
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;