1 /* 2 * Copyright (C) 2022 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_STA_IFACE_H_ 18 #define WIFI_STA_IFACE_H_ 19 20 #include <aidl/android/hardware/wifi/BnWifiStaIface.h> 21 #include <aidl/android/hardware/wifi/IWifiStaIfaceEventCallback.h> 22 #include <android-base/macros.h> 23 24 #include "aidl_callback_util.h" 25 #include "wifi_iface_util.h" 26 #include "wifi_legacy_hal.h" 27 28 namespace aidl { 29 namespace android { 30 namespace hardware { 31 namespace wifi { 32 33 /** 34 * AIDL interface object used to control a STA Iface instance. 35 */ 36 class WifiStaIface : public BnWifiStaIface { 37 public: 38 WifiStaIface(const std::string& ifname, 39 const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal, 40 const std::weak_ptr<iface_util::WifiIfaceUtil> iface_util); 41 42 // Factory method - use instead of default constructor. 43 static std::shared_ptr<WifiStaIface> create( 44 const std::string& ifname, const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal, 45 const std::weak_ptr<iface_util::WifiIfaceUtil> iface_util); 46 47 // Refer to |WifiChip::invalidate()|. 48 void invalidate(); 49 bool isValid(); 50 std::set<std::shared_ptr<IWifiStaIfaceEventCallback>> getEventCallbacks(); 51 std::string getName(); 52 53 // AIDL methods exposed. 54 ndk::ScopedAStatus getName(std::string* _aidl_return) override; 55 ndk::ScopedAStatus registerEventCallback( 56 const std::shared_ptr<IWifiStaIfaceEventCallback>& in_callback) override; 57 ndk::ScopedAStatus getFeatureSet(int32_t* _aidl_return) override; 58 ndk::ScopedAStatus getApfPacketFilterCapabilities( 59 StaApfPacketFilterCapabilities* _aidl_return) override; 60 ndk::ScopedAStatus installApfPacketFilter(const std::vector<uint8_t>& in_program) override; 61 ndk::ScopedAStatus readApfPacketFilterData(std::vector<uint8_t>* _aidl_return) override; 62 ndk::ScopedAStatus getBackgroundScanCapabilities( 63 StaBackgroundScanCapabilities* _aidl_return) override; 64 ndk::ScopedAStatus startBackgroundScan(int32_t in_cmdId, 65 const StaBackgroundScanParameters& in_params) override; 66 ndk::ScopedAStatus stopBackgroundScan(int32_t in_cmdId) override; 67 ndk::ScopedAStatus enableLinkLayerStatsCollection(bool in_debug) override; 68 ndk::ScopedAStatus disableLinkLayerStatsCollection() override; 69 ndk::ScopedAStatus getLinkLayerStats(StaLinkLayerStats* _aidl_return) override; 70 ndk::ScopedAStatus startRssiMonitoring(int32_t in_cmdId, int32_t in_maxRssi, 71 int32_t in_minRssi) override; 72 ndk::ScopedAStatus stopRssiMonitoring(int32_t in_cmdId) override; 73 ndk::ScopedAStatus getRoamingCapabilities(StaRoamingCapabilities* _aidl_return) override; 74 ndk::ScopedAStatus configureRoaming(const StaRoamingConfig& in_config) override; 75 ndk::ScopedAStatus setRoamingState(StaRoamingState in_state) override; 76 ndk::ScopedAStatus enableNdOffload(bool in_enable) override; 77 ndk::ScopedAStatus startSendingKeepAlivePackets(int32_t in_cmdId, 78 const std::vector<uint8_t>& in_ipPacketData, 79 char16_t in_etherType, 80 const std::array<uint8_t, 6>& in_srcAddress, 81 const std::array<uint8_t, 6>& in_dstAddress, 82 int32_t in_periodInMs) override; 83 ndk::ScopedAStatus stopSendingKeepAlivePackets(int32_t in_cmdId) override; 84 ndk::ScopedAStatus startDebugPacketFateMonitoring() override; 85 ndk::ScopedAStatus getDebugTxPacketFates( 86 std::vector<WifiDebugTxPacketFateReport>* _aidl_return) override; 87 ndk::ScopedAStatus getDebugRxPacketFates( 88 std::vector<WifiDebugRxPacketFateReport>* _aidl_return) override; 89 ndk::ScopedAStatus setMacAddress(const std::array<uint8_t, 6>& in_mac) override; 90 ndk::ScopedAStatus getFactoryMacAddress(std::array<uint8_t, 6>* _aidl_return) override; 91 ndk::ScopedAStatus setScanMode(bool in_enable) override; 92 ndk::ScopedAStatus setDtimMultiplier(int32_t in_multiplier) override; 93 ndk::ScopedAStatus getCachedScanData(CachedScanData* _aidl_return) override; 94 ndk::ScopedAStatus twtGetCapabilities(TwtCapabilities* _aidl_return) override; 95 ndk::ScopedAStatus twtSessionSetup(int in_cmdId, const TwtRequest& in_twtRequest) override; 96 ndk::ScopedAStatus twtSessionUpdate(int in_cmdId, int32_t in_sessionId, 97 const TwtRequest& in_twtRequest) override; 98 ndk::ScopedAStatus twtSessionSuspend(int in_cmdId, int32_t in_sessionId) override; 99 ndk::ScopedAStatus twtSessionResume(int in_cmdId, int32_t in_sessionId) override; 100 ndk::ScopedAStatus twtSessionTeardown(int in_cmdId, int32_t in_sessionId) override; 101 ndk::ScopedAStatus twtSessionGetStats(int in_cmdId, int32_t in_sessionId) override; 102 103 private: 104 // Corresponding worker functions for the AIDL methods. 105 std::pair<std::string, ndk::ScopedAStatus> getNameInternal(); 106 ndk::ScopedAStatus registerTwtEventCallbackInternal(); 107 ndk::ScopedAStatus registerEventCallbackInternal( 108 const std::shared_ptr<IWifiStaIfaceEventCallback>& callback); 109 std::pair<int32_t, ndk::ScopedAStatus> getFeatureSetInternal(); 110 std::pair<StaApfPacketFilterCapabilities, ndk::ScopedAStatus> 111 getApfPacketFilterCapabilitiesInternal(); 112 ndk::ScopedAStatus installApfPacketFilterInternal(const std::vector<uint8_t>& program); 113 std::pair<std::vector<uint8_t>, ndk::ScopedAStatus> readApfPacketFilterDataInternal(); 114 std::pair<StaBackgroundScanCapabilities, ndk::ScopedAStatus> 115 getBackgroundScanCapabilitiesInternal(); 116 ndk::ScopedAStatus startBackgroundScanInternal(int32_t cmd_id, 117 const StaBackgroundScanParameters& params); 118 ndk::ScopedAStatus stopBackgroundScanInternal(int32_t cmd_id); 119 ndk::ScopedAStatus enableLinkLayerStatsCollectionInternal(bool debug); 120 ndk::ScopedAStatus disableLinkLayerStatsCollectionInternal(); 121 std::pair<StaLinkLayerStats, ndk::ScopedAStatus> getLinkLayerStatsInternal(); 122 ndk::ScopedAStatus startRssiMonitoringInternal(int32_t cmd_id, int32_t max_rssi, 123 int32_t min_rssi); 124 ndk::ScopedAStatus stopRssiMonitoringInternal(int32_t cmd_id); 125 std::pair<StaRoamingCapabilities, ndk::ScopedAStatus> getRoamingCapabilitiesInternal(); 126 ndk::ScopedAStatus configureRoamingInternal(const StaRoamingConfig& config); 127 ndk::ScopedAStatus setRoamingStateInternal(StaRoamingState state); 128 ndk::ScopedAStatus enableNdOffloadInternal(bool enable); 129 ndk::ScopedAStatus startSendingKeepAlivePacketsInternal( 130 int32_t cmd_id, const std::vector<uint8_t>& ip_packet_data, char16_t ether_type, 131 const std::array<uint8_t, 6>& src_address, const std::array<uint8_t, 6>& dst_address, 132 int32_t period_in_ms); 133 ndk::ScopedAStatus stopSendingKeepAlivePacketsInternal(int32_t cmd_id); 134 ndk::ScopedAStatus startDebugPacketFateMonitoringInternal(); 135 std::pair<std::vector<WifiDebugTxPacketFateReport>, ndk::ScopedAStatus> 136 getDebugTxPacketFatesInternal(); 137 std::pair<std::vector<WifiDebugRxPacketFateReport>, ndk::ScopedAStatus> 138 getDebugRxPacketFatesInternal(); 139 ndk::ScopedAStatus setMacAddressInternal(const std::array<uint8_t, 6>& mac); 140 std::pair<std::array<uint8_t, 6>, ndk::ScopedAStatus> getFactoryMacAddressInternal(); 141 ndk::ScopedAStatus setScanModeInternal(bool enable); 142 ndk::ScopedAStatus setDtimMultiplierInternal(const int multiplier); 143 std::pair<CachedScanData, ndk::ScopedAStatus> getCachedScanDataInternal(); 144 std::pair<TwtCapabilities, ndk::ScopedAStatus> twtGetCapabilitiesInternal(); 145 ndk::ScopedAStatus twtSessionSetupInternal(int cmdId, const TwtRequest& twtRequest); 146 ndk::ScopedAStatus twtSessionUpdateInternal(int cmdId, int32_t sessionId, 147 const TwtRequest& twtRequest); 148 ndk::ScopedAStatus twtSessionSuspendInternal(int cmdId, int32_t sessionId); 149 ndk::ScopedAStatus twtSessionResumeInternal(int cmdId, int32_t sessionId); 150 ndk::ScopedAStatus twtSessionTeardownInternal(int cmdId, int32_t sessionId); 151 ndk::ScopedAStatus twtSessionGetStatsInternal(int cmdId, int32_t sessionId); 152 153 void setWeakPtr(std::weak_ptr<WifiStaIface> ptr); 154 155 std::string ifname_; 156 std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_; 157 std::weak_ptr<iface_util::WifiIfaceUtil> iface_util_; 158 std::weak_ptr<WifiStaIface> weak_ptr_this_; 159 bool is_valid_; 160 aidl_callback_util::AidlCallbackHandler<IWifiStaIfaceEventCallback> event_cb_handler_; 161 bool is_twt_registered_; 162 163 DISALLOW_COPY_AND_ASSIGN(WifiStaIface); 164 }; 165 166 } // namespace wifi 167 } // namespace hardware 168 } // namespace android 169 } // namespace aidl 170 171 #endif // WIFI_STA_IFACE_H_ 172