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