Loading wifi/1.2/IWifiChip.hal +44 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,50 @@ import IWifiChipEventCallback; * to perform operations like NAN, RTT, etc. */ interface IWifiChip extends @1.1::IWifiChip { /** * Capabilities exposed by this chip. */ enum ChipCapabilityMask : @1.1::IWifiChip.ChipCapabilityMask { /** * Set/Reset Tx Power limits. */ USE_BODY_HEAD_SAR = 1 << 11 }; /** * List of preset wifi radio TX power levels for different scenarios. * The actual power values (typically varies based on the channel, * 802.11 connection type, number of MIMO streams, etc) for each scenario * is defined by the OEM as a BDF file since it varies for each wifi chip * vendor and device. */ enum TxPowerScenario : @1.1::IWifiChip.TxPowerScenario { ON_HEAD_CELL_OFF = 1, ON_HEAD_CELL_ON = 2, ON_BODY_CELL_OFF = 3, ON_BODY_CELL_ON = 4 }; /** * API to select one of the preset TX power scenarios. * * The framework must invoke this method with the appropriate scenario to let * the wifi chip change it's transmitting power levels. * OEM's should define various power profiles for each of the scenarios * above (defined in |TxPowerScenario|) in a vendor extension. * * @param scenario One of the preselected scenarios defined in * |TxPowerScenario|. * @return status WifiStatus of the operation. * Possible status codes: * |WifiStatusCode.SUCCESS|, * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|, * |WifiStatusCode.ERROR_NOT_SUPPORTED|, * |WifiStatusCode.NOT_AVAILABLE|, * |WifiStatusCode.UNKNOWN| */ selectTxPowerScenario_1_2(TxPowerScenario scenario) generates (WifiStatus status); /** * Requests notifications of significant events on this chip. Multiple calls * to this must register multiple callbacks each of which must receive all Loading wifi/1.2/default/hidl_struct_util.cpp +26 −3 Original line number Diff line number Diff line Loading @@ -66,12 +66,14 @@ convertLegacyLoggerFeatureToHidlStaIfaceCapability(uint32_t feature) { return {}; } V1_1::IWifiChip::ChipCapabilityMask convertLegacyFeatureToHidlChipCapability( IWifiChip::ChipCapabilityMask convertLegacyFeatureToHidlChipCapability( uint32_t feature) { using HidlChipCaps = V1_1::IWifiChip::ChipCapabilityMask; using HidlChipCaps = IWifiChip::ChipCapabilityMask; switch (feature) { case WIFI_FEATURE_SET_TX_POWER_LIMIT: return HidlChipCaps::SET_TX_POWER_LIMIT; case WIFI_FEATURE_USE_BODY_HEAD_SAR: return HidlChipCaps::USE_BODY_HEAD_SAR; case WIFI_FEATURE_D2D_RTT: return HidlChipCaps::D2D_RTT; case WIFI_FEATURE_D2AP_RTT: Loading Loading @@ -135,6 +137,7 @@ 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}) { if (feature & legacy_feature_set) { *hidl_caps |= convertLegacyFeatureToHidlChipCapability(feature); Loading Loading @@ -260,12 +263,32 @@ bool convertLegacyWakeReasonStatsToHidl( legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy( V1_1::IWifiChip::TxPowerScenario hidl_scenario) { switch (hidl_scenario) { // This is the only supported scenario for V1_1 case V1_1::IWifiChip::TxPowerScenario::VOICE_CALL: return legacy_hal::WIFI_POWER_SCENARIO_VOICE_CALL; }; CHECK(false); } legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy_1_2( IWifiChip::TxPowerScenario hidl_scenario) { switch (hidl_scenario) { // This is the only supported scenario for V1_1 case IWifiChip::TxPowerScenario::VOICE_CALL: return legacy_hal::WIFI_POWER_SCENARIO_VOICE_CALL; // Those are the supported scenarios for V1_2 case IWifiChip::TxPowerScenario::ON_HEAD_CELL_OFF: return legacy_hal::WIFI_POWER_SCENARIO_ON_HEAD_CELL_OFF; case IWifiChip::TxPowerScenario::ON_HEAD_CELL_ON: return legacy_hal::WIFI_POWER_SCENARIO_ON_HEAD_CELL_ON; case IWifiChip::TxPowerScenario::ON_BODY_CELL_OFF: return legacy_hal::WIFI_POWER_SCENARIO_ON_BODY_CELL_OFF; case IWifiChip::TxPowerScenario::ON_BODY_CELL_ON: return legacy_hal::WIFI_POWER_SCENARIO_ON_BODY_CELL_ON; }; CHECK(false); } bool convertLegacyWifiMacInfoToHidl( const legacy_hal::WifiMacInfo& legacy_mac_info, IWifiChipEventCallback::RadioModeInfo* hidl_radio_mode_info) { Loading wifi/1.2/default/hidl_struct_util.h +3 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ #include <android/hardware/wifi/1.0/IWifiChip.h> #include <android/hardware/wifi/1.0/types.h> #include <android/hardware/wifi/1.1/IWifiChip.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> Loading Loading @@ -56,6 +56,8 @@ bool convertLegacyWakeReasonStatsToHidl( WifiDebugHostWakeReasonStats* hidl_stats); legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy( V1_1::IWifiChip::TxPowerScenario hidl_scenario); legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy_1_2( IWifiChip::TxPowerScenario hidl_scenario); bool convertLegacyWifiMacInfosToHidl( const std::vector<legacy_hal::WifiMacInfo>& legacy_mac_infos, std::vector<IWifiChipEventCallback::RadioModeInfo>* hidl_radio_mode_infos); Loading wifi/1.2/default/wifi_chip.cpp +16 −2 Original line number Diff line number Diff line Loading @@ -507,7 +507,7 @@ Return<void> WifiChip::enableDebugErrorAlerts( } Return<void> WifiChip::selectTxPowerScenario( TxPowerScenario scenario, selectTxPowerScenario_cb hidl_status_cb) { V1_1::IWifiChip::TxPowerScenario scenario, selectTxPowerScenario_cb hidl_status_cb) { return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, &WifiChip::selectTxPowerScenarioInternal, hidl_status_cb, scenario); Loading @@ -528,6 +528,12 @@ Return<void> WifiChip::registerEventCallback_1_2( hidl_status_cb, event_callback); } Return<void> WifiChip::selectTxPowerScenario_1_2( TxPowerScenario scenario, selectTxPowerScenario_cb hidl_status_cb) { return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, &WifiChip::selectTxPowerScenarioInternal_1_2, hidl_status_cb, scenario); } Return<void> WifiChip::debug(const hidl_handle& handle, const hidl_vec<hidl_string>&) { if (handle != nullptr && handle->numFds >= 1) { Loading Loading @@ -990,7 +996,8 @@ WifiStatus WifiChip::enableDebugErrorAlertsInternal(bool enable) { return createWifiStatusFromLegacyError(legacy_status); } WifiStatus WifiChip::selectTxPowerScenarioInternal(TxPowerScenario scenario) { WifiStatus WifiChip::selectTxPowerScenarioInternal( V1_1::IWifiChip::TxPowerScenario scenario) { auto legacy_status = legacy_hal_.lock()->selectTxPowerScenario( getWlan0IfaceName(), hidl_struct_util::convertHidlTxPowerScenarioToLegacy(scenario)); Loading @@ -1011,6 +1018,13 @@ WifiStatus WifiChip::registerEventCallbackInternal_1_2( return createWifiStatus(WifiStatusCode::SUCCESS); } WifiStatus WifiChip::selectTxPowerScenarioInternal_1_2(TxPowerScenario scenario) { auto legacy_status = legacy_hal_.lock()->selectTxPowerScenario( getWlan0IfaceName(), hidl_struct_util::convertHidlTxPowerScenarioToLegacy_1_2(scenario)); return createWifiStatusFromLegacyError(legacy_status); } WifiStatus WifiChip::handleChipConfiguration( /* NONNULL */ std::unique_lock<std::recursive_mutex>* lock, ChipModeId mode_id) { Loading wifi/1.2/default/wifi_chip.h +8 −6 Original line number Diff line number Diff line Loading @@ -132,16 +132,18 @@ class WifiChip : public V1_2::IWifiChip { Return<void> enableDebugErrorAlerts( bool enable, enableDebugErrorAlerts_cb hidl_status_cb) override; Return<void> selectTxPowerScenario( TxPowerScenario scenario, V1_1::IWifiChip::TxPowerScenario scenario, selectTxPowerScenario_cb hidl_status_cb) override; Return<void> resetTxPowerScenario( resetTxPowerScenario_cb hidl_status_cb) override; Return<void> debug(const hidl_handle& handle, const hidl_vec<hidl_string>& options) override; Return<void> registerEventCallback_1_2( const sp<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> debug(const hidl_handle& handle, const hidl_vec<hidl_string>& options) override; private: void invalidateAndRemoveAllIfaces(); Loading Loading @@ -193,11 +195,11 @@ class WifiChip : public V1_2::IWifiChip { std::pair<WifiStatus, WifiDebugHostWakeReasonStats> getDebugHostWakeReasonStatsInternal(); WifiStatus enableDebugErrorAlertsInternal(bool enable); WifiStatus selectTxPowerScenarioInternal(TxPowerScenario scenario); WifiStatus selectTxPowerScenarioInternal(V1_1::IWifiChip::TxPowerScenario scenario); WifiStatus resetTxPowerScenarioInternal(); WifiStatus registerEventCallbackInternal_1_2( const sp<IWifiChipEventCallback>& event_callback); WifiStatus selectTxPowerScenarioInternal_1_2(TxPowerScenario scenario); WifiStatus handleChipConfiguration( std::unique_lock<std::recursive_mutex>* lock, ChipModeId mode_id); WifiStatus registerDebugRingBufferCallback(); Loading Loading
wifi/1.2/IWifiChip.hal +44 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,50 @@ import IWifiChipEventCallback; * to perform operations like NAN, RTT, etc. */ interface IWifiChip extends @1.1::IWifiChip { /** * Capabilities exposed by this chip. */ enum ChipCapabilityMask : @1.1::IWifiChip.ChipCapabilityMask { /** * Set/Reset Tx Power limits. */ USE_BODY_HEAD_SAR = 1 << 11 }; /** * List of preset wifi radio TX power levels for different scenarios. * The actual power values (typically varies based on the channel, * 802.11 connection type, number of MIMO streams, etc) for each scenario * is defined by the OEM as a BDF file since it varies for each wifi chip * vendor and device. */ enum TxPowerScenario : @1.1::IWifiChip.TxPowerScenario { ON_HEAD_CELL_OFF = 1, ON_HEAD_CELL_ON = 2, ON_BODY_CELL_OFF = 3, ON_BODY_CELL_ON = 4 }; /** * API to select one of the preset TX power scenarios. * * The framework must invoke this method with the appropriate scenario to let * the wifi chip change it's transmitting power levels. * OEM's should define various power profiles for each of the scenarios * above (defined in |TxPowerScenario|) in a vendor extension. * * @param scenario One of the preselected scenarios defined in * |TxPowerScenario|. * @return status WifiStatus of the operation. * Possible status codes: * |WifiStatusCode.SUCCESS|, * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|, * |WifiStatusCode.ERROR_NOT_SUPPORTED|, * |WifiStatusCode.NOT_AVAILABLE|, * |WifiStatusCode.UNKNOWN| */ selectTxPowerScenario_1_2(TxPowerScenario scenario) generates (WifiStatus status); /** * Requests notifications of significant events on this chip. Multiple calls * to this must register multiple callbacks each of which must receive all Loading
wifi/1.2/default/hidl_struct_util.cpp +26 −3 Original line number Diff line number Diff line Loading @@ -66,12 +66,14 @@ convertLegacyLoggerFeatureToHidlStaIfaceCapability(uint32_t feature) { return {}; } V1_1::IWifiChip::ChipCapabilityMask convertLegacyFeatureToHidlChipCapability( IWifiChip::ChipCapabilityMask convertLegacyFeatureToHidlChipCapability( uint32_t feature) { using HidlChipCaps = V1_1::IWifiChip::ChipCapabilityMask; using HidlChipCaps = IWifiChip::ChipCapabilityMask; switch (feature) { case WIFI_FEATURE_SET_TX_POWER_LIMIT: return HidlChipCaps::SET_TX_POWER_LIMIT; case WIFI_FEATURE_USE_BODY_HEAD_SAR: return HidlChipCaps::USE_BODY_HEAD_SAR; case WIFI_FEATURE_D2D_RTT: return HidlChipCaps::D2D_RTT; case WIFI_FEATURE_D2AP_RTT: Loading Loading @@ -135,6 +137,7 @@ 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}) { if (feature & legacy_feature_set) { *hidl_caps |= convertLegacyFeatureToHidlChipCapability(feature); Loading Loading @@ -260,12 +263,32 @@ bool convertLegacyWakeReasonStatsToHidl( legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy( V1_1::IWifiChip::TxPowerScenario hidl_scenario) { switch (hidl_scenario) { // This is the only supported scenario for V1_1 case V1_1::IWifiChip::TxPowerScenario::VOICE_CALL: return legacy_hal::WIFI_POWER_SCENARIO_VOICE_CALL; }; CHECK(false); } legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy_1_2( IWifiChip::TxPowerScenario hidl_scenario) { switch (hidl_scenario) { // This is the only supported scenario for V1_1 case IWifiChip::TxPowerScenario::VOICE_CALL: return legacy_hal::WIFI_POWER_SCENARIO_VOICE_CALL; // Those are the supported scenarios for V1_2 case IWifiChip::TxPowerScenario::ON_HEAD_CELL_OFF: return legacy_hal::WIFI_POWER_SCENARIO_ON_HEAD_CELL_OFF; case IWifiChip::TxPowerScenario::ON_HEAD_CELL_ON: return legacy_hal::WIFI_POWER_SCENARIO_ON_HEAD_CELL_ON; case IWifiChip::TxPowerScenario::ON_BODY_CELL_OFF: return legacy_hal::WIFI_POWER_SCENARIO_ON_BODY_CELL_OFF; case IWifiChip::TxPowerScenario::ON_BODY_CELL_ON: return legacy_hal::WIFI_POWER_SCENARIO_ON_BODY_CELL_ON; }; CHECK(false); } bool convertLegacyWifiMacInfoToHidl( const legacy_hal::WifiMacInfo& legacy_mac_info, IWifiChipEventCallback::RadioModeInfo* hidl_radio_mode_info) { Loading
wifi/1.2/default/hidl_struct_util.h +3 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ #include <android/hardware/wifi/1.0/IWifiChip.h> #include <android/hardware/wifi/1.0/types.h> #include <android/hardware/wifi/1.1/IWifiChip.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> Loading Loading @@ -56,6 +56,8 @@ bool convertLegacyWakeReasonStatsToHidl( WifiDebugHostWakeReasonStats* hidl_stats); legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy( V1_1::IWifiChip::TxPowerScenario hidl_scenario); legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy_1_2( IWifiChip::TxPowerScenario hidl_scenario); bool convertLegacyWifiMacInfosToHidl( const std::vector<legacy_hal::WifiMacInfo>& legacy_mac_infos, std::vector<IWifiChipEventCallback::RadioModeInfo>* hidl_radio_mode_infos); Loading
wifi/1.2/default/wifi_chip.cpp +16 −2 Original line number Diff line number Diff line Loading @@ -507,7 +507,7 @@ Return<void> WifiChip::enableDebugErrorAlerts( } Return<void> WifiChip::selectTxPowerScenario( TxPowerScenario scenario, selectTxPowerScenario_cb hidl_status_cb) { V1_1::IWifiChip::TxPowerScenario scenario, selectTxPowerScenario_cb hidl_status_cb) { return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, &WifiChip::selectTxPowerScenarioInternal, hidl_status_cb, scenario); Loading @@ -528,6 +528,12 @@ Return<void> WifiChip::registerEventCallback_1_2( hidl_status_cb, event_callback); } Return<void> WifiChip::selectTxPowerScenario_1_2( TxPowerScenario scenario, selectTxPowerScenario_cb hidl_status_cb) { return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, &WifiChip::selectTxPowerScenarioInternal_1_2, hidl_status_cb, scenario); } Return<void> WifiChip::debug(const hidl_handle& handle, const hidl_vec<hidl_string>&) { if (handle != nullptr && handle->numFds >= 1) { Loading Loading @@ -990,7 +996,8 @@ WifiStatus WifiChip::enableDebugErrorAlertsInternal(bool enable) { return createWifiStatusFromLegacyError(legacy_status); } WifiStatus WifiChip::selectTxPowerScenarioInternal(TxPowerScenario scenario) { WifiStatus WifiChip::selectTxPowerScenarioInternal( V1_1::IWifiChip::TxPowerScenario scenario) { auto legacy_status = legacy_hal_.lock()->selectTxPowerScenario( getWlan0IfaceName(), hidl_struct_util::convertHidlTxPowerScenarioToLegacy(scenario)); Loading @@ -1011,6 +1018,13 @@ WifiStatus WifiChip::registerEventCallbackInternal_1_2( return createWifiStatus(WifiStatusCode::SUCCESS); } WifiStatus WifiChip::selectTxPowerScenarioInternal_1_2(TxPowerScenario scenario) { auto legacy_status = legacy_hal_.lock()->selectTxPowerScenario( getWlan0IfaceName(), hidl_struct_util::convertHidlTxPowerScenarioToLegacy_1_2(scenario)); return createWifiStatusFromLegacyError(legacy_status); } WifiStatus WifiChip::handleChipConfiguration( /* NONNULL */ std::unique_lock<std::recursive_mutex>* lock, ChipModeId mode_id) { Loading
wifi/1.2/default/wifi_chip.h +8 −6 Original line number Diff line number Diff line Loading @@ -132,16 +132,18 @@ class WifiChip : public V1_2::IWifiChip { Return<void> enableDebugErrorAlerts( bool enable, enableDebugErrorAlerts_cb hidl_status_cb) override; Return<void> selectTxPowerScenario( TxPowerScenario scenario, V1_1::IWifiChip::TxPowerScenario scenario, selectTxPowerScenario_cb hidl_status_cb) override; Return<void> resetTxPowerScenario( resetTxPowerScenario_cb hidl_status_cb) override; Return<void> debug(const hidl_handle& handle, const hidl_vec<hidl_string>& options) override; Return<void> registerEventCallback_1_2( const sp<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> debug(const hidl_handle& handle, const hidl_vec<hidl_string>& options) override; private: void invalidateAndRemoveAllIfaces(); Loading Loading @@ -193,11 +195,11 @@ class WifiChip : public V1_2::IWifiChip { std::pair<WifiStatus, WifiDebugHostWakeReasonStats> getDebugHostWakeReasonStatsInternal(); WifiStatus enableDebugErrorAlertsInternal(bool enable); WifiStatus selectTxPowerScenarioInternal(TxPowerScenario scenario); WifiStatus selectTxPowerScenarioInternal(V1_1::IWifiChip::TxPowerScenario scenario); WifiStatus resetTxPowerScenarioInternal(); WifiStatus registerEventCallbackInternal_1_2( const sp<IWifiChipEventCallback>& event_callback); WifiStatus selectTxPowerScenarioInternal_1_2(TxPowerScenario scenario); WifiStatus handleChipConfiguration( std::unique_lock<std::recursive_mutex>* lock, ChipModeId mode_id); WifiStatus registerDebugRingBufferCallback(); Loading