blob: c445afc5419c35c281bdd07287a839130f1298c1 [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>
21#include <android/hardware/wifi/1.5/IWifiNanIface.h>
22#include <android/hardware/wifi/1.5/IWifiNanIfaceEventCallback.h>
23
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 */
39class WifiNanIface : public V1_5::IWifiNanIface {
40 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;
107
108 private:
109 // Corresponding worker functions for the HIDL methods.
110 std::pair<WifiStatus, std::string> getNameInternal();
111 std::pair<WifiStatus, IfaceType> getTypeInternal();
112 WifiStatus registerEventCallbackInternal(const sp<V1_0::IWifiNanIfaceEventCallback>& callback);
113 WifiStatus getCapabilitiesRequestInternal(uint16_t cmd_id);
114 WifiStatus enableRequestInternal(uint16_t cmd_id, const V1_0::NanEnableRequest& msg);
115 WifiStatus configRequestInternal(uint16_t cmd_id, const V1_0::NanConfigRequest& msg);
116 WifiStatus disableRequestInternal(uint16_t cmd_id);
117 WifiStatus startPublishRequestInternal(uint16_t cmd_id, const NanPublishRequest& msg);
118 WifiStatus stopPublishRequestInternal(uint16_t cmd_id, uint8_t sessionId);
119 WifiStatus startSubscribeRequestInternal(uint16_t cmd_id, const NanSubscribeRequest& msg);
120 WifiStatus stopSubscribeRequestInternal(uint16_t cmd_id, uint8_t sessionId);
121 WifiStatus transmitFollowupRequestInternal(uint16_t cmd_id,
122 const NanTransmitFollowupRequest& msg);
123 WifiStatus createDataInterfaceRequestInternal(uint16_t cmd_id, const std::string& iface_name);
124 WifiStatus deleteDataInterfaceRequestInternal(uint16_t cmd_id, const std::string& iface_name);
125 WifiStatus initiateDataPathRequestInternal(uint16_t cmd_id,
126 const NanInitiateDataPathRequest& msg);
127 WifiStatus respondToDataPathIndicationRequestInternal(
128 uint16_t cmd_id, const NanRespondToDataPathIndicationRequest& msg);
129 WifiStatus terminateDataPathRequestInternal(uint16_t cmd_id, uint32_t ndpInstanceId);
130
131 WifiStatus registerEventCallback_1_2Internal(
132 const sp<V1_2::IWifiNanIfaceEventCallback>& callback);
133 WifiStatus enableRequest_1_2Internal(uint16_t cmd_id, const V1_0::NanEnableRequest& msg1,
134 const V1_2::NanConfigRequestSupplemental& msg2);
135 WifiStatus configRequest_1_2Internal(uint16_t cmd_id, const V1_0::NanConfigRequest& msg,
136 const V1_2::NanConfigRequestSupplemental& msg2);
137 WifiStatus enableRequest_1_4Internal(uint16_t cmd_id, const V1_4::NanEnableRequest& msg1,
138 const V1_2::NanConfigRequestSupplemental& msg2);
139 WifiStatus configRequest_1_4Internal(uint16_t cmd_id, const V1_4::NanConfigRequest& msg,
140 const V1_2::NanConfigRequestSupplemental& msg2);
141 WifiStatus registerEventCallback_1_5Internal(
142 const sp<V1_5::IWifiNanIfaceEventCallback>& callback);
143 WifiStatus enableRequest_1_5Internal(uint16_t cmd_id, const V1_4::NanEnableRequest& msg1,
144 const V1_5::NanConfigRequestSupplemental& msg2);
145 WifiStatus configRequest_1_5Internal(uint16_t cmd_id, const V1_4::NanConfigRequest& msg,
146 const V1_5::NanConfigRequestSupplemental& msg2);
147 WifiStatus getCapabilitiesRequest_1_5Internal(uint16_t cmd_id);
148
149 // all 1_0 and descendant callbacks
150 std::set<sp<V1_0::IWifiNanIfaceEventCallback>> getEventCallbacks();
151 // all 1_2 and descendant callbacks
152 std::set<sp<V1_2::IWifiNanIfaceEventCallback>> getEventCallbacks_1_2();
153 // all 1_5 and descendant callbacks
154 std::set<sp<V1_5::IWifiNanIfaceEventCallback>> getEventCallbacks_1_5();
155
156 std::string ifname_;
157 bool is_dedicated_iface_;
158 std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_;
159 std::weak_ptr<iface_util::WifiIfaceUtil> iface_util_;
160 bool is_valid_;
161 hidl_callback_util::HidlCallbackHandler<V1_0::IWifiNanIfaceEventCallback> event_cb_handler_;
162 hidl_callback_util::HidlCallbackHandler<V1_2::IWifiNanIfaceEventCallback> event_cb_handler_1_2_;
163 hidl_callback_util::HidlCallbackHandler<V1_5::IWifiNanIfaceEventCallback> event_cb_handler_1_5_;
164
165 DISALLOW_COPY_AND_ASSIGN(WifiNanIface);
166};
167
168} // namespace implementation
169} // namespace V1_6
170} // namespace wifi
171} // namespace hardware
172} // namespace android
173
174#endif // WIFI_NAN_IFACE_H_