13e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius/* 23e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius * Copyright (C) 2016 The Android Open Source Project 33e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius * 43e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius * Licensed under the Apache License, Version 2.0 (the "License"); 53e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius * you may not use this file except in compliance with the License. 63e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius * You may obtain a copy of the License at 73e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius * 83e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius * http://www.apache.org/licenses/LICENSE-2.0 93e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius * 103e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius * Unless required by applicable law or agreed to in writing, software 113e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius * distributed under the License is distributed on an "AS IS" BASIS, 123e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius * See the License for the specific language governing permissions and 143e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius * limitations under the License. 153e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius */ 163e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius 173e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius#include <android-base/logging.h> 183e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius 19907d4a234da9806cde5169c17236a0501805b70aRoshan Pius#include "hidl_return_util.h" 20f5f51fd039786bd45035b7f10520a6c6a15a73aaRoshan Pius#include "hidl_struct_util.h" 21907d4a234da9806cde5169c17236a0501805b70aRoshan Pius#include "wifi_nan_iface.h" 22734fea0d98213d2f721f8f8988114d0cf397d436Roshan Pius#include "wifi_status_util.h" 233e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius 243e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Piusnamespace android { 253e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Piusnamespace hardware { 263e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Piusnamespace wifi { 276ce509085453637ddd3d0a1a88a26fed18072167Etan Cohennamespace V1_2 { 283e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Piusnamespace implementation { 29907d4a234da9806cde5169c17236a0501805b70aRoshan Piususing hidl_return_util::validateAndCall; 303e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius 316cedc97e95b3b3ee49fe0860ac8cfd8c5de2a2abRoshan PiusWifiNanIface::WifiNanIface( 326cedc97e95b3b3ee49fe0860ac8cfd8c5de2a2abRoshan Pius const std::string& ifname, 336cedc97e95b3b3ee49fe0860ac8cfd8c5de2a2abRoshan Pius const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal) 34f5f51fd039786bd45035b7f10520a6c6a15a73aaRoshan Pius : ifname_(ifname), legacy_hal_(legacy_hal), is_valid_(true) { 35abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius // Register all the callbacks here. these should be valid for the lifetime 36abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius // of the object. Whenever the mode changes legacy HAL will remove 37abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius // all of these callbacks. 38abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::NanCallbackHandlers callback_handlers; 39abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius android::wp<WifiNanIface> weak_ptr_this(this); 40abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 41abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius // Callback for response. 42abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers 43abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .on_notify_response = [weak_ptr_this]( 44abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::transaction_id id, 45abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius const legacy_hal::NanResponseMsg& msg) { 46abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius const auto shared_ptr_this = weak_ptr_this.promote(); 47abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { 48abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Callback invoked on an invalid object"; 49f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen return; 50f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen } 51abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius WifiNanStatus wifiNanStatus; 52abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!hidl_struct_util::convertLegacyNanResponseHeaderToHidl( 53abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg, &wifiNanStatus)) { 54abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to convert nan response header"; 55abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 56f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen } 57abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 58abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius switch (msg.response_type) { 59abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_RESPONSE_ENABLED: { 60abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : 61abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius shared_ptr_this->getEventCallbacks()) { 62abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback->notifyEnableResponse(id, wifiNanStatus) 63abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 64abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 65abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 66abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 67abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius break; 68abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 69abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_RESPONSE_DISABLED: { 70abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : 71abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius shared_ptr_this->getEventCallbacks()) { 72abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback->notifyDisableResponse(id, wifiNanStatus) 73abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 74abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 75abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 76abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 77abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius break; 78abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 79abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_RESPONSE_PUBLISH: { 80abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : 81abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius shared_ptr_this->getEventCallbacks()) { 82abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback 83abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius ->notifyStartPublishResponse( 84abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius id, wifiNanStatus, 85abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg.body.publish_response.publish_id) 86abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 87abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 88abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 89abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 90abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius break; 91abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 92abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_RESPONSE_PUBLISH_CANCEL: { 93abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : 94abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius shared_ptr_this->getEventCallbacks()) { 95abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback->notifyStopPublishResponse(id, wifiNanStatus) 96abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 97abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 98abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 99abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 100abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius break; 101abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 102abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_RESPONSE_TRANSMIT_FOLLOWUP: { 103abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : 104abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius shared_ptr_this->getEventCallbacks()) { 105abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback 106abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius ->notifyTransmitFollowupResponse(id, wifiNanStatus) 107abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 108abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 109abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 110abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 111abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius break; 112abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 113abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_RESPONSE_SUBSCRIBE: { 114abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : 115abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius shared_ptr_this->getEventCallbacks()) { 116abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback 117abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius ->notifyStartSubscribeResponse( 118abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius id, wifiNanStatus, 119abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg.body.subscribe_response.subscribe_id) 120abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 121abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 122abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 123abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 124abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius break; 125abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 126abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_RESPONSE_SUBSCRIBE_CANCEL: { 127abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : 128abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius shared_ptr_this->getEventCallbacks()) { 129abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback 130abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius ->notifyStopSubscribeResponse(id, wifiNanStatus) 131abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 132abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 133abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 134abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 135abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius break; 136f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen } 137abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_RESPONSE_CONFIG: { 138abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : 139abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius shared_ptr_this->getEventCallbacks()) { 140abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback->notifyConfigResponse(id, wifiNanStatus) 141abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 142abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 143abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 144abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 145abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius break; 146abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 147abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_GET_CAPABILITIES: { 148abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius NanCapabilities hidl_struct; 149abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!hidl_struct_util:: 150abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius convertLegacyNanCapabilitiesResponseToHidl( 151abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg.body.nan_capabilities, &hidl_struct)) { 152abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to convert nan capabilities response"; 153abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 154abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 155abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : 156abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius shared_ptr_this->getEventCallbacks()) { 157abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback 158abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius ->notifyCapabilitiesResponse(id, wifiNanStatus, 159abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_struct) 160abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 161abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 162abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 163abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 164abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius break; 165abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 166abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_DP_INTERFACE_CREATE: { 167abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : 168abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius shared_ptr_this->getEventCallbacks()) { 169abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback 170abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius ->notifyCreateDataInterfaceResponse(id, 171abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius wifiNanStatus) 172abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 173abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 174abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 175abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 176abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius break; 177abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 178abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_DP_INTERFACE_DELETE: { 179abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : 180abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius shared_ptr_this->getEventCallbacks()) { 181abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback 182abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius ->notifyDeleteDataInterfaceResponse(id, 183abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius wifiNanStatus) 184abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 185abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 186abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 187abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 188abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius break; 189abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 190abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_DP_INITIATOR_RESPONSE: { 191abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : 192abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius shared_ptr_this->getEventCallbacks()) { 193abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback 194abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius ->notifyInitiateDataPathResponse( 195abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius id, wifiNanStatus, 196abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg.body.data_request_response.ndp_instance_id) 197abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 198abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 199abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 200abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 201abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius break; 202abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 203abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_DP_RESPONDER_RESPONSE: { 204abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : 205abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius shared_ptr_this->getEventCallbacks()) { 206abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback 207abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius ->notifyRespondToDataPathIndicationResponse( 208abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius id, wifiNanStatus) 209abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 210abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 211abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 212abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 213abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius break; 214abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 215abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_DP_END: { 216abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : 217abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius shared_ptr_this->getEventCallbacks()) { 218abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback 219abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius ->notifyTerminateDataPathResponse(id, 220abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius wifiNanStatus) 221abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 222abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 223abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 224abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 225abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius break; 226abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 227abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_RESPONSE_BEACON_SDF_PAYLOAD: 228abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius /* fall through */ 229abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_RESPONSE_TCA: 230abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius /* fall through */ 231abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_RESPONSE_STATS: 232abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius /* fall through */ 233abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius case legacy_hal::NAN_RESPONSE_ERROR: 234abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius /* fall through */ 235abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius default: 236abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Unknown or unhandled response type: " 237abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius << msg.response_type; 238abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 239f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen } 240abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius }; 241abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 242abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers.on_event_disc_eng_event = 243abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius [weak_ptr_this](const legacy_hal::NanDiscEngEventInd& msg) { 244abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius const auto shared_ptr_this = weak_ptr_this.promote(); 245abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { 246abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Callback invoked on an invalid object"; 247abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 248abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 249abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius NanClusterEventInd hidl_struct; 250abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius // event types defined identically - hence can be cast 251abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_struct.eventType = (NanClusterEventType)msg.event_type; 252abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_struct.addr = msg.data.mac_addr.addr; 253abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 254abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : shared_ptr_this->getEventCallbacks()) { 255abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback->eventClusterEvent(hidl_struct).isOk()) { 256abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 257abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 258abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 259abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius }; 260abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 261abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers.on_event_disabled = 262abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius [weak_ptr_this](const legacy_hal::NanDisabledInd& msg) { 263abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius const auto shared_ptr_this = weak_ptr_this.promote(); 264abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { 265abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Callback invoked on an invalid object"; 266abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 267abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 268abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius WifiNanStatus status; 269abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_struct_util::convertToWifiNanStatus( 270abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg.reason, msg.nan_reason, sizeof(msg.nan_reason), &status); 271abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 272abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : shared_ptr_this->getEventCallbacks()) { 273abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback->eventDisabled(status).isOk()) { 274abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 275abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 276abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 277abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius }; 278abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 279abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers.on_event_publish_terminated = 280abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius [weak_ptr_this](const legacy_hal::NanPublishTerminatedInd& msg) { 281abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius const auto shared_ptr_this = weak_ptr_this.promote(); 282abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { 283abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Callback invoked on an invalid object"; 284abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 285abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 286abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius WifiNanStatus status; 287abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_struct_util::convertToWifiNanStatus( 288abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg.reason, msg.nan_reason, sizeof(msg.nan_reason), &status); 289abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 290abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : shared_ptr_this->getEventCallbacks()) { 291abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback->eventPublishTerminated(msg.publish_id, status) 292abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 293abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 294abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 295abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 296abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius }; 297abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 298abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers.on_event_subscribe_terminated = 299abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius [weak_ptr_this](const legacy_hal::NanSubscribeTerminatedInd& msg) { 300abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius const auto shared_ptr_this = weak_ptr_this.promote(); 301abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { 302abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Callback invoked on an invalid object"; 303abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 304abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 305abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius WifiNanStatus status; 306abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_struct_util::convertToWifiNanStatus( 307abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg.reason, msg.nan_reason, sizeof(msg.nan_reason), &status); 308abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 309abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : shared_ptr_this->getEventCallbacks()) { 310abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback 311abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius ->eventSubscribeTerminated(msg.subscribe_id, status) 312abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 313abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 314abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 315abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 316abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius }; 317abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 318abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers.on_event_match = 319abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius [weak_ptr_this](const legacy_hal::NanMatchInd& msg) { 320abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius const auto shared_ptr_this = weak_ptr_this.promote(); 321abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { 322abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Callback invoked on an invalid object"; 323abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 324abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 325abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius NanMatchInd hidl_struct; 326abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!hidl_struct_util::convertLegacyNanMatchIndToHidl( 327abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg, &hidl_struct)) { 328abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to convert nan capabilities response"; 329abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 330abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 331f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen 332abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : shared_ptr_this->getEventCallbacks()) { 333abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback->eventMatch(hidl_struct).isOk()) { 334abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 335abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 336abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 337abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius }; 338abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 339abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers.on_event_match_expired = 340abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius [weak_ptr_this](const legacy_hal::NanMatchExpiredInd& msg) { 341abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius const auto shared_ptr_this = weak_ptr_this.promote(); 342abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { 343abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Callback invoked on an invalid object"; 344abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 345abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 346abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : shared_ptr_this->getEventCallbacks()) { 347abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback 348abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius ->eventMatchExpired(msg.publish_subscribe_id, 349abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg.requestor_instance_id) 350abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 351abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 352abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 353abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 354abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius }; 355abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 356abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers.on_event_followup = 357abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius [weak_ptr_this](const legacy_hal::NanFollowupInd& msg) { 358abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius const auto shared_ptr_this = weak_ptr_this.promote(); 359abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { 360abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Callback invoked on an invalid object"; 361abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 362abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 363abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius NanFollowupReceivedInd hidl_struct; 364abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!hidl_struct_util::convertLegacyNanFollowupIndToHidl( 365abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg, &hidl_struct)) { 366abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to convert nan capabilities response"; 367abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 368abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 369f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen 370abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : shared_ptr_this->getEventCallbacks()) { 371abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback->eventFollowupReceived(hidl_struct).isOk()) { 372abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 373abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 374abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 375abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius }; 376abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 377abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers.on_event_transmit_follow_up = 378abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius [weak_ptr_this](const legacy_hal::NanTransmitFollowupInd& msg) { 379abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius const auto shared_ptr_this = weak_ptr_this.promote(); 380abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { 381abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Callback invoked on an invalid object"; 382abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 383abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 384abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius WifiNanStatus status; 385abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_struct_util::convertToWifiNanStatus( 386abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg.reason, msg.nan_reason, sizeof(msg.nan_reason), &status); 387abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 388abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : shared_ptr_this->getEventCallbacks()) { 389abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback->eventTransmitFollowup(msg.id, status).isOk()) { 390abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 391abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 392abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 393abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius }; 394abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 395abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers.on_event_data_path_request = 396abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius [weak_ptr_this](const legacy_hal::NanDataPathRequestInd& msg) { 397abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius const auto shared_ptr_this = weak_ptr_this.promote(); 398abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { 399abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Callback invoked on an invalid object"; 400abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 401abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 402abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius NanDataPathRequestInd hidl_struct; 403abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!hidl_struct_util::convertLegacyNanDataPathRequestIndToHidl( 404abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg, &hidl_struct)) { 405abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to convert nan capabilities response"; 406abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 407abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 408c190f93111e7bd92809a4b298a6ad4754f08675eEtan Cohen 409abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : shared_ptr_this->getEventCallbacks()) { 410abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback->eventDataPathRequest(hidl_struct).isOk()) { 411abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 412abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 413abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 414abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius }; 415abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 416abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers.on_event_data_path_confirm = 417abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius [weak_ptr_this](const legacy_hal::NanDataPathConfirmInd& msg) { 418abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius const auto shared_ptr_this = weak_ptr_this.promote(); 419abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { 420abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Callback invoked on an invalid object"; 421abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 422abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 423abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius NanDataPathConfirmInd hidl_struct; 424abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!hidl_struct_util::convertLegacyNanDataPathConfirmIndToHidl( 425abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg, &hidl_struct)) { 426abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to convert nan capabilities response"; 427abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 428abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 429c190f93111e7bd92809a4b298a6ad4754f08675eEtan Cohen 43044a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen for (const auto& callback : 43144a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen shared_ptr_this->getEventCallbacks_1_2()) { 432c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen if (!callback->eventDataPathConfirm_1_2(hidl_struct).isOk()) { 433abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 434abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 435abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 436abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius }; 437abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 438abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers.on_event_data_path_end = 439abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius [weak_ptr_this](const legacy_hal::NanDataPathEndInd& msg) { 440abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius const auto shared_ptr_this = weak_ptr_this.promote(); 441abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { 442abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Callback invoked on an invalid object"; 443abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return; 444abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 445abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (const auto& callback : shared_ptr_this->getEventCallbacks()) { 446abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius for (int i = 0; i < msg.num_ndp_instances; ++i) { 447abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!callback 448abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius ->eventDataPathTerminated(msg.ndp_instance_id[i]) 449abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius .isOk()) { 450abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to invoke the callback"; 451abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 452abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 453abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 454abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius }; 455abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 456abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers.on_event_beacon_sdf_payload = 457abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius [weak_ptr_this](const legacy_hal::NanBeaconSdfPayloadInd& /* msg */) { 458abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "on_event_beacon_sdf_payload - should not be called"; 459abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius }; 460abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 461abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers.on_event_range_request = 462abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius [weak_ptr_this](const legacy_hal::NanRangeRequestInd& /* msg */) { 463abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "on_event_range_request - should not be called"; 464abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius }; 465abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 466abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers.on_event_range_report = 467abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius [weak_ptr_this](const legacy_hal::NanRangeReportInd& /* msg */) { 468abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "on_event_range_report - should not be called"; 469abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius }; 470abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 471c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen callback_handlers 472c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen .on_event_schedule_update = [weak_ptr_this]( 473c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen const legacy_hal:: 474c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen NanDataPathScheduleUpdateInd& msg) { 475c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen const auto shared_ptr_this = weak_ptr_this.promote(); 476c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { 477c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen LOG(ERROR) << "Callback invoked on an invalid object"; 478c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen return; 479c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen } 480c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen NanDataPathScheduleUpdateInd hidl_struct; 481c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen if (!hidl_struct_util::convertLegacyNanDataPathScheduleUpdateIndToHidl( 482c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen msg, &hidl_struct)) { 483c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen LOG(ERROR) << "Failed to convert nan capabilities response"; 484c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen return; 485c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen } 486c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen 48744a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen for (const auto& callback : shared_ptr_this->getEventCallbacks_1_2()) { 488c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen if (!callback->eventDataPathScheduleUpdate(hidl_struct).isOk()) { 489c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen LOG(ERROR) << "Failed to invoke the callback"; 490c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen } 491c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen } 492c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen }; 4931bf15f1c579c67e5c86f3ad61b1089caa51a5876Etan Cohen 494abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::wifi_error legacy_status = 495abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.lock()->nanRegisterCallbackHandlers(ifname_, 496abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius callback_handlers); 497abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (legacy_status != legacy_hal::WIFI_SUCCESS) { 498abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius LOG(ERROR) << "Failed to register nan callbacks. Invalidating object"; 499abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius invalidate(); 500abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 501f5f51fd039786bd45035b7f10520a6c6a15a73aaRoshan Pius} 5023e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius 5033e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Piusvoid WifiNanIface::invalidate() { 504abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius // send commands to HAL to actually disable and destroy interfaces 505abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.lock()->nanDisableRequest(ifname_, 0xFFFF); 506abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.lock()->nanDataInterfaceDelete(ifname_, 0xFFFE, "aware_data0"); 507abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.lock()->nanDataInterfaceDelete(ifname_, 0xFFFD, "aware_data1"); 508c4d9f87f66130c1e0b598fd0903ea2f99e8dfb5eEtan Cohen 509abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.reset(); 510abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius event_cb_handler_.invalidate(); 51144a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen event_cb_handler_1_2_.invalidate(); 512abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius is_valid_ = false; 5133e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius} 5143e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius 515abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Piusbool WifiNanIface::isValid() { return is_valid_; } 516907d4a234da9806cde5169c17236a0501805b70aRoshan Pius 517675609baa6d2d8ec0a08a8b24d3173f4768459e2Roshan Piusstd::string WifiNanIface::getName() { return ifname_; } 518675609baa6d2d8ec0a08a8b24d3173f4768459e2Roshan Pius 51944a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohenstd::set<sp<V1_0::IWifiNanIfaceEventCallback>> 52044a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan CohenWifiNanIface::getEventCallbacks() { 521abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return event_cb_handler_.getCallbacks(); 522d37341f1e57b91a5f8bf6fe85b99861717720e5fRoshan Pius} 523d37341f1e57b91a5f8bf6fe85b99861717720e5fRoshan Pius 52444a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohenstd::set<sp<V1_2::IWifiNanIfaceEventCallback>> 52544a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan CohenWifiNanIface::getEventCallbacks_1_2() { 52644a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen return event_cb_handler_1_2_.getCallbacks(); 52744a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen} 52844a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen 529734fea0d98213d2f721f8f8988114d0cf397d436Roshan PiusReturn<void> WifiNanIface::getName(getName_cb hidl_status_cb) { 530abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 531abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::getNameInternal, hidl_status_cb); 5323e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius} 5333e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius 534f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenReturn<void> WifiNanIface::getType(getType_cb hidl_status_cb) { 535abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 536abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::getTypeInternal, hidl_status_cb); 537f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen} 538f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen 5390c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan PiusReturn<void> WifiNanIface::registerEventCallback( 540c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen const sp<V1_0::IWifiNanIfaceEventCallback>& callback, 5410c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius registerEventCallback_cb hidl_status_cb) { 542abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 543abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::registerEventCallbackInternal, 544abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_status_cb, callback); 5450c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 5460c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 547abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan PiusReturn<void> WifiNanIface::getCapabilitiesRequest( 548abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius uint16_t cmd_id, getCapabilitiesRequest_cb hidl_status_cb) { 549abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 550abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::getCapabilitiesRequestInternal, 551abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_status_cb, cmd_id); 5520c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 5530c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 554f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenReturn<void> WifiNanIface::enableRequest(uint16_t cmd_id, 555f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen const NanEnableRequest& msg, 556f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen enableRequest_cb hidl_status_cb) { 557abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 558abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::enableRequestInternal, hidl_status_cb, 559abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius cmd_id, msg); 5600c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 5610c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 562f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenReturn<void> WifiNanIface::configRequest(uint16_t cmd_id, 563f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen const NanConfigRequest& msg, 564f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen configRequest_cb hidl_status_cb) { 565abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 566abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::configRequestInternal, hidl_status_cb, 567abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius cmd_id, msg); 5680c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 5690c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 570f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenReturn<void> WifiNanIface::disableRequest(uint16_t cmd_id, 571f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen disableRequest_cb hidl_status_cb) { 572abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 573abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::disableRequestInternal, 574abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_status_cb, cmd_id); 5750c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 5760c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 577abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan PiusReturn<void> WifiNanIface::startPublishRequest( 578abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius uint16_t cmd_id, const NanPublishRequest& msg, 579abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius startPublishRequest_cb hidl_status_cb) { 580abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 581abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::startPublishRequestInternal, 582abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_status_cb, cmd_id, msg); 5830c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 5840c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 585f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenReturn<void> WifiNanIface::stopPublishRequest( 586abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius uint16_t cmd_id, uint8_t sessionId, stopPublishRequest_cb hidl_status_cb) { 587abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 588abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::stopPublishRequestInternal, 589abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_status_cb, cmd_id, sessionId); 5900c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 5910c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 592f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenReturn<void> WifiNanIface::startSubscribeRequest( 593abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius uint16_t cmd_id, const NanSubscribeRequest& msg, 594f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen startSubscribeRequest_cb hidl_status_cb) { 595abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 596abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::startSubscribeRequestInternal, 597abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_status_cb, cmd_id, msg); 5980c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 5990c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 600f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenReturn<void> WifiNanIface::stopSubscribeRequest( 601abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius uint16_t cmd_id, uint8_t sessionId, 602f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen stopSubscribeRequest_cb hidl_status_cb) { 603abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 604abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::stopSubscribeRequestInternal, 605abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_status_cb, cmd_id, sessionId); 6060c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 6070c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 608f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenReturn<void> WifiNanIface::transmitFollowupRequest( 609abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius uint16_t cmd_id, const NanTransmitFollowupRequest& msg, 610f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen transmitFollowupRequest_cb hidl_status_cb) { 611abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 612abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::transmitFollowupRequestInternal, 613abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_status_cb, cmd_id, msg); 6140c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 6150c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 616f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenReturn<void> WifiNanIface::createDataInterfaceRequest( 617abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius uint16_t cmd_id, const hidl_string& iface_name, 618f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen createDataInterfaceRequest_cb hidl_status_cb) { 619abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 620abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::createDataInterfaceRequestInternal, 621abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_status_cb, cmd_id, iface_name); 6220c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 6230c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 624f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenReturn<void> WifiNanIface::deleteDataInterfaceRequest( 625abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius uint16_t cmd_id, const hidl_string& iface_name, 626f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen deleteDataInterfaceRequest_cb hidl_status_cb) { 627abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 628abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::deleteDataInterfaceRequestInternal, 629abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_status_cb, cmd_id, iface_name); 6300c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 6310c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 632f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenReturn<void> WifiNanIface::initiateDataPathRequest( 633abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius uint16_t cmd_id, const NanInitiateDataPathRequest& msg, 634f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen initiateDataPathRequest_cb hidl_status_cb) { 635abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 636abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::initiateDataPathRequestInternal, 637abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_status_cb, cmd_id, msg); 6380c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 6390c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 640f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenReturn<void> WifiNanIface::respondToDataPathIndicationRequest( 641abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius uint16_t cmd_id, const NanRespondToDataPathIndicationRequest& msg, 642f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen respondToDataPathIndicationRequest_cb hidl_status_cb) { 643abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall( 644abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 645abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::respondToDataPathIndicationRequestInternal, 646abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_status_cb, cmd_id, msg); 6470c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 6480c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 649abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan PiusReturn<void> WifiNanIface::terminateDataPathRequest( 650abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius uint16_t cmd_id, uint32_t ndpInstanceId, 651f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen terminateDataPathRequest_cb hidl_status_cb) { 652abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 653abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &WifiNanIface::terminateDataPathRequestInternal, 654abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius hidl_status_cb, cmd_id, ndpInstanceId); 6550c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 6560c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 657c7bd0f718c63f5aef9b265a1e02950097d98d342Etan CohenReturn<void> WifiNanIface::registerEventCallback_1_2( 658c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen const sp<IWifiNanIfaceEventCallback>& callback, 659c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen registerEventCallback_1_2_cb hidl_status_cb) { 660c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 661c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen &WifiNanIface::registerEventCallback_1_2Internal, 662c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen hidl_status_cb, callback); 663c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen} 664c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen 6659e7a40573346196af56f70edde6aa54355f7f760Etan CohenReturn<void> WifiNanIface::enableRequest_1_2( 6669e7a40573346196af56f70edde6aa54355f7f760Etan Cohen uint16_t cmd_id, const NanEnableRequest& msg1, 6679e7a40573346196af56f70edde6aa54355f7f760Etan Cohen const NanConfigRequestSupplemental& msg2, 6689e7a40573346196af56f70edde6aa54355f7f760Etan Cohen enableRequest_1_2_cb hidl_status_cb) { 6699e7a40573346196af56f70edde6aa54355f7f760Etan Cohen return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 6709e7a40573346196af56f70edde6aa54355f7f760Etan Cohen &WifiNanIface::enableRequest_1_2Internal, 6719e7a40573346196af56f70edde6aa54355f7f760Etan Cohen hidl_status_cb, cmd_id, msg1, msg2); 6729e7a40573346196af56f70edde6aa54355f7f760Etan Cohen} 6739e7a40573346196af56f70edde6aa54355f7f760Etan Cohen 6749e7a40573346196af56f70edde6aa54355f7f760Etan CohenReturn<void> WifiNanIface::configRequest_1_2( 6759e7a40573346196af56f70edde6aa54355f7f760Etan Cohen uint16_t cmd_id, const NanConfigRequest& msg1, 6769e7a40573346196af56f70edde6aa54355f7f760Etan Cohen const NanConfigRequestSupplemental& msg2, 6779e7a40573346196af56f70edde6aa54355f7f760Etan Cohen configRequest_1_2_cb hidl_status_cb) { 6789e7a40573346196af56f70edde6aa54355f7f760Etan Cohen return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 6799e7a40573346196af56f70edde6aa54355f7f760Etan Cohen &WifiNanIface::configRequest_1_2Internal, 6809e7a40573346196af56f70edde6aa54355f7f760Etan Cohen hidl_status_cb, cmd_id, msg1, msg2); 6819e7a40573346196af56f70edde6aa54355f7f760Etan Cohen} 6829e7a40573346196af56f70edde6aa54355f7f760Etan Cohen 683907d4a234da9806cde5169c17236a0501805b70aRoshan Piusstd::pair<WifiStatus, std::string> WifiNanIface::getNameInternal() { 684abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return {createWifiStatus(WifiStatusCode::SUCCESS), ifname_}; 685907d4a234da9806cde5169c17236a0501805b70aRoshan Pius} 686907d4a234da9806cde5169c17236a0501805b70aRoshan Pius 687907d4a234da9806cde5169c17236a0501805b70aRoshan Piusstd::pair<WifiStatus, IfaceType> WifiNanIface::getTypeInternal() { 688abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return {createWifiStatus(WifiStatusCode::SUCCESS), IfaceType::NAN}; 6893e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius} 6903e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius 6910c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan PiusWifiStatus WifiNanIface::registerEventCallbackInternal( 69244a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen const sp<V1_0::IWifiNanIfaceEventCallback>& callback) { 69344a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen if (!event_cb_handler_.addCallback(callback)) { 69444a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); 69544a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen } 69644a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen return createWifiStatus(WifiStatusCode::SUCCESS); 6970c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 6980c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 699f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenWifiStatus WifiNanIface::getCapabilitiesRequestInternal(uint16_t cmd_id) { 700abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::wifi_error legacy_status = 701acededbcd1c6d08f1bb087da7a074474e9a52dd9Roshan Pius legacy_hal_.lock()->nanGetCapabilities(ifname_, cmd_id); 702abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatusFromLegacyError(legacy_status); 703f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen} 704f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen 7059e7a40573346196af56f70edde6aa54355f7f760Etan CohenWifiStatus WifiNanIface::enableRequestInternal( 7069e7a40573346196af56f70edde6aa54355f7f760Etan Cohen uint16_t /* cmd_id */, const NanEnableRequest& /* msg */) { 7079e7a40573346196af56f70edde6aa54355f7f760Etan Cohen return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); 708abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius} 709abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius 7109e7a40573346196af56f70edde6aa54355f7f760Etan CohenWifiStatus WifiNanIface::configRequestInternal( 7119e7a40573346196af56f70edde6aa54355f7f760Etan Cohen uint16_t /* cmd_id */, const NanConfigRequest& /* msg */) { 7129e7a40573346196af56f70edde6aa54355f7f760Etan Cohen return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); 713f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen} 714f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen 715f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenWifiStatus WifiNanIface::disableRequestInternal(uint16_t cmd_id) { 716abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::wifi_error legacy_status = 717abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.lock()->nanDisableRequest(ifname_, cmd_id); 718abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatusFromLegacyError(legacy_status); 7190c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 7200c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 721acededbcd1c6d08f1bb087da7a074474e9a52dd9Roshan PiusWifiStatus WifiNanIface::startPublishRequestInternal( 722acededbcd1c6d08f1bb087da7a074474e9a52dd9Roshan Pius uint16_t cmd_id, const NanPublishRequest& msg) { 723abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::NanPublishRequest legacy_msg; 724abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!hidl_struct_util::convertHidlNanPublishRequestToLegacy(msg, 725abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius &legacy_msg)) { 726abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); 727abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 728abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::wifi_error legacy_status = 729abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.lock()->nanPublishRequest(ifname_, cmd_id, legacy_msg); 730abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatusFromLegacyError(legacy_status); 7310c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 7320c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius 733abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan PiusWifiStatus WifiNanIface::stopPublishRequestInternal(uint16_t cmd_id, 734abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius uint8_t sessionId) { 735abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::NanPublishCancelRequest legacy_msg; 736abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_msg.publish_id = sessionId; 737abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::wifi_error legacy_status = 738abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.lock()->nanPublishCancelRequest(ifname_, cmd_id, 739abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_msg); 740abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatusFromLegacyError(legacy_status); 7410c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 742f5f51fd039786bd45035b7f10520a6c6a15a73aaRoshan Pius 743f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenWifiStatus WifiNanIface::startSubscribeRequestInternal( 744f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen uint16_t cmd_id, const NanSubscribeRequest& msg) { 745abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::NanSubscribeRequest legacy_msg; 746abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!hidl_struct_util::convertHidlNanSubscribeRequestToLegacy( 747abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg, &legacy_msg)) { 748abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); 749abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 750abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::wifi_error legacy_status = 751abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.lock()->nanSubscribeRequest(ifname_, cmd_id, legacy_msg); 752abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatusFromLegacyError(legacy_status); 7530c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 754f5f51fd039786bd45035b7f10520a6c6a15a73aaRoshan Pius 755abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan PiusWifiStatus WifiNanIface::stopSubscribeRequestInternal(uint16_t cmd_id, 756abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius uint8_t sessionId) { 757abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::NanSubscribeCancelRequest legacy_msg; 758abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_msg.subscribe_id = sessionId; 759abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::wifi_error legacy_status = 760abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.lock()->nanSubscribeCancelRequest(ifname_, cmd_id, 761abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_msg); 762abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatusFromLegacyError(legacy_status); 7630c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 764f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen 7650c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan PiusWifiStatus WifiNanIface::transmitFollowupRequestInternal( 766f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen uint16_t cmd_id, const NanTransmitFollowupRequest& msg) { 767abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::NanTransmitFollowupRequest legacy_msg; 768abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!hidl_struct_util::convertHidlNanTransmitFollowupRequestToLegacy( 769abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg, &legacy_msg)) { 770abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); 771abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 772abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::wifi_error legacy_status = 773abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.lock()->nanTransmitFollowupRequest(ifname_, cmd_id, 774abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_msg); 775abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatusFromLegacyError(legacy_status); 7760c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 777f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen 778f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenWifiStatus WifiNanIface::createDataInterfaceRequestInternal( 779f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen uint16_t cmd_id, const std::string& iface_name) { 780abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::wifi_error legacy_status = 781abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.lock()->nanDataInterfaceCreate(ifname_, cmd_id, iface_name); 782abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatusFromLegacyError(legacy_status); 7830c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 784f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenWifiStatus WifiNanIface::deleteDataInterfaceRequestInternal( 785f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen uint16_t cmd_id, const std::string& iface_name) { 786abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::wifi_error legacy_status = 787abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.lock()->nanDataInterfaceDelete(ifname_, cmd_id, iface_name); 788abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatusFromLegacyError(legacy_status); 7890c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 790f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenWifiStatus WifiNanIface::initiateDataPathRequestInternal( 791f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen uint16_t cmd_id, const NanInitiateDataPathRequest& msg) { 792abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::NanDataPathInitiatorRequest legacy_msg; 793abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!hidl_struct_util::convertHidlNanDataPathInitiatorRequestToLegacy( 794abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg, &legacy_msg)) { 795abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); 796abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 797abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::wifi_error legacy_status = 798abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.lock()->nanDataRequestInitiator(ifname_, cmd_id, 799abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_msg); 800abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatusFromLegacyError(legacy_status); 8010c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 802f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenWifiStatus WifiNanIface::respondToDataPathIndicationRequestInternal( 803f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen uint16_t cmd_id, const NanRespondToDataPathIndicationRequest& msg) { 804abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::NanDataPathIndicationResponse legacy_msg; 805abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius if (!hidl_struct_util::convertHidlNanDataPathIndicationResponseToLegacy( 806abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius msg, &legacy_msg)) { 807abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); 808abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius } 809abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::wifi_error legacy_status = 810abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.lock()->nanDataIndicationResponse(ifname_, cmd_id, 811abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_msg); 812abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatusFromLegacyError(legacy_status); 8130c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 814f01bcaa9a3708e579f3facdfe0988217d689c68eEtan CohenWifiStatus WifiNanIface::terminateDataPathRequestInternal( 815f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen uint16_t cmd_id, uint32_t ndpInstanceId) { 816abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal::wifi_error legacy_status = 817abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius legacy_hal_.lock()->nanDataEnd(ifname_, cmd_id, ndpInstanceId); 818abcf78fe9056edb405db4f8f00bf7e6cd6700621Roshan Pius return createWifiStatusFromLegacyError(legacy_status); 8190c92d446a26d3aeff57b3e62d6454addb9ac76feRoshan Pius} 820f01bcaa9a3708e579f3facdfe0988217d689c68eEtan Cohen 821c7bd0f718c63f5aef9b265a1e02950097d98d342Etan CohenWifiStatus WifiNanIface::registerEventCallback_1_2Internal( 82244a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen const sp<V1_2::IWifiNanIfaceEventCallback>& callback) { 82344a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen sp<V1_0::IWifiNanIfaceEventCallback> callback_1_0 = callback; 82444a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen if (!event_cb_handler_.addCallback(callback_1_0)) { 82544a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); 82644a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen } 82744a8bf9806d125c5a66e9dde1f8f1087ff476d98Etan Cohen if (!event_cb_handler_1_2_.addCallback(callback)) { 828c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); 829c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen } 830c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen return createWifiStatus(WifiStatusCode::SUCCESS); 831c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen} 832c7bd0f718c63f5aef9b265a1e02950097d98d342Etan Cohen 8339e7a40573346196af56f70edde6aa54355f7f760Etan CohenWifiStatus WifiNanIface::enableRequest_1_2Internal( 8349e7a40573346196af56f70edde6aa54355f7f760Etan Cohen uint16_t cmd_id, const NanEnableRequest& msg1, 8359e7a40573346196af56f70edde6aa54355f7f760Etan Cohen const NanConfigRequestSupplemental& msg2) { 8369e7a40573346196af56f70edde6aa54355f7f760Etan Cohen legacy_hal::NanEnableRequest legacy_msg; 8379e7a40573346196af56f70edde6aa54355f7f760Etan Cohen if (!hidl_struct_util::convertHidlNanEnableRequest_1_2ToLegacy( 8389e7a40573346196af56f70edde6aa54355f7f760Etan Cohen msg1, msg2, &legacy_msg)) { 8399e7a40573346196af56f70edde6aa54355f7f760Etan Cohen return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); 8409e7a40573346196af56f70edde6aa54355f7f760Etan Cohen } 8419e7a40573346196af56f70edde6aa54355f7f760Etan Cohen legacy_hal::wifi_error legacy_status = 8429e7a40573346196af56f70edde6aa54355f7f760Etan Cohen legacy_hal_.lock()->nanEnableRequest(ifname_, cmd_id, legacy_msg); 8439e7a40573346196af56f70edde6aa54355f7f760Etan Cohen return createWifiStatusFromLegacyError(legacy_status); 8449e7a40573346196af56f70edde6aa54355f7f760Etan Cohen} 8459e7a40573346196af56f70edde6aa54355f7f760Etan Cohen 8469e7a40573346196af56f70edde6aa54355f7f760Etan CohenWifiStatus WifiNanIface::configRequest_1_2Internal( 8479e7a40573346196af56f70edde6aa54355f7f760Etan Cohen uint16_t cmd_id, const NanConfigRequest& msg1, 8489e7a40573346196af56f70edde6aa54355f7f760Etan Cohen const NanConfigRequestSupplemental& msg2) { 8499e7a40573346196af56f70edde6aa54355f7f760Etan Cohen legacy_hal::NanConfigRequest legacy_msg; 8509e7a40573346196af56f70edde6aa54355f7f760Etan Cohen if (!hidl_struct_util::convertHidlNanConfigRequest_1_2ToLegacy( 8519e7a40573346196af56f70edde6aa54355f7f760Etan Cohen msg1, msg2, &legacy_msg)) { 8529e7a40573346196af56f70edde6aa54355f7f760Etan Cohen return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); 8539e7a40573346196af56f70edde6aa54355f7f760Etan Cohen } 8549e7a40573346196af56f70edde6aa54355f7f760Etan Cohen legacy_hal::wifi_error legacy_status = 8559e7a40573346196af56f70edde6aa54355f7f760Etan Cohen legacy_hal_.lock()->nanConfigRequest(ifname_, cmd_id, legacy_msg); 8569e7a40573346196af56f70edde6aa54355f7f760Etan Cohen return createWifiStatusFromLegacyError(legacy_status); 8579e7a40573346196af56f70edde6aa54355f7f760Etan Cohen} 8589e7a40573346196af56f70edde6aa54355f7f760Etan Cohen 8593e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius} // namespace implementation 8606ce509085453637ddd3d0a1a88a26fed18072167Etan Cohen} // namespace V1_2 8613e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius} // namespace wifi 8623e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius} // namespace hardware 8633e2d671a4cd81dc7f13fa3465494b547ed5a5626Roshan Pius} // namespace android 864