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

/// Protocol for returning the results of a network scan operation.
///
/// Closing the client end of an instance of this protocol will effectively
/// cancel the scan operation.
protocol BeaconInfoStream {
    /// Called to fetch the next set of received beacons.
    ///
    /// The last set will have zero items. Once all received
    /// beacons have been returned, this channel will close.
    Next() -> (struct {
        beacons vector<fuchsia.lowpan.BeaconInfo>:MAX_STREAM_SET_SIZE;
    });
};

/// Describes the parameters of a network scan.
type NetworkScanParameters = table {
    /// Subset of channels to scan.
    ///
    /// If unspecified, all channels will be scanned.
    1: channels vector<ChannelIndex>:fuchsia.lowpan.MAX_CHANNELS;

    /// Transmit power (in dBm to the antenna) for transmitting
    /// beacon requests.
    ///
    /// Note that hardware limitations may cause the actual
    /// used transmit power to differ from what is specified.
    /// In that case the used transmit power will always be
    /// the highest available transmit power that is less than
    /// the specified transmit power. If the desired transmit
    /// power is lower than the lowest transmit power supported
    /// by the hardware, then that will be used instead.
    2: tx_power_dbm int32;
};
