blob: ad83d5a6cd3983c1300e5e447f45a1c243d611be [file] [log] [blame]
// 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.device;
using zx;
/// Maxmium length for a device name
@available(added=HEAD)
const MAX_DEVICE_NAME_LEN uint64 = 32;
/// Maximum length of a device path
@available(added=HEAD)
const MAX_DEVICE_PATH_LEN uint64 = 1024;
/// Maxmium length for a driver name
@available(added=HEAD)
const MAX_DRIVER_NAME_LEN uint64 = 32;
/// Maximum length for a driver path
@available(added=HEAD)
const MAX_DRIVER_PATH_LEN uint64 = 1024;
@available(added=7, deprecated=7, note="Devices will be services in the future.")
type DeviceSignal = strict bits : uint32 {
/// Indicates the device is ready for reading.
READABLE = 0x01000000; // ZX_USER_SIGNAL_0
/// Indicates an out-of-band state transition has occurred.
OOB = 0x02000000; // ZX_USER_SIGNAL_1
/// Indicates the device is ready for writing.
WRITABLE = 0x04000000; // ZX_USER_SIGNAL_2
/// Indicates the device has encountered an error state.
ERROR = 0x08000000; // ZX_USER_SIGNAL_3
/// Indicates the device has hung up on the current connection.
HANGUP = 0x10000000; // ZX_USER_SIGNAL_4
};
/// Interface for manipulating a device in a devhost
///
/// # Deprecation
///
/// This interface is moving to fuchsia.device.fs.
/// Tracking bug: https://fxbug.dev/340316138
/// Please use that version of this protocol.
/// Also, see //sdk/fidl/fuchsia.device.fs/README.md
/// for future plans for DevFS.
@available(added=HEAD)
closed protocol Controller {
/// Connect to the underlying device's FIDL protocol.
/// This connection will not be multiplexed with fuchsia.device.Controller
/// or fuchsia.io.Node.
strict ConnectToDeviceFidl(resource struct {
server zx.Handle:CHANNEL;
});
/// Connect to the same Controller FIDL protocol.
strict ConnectToController(resource struct {
server server_end:Controller;
});
/// Attempt to bind a driver to this device.
/// + request `driver` This represents the suffix of a driver URL (e.g: "fvm.cm").
/// If this is non-empty, then the only drivers that will try to bind
/// are ones that match this url suffix.
strict Bind(struct {
driver string:MAX_DRIVER_PATH_LEN;
}) -> () error zx.Status;
/// Unbind all the children of this device, and then attempt to bind a driver to the device.
/// This will not return until the bind completes.
/// + request `driver` This represents the suffix of a driver URL (e.g: "fvm.cm").
/// If this is non-empty, then the only drivers that will try to bind
/// are ones that match this url suffix.
strict Rebind(struct {
driver string:MAX_DRIVER_PATH_LEN;
}) -> () error zx.Status;
/// This api will unbind all the children of this device synchronously.
/// This will avoid watching for device removal by the clients.
strict UnbindChildren() -> () error zx.Status;
/// Disconnect this device and allow its parent to be bound again.
/// This may not complete before it returns.
strict ScheduleUnbind() -> () error zx.Status;
/// Return the topological path for this device
strict GetTopologicalPath() -> (struct {
path string:MAX_DEVICE_PATH_LEN;
}) error zx.Status;
};