blob: 2ebd3ce697063db1ca0d8b566bc487983a9e925e [file] [log] [blame]
// Copyright 2022 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.
@available(added=7)
library fuchsia.lowpan;
/// Index used to identify a specific channel in the LoWPAN API.
alias ChannelIndex = uint16;
/// Transmit/Received power, in dBm.
///
/// Can represent transmit and receive power levels from .2 femtowatts (-127dBm)
/// to 5 gigawatts (127dBm).
///
/// The value -128 ([`RSSI_UNSPECIFIED`]) is reserved for
/// indicating that a signal level is unspecified when used
/// in the context of RSSI values, and must not be used when
/// specifying transmit power.
alias PowerDbm = int8;
/// Type describing the name of the network interface.
///
/// Interface names must satisfy the following regular expression:
///
/// ^[a-z_][-_.+0-9a-z]{1,31}$
///
alias InterfaceName = string:32;
// Arbitrarily chosen at an expected maximum number of radio interfaces on
// a single device.
const MAX_LOWPAN_DEVICES uint32 = 8;
/// Protocol for discovering and resolving LoWPAN interfaces and their
/// associated control protocol instances.
@discoverable
protocol DeviceWatcher {
/// Observes when devices are added or removed.
///
/// The first call to this method returns immediately with a
/// `DeviceChanges` struct containing only items in the `added` field with
/// the names of all of the current devices. Subsequent calls
/// will block until a device has been added or removed, at which
/// point it will return with the `added` and/or `removed` fields
/// filled out accordingly. The changes are reported since the
/// time that the method returned.
///
/// If both the `added` and `removed` fields have names in the returned
/// table, then the `removed` field MUST be processed BEFORE `added` field.
///
/// If a device was added and then removed in-between calls to this
/// method, the device will be absent from both the `added` and `removed`
/// lists.
///
/// If the same device name is listed on both the `added` and `removed`
/// fields, then the client should assume that the original device was
/// removed and a new device instance started in its place. However, while
/// the client should be able to handle this condition, it should not depend
/// on the server will always have this behavior.
WatchDevices() -> (struct {
added vector<InterfaceName>:MAX_LOWPAN_DEVICES;
removed vector<InterfaceName>:MAX_LOWPAN_DEVICES;
});
};