1 /* 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 28 namespace android { 29 namespace hardware { 30 namespace wifi { 31 namespace V1_5 { 32 namespace implementation { 33 using namespace android::hardware::wifi::V1_0; 34 using namespace android::hardware::wifi::V1_2; 35 36 /** 37 * HIDL interface object used to control a NAN Iface instance. 38 */ 39 class 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( 53 const sp<V1_0::IWifiNanIfaceEventCallback>& callback, 54 registerEventCallback_cb hidl_status_cb) override; 55 Return<void> getCapabilitiesRequest( 56 uint16_t cmd_id, getCapabilitiesRequest_cb hidl_status_cb) override; 57 Return<void> enableRequest(uint16_t cmd_id, 58 const V1_0::NanEnableRequest& msg, 59 enableRequest_cb hidl_status_cb) override; 60 Return<void> configRequest(uint16_t cmd_id, 61 const V1_0::NanConfigRequest& msg, 62 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; 95 96 Return<void> registerEventCallback_1_2( 97 const sp<V1_2::IWifiNanIfaceEventCallback>& callback, 98 registerEventCallback_1_2_cb hidl_status_cb) override; 99 Return<void> enableRequest_1_2( 100 uint16_t cmd_id, const V1_0::NanEnableRequest& msg1, 101 const V1_2::NanConfigRequestSupplemental& msg2, 102 enableRequest_1_2_cb hidl_status_cb) override; 103 Return<void> configRequest_1_2( 104 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( 108 uint16_t cmd_id, const V1_4::NanEnableRequest& msg1, 109 const V1_2::NanConfigRequestSupplemental& msg2, 110 enableRequest_1_4_cb hidl_status_cb) override; 111 Return<void> configRequest_1_4( 112 uint16_t cmd_id, const V1_4::NanConfigRequest& msg1, 113 const V1_2::NanConfigRequestSupplemental& msg2, 114 configRequest_1_4_cb hidl_status_cb) override; 115 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; 128 129 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( 134 const sp<V1_0::IWifiNanIfaceEventCallback>& callback); 135 WifiStatus getCapabilitiesRequestInternal(uint16_t cmd_id); 136 WifiStatus enableRequestInternal(uint16_t cmd_id, 137 const V1_0::NanEnableRequest& msg); 138 WifiStatus configRequestInternal(uint16_t cmd_id, 139 const V1_0::NanConfigRequest& msg); 140 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); 159 160 WifiStatus registerEventCallback_1_2Internal( 161 const sp<V1_2::IWifiNanIfaceEventCallback>& callback); 162 WifiStatus enableRequest_1_2Internal( 163 uint16_t cmd_id, const V1_0::NanEnableRequest& msg1, 164 const V1_2::NanConfigRequestSupplemental& msg2); 165 WifiStatus configRequest_1_2Internal( 166 uint16_t cmd_id, const V1_0::NanConfigRequest& msg, 167 const V1_2::NanConfigRequestSupplemental& msg2); 168 WifiStatus enableRequest_1_4Internal( 169 uint16_t cmd_id, const V1_4::NanEnableRequest& msg1, 170 const V1_2::NanConfigRequestSupplemental& msg2); 171 WifiStatus configRequest_1_4Internal( 172 uint16_t cmd_id, const V1_4::NanConfigRequest& msg, 173 const V1_2::NanConfigRequestSupplemental& msg2); 174 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); 183 184 // 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(); 188 // all 1_5 and descendant callbacks 189 std::set<sp<IWifiNanIfaceEventCallback>> getEventCallbacks_1_5(); 190 191 std::string ifname_; 192 bool is_dedicated_iface_; 193 std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_; 194 std::weak_ptr<iface_util::WifiIfaceUtil> iface_util_; 195 bool is_valid_; 196 hidl_callback_util::HidlCallbackHandler<V1_0::IWifiNanIfaceEventCallback> 197 event_cb_handler_; 198 hidl_callback_util::HidlCallbackHandler<V1_2::IWifiNanIfaceEventCallback> 199 event_cb_handler_1_2_; 200 hidl_callback_util::HidlCallbackHandler<IWifiNanIfaceEventCallback> 201 event_cb_handler_1_5_; 202 203 DISALLOW_COPY_AND_ASSIGN(WifiNanIface); 204 }; 205 206 } // namespace implementation 207 } // namespace V1_5 208 } // namespace wifi 209 } // namespace hardware 210 } // namespace android 211 212 #endif // WIFI_NAN_IFACE_H_ 213