// 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.
@available(added=7)
library fuchsia.wlan.product.deprecatedclient;

using fuchsia.wlan.ieee80211 as ieee80211;

/// Represents the current association state of a client interface if one exists.
type State = strict enum {
    NO_CLIENT = 0;
    DISASSOCIATED = 1;
    ASSOCIATING = 2;
    ASSOCIATED = 3;
};

/// Encapsulates information associated with the access point to which a WLAN client is associated.
type Ap = struct {
    ssid string:ieee80211.MAX_SSID_BYTE_LEN;
    rssi_dbm int8;
};

/// Represents the current state of a WLAN client interface.
type WlanStatus = struct {
    state State;
    current_ap box<Ap>;
};

// NOTE: This FIDL protocol is deprecated.  Please do not add new uses that depend on it.
/// Allows legacy interactions with a WLAN client interface.
@discoverable
protocol DeprecatedClient {
    /// Queries the status of the most recently discovered WLAN client interface.
    Status() -> (struct {
        status WlanStatus;
    });
};
