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.6/IWifiNanIface.h> 22 #include <android/hardware/wifi/1.6/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_6 { 32 namespace implementation { 33 using namespace android::hardware::wifi::V1_0; 34 using namespace android::hardware::wifi::V1_2; 35 using namespace android::hardware::wifi::V1_4; 36 using namespace android::hardware::wifi::V1_6; 37 38 /** 39 * HIDL interface object used to control a NAN Iface instance. 40 */ 41 class WifiNanIface : public V1_6::IWifiNanIface { 42 public: 43 WifiNanIface(const std::string& ifname, bool is_dedicated_iface, 44 const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal, 45 const std::weak_ptr<iface_util::WifiIfaceUtil> iface_util); 46 // Refer to |WifiChip::invalidate()|. 47 void invalidate(); 48 bool isValid(); 49 std::string getName(); 50 51 // HIDL methods exposed. 52 Return<void> getName(getName_cb hidl_status_cb) override; 53 Return<void> getType(getType_cb hidl_status_cb) override; 54 Return<void> registerEventCallback(const sp<V1_0::IWifiNanIfaceEventCallback>& callback, 55 registerEventCallback_cb hidl_status_cb) override; 56 Return<void> getCapabilitiesRequest(uint16_t cmd_id, 57 getCapabilitiesRequest_cb hidl_status_cb) override; 58 Return<void> enableRequest(uint16_t cmd_id, const V1_0::NanEnableRequest& msg, 59 enableRequest_cb hidl_status_cb) override; 60 Return<void> configRequest(uint16_t cmd_id, const V1_0::NanConfigRequest& msg, 61 configRequest_cb hidl_status_cb) override; 62 Return<void> disableRequest(uint16_t cmd_id, disableRequest_cb hidl_status_cb) override; 63 Return<void> startPublishRequest(uint16_t cmd_id, const V1_0::NanPublishRequest& msg, 64 startPublishRequest_cb hidl_status_cb) override; 65 Return<void> stopPublishRequest(uint16_t cmd_id, uint8_t sessionId, 66 stopPublishRequest_cb hidl_status_cb) override; 67 Return<void> startSubscribeRequest(uint16_t cmd_id, const V1_0::NanSubscribeRequest& msg, 68 startSubscribeRequest_cb hidl_status_cb) override; 69 Return<void> stopSubscribeRequest(uint16_t cmd_id, uint8_t sessionId, 70 stopSubscribeRequest_cb hidl_status_cb) override; 71 Return<void> transmitFollowupRequest(uint16_t cmd_id, const NanTransmitFollowupRequest& msg, 72 transmitFollowupRequest_cb hidl_status_cb) override; 73 Return<void> createDataInterfaceRequest(uint16_t cmd_id, const hidl_string& iface_name, 74 createDataInterfaceRequest_cb hidl_status_cb) override; 75 Return<void> deleteDataInterfaceRequest(uint16_t cmd_id, const hidl_string& iface_name, 76 deleteDataInterfaceRequest_cb hidl_status_cb) override; 77 Return<void> initiateDataPathRequest(uint16_t cmd_id, 78 const V1_0::NanInitiateDataPathRequest& msg, 79 initiateDataPathRequest_cb hidl_status_cb) override; 80 Return<void> respondToDataPathIndicationRequest( 81 uint16_t cmd_id, const V1_0::NanRespondToDataPathIndicationRequest& msg, 82 respondToDataPathIndicationRequest_cb hidl_status_cb) override; 83 Return<void> terminateDataPathRequest(uint16_t cmd_id, uint32_t ndpInstanceId, 84 terminateDataPathRequest_cb hidl_status_cb) override; 85 86 Return<void> registerEventCallback_1_2(const sp<V1_2::IWifiNanIfaceEventCallback>& callback, 87 registerEventCallback_1_2_cb hidl_status_cb) override; 88 Return<void> enableRequest_1_2(uint16_t cmd_id, const V1_0::NanEnableRequest& msg1, 89 const V1_2::NanConfigRequestSupplemental& msg2, 90 enableRequest_1_2_cb hidl_status_cb) override; 91 Return<void> configRequest_1_2(uint16_t cmd_id, const V1_0::NanConfigRequest& msg1, 92 const V1_2::NanConfigRequestSupplemental& msg2, 93 configRequest_1_2_cb hidl_status_cb) override; 94 Return<void> enableRequest_1_4(uint16_t cmd_id, const V1_4::NanEnableRequest& msg1, 95 const V1_2::NanConfigRequestSupplemental& msg2, 96 enableRequest_1_4_cb hidl_status_cb) override; 97 Return<void> configRequest_1_4(uint16_t cmd_id, const V1_4::NanConfigRequest& msg1, 98 const V1_2::NanConfigRequestSupplemental& msg2, 99 configRequest_1_4_cb hidl_status_cb) override; 100 Return<void> registerEventCallback_1_5(const sp<V1_5::IWifiNanIfaceEventCallback>& callback, 101 registerEventCallback_1_5_cb hidl_status_cb) override; 102 Return<void> enableRequest_1_5(uint16_t cmd_id, const V1_4::NanEnableRequest& msg1, 103 const V1_5::NanConfigRequestSupplemental& msg2, 104 enableRequest_1_5_cb hidl_status_cb) override; 105 Return<void> configRequest_1_5(uint16_t cmd_id, const V1_4::NanConfigRequest& msg1, 106 const V1_5::NanConfigRequestSupplemental& msg2, 107 configRequest_1_5_cb hidl_status_cb) override; 108 Return<void> getCapabilitiesRequest_1_5(uint16_t cmd_id, 109 getCapabilitiesRequest_cb hidl_status_cb) override; 110 Return<void> registerEventCallback_1_6(const sp<V1_6::IWifiNanIfaceEventCallback>& callback, 111 registerEventCallback_1_6_cb hidl_status_cb) override; 112 Return<void> initiateDataPathRequest_1_6( 113 uint16_t cmd_id, const V1_6::NanInitiateDataPathRequest& msg, 114 initiateDataPathRequest_1_6_cb hidl_status_cb) override; 115 Return<void> respondToDataPathIndicationRequest_1_6( 116 uint16_t cmd_id, const V1_6::NanRespondToDataPathIndicationRequest& msg, 117 respondToDataPathIndicationRequest_1_6_cb hidl_status_cb) override; 118 Return<void> enableRequest_1_6(uint16_t cmd_id, const V1_4::NanEnableRequest& msg1, 119 const V1_6::NanConfigRequestSupplemental& msg2, 120 enableRequest_1_6_cb hidl_status_cb) override; 121 Return<void> configRequest_1_6(uint16_t cmd_id, const V1_4::NanConfigRequest& msg1, 122 const V1_6::NanConfigRequestSupplemental& msg2, 123 configRequest_1_6_cb hidl_status_cb) override; 124 Return<void> startPublishRequest_1_6(uint16_t cmd_id, const V1_6::NanPublishRequest& msg, 125 startPublishRequest_cb hidl_status_cb) override; 126 127 private: 128 // Corresponding worker functions for the HIDL methods. 129 std::pair<WifiStatus, std::string> getNameInternal(); 130 std::pair<WifiStatus, IfaceType> getTypeInternal(); 131 WifiStatus registerEventCallbackInternal(const sp<V1_0::IWifiNanIfaceEventCallback>& callback); 132 WifiStatus getCapabilitiesRequestInternal(uint16_t cmd_id); 133 WifiStatus enableRequestInternal(uint16_t cmd_id, const V1_0::NanEnableRequest& msg); 134 WifiStatus configRequestInternal(uint16_t cmd_id, const V1_0::NanConfigRequest& msg); 135 WifiStatus disableRequestInternal(uint16_t cmd_id); 136 WifiStatus startPublishRequestInternal(uint16_t cmd_id, const V1_0::NanPublishRequest& msg); 137 WifiStatus stopPublishRequestInternal(uint16_t cmd_id, uint8_t sessionId); 138 WifiStatus startSubscribeRequestInternal(uint16_t cmd_id, const V1_0::NanSubscribeRequest& msg); 139 WifiStatus stopSubscribeRequestInternal(uint16_t cmd_id, uint8_t sessionId); 140 WifiStatus transmitFollowupRequestInternal(uint16_t cmd_id, 141 const NanTransmitFollowupRequest& msg); 142 WifiStatus createDataInterfaceRequestInternal(uint16_t cmd_id, const std::string& iface_name); 143 WifiStatus deleteDataInterfaceRequestInternal(uint16_t cmd_id, const std::string& iface_name); 144 WifiStatus initiateDataPathRequestInternal(uint16_t cmd_id, 145 const V1_0::NanInitiateDataPathRequest& msg); 146 WifiStatus respondToDataPathIndicationRequestInternal( 147 uint16_t cmd_id, const V1_0::NanRespondToDataPathIndicationRequest& msg); 148 WifiStatus terminateDataPathRequestInternal(uint16_t cmd_id, uint32_t ndpInstanceId); 149 150 WifiStatus registerEventCallback_1_2Internal( 151 const sp<V1_2::IWifiNanIfaceEventCallback>& callback); 152 WifiStatus enableRequest_1_2Internal(uint16_t cmd_id, const V1_0::NanEnableRequest& msg1, 153 const V1_2::NanConfigRequestSupplemental& msg2); 154 WifiStatus configRequest_1_2Internal(uint16_t cmd_id, const V1_0::NanConfigRequest& msg, 155 const V1_2::NanConfigRequestSupplemental& msg2); 156 WifiStatus enableRequest_1_4Internal(uint16_t cmd_id, const V1_4::NanEnableRequest& msg1, 157 const V1_2::NanConfigRequestSupplemental& msg2); 158 WifiStatus configRequest_1_4Internal(uint16_t cmd_id, const V1_4::NanConfigRequest& msg, 159 const V1_2::NanConfigRequestSupplemental& msg2); 160 WifiStatus registerEventCallback_1_5Internal( 161 const sp<V1_5::IWifiNanIfaceEventCallback>& callback); 162 WifiStatus enableRequest_1_5Internal(uint16_t cmd_id, const V1_4::NanEnableRequest& msg1, 163 const V1_5::NanConfigRequestSupplemental& msg2); 164 WifiStatus configRequest_1_5Internal(uint16_t cmd_id, const V1_4::NanConfigRequest& msg, 165 const V1_5::NanConfigRequestSupplemental& msg2); 166 WifiStatus getCapabilitiesRequest_1_5Internal(uint16_t cmd_id); 167 WifiStatus registerEventCallback_1_6Internal( 168 const sp<V1_6::IWifiNanIfaceEventCallback>& callback); 169 170 WifiStatus enableRequest_1_6Internal(uint16_t cmd_id, const V1_4::NanEnableRequest& msg1, 171 const V1_6::NanConfigRequestSupplemental& msg2); 172 WifiStatus configRequest_1_6Internal(uint16_t cmd_id, const V1_4::NanConfigRequest& msg, 173 const V1_6::NanConfigRequestSupplemental& msg2); 174 WifiStatus startPublishRequest_1_6Internal(uint16_t cmd_id, const V1_6::NanPublishRequest& msg); 175 WifiStatus initiateDataPathRequest_1_6Internal(uint16_t cmd_id, 176 const V1_6::NanInitiateDataPathRequest& msg); 177 WifiStatus respondToDataPathIndicationRequest_1_6Internal( 178 uint16_t cmd_id, const V1_6::NanRespondToDataPathIndicationRequest& msg); 179 180 // all 1_0 and descendant callbacks 181 std::set<sp<V1_0::IWifiNanIfaceEventCallback>> getEventCallbacks(); 182 // all 1_2 and descendant callbacks 183 std::set<sp<V1_2::IWifiNanIfaceEventCallback>> getEventCallbacks_1_2(); 184 // all 1_5 and descendant callbacks 185 std::set<sp<V1_5::IWifiNanIfaceEventCallback>> getEventCallbacks_1_5(); 186 // all 1_6 and descendant callbacks 187 std::set<sp<V1_6::IWifiNanIfaceEventCallback>> getEventCallbacks_1_6(); 188 189 std::string ifname_; 190 bool is_dedicated_iface_; 191 std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_; 192 std::weak_ptr<iface_util::WifiIfaceUtil> iface_util_; 193 bool is_valid_; 194 hidl_callback_util::HidlCallbackHandler<V1_0::IWifiNanIfaceEventCallback> event_cb_handler_; 195 hidl_callback_util::HidlCallbackHandler<V1_2::IWifiNanIfaceEventCallback> event_cb_handler_1_2_; 196 hidl_callback_util::HidlCallbackHandler<V1_5::IWifiNanIfaceEventCallback> event_cb_handler_1_5_; 197 hidl_callback_util::HidlCallbackHandler<V1_6::IWifiNanIfaceEventCallback> event_cb_handler_1_6_; 198 199 DISALLOW_COPY_AND_ASSIGN(WifiNanIface); 200 }; 201 202 } // namespace implementation 203 } // namespace V1_6 204 } // namespace wifi 205 } // namespace hardware 206 } // namespace android 207 208 #endif // WIFI_NAN_IFACE_H_ 209