Loading wifi/aidl/default/wifi_legacy_hal.cpp +9 −5 Original line number Diff line number Diff line Loading @@ -1867,9 +1867,8 @@ std::pair<wifi_twt_capabilities, wifi_error> WifiLegacyHal::twtGetCapabilities( return {capabs, status}; } wifi_error WifiLegacyHal::twtSessionSetup( const std::string& ifaceName, uint32_t cmdId, const wifi_twt_request& request, const on_twt_failure& on_twt_failure_user_callback, wifi_error WifiLegacyHal::twtRegisterEvents( const std::string& ifaceName, const on_twt_failure& on_twt_failure_user_callback, const on_twt_session_create& on_twt_session_create_user_callback, const on_twt_session_update& on_twt_session_update_user_callback, const on_twt_session_teardown& on_twt_session_teardown_user_callback, Loading Loading @@ -1921,13 +1920,18 @@ wifi_error WifiLegacyHal::twtSessionSetup( on_twt_session_resume_user_callback(id, session_id); }; return global_func_table_.wifi_twt_session_setup( cmdId, getIfaceHandle(ifaceName), request, return global_func_table_.wifi_twt_register_events( getIfaceHandle(ifaceName), {onAsyncTwtError, onAsyncTwtSessionCreate, onAsyncTwtSessionUpdate, onAsyncTwtSessionTeardown, onAsyncTwtSessionStats, onAsyncTwtSessionSuspend, onAsyncTwtSessionResume}); } wifi_error WifiLegacyHal::twtSessionSetup(const std::string& ifaceName, uint32_t cmdId, const wifi_twt_request& request) { return global_func_table_.wifi_twt_session_setup(cmdId, getIfaceHandle(ifaceName), request); } wifi_error WifiLegacyHal::twtSessionUpdate(const std::string& ifaceName, uint32_t cmdId, uint32_t sessionId, const wifi_twt_request& request) { return global_func_table_.wifi_twt_session_update(cmdId, getIfaceHandle(ifaceName), sessionId, Loading wifi/aidl/default/wifi_legacy_hal.h +10 −9 Original line number Diff line number Diff line Loading @@ -780,15 +780,16 @@ class WifiLegacyHal { // TWT functions std::pair<wifi_twt_capabilities, wifi_error> twtGetCapabilities(const std::string& ifaceName); wifi_error twtSessionSetup(const std::string& ifaceName, uint32_t cmdId, const wifi_twt_request& request, const on_twt_failure& on_twt_failure_user_callback, wifi_error twtRegisterEvents( const std::string& ifaceName, const on_twt_failure& on_twt_failure_user_callback, const on_twt_session_create& on_twt_session_create_user_callback, const on_twt_session_update& on_twt_session_update_user_callback, const on_twt_session_teardown& on_twt_session_teardown_user_callback, const on_twt_session_stats& on_twt_session_stats_user_callback, const on_twt_session_suspend& on_twt_session_suspend_user_callback, const on_twt_session_resume& on_twt_session_resume_user_callback); wifi_error twtSessionSetup(const std::string& ifaceName, uint32_t cmdId, const wifi_twt_request& request); wifi_error twtSessionUpdate(const std::string& ifaceName, uint32_t cmdId, uint32_t sessionId, const wifi_twt_request& request); wifi_error twtSessionSuspend(const std::string& ifaceName, uint32_t cmdId, uint32_t sessionId); Loading @@ -797,7 +798,7 @@ class WifiLegacyHal { wifi_error twtSessionGetStats(const std::string& ifaceName, uint32_t cmdId, uint32_t sessionId); // Note: Following TWT functions are deprecated // Deprecated // Deprecated by twtRegisterEvegnts wifi_error twtRegisterHandler(const std::string& iface_name, const TwtCallbackHandlers& handler); // Deprecated by twtGetCapabilities Loading wifi/aidl/default/wifi_legacy_hal_stubs.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,7 @@ bool initHalFuncTableWithStubs(wifi_hal_fn* hal_fn) { populateStubFor(&hal_fn->wifi_get_rtt_capabilities_v3); populateStubFor(&hal_fn->wifi_rtt_range_request_v3); populateStubFor(&hal_fn->wifi_twt_get_capabilities); populateStubFor(&hal_fn->wifi_twt_register_events); populateStubFor(&hal_fn->wifi_twt_session_setup); populateStubFor(&hal_fn->wifi_twt_session_update); populateStubFor(&hal_fn->wifi_twt_session_suspend); Loading wifi/aidl/default/wifi_sta_iface.cpp +150 −129 Original line number Diff line number Diff line Loading @@ -31,7 +31,11 @@ using aidl_return_util::validateAndCall; WifiStaIface::WifiStaIface(const std::string& ifname, const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal, const std::weak_ptr<iface_util::WifiIfaceUtil> iface_util) : ifname_(ifname), legacy_hal_(legacy_hal), iface_util_(iface_util), is_valid_(true) { : ifname_(ifname), legacy_hal_(legacy_hal), iface_util_(iface_util), is_valid_(true), is_twt_registered_(false) { // Turn on DFS channel usage for STA iface. legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->setDfsFlag(ifname_, true); if (legacy_status != legacy_hal::WIFI_SUCCESS) { Loading Loading @@ -266,11 +270,150 @@ std::pair<std::string, ndk::ScopedAStatus> WifiStaIface::getNameInternal() { return {ifname_, ndk::ScopedAStatus::ok()}; } ndk::ScopedAStatus WifiStaIface::registerTwtEventCallbackInternal() { std::weak_ptr<WifiStaIface> weak_ptr_this = weak_ptr_this_; // onTwtFailure callback const auto& on_twt_failure = [weak_ptr_this](legacy_hal::wifi_request_id id, legacy_hal::wifi_twt_error_code error_code) { const auto shared_ptr_this = weak_ptr_this.lock(); IWifiStaIfaceEventCallback::TwtErrorCode aidl_error_code = aidl_struct_util::convertLegacyHalTwtErrorCodeToAidl(error_code); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtFailure(id, aidl_error_code).isOk()) { LOG(ERROR) << "Failed to invoke onTwtFailure callback"; } } }; // onTwtSessionCreate callback const auto& on_twt_session_create = [weak_ptr_this](legacy_hal::wifi_request_id id, legacy_hal::wifi_twt_session twt_session) { const auto shared_ptr_this = weak_ptr_this.lock(); TwtSession aidl_twt_session; if (!aidl_struct_util::convertLegacyHalTwtSessionToAidl(twt_session, &aidl_twt_session)) { LOG(ERROR) << "convertLegacyHalTwtSessionToAidl failed"; return; } if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionCreate(id, aidl_twt_session).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionCreate callback"; } } }; // onTwtSessionUpdate callback const auto& on_twt_session_update = [weak_ptr_this](legacy_hal::wifi_request_id id, legacy_hal::wifi_twt_session twt_session) { const auto shared_ptr_this = weak_ptr_this.lock(); TwtSession aidl_twt_session; if (!aidl_struct_util::convertLegacyHalTwtSessionToAidl(twt_session, &aidl_twt_session)) { LOG(ERROR) << "convertLegacyHalTwtSessionToAidl failed"; return; } if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionUpdate(id, aidl_twt_session).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionUpdate callback"; } } }; // onTwtSessionTeardown callback const auto& on_twt_session_teardown = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id, legacy_hal::wifi_twt_teardown_reason_code reason_code) { const auto shared_ptr_this = weak_ptr_this.lock(); IWifiStaIfaceEventCallback::TwtTeardownReasonCode aidl_reason_code = aidl_struct_util::convertLegacyHalTwtReasonCodeToAidl(reason_code); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionTeardown(id, session_id, aidl_reason_code).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionTeardown callback"; } } }; // onTwtSessionStats callback const auto& on_twt_session_stats = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id, legacy_hal::wifi_twt_session_stats stats) { const auto shared_ptr_this = weak_ptr_this.lock(); TwtSessionStats aidl_session_stats; if (!aidl_struct_util::convertLegacyHalTwtSessionStatsToAidl(stats, &aidl_session_stats)) { LOG(ERROR) << "convertLegacyHalTwtSessionStatsToAidl failed"; return; } if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionStats(id, session_id, aidl_session_stats).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionStats callback"; } } }; // onTwtSessionSuspend callback const auto& on_twt_session_suspend = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id) { const auto shared_ptr_this = weak_ptr_this.lock(); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionSuspend(id, session_id).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionSuspend callback"; } } }; // onTwtSessionResume callback const auto& on_twt_session_resume = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id) { const auto shared_ptr_this = weak_ptr_this.lock(); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionResume(id, session_id).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionResume callback"; } } }; legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->twtRegisterEvents( ifname_, on_twt_failure, on_twt_session_create, on_twt_session_update, on_twt_session_teardown, on_twt_session_stats, on_twt_session_suspend, on_twt_session_resume); if (legacy_status == legacy_hal::WIFI_ERROR_NOT_SUPPORTED) { LOG(INFO) << "twtRegisterEvents is not supported" << legacy_status; } else if (legacy_status != legacy_hal::WIFI_SUCCESS) { LOG(ERROR) << "twtRegisterEvents failed - %d" << legacy_status; } return createWifiStatusFromLegacyError(legacy_status); } ndk::ScopedAStatus WifiStaIface::registerEventCallbackInternal( const std::shared_ptr<IWifiStaIfaceEventCallback>& callback) { if (!event_cb_handler_.addCallback(callback)) { return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); } is_twt_registered_ = registerTwtEventCallbackInternal().isOk(); return ndk::ScopedAStatus::ok(); } Loading Loading @@ -617,138 +760,16 @@ std::pair<TwtCapabilities, ndk::ScopedAStatus> WifiStaIface::twtGetCapabilitiesI ndk::ScopedAStatus WifiStaIface::twtSessionSetupInternal(int32_t cmdId, const TwtRequest& aidlTwtRequest) { if (!is_twt_registered_) { LOG(INFO) << "twtSessionSetup is not supported as twtRegisterEvents failed"; return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); } legacy_hal::wifi_twt_request legacyHalTwtRequest; if (!aidl_struct_util::convertAidlTwtRequestToLegacy(aidlTwtRequest, &legacyHalTwtRequest)) { return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); } std::weak_ptr<WifiStaIface> weak_ptr_this = weak_ptr_this_; // onTwtFailure callback const auto& on_twt_failure = [weak_ptr_this](legacy_hal::wifi_request_id id, legacy_hal::wifi_twt_error_code error_code) { const auto shared_ptr_this = weak_ptr_this.lock(); IWifiStaIfaceEventCallback::TwtErrorCode aidl_error_code = aidl_struct_util::convertLegacyHalTwtErrorCodeToAidl(error_code); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtFailure(id, aidl_error_code).isOk()) { LOG(ERROR) << "Failed to invoke onTwtFailure callback"; } } }; // onTwtSessionCreate callback const auto& on_twt_session_create = [weak_ptr_this](legacy_hal::wifi_request_id id, legacy_hal::wifi_twt_session twt_session) { const auto shared_ptr_this = weak_ptr_this.lock(); TwtSession aidl_twt_session; if (!aidl_struct_util::convertLegacyHalTwtSessionToAidl(twt_session, &aidl_twt_session)) { LOG(ERROR) << "convertLegacyHalTwtSessionToAidl failed"; return; } if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionCreate(id, aidl_twt_session).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionCreate callback"; } } }; // onTwtSessionUpdate callback const auto& on_twt_session_update = [weak_ptr_this](legacy_hal::wifi_request_id id, legacy_hal::wifi_twt_session twt_session) { const auto shared_ptr_this = weak_ptr_this.lock(); TwtSession aidl_twt_session; if (!aidl_struct_util::convertLegacyHalTwtSessionToAidl(twt_session, &aidl_twt_session)) { LOG(ERROR) << "convertLegacyHalTwtSessionToAidl failed"; return; } if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionUpdate(id, aidl_twt_session).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionUpdate callback"; } } }; // onTwtSessionTeardown callback const auto& on_twt_session_teardown = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id, legacy_hal::wifi_twt_teardown_reason_code reason_code) { const auto shared_ptr_this = weak_ptr_this.lock(); IWifiStaIfaceEventCallback::TwtTeardownReasonCode aidl_reason_code = aidl_struct_util::convertLegacyHalTwtReasonCodeToAidl(reason_code); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionTeardown(id, session_id, aidl_reason_code).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionTeardown callback"; } } }; // onTwtSessionStats callback const auto& on_twt_session_stats = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id, legacy_hal::wifi_twt_session_stats stats) { const auto shared_ptr_this = weak_ptr_this.lock(); TwtSessionStats aidl_session_stats; if (!aidl_struct_util::convertLegacyHalTwtSessionStatsToAidl(stats, &aidl_session_stats)) { LOG(ERROR) << "convertLegacyHalTwtSessionStatsToAidl failed"; return; } if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionStats(id, session_id, aidl_session_stats).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionStats callback"; } } }; // onTwtSessionSuspend callback const auto& on_twt_session_suspend = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id) { const auto shared_ptr_this = weak_ptr_this.lock(); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionSuspend(id, session_id).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionSuspend callback"; } } }; // onTwtSessionResume callback const auto& on_twt_session_resume = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id) { const auto shared_ptr_this = weak_ptr_this.lock(); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionResume(id, session_id).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionResume callback"; } } }; legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->twtSessionSetup( ifname_, cmdId, legacyHalTwtRequest, on_twt_failure, on_twt_session_create, on_twt_session_update, on_twt_session_teardown, on_twt_session_stats, on_twt_session_suspend, on_twt_session_resume); legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->twtSessionSetup(ifname_, cmdId, legacyHalTwtRequest); return createWifiStatusFromLegacyError(legacy_status); } Loading wifi/aidl/default/wifi_sta_iface.h +2 −0 Original line number Diff line number Diff line Loading @@ -103,6 +103,7 @@ class WifiStaIface : public BnWifiStaIface { private: // Corresponding worker functions for the AIDL methods. std::pair<std::string, ndk::ScopedAStatus> getNameInternal(); ndk::ScopedAStatus registerTwtEventCallbackInternal(); ndk::ScopedAStatus registerEventCallbackInternal( const std::shared_ptr<IWifiStaIfaceEventCallback>& callback); std::pair<int32_t, ndk::ScopedAStatus> getFeatureSetInternal(); Loading Loading @@ -157,6 +158,7 @@ class WifiStaIface : public BnWifiStaIface { std::weak_ptr<WifiStaIface> weak_ptr_this_; bool is_valid_; aidl_callback_util::AidlCallbackHandler<IWifiStaIfaceEventCallback> event_cb_handler_; bool is_twt_registered_; DISALLOW_COPY_AND_ASSIGN(WifiStaIface); }; Loading Loading
wifi/aidl/default/wifi_legacy_hal.cpp +9 −5 Original line number Diff line number Diff line Loading @@ -1867,9 +1867,8 @@ std::pair<wifi_twt_capabilities, wifi_error> WifiLegacyHal::twtGetCapabilities( return {capabs, status}; } wifi_error WifiLegacyHal::twtSessionSetup( const std::string& ifaceName, uint32_t cmdId, const wifi_twt_request& request, const on_twt_failure& on_twt_failure_user_callback, wifi_error WifiLegacyHal::twtRegisterEvents( const std::string& ifaceName, const on_twt_failure& on_twt_failure_user_callback, const on_twt_session_create& on_twt_session_create_user_callback, const on_twt_session_update& on_twt_session_update_user_callback, const on_twt_session_teardown& on_twt_session_teardown_user_callback, Loading Loading @@ -1921,13 +1920,18 @@ wifi_error WifiLegacyHal::twtSessionSetup( on_twt_session_resume_user_callback(id, session_id); }; return global_func_table_.wifi_twt_session_setup( cmdId, getIfaceHandle(ifaceName), request, return global_func_table_.wifi_twt_register_events( getIfaceHandle(ifaceName), {onAsyncTwtError, onAsyncTwtSessionCreate, onAsyncTwtSessionUpdate, onAsyncTwtSessionTeardown, onAsyncTwtSessionStats, onAsyncTwtSessionSuspend, onAsyncTwtSessionResume}); } wifi_error WifiLegacyHal::twtSessionSetup(const std::string& ifaceName, uint32_t cmdId, const wifi_twt_request& request) { return global_func_table_.wifi_twt_session_setup(cmdId, getIfaceHandle(ifaceName), request); } wifi_error WifiLegacyHal::twtSessionUpdate(const std::string& ifaceName, uint32_t cmdId, uint32_t sessionId, const wifi_twt_request& request) { return global_func_table_.wifi_twt_session_update(cmdId, getIfaceHandle(ifaceName), sessionId, Loading
wifi/aidl/default/wifi_legacy_hal.h +10 −9 Original line number Diff line number Diff line Loading @@ -780,15 +780,16 @@ class WifiLegacyHal { // TWT functions std::pair<wifi_twt_capabilities, wifi_error> twtGetCapabilities(const std::string& ifaceName); wifi_error twtSessionSetup(const std::string& ifaceName, uint32_t cmdId, const wifi_twt_request& request, const on_twt_failure& on_twt_failure_user_callback, wifi_error twtRegisterEvents( const std::string& ifaceName, const on_twt_failure& on_twt_failure_user_callback, const on_twt_session_create& on_twt_session_create_user_callback, const on_twt_session_update& on_twt_session_update_user_callback, const on_twt_session_teardown& on_twt_session_teardown_user_callback, const on_twt_session_stats& on_twt_session_stats_user_callback, const on_twt_session_suspend& on_twt_session_suspend_user_callback, const on_twt_session_resume& on_twt_session_resume_user_callback); wifi_error twtSessionSetup(const std::string& ifaceName, uint32_t cmdId, const wifi_twt_request& request); wifi_error twtSessionUpdate(const std::string& ifaceName, uint32_t cmdId, uint32_t sessionId, const wifi_twt_request& request); wifi_error twtSessionSuspend(const std::string& ifaceName, uint32_t cmdId, uint32_t sessionId); Loading @@ -797,7 +798,7 @@ class WifiLegacyHal { wifi_error twtSessionGetStats(const std::string& ifaceName, uint32_t cmdId, uint32_t sessionId); // Note: Following TWT functions are deprecated // Deprecated // Deprecated by twtRegisterEvegnts wifi_error twtRegisterHandler(const std::string& iface_name, const TwtCallbackHandlers& handler); // Deprecated by twtGetCapabilities Loading
wifi/aidl/default/wifi_legacy_hal_stubs.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,7 @@ bool initHalFuncTableWithStubs(wifi_hal_fn* hal_fn) { populateStubFor(&hal_fn->wifi_get_rtt_capabilities_v3); populateStubFor(&hal_fn->wifi_rtt_range_request_v3); populateStubFor(&hal_fn->wifi_twt_get_capabilities); populateStubFor(&hal_fn->wifi_twt_register_events); populateStubFor(&hal_fn->wifi_twt_session_setup); populateStubFor(&hal_fn->wifi_twt_session_update); populateStubFor(&hal_fn->wifi_twt_session_suspend); Loading
wifi/aidl/default/wifi_sta_iface.cpp +150 −129 Original line number Diff line number Diff line Loading @@ -31,7 +31,11 @@ using aidl_return_util::validateAndCall; WifiStaIface::WifiStaIface(const std::string& ifname, const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal, const std::weak_ptr<iface_util::WifiIfaceUtil> iface_util) : ifname_(ifname), legacy_hal_(legacy_hal), iface_util_(iface_util), is_valid_(true) { : ifname_(ifname), legacy_hal_(legacy_hal), iface_util_(iface_util), is_valid_(true), is_twt_registered_(false) { // Turn on DFS channel usage for STA iface. legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->setDfsFlag(ifname_, true); if (legacy_status != legacy_hal::WIFI_SUCCESS) { Loading Loading @@ -266,11 +270,150 @@ std::pair<std::string, ndk::ScopedAStatus> WifiStaIface::getNameInternal() { return {ifname_, ndk::ScopedAStatus::ok()}; } ndk::ScopedAStatus WifiStaIface::registerTwtEventCallbackInternal() { std::weak_ptr<WifiStaIface> weak_ptr_this = weak_ptr_this_; // onTwtFailure callback const auto& on_twt_failure = [weak_ptr_this](legacy_hal::wifi_request_id id, legacy_hal::wifi_twt_error_code error_code) { const auto shared_ptr_this = weak_ptr_this.lock(); IWifiStaIfaceEventCallback::TwtErrorCode aidl_error_code = aidl_struct_util::convertLegacyHalTwtErrorCodeToAidl(error_code); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtFailure(id, aidl_error_code).isOk()) { LOG(ERROR) << "Failed to invoke onTwtFailure callback"; } } }; // onTwtSessionCreate callback const auto& on_twt_session_create = [weak_ptr_this](legacy_hal::wifi_request_id id, legacy_hal::wifi_twt_session twt_session) { const auto shared_ptr_this = weak_ptr_this.lock(); TwtSession aidl_twt_session; if (!aidl_struct_util::convertLegacyHalTwtSessionToAidl(twt_session, &aidl_twt_session)) { LOG(ERROR) << "convertLegacyHalTwtSessionToAidl failed"; return; } if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionCreate(id, aidl_twt_session).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionCreate callback"; } } }; // onTwtSessionUpdate callback const auto& on_twt_session_update = [weak_ptr_this](legacy_hal::wifi_request_id id, legacy_hal::wifi_twt_session twt_session) { const auto shared_ptr_this = weak_ptr_this.lock(); TwtSession aidl_twt_session; if (!aidl_struct_util::convertLegacyHalTwtSessionToAidl(twt_session, &aidl_twt_session)) { LOG(ERROR) << "convertLegacyHalTwtSessionToAidl failed"; return; } if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionUpdate(id, aidl_twt_session).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionUpdate callback"; } } }; // onTwtSessionTeardown callback const auto& on_twt_session_teardown = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id, legacy_hal::wifi_twt_teardown_reason_code reason_code) { const auto shared_ptr_this = weak_ptr_this.lock(); IWifiStaIfaceEventCallback::TwtTeardownReasonCode aidl_reason_code = aidl_struct_util::convertLegacyHalTwtReasonCodeToAidl(reason_code); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionTeardown(id, session_id, aidl_reason_code).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionTeardown callback"; } } }; // onTwtSessionStats callback const auto& on_twt_session_stats = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id, legacy_hal::wifi_twt_session_stats stats) { const auto shared_ptr_this = weak_ptr_this.lock(); TwtSessionStats aidl_session_stats; if (!aidl_struct_util::convertLegacyHalTwtSessionStatsToAidl(stats, &aidl_session_stats)) { LOG(ERROR) << "convertLegacyHalTwtSessionStatsToAidl failed"; return; } if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionStats(id, session_id, aidl_session_stats).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionStats callback"; } } }; // onTwtSessionSuspend callback const auto& on_twt_session_suspend = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id) { const auto shared_ptr_this = weak_ptr_this.lock(); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionSuspend(id, session_id).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionSuspend callback"; } } }; // onTwtSessionResume callback const auto& on_twt_session_resume = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id) { const auto shared_ptr_this = weak_ptr_this.lock(); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionResume(id, session_id).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionResume callback"; } } }; legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->twtRegisterEvents( ifname_, on_twt_failure, on_twt_session_create, on_twt_session_update, on_twt_session_teardown, on_twt_session_stats, on_twt_session_suspend, on_twt_session_resume); if (legacy_status == legacy_hal::WIFI_ERROR_NOT_SUPPORTED) { LOG(INFO) << "twtRegisterEvents is not supported" << legacy_status; } else if (legacy_status != legacy_hal::WIFI_SUCCESS) { LOG(ERROR) << "twtRegisterEvents failed - %d" << legacy_status; } return createWifiStatusFromLegacyError(legacy_status); } ndk::ScopedAStatus WifiStaIface::registerEventCallbackInternal( const std::shared_ptr<IWifiStaIfaceEventCallback>& callback) { if (!event_cb_handler_.addCallback(callback)) { return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); } is_twt_registered_ = registerTwtEventCallbackInternal().isOk(); return ndk::ScopedAStatus::ok(); } Loading Loading @@ -617,138 +760,16 @@ std::pair<TwtCapabilities, ndk::ScopedAStatus> WifiStaIface::twtGetCapabilitiesI ndk::ScopedAStatus WifiStaIface::twtSessionSetupInternal(int32_t cmdId, const TwtRequest& aidlTwtRequest) { if (!is_twt_registered_) { LOG(INFO) << "twtSessionSetup is not supported as twtRegisterEvents failed"; return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); } legacy_hal::wifi_twt_request legacyHalTwtRequest; if (!aidl_struct_util::convertAidlTwtRequestToLegacy(aidlTwtRequest, &legacyHalTwtRequest)) { return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); } std::weak_ptr<WifiStaIface> weak_ptr_this = weak_ptr_this_; // onTwtFailure callback const auto& on_twt_failure = [weak_ptr_this](legacy_hal::wifi_request_id id, legacy_hal::wifi_twt_error_code error_code) { const auto shared_ptr_this = weak_ptr_this.lock(); IWifiStaIfaceEventCallback::TwtErrorCode aidl_error_code = aidl_struct_util::convertLegacyHalTwtErrorCodeToAidl(error_code); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtFailure(id, aidl_error_code).isOk()) { LOG(ERROR) << "Failed to invoke onTwtFailure callback"; } } }; // onTwtSessionCreate callback const auto& on_twt_session_create = [weak_ptr_this](legacy_hal::wifi_request_id id, legacy_hal::wifi_twt_session twt_session) { const auto shared_ptr_this = weak_ptr_this.lock(); TwtSession aidl_twt_session; if (!aidl_struct_util::convertLegacyHalTwtSessionToAidl(twt_session, &aidl_twt_session)) { LOG(ERROR) << "convertLegacyHalTwtSessionToAidl failed"; return; } if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionCreate(id, aidl_twt_session).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionCreate callback"; } } }; // onTwtSessionUpdate callback const auto& on_twt_session_update = [weak_ptr_this](legacy_hal::wifi_request_id id, legacy_hal::wifi_twt_session twt_session) { const auto shared_ptr_this = weak_ptr_this.lock(); TwtSession aidl_twt_session; if (!aidl_struct_util::convertLegacyHalTwtSessionToAidl(twt_session, &aidl_twt_session)) { LOG(ERROR) << "convertLegacyHalTwtSessionToAidl failed"; return; } if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionUpdate(id, aidl_twt_session).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionUpdate callback"; } } }; // onTwtSessionTeardown callback const auto& on_twt_session_teardown = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id, legacy_hal::wifi_twt_teardown_reason_code reason_code) { const auto shared_ptr_this = weak_ptr_this.lock(); IWifiStaIfaceEventCallback::TwtTeardownReasonCode aidl_reason_code = aidl_struct_util::convertLegacyHalTwtReasonCodeToAidl(reason_code); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionTeardown(id, session_id, aidl_reason_code).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionTeardown callback"; } } }; // onTwtSessionStats callback const auto& on_twt_session_stats = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id, legacy_hal::wifi_twt_session_stats stats) { const auto shared_ptr_this = weak_ptr_this.lock(); TwtSessionStats aidl_session_stats; if (!aidl_struct_util::convertLegacyHalTwtSessionStatsToAidl(stats, &aidl_session_stats)) { LOG(ERROR) << "convertLegacyHalTwtSessionStatsToAidl failed"; return; } if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionStats(id, session_id, aidl_session_stats).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionStats callback"; } } }; // onTwtSessionSuspend callback const auto& on_twt_session_suspend = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id) { const auto shared_ptr_this = weak_ptr_this.lock(); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionSuspend(id, session_id).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionSuspend callback"; } } }; // onTwtSessionResume callback const auto& on_twt_session_resume = [weak_ptr_this](legacy_hal::wifi_request_id id, int session_id) { const auto shared_ptr_this = weak_ptr_this.lock(); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { LOG(ERROR) << "Callback invoked on an invalid object"; return; } for (const auto& callback : shared_ptr_this->getEventCallbacks()) { if (!callback->onTwtSessionResume(id, session_id).isOk()) { LOG(ERROR) << "Failed to invoke onTwtSessionResume callback"; } } }; legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->twtSessionSetup( ifname_, cmdId, legacyHalTwtRequest, on_twt_failure, on_twt_session_create, on_twt_session_update, on_twt_session_teardown, on_twt_session_stats, on_twt_session_suspend, on_twt_session_resume); legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->twtSessionSetup(ifname_, cmdId, legacyHalTwtRequest); return createWifiStatusFromLegacyError(legacy_status); } Loading
wifi/aidl/default/wifi_sta_iface.h +2 −0 Original line number Diff line number Diff line Loading @@ -103,6 +103,7 @@ class WifiStaIface : public BnWifiStaIface { private: // Corresponding worker functions for the AIDL methods. std::pair<std::string, ndk::ScopedAStatus> getNameInternal(); ndk::ScopedAStatus registerTwtEventCallbackInternal(); ndk::ScopedAStatus registerEventCallbackInternal( const std::shared_ptr<IWifiStaIfaceEventCallback>& callback); std::pair<int32_t, ndk::ScopedAStatus> getFeatureSetInternal(); Loading Loading @@ -157,6 +158,7 @@ class WifiStaIface : public BnWifiStaIface { std::weak_ptr<WifiStaIface> weak_ptr_this_; bool is_valid_; aidl_callback_util::AidlCallbackHandler<IWifiStaIfaceEventCallback> event_cb_handler_; bool is_twt_registered_; DISALLOW_COPY_AND_ASSIGN(WifiStaIface); }; Loading