// Copyright 2018 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.wlan.common;

enum RequestStatus {
    ACKNOWLEDGED = 0;
    REJECTED_NOT_SUPPORTED = 1;
    REJECTED_INCOMPATIBLE_MODE = 2;
    REJECTED_ALREADY_IN_USE = 3;
    REJECTED_DUPLICATE_REQUEST = 4;
};

// LINT analyzer keyword intended for humans:
// LINT.IfChange

enum PHY {
    HR = 1; // IEEE 802.11b, used for DSSS, HR/DSSS, ERP-DSSS/CCK
    ERP = 2; // IEEE 802.11a/g, used for ERP-OFDM
    HT = 3; // IEEE 802.11n
    VHT = 4; // IEEE 802.11ac
    HEW = 5; // IEEE 802.11ax
};

enum CBW {	// Channel Bandwidth
    CBW20 = 0;
    CBW40 = 1;
    //CBW40ABOVE = CBW40;
    CBW40BELOW = 2;
    CBW80 = 3;
    CBW160 = 4;
    CBW80P80 = 5;
};

struct WlanChan {
    uint8 primary;
    CBW cbw;
    uint8 secondary80;
};

enum Band : uint8 {
    WLAN_BAND_2GHZ = 0;
    WLAN_BAND_5GHZ = 1;
    WLAN_BAND_COUNT = 2;
};

// LINT.ThenChange(//garnet/lib/wlan/protocol/include/wlan/protocol/info.h)

enum ScanType {
    ACTIVE = 1;
    PASSIVE = 2;
};