blob: 4325f44dad8b9e8a520255c0d18baa1b6606e2d9 [file] [log] [blame]
Roshan Pius3e2d6712016-10-06 13:16:23 -07001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Roshan Pius3e2d6712016-10-06 13:16:23 -070017#include <android-base/logging.h>
18
Roshan Pius907d4a22016-10-27 12:48:12 -070019#include "hidl_return_util.h"
Roshan Piusf5f51fd2016-12-01 13:54:24 -080020#include "hidl_struct_util.h"
Roshan Pius907d4a22016-10-27 12:48:12 -070021#include "wifi_nan_iface.h"
Roshan Pius734fea02016-10-11 08:30:28 -070022#include "wifi_status_util.h"
Roshan Pius3e2d6712016-10-06 13:16:23 -070023
24namespace android {
25namespace hardware {
26namespace wifi {
Jong Wook Kimda830c92018-07-23 15:29:38 -070027namespace V1_3 {
Roshan Pius3e2d6712016-10-06 13:16:23 -070028namespace implementation {
Roshan Pius907d4a22016-10-27 12:48:12 -070029using hidl_return_util::validateAndCall;
Roshan Pius3e2d6712016-10-06 13:16:23 -070030
Roshan Pius6cedc972016-10-28 10:11:17 -070031WifiNanIface::WifiNanIface(
32 const std::string& ifname,
33 const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal)
Roshan Piusf5f51fd2016-12-01 13:54:24 -080034 : ifname_(ifname), legacy_hal_(legacy_hal), is_valid_(true) {
Roshan Piusabcf78f2017-10-06 16:30:38 -070035 // Register all the callbacks here. these should be valid for the lifetime
36 // of the object. Whenever the mode changes legacy HAL will remove
37 // all of these callbacks.
38 legacy_hal::NanCallbackHandlers callback_handlers;
39 android::wp<WifiNanIface> weak_ptr_this(this);
Roshan Piusf5f51fd2016-12-01 13:54:24 -080040
Roshan Piusabcf78f2017-10-06 16:30:38 -070041 // Callback for response.
42 callback_handlers
43 .on_notify_response = [weak_ptr_this](
44 legacy_hal::transaction_id id,
45 const legacy_hal::NanResponseMsg& msg) {
46 const auto shared_ptr_this = weak_ptr_this.promote();
47 if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
48 LOG(ERROR) << "Callback invoked on an invalid object";
Etan Cohenf01bcaa2016-12-25 09:42:21 -080049 return;
50 }
Roshan Piusabcf78f2017-10-06 16:30:38 -070051 WifiNanStatus wifiNanStatus;
52 if (!hidl_struct_util::convertLegacyNanResponseHeaderToHidl(
53 msg, &wifiNanStatus)) {
54 LOG(ERROR) << "Failed to convert nan response header";
55 return;
Etan Cohenf01bcaa2016-12-25 09:42:21 -080056 }
Etan Cohenf01bcaa2016-12-25 09:42:21 -080057
Roshan Piusabcf78f2017-10-06 16:30:38 -070058 switch (msg.response_type) {
59 case legacy_hal::NAN_RESPONSE_ENABLED: {
60 for (const auto& callback :
61 shared_ptr_this->getEventCallbacks()) {
62 if (!callback->notifyEnableResponse(id, wifiNanStatus)
63 .isOk()) {
64 LOG(ERROR) << "Failed to invoke the callback";
65 }
66 }
67 break;
Etan Cohenf01bcaa2016-12-25 09:42:21 -080068 }
Roshan Piusabcf78f2017-10-06 16:30:38 -070069 case legacy_hal::NAN_RESPONSE_DISABLED: {
70 for (const auto& callback :
71 shared_ptr_this->getEventCallbacks()) {
72 if (!callback->notifyDisableResponse(id, wifiNanStatus)
73 .isOk()) {
74 LOG(ERROR) << "Failed to invoke the callback";
75 }
76 }
77 break;
78 }
79 case legacy_hal::NAN_RESPONSE_PUBLISH: {
80 for (const auto& callback :
81 shared_ptr_this->getEventCallbacks()) {
82 if (!callback
83 ->notifyStartPublishResponse(
84 id, wifiNanStatus,
85 msg.body.publish_response.publish_id)
86 .isOk()) {
87 LOG(ERROR) << "Failed to invoke the callback";
88 }
89 }
90 break;
91 }
92 case legacy_hal::NAN_RESPONSE_PUBLISH_CANCEL: {
93 for (const auto& callback :
94 shared_ptr_this->getEventCallbacks()) {
95 if (!callback->notifyStopPublishResponse(id, wifiNanStatus)
96 .isOk()) {
97 LOG(ERROR) << "Failed to invoke the callback";
98 }
99 }
100 break;
101 }
102 case legacy_hal::NAN_RESPONSE_TRANSMIT_FOLLOWUP: {
103 for (const auto& callback :
104 shared_ptr_this->getEventCallbacks()) {
105 if (!callback
106 ->notifyTransmitFollowupResponse(id, wifiNanStatus)
107 .isOk()) {
108 LOG(ERROR) << "Failed to invoke the callback";
109 }
110 }
111 break;
112 }
113 case legacy_hal::NAN_RESPONSE_SUBSCRIBE: {
114 for (const auto& callback :
115 shared_ptr_this->getEventCallbacks()) {
116 if (!callback
117 ->notifyStartSubscribeResponse(
118 id, wifiNanStatus,
119 msg.body.subscribe_response.subscribe_id)
120 .isOk()) {
121 LOG(ERROR) << "Failed to invoke the callback";
122 }
123 }
124 break;
125 }
126 case legacy_hal::NAN_RESPONSE_SUBSCRIBE_CANCEL: {
127 for (const auto& callback :
128 shared_ptr_this->getEventCallbacks()) {
129 if (!callback
130 ->notifyStopSubscribeResponse(id, wifiNanStatus)
131 .isOk()) {
132 LOG(ERROR) << "Failed to invoke the callback";
133 }
134 }
135 break;
136 }
137 case legacy_hal::NAN_RESPONSE_CONFIG: {
138 for (const auto& callback :
139 shared_ptr_this->getEventCallbacks()) {
140 if (!callback->notifyConfigResponse(id, wifiNanStatus)
141 .isOk()) {
142 LOG(ERROR) << "Failed to invoke the callback";
143 }
144 }
145 break;
146 }
147 case legacy_hal::NAN_GET_CAPABILITIES: {
148 NanCapabilities hidl_struct;
149 if (!hidl_struct_util::
150 convertLegacyNanCapabilitiesResponseToHidl(
151 msg.body.nan_capabilities, &hidl_struct)) {
152 LOG(ERROR) << "Failed to convert nan capabilities response";
153 return;
154 }
155 for (const auto& callback :
156 shared_ptr_this->getEventCallbacks()) {
157 if (!callback
158 ->notifyCapabilitiesResponse(id, wifiNanStatus,
159 hidl_struct)
160 .isOk()) {
161 LOG(ERROR) << "Failed to invoke the callback";
162 }
163 }
164 break;
165 }
166 case legacy_hal::NAN_DP_INTERFACE_CREATE: {
167 for (const auto& callback :
168 shared_ptr_this->getEventCallbacks()) {
169 if (!callback
170 ->notifyCreateDataInterfaceResponse(id,
171 wifiNanStatus)
172 .isOk()) {
173 LOG(ERROR) << "Failed to invoke the callback";
174 }
175 }
176 break;
177 }
178 case legacy_hal::NAN_DP_INTERFACE_DELETE: {
179 for (const auto& callback :
180 shared_ptr_this->getEventCallbacks()) {
181 if (!callback
182 ->notifyDeleteDataInterfaceResponse(id,
183 wifiNanStatus)
184 .isOk()) {
185 LOG(ERROR) << "Failed to invoke the callback";
186 }
187 }
188 break;
189 }
190 case legacy_hal::NAN_DP_INITIATOR_RESPONSE: {
191 for (const auto& callback :
192 shared_ptr_this->getEventCallbacks()) {
193 if (!callback
194 ->notifyInitiateDataPathResponse(
195 id, wifiNanStatus,
196 msg.body.data_request_response.ndp_instance_id)
197 .isOk()) {
198 LOG(ERROR) << "Failed to invoke the callback";
199 }
200 }
201 break;
202 }
203 case legacy_hal::NAN_DP_RESPONDER_RESPONSE: {
204 for (const auto& callback :
205 shared_ptr_this->getEventCallbacks()) {
206 if (!callback
207 ->notifyRespondToDataPathIndicationResponse(
208 id, wifiNanStatus)
209 .isOk()) {
210 LOG(ERROR) << "Failed to invoke the callback";
211 }
212 }
213 break;
214 }
215 case legacy_hal::NAN_DP_END: {
216 for (const auto& callback :
217 shared_ptr_this->getEventCallbacks()) {
218 if (!callback
219 ->notifyTerminateDataPathResponse(id,
220 wifiNanStatus)
221 .isOk()) {
222 LOG(ERROR) << "Failed to invoke the callback";
223 }
224 }
225 break;
226 }
227 case legacy_hal::NAN_RESPONSE_BEACON_SDF_PAYLOAD:
228 /* fall through */
229 case legacy_hal::NAN_RESPONSE_TCA:
230 /* fall through */
231 case legacy_hal::NAN_RESPONSE_STATS:
232 /* fall through */
233 case legacy_hal::NAN_RESPONSE_ERROR:
234 /* fall through */
235 default:
236 LOG(ERROR) << "Unknown or unhandled response type: "
237 << msg.response_type;
238 return;
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800239 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700240 };
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800241
Roshan Piusabcf78f2017-10-06 16:30:38 -0700242 callback_handlers.on_event_disc_eng_event =
243 [weak_ptr_this](const legacy_hal::NanDiscEngEventInd& msg) {
244 const auto shared_ptr_this = weak_ptr_this.promote();
245 if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
246 LOG(ERROR) << "Callback invoked on an invalid object";
247 return;
248 }
249 NanClusterEventInd hidl_struct;
250 // event types defined identically - hence can be cast
251 hidl_struct.eventType = (NanClusterEventType)msg.event_type;
252 hidl_struct.addr = msg.data.mac_addr.addr;
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800253
Roshan Piusabcf78f2017-10-06 16:30:38 -0700254 for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
255 if (!callback->eventClusterEvent(hidl_struct).isOk()) {
256 LOG(ERROR) << "Failed to invoke the callback";
257 }
258 }
259 };
Etan Cohenc190f932017-02-17 13:06:55 -0800260
Roshan Piusabcf78f2017-10-06 16:30:38 -0700261 callback_handlers.on_event_disabled =
262 [weak_ptr_this](const legacy_hal::NanDisabledInd& msg) {
263 const auto shared_ptr_this = weak_ptr_this.promote();
264 if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
265 LOG(ERROR) << "Callback invoked on an invalid object";
266 return;
267 }
268 WifiNanStatus status;
269 hidl_struct_util::convertToWifiNanStatus(
270 msg.reason, msg.nan_reason, sizeof(msg.nan_reason), &status);
Etan Cohenc190f932017-02-17 13:06:55 -0800271
Roshan Piusabcf78f2017-10-06 16:30:38 -0700272 for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
273 if (!callback->eventDisabled(status).isOk()) {
274 LOG(ERROR) << "Failed to invoke the callback";
275 }
276 }
277 };
278
279 callback_handlers.on_event_publish_terminated =
280 [weak_ptr_this](const legacy_hal::NanPublishTerminatedInd& msg) {
281 const auto shared_ptr_this = weak_ptr_this.promote();
282 if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
283 LOG(ERROR) << "Callback invoked on an invalid object";
284 return;
285 }
286 WifiNanStatus status;
287 hidl_struct_util::convertToWifiNanStatus(
288 msg.reason, msg.nan_reason, sizeof(msg.nan_reason), &status);
289
290 for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
291 if (!callback->eventPublishTerminated(msg.publish_id, status)
292 .isOk()) {
293 LOG(ERROR) << "Failed to invoke the callback";
294 }
295 }
296 };
297
298 callback_handlers.on_event_subscribe_terminated =
299 [weak_ptr_this](const legacy_hal::NanSubscribeTerminatedInd& msg) {
300 const auto shared_ptr_this = weak_ptr_this.promote();
301 if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
302 LOG(ERROR) << "Callback invoked on an invalid object";
303 return;
304 }
305 WifiNanStatus status;
306 hidl_struct_util::convertToWifiNanStatus(
307 msg.reason, msg.nan_reason, sizeof(msg.nan_reason), &status);
308
309 for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
310 if (!callback
311 ->eventSubscribeTerminated(msg.subscribe_id, status)
312 .isOk()) {
313 LOG(ERROR) << "Failed to invoke the callback";
314 }
315 }
316 };
317
318 callback_handlers.on_event_match =
319 [weak_ptr_this](const legacy_hal::NanMatchInd& msg) {
320 const auto shared_ptr_this = weak_ptr_this.promote();
321 if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
322 LOG(ERROR) << "Callback invoked on an invalid object";
323 return;
324 }
325 NanMatchInd hidl_struct;
326 if (!hidl_struct_util::convertLegacyNanMatchIndToHidl(
327 msg, &hidl_struct)) {
328 LOG(ERROR) << "Failed to convert nan capabilities response";
329 return;
330 }
331
332 for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
333 if (!callback->eventMatch(hidl_struct).isOk()) {
334 LOG(ERROR) << "Failed to invoke the callback";
335 }
336 }
337 };
338
339 callback_handlers.on_event_match_expired =
340 [weak_ptr_this](const legacy_hal::NanMatchExpiredInd& msg) {
341 const auto shared_ptr_this = weak_ptr_this.promote();
342 if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
343 LOG(ERROR) << "Callback invoked on an invalid object";
344 return;
345 }
346 for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
347 if (!callback
348 ->eventMatchExpired(msg.publish_subscribe_id,
349 msg.requestor_instance_id)
350 .isOk()) {
351 LOG(ERROR) << "Failed to invoke the callback";
352 }
353 }
354 };
355
356 callback_handlers.on_event_followup =
357 [weak_ptr_this](const legacy_hal::NanFollowupInd& msg) {
358 const auto shared_ptr_this = weak_ptr_this.promote();
359 if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
360 LOG(ERROR) << "Callback invoked on an invalid object";
361 return;
362 }
363 NanFollowupReceivedInd hidl_struct;
364 if (!hidl_struct_util::convertLegacyNanFollowupIndToHidl(
365 msg, &hidl_struct)) {
366 LOG(ERROR) << "Failed to convert nan capabilities response";
367 return;
368 }
369
370 for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
371 if (!callback->eventFollowupReceived(hidl_struct).isOk()) {
372 LOG(ERROR) << "Failed to invoke the callback";
373 }
374 }
375 };
376
377 callback_handlers.on_event_transmit_follow_up =
378 [weak_ptr_this](const legacy_hal::NanTransmitFollowupInd& msg) {
379 const auto shared_ptr_this = weak_ptr_this.promote();
380 if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
381 LOG(ERROR) << "Callback invoked on an invalid object";
382 return;
383 }
384 WifiNanStatus status;
385 hidl_struct_util::convertToWifiNanStatus(
386 msg.reason, msg.nan_reason, sizeof(msg.nan_reason), &status);
387
388 for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
389 if (!callback->eventTransmitFollowup(msg.id, status).isOk()) {
390 LOG(ERROR) << "Failed to invoke the callback";
391 }
392 }
393 };
394
395 callback_handlers.on_event_data_path_request =
396 [weak_ptr_this](const legacy_hal::NanDataPathRequestInd& msg) {
397 const auto shared_ptr_this = weak_ptr_this.promote();
398 if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
399 LOG(ERROR) << "Callback invoked on an invalid object";
400 return;
401 }
402 NanDataPathRequestInd hidl_struct;
403 if (!hidl_struct_util::convertLegacyNanDataPathRequestIndToHidl(
404 msg, &hidl_struct)) {
405 LOG(ERROR) << "Failed to convert nan capabilities response";
406 return;
407 }
408
409 for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
410 if (!callback->eventDataPathRequest(hidl_struct).isOk()) {
411 LOG(ERROR) << "Failed to invoke the callback";
412 }
413 }
414 };
415
416 callback_handlers.on_event_data_path_confirm =
417 [weak_ptr_this](const legacy_hal::NanDataPathConfirmInd& msg) {
418 const auto shared_ptr_this = weak_ptr_this.promote();
419 if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
420 LOG(ERROR) << "Callback invoked on an invalid object";
421 return;
422 }
Jong Wook Kimda830c92018-07-23 15:29:38 -0700423 V1_2::NanDataPathConfirmInd hidl_struct;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700424 if (!hidl_struct_util::convertLegacyNanDataPathConfirmIndToHidl(
425 msg, &hidl_struct)) {
426 LOG(ERROR) << "Failed to convert nan capabilities response";
427 return;
428 }
429
Etan Cohen44a8bf92018-04-09 13:32:40 -0700430 for (const auto& callback :
431 shared_ptr_this->getEventCallbacks_1_2()) {
Etan Cohenc7bd0f72017-12-26 11:52:44 -0800432 if (!callback->eventDataPathConfirm_1_2(hidl_struct).isOk()) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700433 LOG(ERROR) << "Failed to invoke the callback";
434 }
435 }
436 };
437
438 callback_handlers.on_event_data_path_end =
439 [weak_ptr_this](const legacy_hal::NanDataPathEndInd& msg) {
440 const auto shared_ptr_this = weak_ptr_this.promote();
441 if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
442 LOG(ERROR) << "Callback invoked on an invalid object";
443 return;
444 }
445 for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
446 for (int i = 0; i < msg.num_ndp_instances; ++i) {
447 if (!callback
448 ->eventDataPathTerminated(msg.ndp_instance_id[i])
449 .isOk()) {
450 LOG(ERROR) << "Failed to invoke the callback";
451 }
452 }
453 }
454 };
455
456 callback_handlers.on_event_beacon_sdf_payload =
457 [weak_ptr_this](const legacy_hal::NanBeaconSdfPayloadInd& /* msg */) {
458 LOG(ERROR) << "on_event_beacon_sdf_payload - should not be called";
459 };
460
461 callback_handlers.on_event_range_request =
462 [weak_ptr_this](const legacy_hal::NanRangeRequestInd& /* msg */) {
463 LOG(ERROR) << "on_event_range_request - should not be called";
464 };
465
466 callback_handlers.on_event_range_report =
467 [weak_ptr_this](const legacy_hal::NanRangeReportInd& /* msg */) {
468 LOG(ERROR) << "on_event_range_report - should not be called";
469 };
470
Etan Cohenc7bd0f72017-12-26 11:52:44 -0800471 callback_handlers
472 .on_event_schedule_update = [weak_ptr_this](
473 const legacy_hal::
474 NanDataPathScheduleUpdateInd& msg) {
475 const auto shared_ptr_this = weak_ptr_this.promote();
476 if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
477 LOG(ERROR) << "Callback invoked on an invalid object";
478 return;
479 }
Jong Wook Kimda830c92018-07-23 15:29:38 -0700480 V1_2::NanDataPathScheduleUpdateInd hidl_struct;
Etan Cohenc7bd0f72017-12-26 11:52:44 -0800481 if (!hidl_struct_util::convertLegacyNanDataPathScheduleUpdateIndToHidl(
482 msg, &hidl_struct)) {
483 LOG(ERROR) << "Failed to convert nan capabilities response";
484 return;
485 }
486
Etan Cohen44a8bf92018-04-09 13:32:40 -0700487 for (const auto& callback : shared_ptr_this->getEventCallbacks_1_2()) {
Etan Cohenc7bd0f72017-12-26 11:52:44 -0800488 if (!callback->eventDataPathScheduleUpdate(hidl_struct).isOk()) {
489 LOG(ERROR) << "Failed to invoke the callback";
490 }
491 }
492 };
Etan Cohen1bf15f12017-12-12 16:15:16 -0800493
Roshan Piusabcf78f2017-10-06 16:30:38 -0700494 legacy_hal::wifi_error legacy_status =
495 legacy_hal_.lock()->nanRegisterCallbackHandlers(ifname_,
496 callback_handlers);
497 if (legacy_status != legacy_hal::WIFI_SUCCESS) {
498 LOG(ERROR) << "Failed to register nan callbacks. Invalidating object";
499 invalidate();
500 }
Roshan Piusf5f51fd2016-12-01 13:54:24 -0800501}
Roshan Pius3e2d6712016-10-06 13:16:23 -0700502
503void WifiNanIface::invalidate() {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700504 // send commands to HAL to actually disable and destroy interfaces
505 legacy_hal_.lock()->nanDisableRequest(ifname_, 0xFFFF);
506 legacy_hal_.lock()->nanDataInterfaceDelete(ifname_, 0xFFFE, "aware_data0");
507 legacy_hal_.lock()->nanDataInterfaceDelete(ifname_, 0xFFFD, "aware_data1");
Etan Cohenc4d9f872017-06-15 08:39:23 -0700508
Roshan Piusabcf78f2017-10-06 16:30:38 -0700509 legacy_hal_.reset();
510 event_cb_handler_.invalidate();
Etan Cohen44a8bf92018-04-09 13:32:40 -0700511 event_cb_handler_1_2_.invalidate();
Roshan Piusabcf78f2017-10-06 16:30:38 -0700512 is_valid_ = false;
Roshan Pius3e2d6712016-10-06 13:16:23 -0700513}
514
Roshan Piusabcf78f2017-10-06 16:30:38 -0700515bool WifiNanIface::isValid() { return is_valid_; }
Roshan Pius907d4a22016-10-27 12:48:12 -0700516
Roshan Pius675609b2017-10-31 14:24:58 -0700517std::string WifiNanIface::getName() { return ifname_; }
518
Etan Cohen44a8bf92018-04-09 13:32:40 -0700519std::set<sp<V1_0::IWifiNanIfaceEventCallback>>
520WifiNanIface::getEventCallbacks() {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700521 return event_cb_handler_.getCallbacks();
Roshan Piusd37341f2017-01-31 13:13:28 -0800522}
523
Etan Cohen44a8bf92018-04-09 13:32:40 -0700524std::set<sp<V1_2::IWifiNanIfaceEventCallback>>
525WifiNanIface::getEventCallbacks_1_2() {
526 return event_cb_handler_1_2_.getCallbacks();
527}
528
Roshan Pius734fea02016-10-11 08:30:28 -0700529Return<void> WifiNanIface::getName(getName_cb hidl_status_cb) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700530 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
531 &WifiNanIface::getNameInternal, hidl_status_cb);
Roshan Pius3e2d6712016-10-06 13:16:23 -0700532}
533
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800534Return<void> WifiNanIface::getType(getType_cb hidl_status_cb) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700535 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
536 &WifiNanIface::getTypeInternal, hidl_status_cb);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800537}
538
Roshan Pius0c92d442016-10-27 17:38:53 -0700539Return<void> WifiNanIface::registerEventCallback(
Etan Cohenc7bd0f72017-12-26 11:52:44 -0800540 const sp<V1_0::IWifiNanIfaceEventCallback>& callback,
Roshan Pius0c92d442016-10-27 17:38:53 -0700541 registerEventCallback_cb hidl_status_cb) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700542 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
543 &WifiNanIface::registerEventCallbackInternal,
544 hidl_status_cb, callback);
Roshan Pius0c92d442016-10-27 17:38:53 -0700545}
546
Roshan Piusabcf78f2017-10-06 16:30:38 -0700547Return<void> WifiNanIface::getCapabilitiesRequest(
548 uint16_t cmd_id, getCapabilitiesRequest_cb hidl_status_cb) {
549 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
550 &WifiNanIface::getCapabilitiesRequestInternal,
551 hidl_status_cb, cmd_id);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800552}
553
554Return<void> WifiNanIface::enableRequest(uint16_t cmd_id,
Roshan Pius0c92d442016-10-27 17:38:53 -0700555 const NanEnableRequest& msg,
556 enableRequest_cb hidl_status_cb) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700557 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
558 &WifiNanIface::enableRequestInternal, hidl_status_cb,
559 cmd_id, msg);
Roshan Pius0c92d442016-10-27 17:38:53 -0700560}
561
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800562Return<void> WifiNanIface::configRequest(uint16_t cmd_id,
Roshan Pius0c92d442016-10-27 17:38:53 -0700563 const NanConfigRequest& msg,
564 configRequest_cb hidl_status_cb) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700565 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
566 &WifiNanIface::configRequestInternal, hidl_status_cb,
567 cmd_id, msg);
Roshan Pius0c92d442016-10-27 17:38:53 -0700568}
569
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800570Return<void> WifiNanIface::disableRequest(uint16_t cmd_id,
571 disableRequest_cb hidl_status_cb) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700572 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
573 &WifiNanIface::disableRequestInternal,
574 hidl_status_cb, cmd_id);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800575}
576
Roshan Piusabcf78f2017-10-06 16:30:38 -0700577Return<void> WifiNanIface::startPublishRequest(
578 uint16_t cmd_id, const NanPublishRequest& msg,
579 startPublishRequest_cb hidl_status_cb) {
580 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
581 &WifiNanIface::startPublishRequestInternal,
582 hidl_status_cb, cmd_id, msg);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800583}
584
585Return<void> WifiNanIface::stopPublishRequest(
Roshan Piusabcf78f2017-10-06 16:30:38 -0700586 uint16_t cmd_id, uint8_t sessionId, stopPublishRequest_cb hidl_status_cb) {
587 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
588 &WifiNanIface::stopPublishRequestInternal,
589 hidl_status_cb, cmd_id, sessionId);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800590}
591
592Return<void> WifiNanIface::startSubscribeRequest(
Roshan Piusabcf78f2017-10-06 16:30:38 -0700593 uint16_t cmd_id, const NanSubscribeRequest& msg,
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800594 startSubscribeRequest_cb hidl_status_cb) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700595 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
596 &WifiNanIface::startSubscribeRequestInternal,
597 hidl_status_cb, cmd_id, msg);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800598}
599
600Return<void> WifiNanIface::stopSubscribeRequest(
Roshan Piusabcf78f2017-10-06 16:30:38 -0700601 uint16_t cmd_id, uint8_t sessionId,
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800602 stopSubscribeRequest_cb hidl_status_cb) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700603 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
604 &WifiNanIface::stopSubscribeRequestInternal,
605 hidl_status_cb, cmd_id, sessionId);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800606}
607
608Return<void> WifiNanIface::transmitFollowupRequest(
Roshan Piusabcf78f2017-10-06 16:30:38 -0700609 uint16_t cmd_id, const NanTransmitFollowupRequest& msg,
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800610 transmitFollowupRequest_cb hidl_status_cb) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700611 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
612 &WifiNanIface::transmitFollowupRequestInternal,
613 hidl_status_cb, cmd_id, msg);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800614}
615
616Return<void> WifiNanIface::createDataInterfaceRequest(
Roshan Piusabcf78f2017-10-06 16:30:38 -0700617 uint16_t cmd_id, const hidl_string& iface_name,
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800618 createDataInterfaceRequest_cb hidl_status_cb) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700619 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
620 &WifiNanIface::createDataInterfaceRequestInternal,
621 hidl_status_cb, cmd_id, iface_name);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800622}
623
624Return<void> WifiNanIface::deleteDataInterfaceRequest(
Roshan Piusabcf78f2017-10-06 16:30:38 -0700625 uint16_t cmd_id, const hidl_string& iface_name,
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800626 deleteDataInterfaceRequest_cb hidl_status_cb) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700627 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
628 &WifiNanIface::deleteDataInterfaceRequestInternal,
629 hidl_status_cb, cmd_id, iface_name);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800630}
631
632Return<void> WifiNanIface::initiateDataPathRequest(
Roshan Piusabcf78f2017-10-06 16:30:38 -0700633 uint16_t cmd_id, const NanInitiateDataPathRequest& msg,
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800634 initiateDataPathRequest_cb hidl_status_cb) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700635 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
636 &WifiNanIface::initiateDataPathRequestInternal,
637 hidl_status_cb, cmd_id, msg);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800638}
639
640Return<void> WifiNanIface::respondToDataPathIndicationRequest(
Roshan Piusabcf78f2017-10-06 16:30:38 -0700641 uint16_t cmd_id, const NanRespondToDataPathIndicationRequest& msg,
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800642 respondToDataPathIndicationRequest_cb hidl_status_cb) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700643 return validateAndCall(
644 this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
645 &WifiNanIface::respondToDataPathIndicationRequestInternal,
646 hidl_status_cb, cmd_id, msg);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800647}
648
Roshan Piusabcf78f2017-10-06 16:30:38 -0700649Return<void> WifiNanIface::terminateDataPathRequest(
650 uint16_t cmd_id, uint32_t ndpInstanceId,
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800651 terminateDataPathRequest_cb hidl_status_cb) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700652 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
653 &WifiNanIface::terminateDataPathRequestInternal,
654 hidl_status_cb, cmd_id, ndpInstanceId);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800655}
656
Etan Cohenc7bd0f72017-12-26 11:52:44 -0800657Return<void> WifiNanIface::registerEventCallback_1_2(
Jong Wook Kimda830c92018-07-23 15:29:38 -0700658 const sp<V1_2::IWifiNanIfaceEventCallback>& callback,
Etan Cohenc7bd0f72017-12-26 11:52:44 -0800659 registerEventCallback_1_2_cb hidl_status_cb) {
660 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
661 &WifiNanIface::registerEventCallback_1_2Internal,
662 hidl_status_cb, callback);
663}
664
Etan Cohen9e7a4052017-12-21 13:45:26 -0800665Return<void> WifiNanIface::enableRequest_1_2(
666 uint16_t cmd_id, const NanEnableRequest& msg1,
Jong Wook Kimda830c92018-07-23 15:29:38 -0700667 const V1_2::NanConfigRequestSupplemental& msg2,
Etan Cohen9e7a4052017-12-21 13:45:26 -0800668 enableRequest_1_2_cb hidl_status_cb) {
669 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
670 &WifiNanIface::enableRequest_1_2Internal,
671 hidl_status_cb, cmd_id, msg1, msg2);
672}
673
674Return<void> WifiNanIface::configRequest_1_2(
675 uint16_t cmd_id, const NanConfigRequest& msg1,
Jong Wook Kimda830c92018-07-23 15:29:38 -0700676 const V1_2::NanConfigRequestSupplemental& msg2,
Etan Cohen9e7a4052017-12-21 13:45:26 -0800677 configRequest_1_2_cb hidl_status_cb) {
678 return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
679 &WifiNanIface::configRequest_1_2Internal,
680 hidl_status_cb, cmd_id, msg1, msg2);
681}
682
Roshan Pius907d4a22016-10-27 12:48:12 -0700683std::pair<WifiStatus, std::string> WifiNanIface::getNameInternal() {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700684 return {createWifiStatus(WifiStatusCode::SUCCESS), ifname_};
Roshan Pius907d4a22016-10-27 12:48:12 -0700685}
686
687std::pair<WifiStatus, IfaceType> WifiNanIface::getTypeInternal() {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700688 return {createWifiStatus(WifiStatusCode::SUCCESS), IfaceType::NAN};
Roshan Pius3e2d6712016-10-06 13:16:23 -0700689}
690
Roshan Pius0c92d442016-10-27 17:38:53 -0700691WifiStatus WifiNanIface::registerEventCallbackInternal(
Etan Cohen44a8bf92018-04-09 13:32:40 -0700692 const sp<V1_0::IWifiNanIfaceEventCallback>& callback) {
693 if (!event_cb_handler_.addCallback(callback)) {
694 return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN);
695 }
696 return createWifiStatus(WifiStatusCode::SUCCESS);
Roshan Pius0c92d442016-10-27 17:38:53 -0700697}
698
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800699WifiStatus WifiNanIface::getCapabilitiesRequestInternal(uint16_t cmd_id) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700700 legacy_hal::wifi_error legacy_status =
Roshan Piusacededb2017-10-06 14:59:26 -0700701 legacy_hal_.lock()->nanGetCapabilities(ifname_, cmd_id);
Roshan Piusabcf78f2017-10-06 16:30:38 -0700702 return createWifiStatusFromLegacyError(legacy_status);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800703}
704
Etan Cohen9e7a4052017-12-21 13:45:26 -0800705WifiStatus WifiNanIface::enableRequestInternal(
706 uint16_t /* cmd_id */, const NanEnableRequest& /* msg */) {
707 return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED);
Roshan Pius0c92d442016-10-27 17:38:53 -0700708}
709
Etan Cohen9e7a4052017-12-21 13:45:26 -0800710WifiStatus WifiNanIface::configRequestInternal(
711 uint16_t /* cmd_id */, const NanConfigRequest& /* msg */) {
712 return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800713}
714
715WifiStatus WifiNanIface::disableRequestInternal(uint16_t cmd_id) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700716 legacy_hal::wifi_error legacy_status =
717 legacy_hal_.lock()->nanDisableRequest(ifname_, cmd_id);
718 return createWifiStatusFromLegacyError(legacy_status);
Roshan Pius0c92d442016-10-27 17:38:53 -0700719}
720
Roshan Piusacededb2017-10-06 14:59:26 -0700721WifiStatus WifiNanIface::startPublishRequestInternal(
722 uint16_t cmd_id, const NanPublishRequest& msg) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700723 legacy_hal::NanPublishRequest legacy_msg;
724 if (!hidl_struct_util::convertHidlNanPublishRequestToLegacy(msg,
725 &legacy_msg)) {
726 return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
727 }
728 legacy_hal::wifi_error legacy_status =
729 legacy_hal_.lock()->nanPublishRequest(ifname_, cmd_id, legacy_msg);
730 return createWifiStatusFromLegacyError(legacy_status);
Roshan Pius0c92d442016-10-27 17:38:53 -0700731}
732
Roshan Piusabcf78f2017-10-06 16:30:38 -0700733WifiStatus WifiNanIface::stopPublishRequestInternal(uint16_t cmd_id,
734 uint8_t sessionId) {
735 legacy_hal::NanPublishCancelRequest legacy_msg;
736 legacy_msg.publish_id = sessionId;
737 legacy_hal::wifi_error legacy_status =
738 legacy_hal_.lock()->nanPublishCancelRequest(ifname_, cmd_id,
739 legacy_msg);
740 return createWifiStatusFromLegacyError(legacy_status);
Roshan Pius0c92d442016-10-27 17:38:53 -0700741}
Roshan Piusf5f51fd2016-12-01 13:54:24 -0800742
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800743WifiStatus WifiNanIface::startSubscribeRequestInternal(
744 uint16_t cmd_id, const NanSubscribeRequest& msg) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700745 legacy_hal::NanSubscribeRequest legacy_msg;
746 if (!hidl_struct_util::convertHidlNanSubscribeRequestToLegacy(
747 msg, &legacy_msg)) {
748 return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
749 }
750 legacy_hal::wifi_error legacy_status =
751 legacy_hal_.lock()->nanSubscribeRequest(ifname_, cmd_id, legacy_msg);
752 return createWifiStatusFromLegacyError(legacy_status);
Roshan Pius0c92d442016-10-27 17:38:53 -0700753}
Roshan Piusf5f51fd2016-12-01 13:54:24 -0800754
Roshan Piusabcf78f2017-10-06 16:30:38 -0700755WifiStatus WifiNanIface::stopSubscribeRequestInternal(uint16_t cmd_id,
756 uint8_t sessionId) {
757 legacy_hal::NanSubscribeCancelRequest legacy_msg;
758 legacy_msg.subscribe_id = sessionId;
759 legacy_hal::wifi_error legacy_status =
760 legacy_hal_.lock()->nanSubscribeCancelRequest(ifname_, cmd_id,
761 legacy_msg);
762 return createWifiStatusFromLegacyError(legacy_status);
Roshan Pius0c92d442016-10-27 17:38:53 -0700763}
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800764
Roshan Pius0c92d442016-10-27 17:38:53 -0700765WifiStatus WifiNanIface::transmitFollowupRequestInternal(
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800766 uint16_t cmd_id, const NanTransmitFollowupRequest& msg) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700767 legacy_hal::NanTransmitFollowupRequest legacy_msg;
768 if (!hidl_struct_util::convertHidlNanTransmitFollowupRequestToLegacy(
769 msg, &legacy_msg)) {
770 return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
771 }
772 legacy_hal::wifi_error legacy_status =
773 legacy_hal_.lock()->nanTransmitFollowupRequest(ifname_, cmd_id,
774 legacy_msg);
775 return createWifiStatusFromLegacyError(legacy_status);
Roshan Pius0c92d442016-10-27 17:38:53 -0700776}
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800777
778WifiStatus WifiNanIface::createDataInterfaceRequestInternal(
779 uint16_t cmd_id, const std::string& iface_name) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700780 legacy_hal::wifi_error legacy_status =
781 legacy_hal_.lock()->nanDataInterfaceCreate(ifname_, cmd_id, iface_name);
782 return createWifiStatusFromLegacyError(legacy_status);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800783}
784WifiStatus WifiNanIface::deleteDataInterfaceRequestInternal(
785 uint16_t cmd_id, const std::string& iface_name) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700786 legacy_hal::wifi_error legacy_status =
787 legacy_hal_.lock()->nanDataInterfaceDelete(ifname_, cmd_id, iface_name);
788 return createWifiStatusFromLegacyError(legacy_status);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800789}
790WifiStatus WifiNanIface::initiateDataPathRequestInternal(
791 uint16_t cmd_id, const NanInitiateDataPathRequest& msg) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700792 legacy_hal::NanDataPathInitiatorRequest legacy_msg;
793 if (!hidl_struct_util::convertHidlNanDataPathInitiatorRequestToLegacy(
794 msg, &legacy_msg)) {
795 return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
796 }
797 legacy_hal::wifi_error legacy_status =
798 legacy_hal_.lock()->nanDataRequestInitiator(ifname_, cmd_id,
799 legacy_msg);
800 return createWifiStatusFromLegacyError(legacy_status);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800801}
802WifiStatus WifiNanIface::respondToDataPathIndicationRequestInternal(
803 uint16_t cmd_id, const NanRespondToDataPathIndicationRequest& msg) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700804 legacy_hal::NanDataPathIndicationResponse legacy_msg;
805 if (!hidl_struct_util::convertHidlNanDataPathIndicationResponseToLegacy(
806 msg, &legacy_msg)) {
807 return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
808 }
809 legacy_hal::wifi_error legacy_status =
810 legacy_hal_.lock()->nanDataIndicationResponse(ifname_, cmd_id,
811 legacy_msg);
812 return createWifiStatusFromLegacyError(legacy_status);
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800813}
814WifiStatus WifiNanIface::terminateDataPathRequestInternal(
815 uint16_t cmd_id, uint32_t ndpInstanceId) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700816 legacy_hal::wifi_error legacy_status =
817 legacy_hal_.lock()->nanDataEnd(ifname_, cmd_id, ndpInstanceId);
818 return createWifiStatusFromLegacyError(legacy_status);
Roshan Pius0c92d442016-10-27 17:38:53 -0700819}
Etan Cohenf01bcaa2016-12-25 09:42:21 -0800820
Etan Cohenc7bd0f72017-12-26 11:52:44 -0800821WifiStatus WifiNanIface::registerEventCallback_1_2Internal(
Etan Cohen44a8bf92018-04-09 13:32:40 -0700822 const sp<V1_2::IWifiNanIfaceEventCallback>& callback) {
823 sp<V1_0::IWifiNanIfaceEventCallback> callback_1_0 = callback;
824 if (!event_cb_handler_.addCallback(callback_1_0)) {
825 return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN);
826 }
827 if (!event_cb_handler_1_2_.addCallback(callback)) {
Etan Cohenc7bd0f72017-12-26 11:52:44 -0800828 return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN);
829 }
830 return createWifiStatus(WifiStatusCode::SUCCESS);
831}
832
Etan Cohen9e7a4052017-12-21 13:45:26 -0800833WifiStatus WifiNanIface::enableRequest_1_2Internal(
834 uint16_t cmd_id, const NanEnableRequest& msg1,
Jong Wook Kimda830c92018-07-23 15:29:38 -0700835 const V1_2::NanConfigRequestSupplemental& msg2) {
Etan Cohen9e7a4052017-12-21 13:45:26 -0800836 legacy_hal::NanEnableRequest legacy_msg;
837 if (!hidl_struct_util::convertHidlNanEnableRequest_1_2ToLegacy(
838 msg1, msg2, &legacy_msg)) {
839 return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
840 }
841 legacy_hal::wifi_error legacy_status =
842 legacy_hal_.lock()->nanEnableRequest(ifname_, cmd_id, legacy_msg);
843 return createWifiStatusFromLegacyError(legacy_status);
844}
845
846WifiStatus WifiNanIface::configRequest_1_2Internal(
847 uint16_t cmd_id, const NanConfigRequest& msg1,
Jong Wook Kimda830c92018-07-23 15:29:38 -0700848 const V1_2::NanConfigRequestSupplemental& msg2) {
Etan Cohen9e7a4052017-12-21 13:45:26 -0800849 legacy_hal::NanConfigRequest legacy_msg;
850 if (!hidl_struct_util::convertHidlNanConfigRequest_1_2ToLegacy(
851 msg1, msg2, &legacy_msg)) {
852 return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
853 }
854 legacy_hal::wifi_error legacy_status =
855 legacy_hal_.lock()->nanConfigRequest(ifname_, cmd_id, legacy_msg);
856 return createWifiStatusFromLegacyError(legacy_status);
857}
858
Roshan Pius3e2d6712016-10-06 13:16:23 -0700859} // namespace implementation
Jong Wook Kimda830c92018-07-23 15:29:38 -0700860} // namespace V1_3
Roshan Pius3e2d6712016-10-06 13:16:23 -0700861} // namespace wifi
862} // namespace hardware
863} // namespace android