Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 039bbfee authored by Ahmed ElArabawy's avatar Ahmed ElArabawy Committed by Android (Google) Code Review
Browse files

Merge changes from topic "wifi_qos_hal"

* changes:
  Wifi: Add vts test for low-latency in IWifiChip
  Wifi: Add Implementation for low-latency modes API
parents 467d88e1 f0993445
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -69,9 +69,9 @@ convertLegacyLoggerFeatureToHidlStaIfaceCapability(uint32_t feature) {
    return {};
}

V1_2::IWifiChip::ChipCapabilityMask convertLegacyFeatureToHidlChipCapability(
V1_3::IWifiChip::ChipCapabilityMask convertLegacyFeatureToHidlChipCapability(
    uint32_t feature) {
    using HidlChipCaps = V1_2::IWifiChip::ChipCapabilityMask;
    using HidlChipCaps = V1_3::IWifiChip::ChipCapabilityMask;
    switch (feature) {
        case WIFI_FEATURE_SET_TX_POWER_LIMIT:
            return HidlChipCaps::SET_TX_POWER_LIMIT;
@@ -81,6 +81,8 @@ V1_2::IWifiChip::ChipCapabilityMask convertLegacyFeatureToHidlChipCapability(
            return HidlChipCaps::D2D_RTT;
        case WIFI_FEATURE_D2AP_RTT:
            return HidlChipCaps::D2AP_RTT;
        case WIFI_FEATURE_SET_LATENCY_MODE:
            return HidlChipCaps::SET_LATENCY_MODE;
    };
    CHECK(false) << "Unknown legacy feature: " << feature;
    return {};
@@ -141,7 +143,8 @@ bool convertLegacyFeaturesToHidlChipCapabilities(
    }
    for (const auto feature :
         {WIFI_FEATURE_SET_TX_POWER_LIMIT, WIFI_FEATURE_USE_BODY_HEAD_SAR,
          WIFI_FEATURE_D2D_RTT, WIFI_FEATURE_D2AP_RTT}) {
          WIFI_FEATURE_D2D_RTT, WIFI_FEATURE_D2AP_RTT,
          WIFI_FEATURE_SET_LATENCY_MODE}) {
        if (feature & legacy_feature_set) {
            *hidl_caps |= convertLegacyFeatureToHidlChipCapability(feature);
        }
@@ -292,6 +295,17 @@ legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy_1_2(
    CHECK(false);
}

legacy_hal::wifi_latency_mode convertHidlLatencyModeToLegacy(
    IWifiChip::LatencyMode hidl_latency_mode) {
    switch (hidl_latency_mode) {
        case IWifiChip::LatencyMode::NORMAL:
            return legacy_hal::WIFI_LATENCY_MODE_NORMAL;
        case IWifiChip::LatencyMode::LOW:
            return legacy_hal::WIFI_LATENCY_MODE_LOW;
    }
    CHECK(false);
}

bool convertLegacyWifiMacInfoToHidl(
    const legacy_hal::WifiMacInfo& legacy_mac_info,
    V1_2::IWifiChipEventCallback::RadioModeInfo* hidl_radio_mode_info) {
+3 −1
Original line number Diff line number Diff line
@@ -21,9 +21,9 @@

#include <android/hardware/wifi/1.0/IWifiChip.h>
#include <android/hardware/wifi/1.0/types.h>
#include <android/hardware/wifi/1.2/IWifiChip.h>
#include <android/hardware/wifi/1.2/IWifiChipEventCallback.h>
#include <android/hardware/wifi/1.2/types.h>
#include <android/hardware/wifi/1.3/IWifiChip.h>
#include <android/hardware/wifi/1.3/types.h>

#include "wifi_legacy_hal.h"
@@ -57,6 +57,8 @@ bool convertLegacyWakeReasonStatsToHidl(
    WifiDebugHostWakeReasonStats* hidl_stats);
legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy(
    V1_1::IWifiChip::TxPowerScenario hidl_scenario);
legacy_hal::wifi_latency_mode convertHidlLatencyModeToLegacy(
    V1_3::IWifiChip::LatencyMode hidl_latency_mode);
legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy_1_2(
    V1_2::IWifiChip::TxPowerScenario hidl_scenario);
bool convertLegacyWifiMacInfosToHidl(
+21 −0
Original line number Diff line number Diff line
@@ -238,6 +238,27 @@ TEST_F(HidlStructUtilTest, canConvertLegacyLinkLayerStatsToHidl) {
                  converted.radios[i].onTimeInMsForHs20Scan);
    }
}

TEST_F(HidlStructUtilTest, CanConvertLegacyFeaturesToHidl) {
    using HidlChipCaps = V1_3::IWifiChip::ChipCapabilityMask;

    uint32_t hidle_caps;

    uint32_t legacy_feature_set =
            WIFI_FEATURE_D2D_RTT | WIFI_FEATURE_SET_LATENCY_MODE;
    uint32_t legacy_logger_feature_set =
            legacy_hal::WIFI_LOGGER_DRIVER_DUMP_SUPPORTED;

    ASSERT_TRUE(hidl_struct_util::convertLegacyFeaturesToHidlChipCapabilities(
        legacy_feature_set, legacy_logger_feature_set, &hidle_caps));

    EXPECT_EQ(HidlChipCaps::DEBUG_RING_BUFFER_VENDOR_DATA |
                  HidlChipCaps::DEBUG_HOST_WAKE_REASON_STATS |
                  HidlChipCaps::DEBUG_ERROR_ALERTS | HidlChipCaps::D2D_RTT |
                  HidlChipCaps::SET_LATENCY_MODE |
                  HidlChipCaps::DEBUG_MEMORY_DRIVER_DUMP,
              hidle_caps);
}
}  // namespace implementation
}  // namespace V1_3
}  // namespace wifi
+25 −0
Original line number Diff line number Diff line
@@ -561,6 +561,13 @@ Return<void> WifiChip::resetTxPowerScenario(
                           hidl_status_cb);
}

