blob: fb9c047ff640d27e8bbd55869e454a2ca7a8f429 [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
17#ifndef WIFI_NAN_IFACE_H_
18#define WIFI_NAN_IFACE_H_
19
20#include <android-base/macros.h>
Nate Jiang3ec67812020-08-24 11:04:31 -070021#include <android/hardware/wifi/1.5/IWifiNanIface.h>
22#include <android/hardware/wifi/1.5/IWifiNanIfaceEventCallback.h>
Roshan Pius3e2d6712016-10-06 13:16:23 -070023
Roshan Piusd37341f2017-01-31 13:13:28 -080024#include "hidl_callback_util.h"
Roshan Pius356d5a62019-05-17 15:07:34 -070025#include "wifi_iface_util.h"
Roshan Pius3e2d6712016-10-06 13:16:23 -070026#include "wifi_legacy_hal.h"
27
28namespace android {
29namespace hardware {
30namespace wifi {
Jimmy Chend460df32019-11-29 17:31:22 +020031namespace V1_5 {
Roshan Pius3e2d6712016-10-06 13:16:23 -070032namespace implementation {
Roshan Piusdbd83ef2017-06-20 12:05:40 -070033using namespace android::hardware::wifi::V1_0;
Ahmed ElArabawy83baffd2019-11-15 19:20:41 -080034using namespace android::hardware::wifi::V1_2;
Roshan Pius3e2d6712016-10-06 13:16:23 -070035
36/**
37 * HIDL interface object used to control a NAN Iface instance.
38 */
Nate Jiang3ec67812020-08-24 11:04:31 -070039class WifiNanIface : public V1_5::IWifiNanIface {
Roshan Piusabcf78f2017-10-06 16:30:38 -070040 public:
Roshan Pius5ba0a902020-04-14 11:55:42 -070041 WifiNanIface(const std::string& ifname, bool is_dedicated_iface,
Roshan Pius356d5a62019-05-17 15:07:34 -070042 const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal,
43 const std::weak_ptr<iface_util::WifiIfaceUtil> iface_util);
Roshan Piusabcf78f2017-10-06 16:30:38 -070044 // Refer to |WifiChip::invalidate()|.
45 void invalidate();
46 bool isValid();
Roshan Pius675609b2017-10-31 14:24:58 -070047 std::string getName();
Roshan Pius3e2d6712016-10-06 13:16:23 -070048
Roshan Piusabcf78f2017-10-06 16:30:38 -070049 // HIDL methods exposed.
50 Return<void> getName(getName_cb hidl_status_cb) override;
51 Return<void> getType(getType_cb hidl_status_cb) override;
52 Return<void> registerEventCallback(
Etan Cohenc7bd0f72017-12-26 11:52:44 -080053 const sp<V1_0::IWifiNanIfaceEventCallback>& callback,
Roshan Piusabcf78f2017-10-06 16:30:38 -070054 registerEventCallback_cb hidl_status_cb) override;
55 Return<void> getCapabilitiesRequest(
56 uint16_t cmd_id, getCapabilitiesRequest_cb hidl_status_cb) override;
Ahmed ElArabawy83baffd2019-11-15 19:20:41 -080057 Return<void> enableRequest(uint16_t cmd_id,
58 const V1_0::NanEnableRequest& msg,
Roshan Piusabcf78f2017-10-06 16:30:38 -070059 enableRequest_cb hidl_status_cb) override;
Ahmed ElArabawy83baffd2019-11-15 19:20:41 -080060 Return<void> configRequest(uint16_t cmd_id,
61 const V1_0::NanConfigRequest& msg,
Roshan Piusabcf78f2017-10-06 16:30:38 -070062 configRequest_cb hidl_status_cb) override;
63 Return<void> disableRequest(uint16_t cmd_id,
64 disableRequest_cb hidl_status_cb) override;
65 Return<void> startPublishRequest(
66 uint16_t cmd_id, const NanPublishRequest& msg,
67 startPublishRequest_cb hidl_status_cb) override;
68 Return<void> stopPublishRequest(
69 uint16_t cmd_id, uint8_t sessionId,
70 stopPublishRequest_cb hidl_status_cb) override;
71 Return<void> startSubscribeRequest(
72 uint16_t cmd_id, const NanSubscribeRequest& msg,
73 startSubscribeRequest_cb hidl_status_cb) override;
74 Return<void> stopSubscribeRequest(
75 uint16_t cmd_id, uint8_t sessionId,
76 stopSubscribeRequest_cb hidl_status_cb) override;
77 Return<void> transmitFollowupRequest(
78 uint16_t cmd_id, const NanTransmitFollowupRequest& msg,
79 transmitFollowupRequest_cb hidl_status_cb) override;
80 Return<void> createDataInterfaceRequest(
81 uint16_t cmd_id, const hidl_string& iface_name,
82 createDataInterfaceRequest_cb hidl_status_cb) override;
83 Return<void> deleteDataInterfaceRequest(
84 uint16_t cmd_id, const hidl_string& iface_name,
85 deleteDataInterfaceRequest_cb hidl_status_cb) override;
86 Return<void> initiateDataPathRequest(
87 uint16_t cmd_id, const NanInitiateDataPathRequest& msg,
88 initiateDataPathRequest_cb hidl_status_cb) override;
89 Return<void> respondToDataPathIndicationRequest(
90 uint16_t cmd_id, const NanRespondToDataPathIndicationRequest& msg,
91 respondToDataPathIndicationRequest_cb hidl_status_cb) override;
92 Return<void> terminateDataPathRequest(
93 uint16_t cmd_id, uint32_t ndpInstanceId,
94 terminateDataPathRequest_cb hidl_status_cb) override;
Roshan Pius3e2d6712016-10-06 13:16:23 -070095
Etan Cohenc7bd0f72017-12-26 11:52:44 -080096 Return<void> registerEventCallback_1_2(
Jong Wook Kimda830c92018-07-23 15:29:38 -070097 const sp<V1_2::IWifiNanIfaceEventCallback>& callback,
Etan Cohenc7bd0f72017-12-26 11:52:44 -080098 registerEventCallback_1_2_cb hidl_status_cb) override;
Etan Cohen9e7a4052017-12-21 13:45:26 -080099 Return<void> enableRequest_1_2(
Ahmed ElArabawy83baffd2019-11-15 19:20:41 -0800100 uint16_t cmd_id, const V1_0::NanEnableRequest& msg1,
Jong Wook Kimda830c92018-07-23 15:29:38 -0700101 const V1_2::NanConfigRequestSupplemental& msg2,
Etan Cohen9e7a4052017-12-21 13:45:26 -0800102 enableRequest_1_2_cb hidl_status_cb) override;
103 Return<void> configRequest_1_2(
Ahmed ElArabawy83baffd2019-11-15 19:20:41 -0800104 uint16_t cmd_id, const V1_0::NanConfigRequest& msg1,
105 const V1_2::NanConfigRequestSupplemental& msg2,
106 configRequest_1_2_cb hidl_status_cb) override;
107 Return<void> enableRequest_1_4(
Jimmy Chend460df32019-11-29 17:31:22 +0200108 uint16_t cmd_id, const V1_4::NanEnableRequest& msg1,
Ahmed ElArabawy83baffd2019-11-15 19:20:41 -0800109 const V1_2::NanConfigRequestSupplemental& msg2,
Jimmy Chend460df32019-11-29 17:31:22 +0200110 enableRequest_1_4_cb hidl_status_cb) override;
Ahmed ElArabawy83baffd2019-11-15 19:20:41 -0800111 Return<void> configRequest_1_4(
Jimmy Chend460df32019-11-29 17:31:22 +0200112 uint16_t cmd_id, const V1_4::NanConfigRequest& msg1,
Jong Wook Kimda830c92018-07-23 15:29:38 -0700113 const V1_2::NanConfigRequestSupplemental& msg2,
Jimmy Chend460df32019-11-29 17:31:22 +0200114 configRequest_1_4_cb hidl_status_cb) override;
Nate Jiang3ec67812020-08-24 11:04:31 -0700115 Return<void> registerEventCallback_1_5(
116 const sp<IWifiNanIfaceEventCallback>& callback,
117 registerEventCallback_1_5_cb hidl_status_cb) override;
118 Return<void> enableRequest_1_5(
119 uint16_t cmd_id, const V1_4::NanEnableRequest& msg1,
120 const NanConfigRequestSupplemental& msg2,
121 enableRequest_1_4_cb hidl_status_cb) override;
122 Return<void> configRequest_1_5(
123 uint16_t cmd_id, const V1_4::NanConfigRequest& msg1,
124 const NanConfigRequestSupplemental& msg2,
125 configRequest_1_4_cb hidl_status_cb) override;
126 Return<void> getCapabilitiesRequest_1_5(
127 uint16_t cmd_id, getCapabilitiesRequest_cb hidl_status_cb) override;
Etan Cohen9e7a4052017-12-21 13:45:26 -0800128
Roshan Piusabcf78f2017-10-06 16:30:38 -0700129 private:
130 // Corresponding worker functions for the HIDL methods.
131 std::pair<WifiStatus, std::string> getNameInternal();
132 std::pair<WifiStatus, IfaceType> getTypeInternal();
133 WifiStatus registerEventCallbackInternal(
Etan Cohenc7bd0f72017-12-26 11:52:44 -0800134 const sp<V1_0::IWifiNanIfaceEventCallback>& callback);
Roshan Piusabcf78f2017-10-06 16:30:38 -0700135 WifiStatus getCapabilitiesRequestInternal(uint16_t cmd_id);
136 WifiStatus enableRequestInternal(uint16_t cmd_id,
Ahmed ElArabawy83baffd2019-11-15 19:20:41 -0800137 const V1_0::NanEnableRequest& msg);
Roshan Piusabcf78f2017-10-06 16:30:38 -0700138 WifiStatus configRequestInternal(uint16_t cmd_id,
Ahmed ElArabawy83baffd2019-11-15 19:20:41 -0800139 const V1_0::NanConfigRequest& msg);
Roshan Piusabcf78f2017-10-06 16:30:38 -0700140 WifiStatus disableRequestInternal(uint16_t cmd_id);
141 WifiStatus startPublishRequestInternal(uint16_t cmd_id,
142 const NanPublishRequest& msg);
143 WifiStatus stopPublishRequestInternal(uint16_t cmd_id, uint8_t sessionId);
144 WifiStatus startSubscribeRequestInternal(uint16_t cmd_id,
145 const NanSubscribeRequest& msg);
146 WifiStatus stopSubscribeRequestInternal(uint16_t cmd_id, uint8_t sessionId);
147 WifiStatus transmitFollowupRequestInternal(
148 uint16_t cmd_id, const NanTransmitFollowupRequest& msg);
149 WifiStatus createDataInterfaceRequestInternal(
150 uint16_t cmd_id, const std::string& iface_name);
151 WifiStatus deleteDataInterfaceRequestInternal(
152 uint16_t cmd_id, const std::string& iface_name);
153 WifiStatus initiateDataPathRequestInternal(
154 uint16_t cmd_id, const NanInitiateDataPathRequest& msg);
155 WifiStatus respondToDataPathIndicationRequestInternal(
156 uint16_t cmd_id, const NanRespondToDataPathIndicationRequest& msg);
157 WifiStatus terminateDataPathRequestInternal(uint16_t cmd_id,
158 uint32_t ndpInstanceId);
Roshan Pius907d4a22016-10-27 12:48:12 -0700159
Etan Cohenc7bd0f72017-12-26 11:52:44 -0800160 WifiStatus registerEventCallback_1_2Internal(
Etan Cohen44a8bf92018-04-09 13:32:40 -0700161 const sp<V1_2::IWifiNanIfaceEventCallback>& callback);
Etan Cohen9e7a4052017-12-21 13:45:26 -0800162 WifiStatus enableRequest_1_2Internal(
Ahmed ElArabawy83baffd2019-11-15 19:20:41 -0800163 uint16_t cmd_id, const V1_0::NanEnableRequest& msg1,
Jong Wook Kimda830c92018-07-23 15:29:38 -0700164 const V1_2::NanConfigRequestSupplemental& msg2);
Etan Cohen9e7a4052017-12-21 13:45:26 -0800165 WifiStatus configRequest_1_2Internal(
Ahmed ElArabawy83baffd2019-11-15 19:20:41 -0800166 uint16_t cmd_id, const V1_0::NanConfigRequest& msg,
167 const V1_2::NanConfigRequestSupplemental& msg2);
168 WifiStatus enableRequest_1_4Internal(
Jimmy Chend460df32019-11-29 17:31:22 +0200169 uint16_t cmd_id, const V1_4::NanEnableRequest& msg1,
Ahmed ElArabawy83baffd2019-11-15 19:20:41 -0800170 const V1_2::NanConfigRequestSupplemental& msg2);
171 WifiStatus configRequest_1_4Internal(
Jimmy Chend460df32019-11-29 17:31:22 +0200172 uint16_t cmd_id, const V1_4::NanConfigRequest& msg,
Jong Wook Kimda830c92018-07-23 15:29:38 -0700173 const V1_2::NanConfigRequestSupplemental& msg2);
Nate Jiang3ec67812020-08-24 11:04:31 -0700174 WifiStatus registerEventCallback_1_5Internal(
175 const sp<IWifiNanIfaceEventCallback>& callback);
176 WifiStatus enableRequest_1_5Internal(
177 uint16_t cmd_id, const V1_4::NanEnableRequest& msg1,
178 const NanConfigRequestSupplemental& msg2);
179 WifiStatus configRequest_1_5Internal(
180 uint16_t cmd_id, const V1_4::NanConfigRequest& msg,
181 const NanConfigRequestSupplemental& msg2);
182 WifiStatus getCapabilitiesRequest_1_5Internal(uint16_t cmd_id);
Etan Cohen9e7a4052017-12-21 13:45:26 -0800183
Etan Cohen44a8bf92018-04-09 13:32:40 -0700184 // all 1_0 and descendant callbacks
185 std::set<sp<V1_0::IWifiNanIfaceEventCallback>> getEventCallbacks();
186 // all 1_2 and descendant callbacks
187 std::set<sp<V1_2::IWifiNanIfaceEventCallback>> getEventCallbacks_1_2();
Nate Jiang3ec67812020-08-24 11:04:31 -0700188 // all 1_5 and descendant callbacks
189 std::set<sp<IWifiNanIfaceEventCallback>> getEventCallbacks_1_5();
Roshan Piusd37341f2017-01-31 13:13:28 -0800190
Roshan Piusabcf78f2017-10-06 16:30:38 -0700191 std::string ifname_;
Roshan Pius5ba0a902020-04-14 11:55:42 -0700192 bool is_dedicated_iface_;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700193 std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_;
Roshan Pius356d5a62019-05-17 15:07:34 -0700194 std::weak_ptr<iface_util::WifiIfaceUtil> iface_util_;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700195 bool is_valid_;
Etan Cohen44a8bf92018-04-09 13:32:40 -0700196 hidl_callback_util::HidlCallbackHandler<V1_0::IWifiNanIfaceEventCallback>
Roshan Piusabcf78f2017-10-06 16:30:38 -0700197 event_cb_handler_;
Etan Cohen44a8bf92018-04-09 13:32:40 -0700198 hidl_callback_util::HidlCallbackHandler<V1_2::IWifiNanIfaceEventCallback>
199 event_cb_handler_1_2_;
Nate Jiang3ec67812020-08-24 11:04:31 -0700200 hidl_callback_util::HidlCallbackHandler<IWifiNanIfaceEventCallback>
201 event_cb_handler_1_5_;
Roshan Pius3e2d6712016-10-06 13:16:23 -0700202
Roshan Piusabcf78f2017-10-06 16:30:38 -0700203 DISALLOW_COPY_AND_ASSIGN(WifiNanIface);
Roshan Pius3e2d6712016-10-06 13:16:23 -0700204};
205
206} // namespace implementation
Jimmy Chend460df32019-11-29 17:31:22 +0200207} // namespace V1_5
Roshan Pius3e2d6712016-10-06 13:16:23 -0700208} // namespace wifi
209} // namespace hardware
210} // namespace android
211
212#endif // WIFI_NAN_IFACE_H_