blob: 1f2118b3756f3128003645fb1b68c54a1b5e6a6d [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 MAX_WATCH_DEVICES_EVENTS uint32 = 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.
@discoverable
closed 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.
strict WatchDevices() -> (struct {
events vector<WatchDevicesEvent>:MAX_WATCH_DEVICES_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.
strict ConnectToDevice(resource struct {
id DeviceId;
request server_end:Device;
});
};
type WatchDevicesEvent = strict union {
/// Indicates an existing camera with the provided ID is still available.
1: existing DeviceId;
/// Indicates a new camera with the provided ID is now available.
2: added DeviceId;
/// Indicates an existing camera with the provided ID is no longer available.
3: removed DeviceId;
};