// 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.lowpan.device;

using fuchsia.lowpan;

/// Describes the result from one channel of an energy scan.
table EnergyScanResult {
    1: ChannelIndex channel_index;

    /// The maximum RSSI detected on this channel.
    2: int32 max_rssi;

    /// The minimum RSSI detected on this channel.
    3: int32 min_rssi;
};

/// Describes the parameters of an energy scan.
table EnergyScanParameters {
    /// Subset of channels to scan.
    ///
    /// If unspecified, all channels will be scanned.
    1: vector<ChannelIndex>:fuchsia.lowpan.MAX_CHANNELS channels;

    /// Desired dwell time per-channel for the energy scan,
    /// measured in milliseconds.
    ///
    /// Note that firmware limitations may prevent the
    /// exact dwell time from being used. In such cases
    /// an approximation will be used.
    ///
    /// Implementations must be able to support dwell times of at least
    /// 5000ms (5 seconds). The exact supported dwell-time range is
    /// device/driver dependent.
    ///
    /// Setting a value outside of the supported range of
    /// values for this device will result in the value being
    /// clamped to the closest valid value, so setting a value of zero
    /// will always request the smallest energy scan duration the
    /// device is capable of.
    ///
    /// If unspecified, a dwell time of approximately 500ms will be used.
    2: uint32 dwell_time_ms;
};

/// Protocol for returning the results of an energy scan operation.
///
/// Closing the protocol will cancel the associated scan operation.
protocol EnergyScanResultStream {
    /// Called to fetch the next set of energy scan results.
    ///
    /// The last set will have zero items and the protocol will be closed.
    Next() -> (vector<EnergyScanResult>:MAX_STREAM_SET_SIZE results);
};
