blob: b732ef13715393a5f3ae44072deef3658c1452dc [file] [log] [blame]
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001/*
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>
Ahmed ElArabawy05571e42022-01-19 11:54:11 -080021#include <android/hardware/wifi/1.6/IWifiNanIface.h>
22#include <android/hardware/wifi/1.6/IWifiNanIfaceEventCallback.h>
Ahmed ElArabawy687ce132022-01-11 16:42:48 -080023
24#include "hidl_callback_util.h"
25#include "wifi_iface_util.h"
26#include "wifi_legacy_hal.h"
27
28namespace android {
29namespace hardware {
30namespace wifi {
31namespace V1_6 {
32namespace implementation {
33using namespace android::hardware::wifi::V1_0;
34using namespace android::hardware::wifi::V1_2;
35
36/**
37 * HIDL interface object used to control a NAN Iface instance.
38 */
Ahmed ElArabawy05571e42022-01-19 11:54:11 -080039class WifiNanIface : public V1_6::IWifiNanIface {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -080040 public:
41 WifiNanIface(const std::string& ifname, bool is_dedicated_iface,
42 const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal,
43 const std::weak_ptr<iface_util::WifiIfaceUtil> iface_util);
44 // Refer to |WifiChip::invalidate()|.
45 void invalidate();
46 bool isValid();
47 std::string getName();
48
49 // 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(const sp<V1_0::IWifiNanIfaceEventCallback>& callback,
53 registerEventCallback_cb hidl_status_cb) override;
54 Return<void> getCapabilitiesRequest(uint16_t cmd_id,
55 getCapabilitiesRequest_cb hidl_status_cb) override;
56 Return<void> enableRequest(uint16_t cmd_id, const V1_0::NanEnableRequest& msg,
57 enableRequest_cb hidl_status_cb) override;
58 Return<void> configRequest(uint16_t cmd_id, const V1_0::NanConfigRequest& msg,
59 configRequest_cb hidl_status_cb) override;
60 Return<void> disableRequest(uint16_t cmd_id, disableRequest_cb hidl_status_cb) override;
61 Return<void> startPublishRequest(uint16_t cmd_id, const NanPublishRequest& msg,
62 startPublishRequest_cb hidl_status_cb) override;
63 Return<void> stopPublishRequest(uint16_t cmd_id, uint8_t sessionId,
64 stopPublishRequest_cb hidl_status_cb) override;
65 Return<void> startSubscribeRequest(uint16_t cmd_id, const NanSubscribeRequest& msg,
66 startSubscribeRequest_cb hidl_status_cb) override;
67 Return<void> stopSubscribeRequest(uint16_t cmd_id, uint8_t sessionId,
68 stopSubscribeRequest_cb hidl_status_cb) override;
69 Return<void> transmitFollowupRequest(uint16_t cmd_id, const NanTransmitFollowupRequest& msg,
70 transmitFollowupRequest_cb hidl_status_cb) override;
71 Return<void> createDataInterfaceRequest(uint16_t cmd_id, const hidl_string& iface_name,
72 createDataInterfaceRequest_cb hidl_status_cb) override;
73 Return<void> deleteDataInterfaceRequest(uint16_t cmd_id, const hidl_string& iface_name,
74 deleteDataInterfaceRequest_cb hidl_status_cb) override;
75 Return<void> initiateDataPathRequest(uint16_t cmd_id, const NanInitiateDataPathRequest& msg,
76 initiateDataPathRequest_cb hidl_status_cb) override;
77 Return<void> respondToDataPathIndicationRequest(
78 uint16_t cmd_id, const NanRespondToDataPathIndicationRequest& msg,
79 respondToDataPathIndicationRequest_cb hidl_status_cb) override;
80 Return<void> terminateDataPathRequest(uint16_t cmd_id, uint32_t ndpInstanceId,
81 terminateDataPathRequest_cb hidl_status_cb) override;
82
83 Return<void> registerEventCallback_1_2(const sp<V1_2::IWifiNanIfaceEventCallback>& callback,
84 registerEventCallback_1_2_cb hidl_status_cb) override;
85 Return<void> enableRequest_1_2(uint16_t cmd_id, const V1_0::NanEnableRequest& msg1,
86 const V1_2::NanConfigRequestSupplemental& msg2,
87 enableRequest_1_2_cb hidl_status_cb) override;
88 Return<void> configRequest_1_2(uint16_t cmd_id, const V1_0::NanConfigRequest& msg1,
89 const V1_2::NanConfigRequestSupplemental& msg2,
90 configRequest_1_2_cb hidl_status_cb) override;
91 Return<void> enableRequest_1_4(uint16_t cmd_id, const V1_4::NanEnableRequest& msg1,
92 const V1_2::NanConfigRequestSupplemental& msg2,
93 enableRequest_1_4_cb hidl_status_cb) override;
94 Return<void> configRequest_1_4(uint16_t cmd_id, const V1_4::NanConfigRequest& msg1,
95 const V1_2::NanConfigRequestSupplemental& msg2,
96 configRequest_1_4_cb hidl_status_cb) override;
97 Return<void> registerEventCallback_1_5(const sp<V1_5::IWifiNanIfaceEventCallback>& callback,
98 registerEventCallback_1_5_cb hidl_status_cb) override;
99 Return<void> enableRequest_1_5(uint16_t cmd_id, const V1_4::NanEnableRequest& msg1,
100 const V1_5::NanConfigRequestSupplemental& msg2,
101 enableRequest_1_4_cb hidl_status_cb) override;
102 Return<void> configRequest_1_5(uint16_t cmd_id, const V1_4::NanConfigRequest& msg1,
103 const V1_5::NanConfigRequestSupplemental& msg2,
104 configRequest_1_4_cb hidl_status_cb) override;
105 Return<void> getCapabilitiesRequest_1_5(uint16_t cmd_id,
106 getCapabilitiesRequest_cb hidl_status_cb) override;
Ahmed ElArabawy05571e42022-01-19 11:54:11 -0800107 Return<void> registerEventCallback_1_6(const sp<V1_6::IWifiNanIfaceEventCallback>& callback,
108 registerEventCallback_1_6_cb hidl_status_cb) override;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800109
110 private:
111 // Corresponding worker functions for the HIDL methods.
112 std::pair<WifiStatus, std::string> getNameInternal();
113 std::pair<WifiStatus, IfaceType> getTypeInternal();
114 WifiStatus registerEventCallbackInternal(const sp<V1_0::IWifiNanIfaceEventCallback>& callback);
115 WifiStatus getCapabilitiesRequestInternal(uint16_t cmd_id);
116 WifiStatus enableRequestInternal(uint16_t cmd_id, const V1_0::NanEnableRequest& msg);
117 WifiStatus configRequestInternal(uint16_t cmd_id, const V1_0::NanConfigRequest& msg);
118 WifiStatus disableRequestInternal(uint16_t cmd_id);
119 WifiStatus startPublishRequestInternal(uint16_t cmd_id, const NanPublishRequest& msg);
120 WifiStatus stopPublishRequestInternal(uint16_t cmd_id, uint8_t sessionId);
121 WifiStatus startSubscribeRequestInternal(uint16_t cmd_id, const NanSubscribeRequest& msg);
122 WifiStatus stopSubscribeRequestInternal(uint16_t cmd_id, uint8_t sessionId);
123 WifiStatus transmitFollowupRequestInternal(uint16_t cmd_id,
124 const NanTransmitFollowupRequest& msg);
125 WifiStatus createDataInterfaceRequestInternal(uint16_t cmd_id, const std::string& iface_name);
126 WifiStatus deleteDataInterfaceRequestInternal(uint16_t cmd_id, const std::string& iface_name);
127 WifiStatus initiateDataPathRequestInternal(uint16_t cmd_id,
128 const NanInitiateDataPathRequest& msg);
129 WifiStatus respondToDataPathIndicationRequestInternal(
130 uint16_t cmd_id, const NanRespondToDataPathIndicationRequest& msg);
131 WifiStatus terminateDataPathRequestInternal(uint16_t cmd_id, uint32_t ndpInstanceId);
132
133 WifiStatus registerEventCallback_1_2Internal(
134 const sp<V1_2::IWifiNanIfaceEventCallback>& callback);
135 WifiStatus enableRequest_1_2Internal(uint16_t cmd_id, const V1_0::NanEnableRequest& msg1,
136 const V1_2::NanConfigRequestSupplemental& msg2);
137 WifiStatus configRequest_1_2Internal(uint16_t cmd_id, const V1_0::NanConfigRequest& msg,
138 const V1_2::NanConfigRequestSupplemental& msg2);
139 WifiStatus enableRequest_1_4Internal(uint16_t cmd_id, const V1_4::NanEnableRequest& msg1,
140 const V1_2::NanConfigRequestSupplemental& msg2);
141 WifiStatus configRequest_1_4Internal(uint16_t cmd_id, const V1_4::NanConfigRequest& msg,
142 const V1_2::NanConfigRequestSupplemental& msg2);
143 WifiStatus registerEventCallback_1_5Internal(
144 const sp<V1_5::IWifiNanIfaceEventCallback>& callback);
145 WifiStatus enableRequest_1_5Internal(uint16_t cmd_id, const V1_4::NanEnableRequest& msg1,
146 const V1_5::NanConfigRequestSupplemental& msg2);
147 WifiStatus configRequest_1_5Internal(uint16_t cmd_id, const V1_4::NanConfigRequest& msg,
148 const V1_5::NanConfigRequestSupplemental& msg2);
149 WifiStatus getCapabilitiesRequest_1_5Internal(uint16_t cmd_id);
Ahmed ElArabawy05571e42022-01-19 11:54:11 -0800150 WifiStatus registerEventCallback_1_6Internal(
151 const sp<V1_6::IWifiNanIfaceEventCallback>& callback);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800152
153 // all 1_0 and descendant callbacks
154 std::set<sp<V1_0::IWifiNanIfaceEventCallback>> getEventCallbacks();
155 // all 1_2 and descendant callbacks
156 std::set<sp<V1_2::IWifiNanIfaceEventCallback>> getEventCallbacks_1_2();
157 // all 1_5 and descendant callbacks
158 std::set<sp<V1_5::IWifiNanIfaceEventCallback>> getEventCallbacks_1_5();
Ahmed ElArabawy05571e42022-01-19 11:54:11 -0800159 // all 1_6 and descendant callbacks
160 std::set<sp<V1_6::IWifiNanIfaceEventCallback>> getEventCallbacks_1_6();
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800161
162 std::string ifname_;
163 bool is_dedicated_iface_;
164 std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_;
165 std::weak_ptr<iface_util::WifiIfaceUtil> iface_util_;
166 bool is_valid_;
167 hidl_callback_util::HidlCallbackHandler<V1_0::IWifiNanIfaceEventCallback> event_cb_handler_;
168 hidl_callback_util::HidlCallbackHandler<V1_2::IWifiNanIfaceEventCallback> event_cb_handler_1_2_;
169 hidl_callback_util::HidlCallbackHandler<V1_5::IWifiNanIfaceEventCallback> event_cb_handler_1_5_;
Ahmed ElArabawy05571e42022-01-19 11:54:11 -0800170 hidl_callback_util::HidlCallbackHandler<V1_6::IWifiNanIfaceEventCallback> event_cb_handler_1_6_;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800171
172 DISALLOW_COPY_AND_ASSIGN(WifiNanIface);
173};
174
175} // namespace implementation
176} // namespace V1_6
177} // namespace wifi
178} // namespace hardware
179} // namespace android
180
181#endif // WIFI_NAN_IFACE_H_