Return<void> WifiChip::setLatencyMode(LatencyMode mode,
                                      setLatencyMode_cb hidl_status_cb) {
    return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID,
                           &WifiChip::setLatencyModeInternal, hidl_status_cb,
                           mode);
}

Return<void> WifiChip::registerEventCallback_1_2(
    const sp<V1_2::IWifiChipEventCallback>& event_callback,
    registerEventCallback_cb hidl_status_cb) {
@@ -576,6 +583,12 @@ Return<void> WifiChip::selectTxPowerScenario_1_2(
                           hidl_status_cb, scenario);
}

Return<void> WifiChip::getCapabilities_1_3(getCapabilities_cb hidl_status_cb) {
    return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID,
                           &WifiChip::getCapabilitiesInternal_1_3,
                           hidl_status_cb);
}

Return<void> WifiChip::debug(const hidl_handle& handle,
                             const hidl_vec<hidl_string>&) {
    if (handle != nullptr && handle->numFds >= 1) {
@@ -618,6 +631,11 @@ WifiStatus WifiChip::registerEventCallbackInternal(
}

std::pair<WifiStatus, uint32_t> WifiChip::getCapabilitiesInternal() {
    // Deprecated support for this callback.
    return {createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED), 0};
}

std::pair<WifiStatus, uint32_t> WifiChip::getCapabilitiesInternal_1_3() {
    legacy_hal::wifi_error legacy_status;
    uint32_t legacy_feature_set;
    uint32_t legacy_logger_feature_set;
@@ -1058,6 +1076,13 @@ WifiStatus WifiChip::resetTxPowerScenarioInternal() {
    return createWifiStatusFromLegacyError(legacy_status);
}

WifiStatus WifiChip::setLatencyModeInternal(LatencyMode mode) {
    auto legacy_status = legacy_hal_.lock()->setLatencyMode(
        getWlan0IfaceName(),
        hidl_struct_util::convertHidlLatencyModeToLegacy(mode));
    return createWifiStatusFromLegacyError(legacy_status);
}

WifiStatus WifiChip::registerEventCallbackInternal_1_2(
    const sp<V1_2::IWifiChipEventCallback>& event_callback) {
    if (!event_cb_handler_.addCallback(event_callback)) {
+8 −2
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@
#include <map>

#include <android-base/macros.h>
#include <android/hardware/wifi/1.2/IWifiChip.h>
#include <android/hardware/wifi/1.3/IWifiChip.h>

#include "hidl_callback_util.h"
#include "ringbuffer.h"
@@ -46,7 +46,7 @@ using namespace android::hardware::wifi::V1_0;
 * Since there is only a single chip instance used today, there is no
 * identifying handle information stored here.
 */
class WifiChip : public V1_2::IWifiChip {
class WifiChip : public V1_3::IWifiChip {
   public:
    WifiChip(
        ChipId chip_id,
@@ -137,12 +137,16 @@ class WifiChip : public V1_2::IWifiChip {
        selectTxPowerScenario_cb hidl_status_cb) override;
    Return<void> resetTxPowerScenario(
        resetTxPowerScenario_cb hidl_status_cb) override;
    Return<void> setLatencyMode(LatencyMode mode,
                                setLatencyMode_cb hidl_status_cb) override;
    Return<void> registerEventCallback_1_2(
        const sp<V1_2::IWifiChipEventCallback>& event_callback,
        registerEventCallback_1_2_cb hidl_status_cb) override;
    Return<void> selectTxPowerScenario_1_2(
        TxPowerScenario scenario,
        selectTxPowerScenario_cb hidl_status_cb) override;
    Return<void> getCapabilities_1_3(
        getCapabilities_cb hidl_status_cb) override;
    Return<void> debug(const hidl_handle& handle,
                       const hidl_vec<hidl_string>& options) override;

@@ -201,9 +205,11 @@ class WifiChip : public V1_2::IWifiChip {
    WifiStatus selectTxPowerScenarioInternal(
        V1_1::IWifiChip::TxPowerScenario scenario);
    WifiStatus resetTxPowerScenarioInternal();
    WifiStatus setLatencyModeInternal(LatencyMode mode);
    WifiStatus registerEventCallbackInternal_1_2(
        const sp<V1_2::IWifiChipEventCallback>& event_callback);
    WifiStatus selectTxPowerScenarioInternal_1_2(TxPowerScenario scenario);
    std::pair<WifiStatus, uint32_t> getCapabilitiesInternal_1_3();
    WifiStatus handleChipConfiguration(
        std::unique_lock<std::recursive_mutex>* lock, ChipModeId mode_id);
    WifiStatus registerDebugRingBufferCallback();
Loading