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

const uint32 BEACON_INFO_FLAG_CAN_ASSIST = 1;

struct BeaconInfo {
    /// The identity of the network being advertised by
    /// this beacon.
    Identity identity;

    /// RSSI of the beacon, measured in dBm.
    /// If unspecified, set to -128 (`RSSI_UNSPECIFIED`).
    int32 rssi;

    /// Link Quality Index (LQI) of the beacon.
    ///
    /// * A value of 0 (`LQI_UNSPECIFIED`) indicates that the LQI
    ///   was not set.
    /// * A value of 1 indicates the worst possible
    ///   quality where the decoded beacon is still valid.
    /// * A value of 255 indicates the best possible
    ///   quality that can be recognized by the radio
    ///   hardware.
    /// * Values 2-254 are intended to represent relative
    ///   quality levels evenly distributed between the
    ///   worst and best, with lower values always
    ///   indicating a worse quality than higher values.
    uint8 lqi;

    /// The MAC address associated with this beacon.
    bytes:16 address;

    /// A collection of integers representing any
    /// flags associated with this beacon, like
    /// `BEACON_INFO_FLAG_CAN_ASSIST`.
    vector<int32>:32 flags;
};
