blob: 7305f5d076faccb8c8b3acdbbffc93df4d3f0d36 [file] [log] [blame]
// Copyright 2017 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.
#include <map>
#include <string>
#include <ddk/hw/wlan/wlaninfo/c/banjo.h>
#include <wlan/common/logging.h>
static std::map<wlan_info_driver_feature_t, std::string> driver_feature_flags_string_map = {
{WLAN_INFO_DRIVER_FEATURE_SCAN_OFFLOAD, "Scan Offload"},
{WLAN_INFO_DRIVER_FEATURE_RATE_SELECTION, "Rate Selection"},
{WLAN_INFO_DRIVER_FEATURE_SYNTH, "Synthetic Device"},
{WLAN_INFO_DRIVER_FEATURE_TX_STATUS_REPORT, "Tx Status Report"},
{WLAN_INFO_DRIVER_FEATURE_DFS, "Dynamic Frequency Selection (DFS)"},
{WLAN_INFO_DRIVER_FEATURE_PROBE_RESP_OFFLOAD, "Probe Response Offload"},
};
static std::map<wlan_info_hardware_capability_t, std::string> hardware_capability_flags_string_map =
{{WLAN_INFO_HARDWARE_CAPABILITY_SHORT_PREAMBLE, "Short Preamble"},
{WLAN_INFO_HARDWARE_CAPABILITY_SPECTRUM_MGMT, "Spectrum Management"},
{WLAN_INFO_HARDWARE_CAPABILITY_QOS, "QoS"},
{WLAN_INFO_HARDWARE_CAPABILITY_SHORT_SLOT_TIME, "Short Slot Time"},
{WLAN_INFO_HARDWARE_CAPABILITY_RADIO_MSMT, "Radio Measurement"}};
template <typename flags_t>
static void DebugFlags(flags_t flags, std::map<flags_t, std::string> flags_string_map,
std::string flags_display_name, std::string flag_on_display_string,
std::string flag_off_display_string) {
static_assert(std::is_integral<flags_t>::value, "flags_t must be an integral type.");
static_assert(sizeof(flags_t) <= sizeof(uint32_t), "flags_t can be at most 4 bytes.");
// Setup output stream for formatting hexidecimal numbers
debugflags("%s: 0x%04x\n", flags_display_name.c_str(), flags);
for (const auto& [mask, mask_name] : flags_string_map) {
std::string flag_status_display_string = flag_off_display_string;
if (mask & flags) {
flag_status_display_string = flag_on_display_string;
}
debugflags(" %s: %s\n", mask_name.c_str(), flag_status_display_string.c_str());
}
}
void wlan::DebugDriverFeatureFlags(wlan_info_driver_feature_t flags) {
DebugFlags(flags, driver_feature_flags_string_map, "Driver Features", "Available",
"NOT Available");
}
void wlan::DebugHardwareCapabilityFlags(wlan_info_hardware_capability_t flags) {
DebugFlags(flags, hardware_capability_flags_string_map, "Hardware Capabilities", "Available",
"NOT Available");
}