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 94 private: 95 // Corresponding worker functions for the AIDL methods. 96 std::pair<std::string, ndk::ScopedAStatus> getNameInternal(); 97 ndk::ScopedAStatus registerEventCallbackInternal( 98 const std::shared_ptr<IWifiStaIfaceEventCallback>& callback); 99 std::pair<int32_t, ndk::ScopedAStatus> getFeatureSetInternal(); 100 std::pair<StaApfPacketFilterCapabilities, ndk::ScopedAStatus> 101 getApfPacketFilterCapabilitiesInternal(); 102 ndk::ScopedAStatus installApfPacketFilterInternal(const std::vector<uint8_t>& program); 103 std::pair<std::vector<uint8_t>, ndk::ScopedAStatus> readApfPacketFilterDataInternal(); 104 std::pair<StaBackgroundScanCapabilities, ndk::ScopedAStatus> 105 getBackgroundScanCapabilitiesInternal(); 106 ndk::ScopedAStatus startBackgroundScanInternal(int32_t cmd_id, 107 const StaBackgroundScanParameters& params); 108 ndk::ScopedAStatus stopBackgroundScanInternal(int32_t cmd_id); 109 ndk::ScopedAStatus enableLinkLayerStatsCollectionInternal(bool debug); 110 ndk::ScopedAStatus disableLinkLayerStatsCollectionInternal(); 111 std::pair<StaLinkLayerStats, ndk::ScopedAStatus> getLinkLayerStatsInternal(); 112 ndk::ScopedAStatus startRssiMonitoringInternal(int32_t cmd_id, int32_t max_rssi, 113 int32_t min_rssi); 114 ndk::ScopedAStatus stopRssiMonitoringInternal(int32_t cmd_id); 115 std::pair<StaRoamingCapabilities, ndk::ScopedAStatus> getRoamingCapabilitiesInternal(); 116 ndk::ScopedAStatus configureRoamingInternal(const StaRoamingConfig& config); 117 ndk::ScopedAStatus setRoamingStateInternal(StaRoamingState state); 118 ndk::ScopedAStatus enableNdOffloadInternal(bool enable); 119 ndk::ScopedAStatus startSendingKeepAlivePacketsInternal( 120 int32_t cmd_id, const std::vector<uint8_t>& ip_packet_data, char16_t ether_type, 121 const std::array<uint8_t, 6>& src_address, const std::array<uint8_t, 6>& dst_address, 122 int32_t period_in_ms); 123 ndk::ScopedAStatus stopSendingKeepAlivePacketsInternal(int32_t cmd_id); 124 ndk::ScopedAStatus startDebugPacketFateMonitoringInternal(); 125 std::pair<std::vector<WifiDebugTxPacketFateReport>, ndk::ScopedAStatus> 126 getDebugTxPacketFatesInternal(); 127 std::pair<std::vector<WifiDebugRxPacketFateReport>, ndk::ScopedAStatus> 128 getDebugRxPacketFatesInternal(); 129 ndk::ScopedAStatus setMacAddressInternal(const std::array<uint8_t, 6>& mac); 130 std::pair<std::array<uint8_t, 6>, ndk::ScopedAStatus> getFactoryMacAddressInternal(); 131 ndk::ScopedAStatus setScanModeInternal(bool enable); 132 ndk::ScopedAStatus setDtimMultiplierInternal(const int multiplier); 133 134 void setWeakPtr(std::weak_ptr<WifiStaIface> ptr); 135 136 std::string ifname_; 137 std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_; 138 std::weak_ptr<iface_util::WifiIfaceUtil> iface_util_; 139 std::weak_ptr<WifiStaIface> weak_ptr_this_; 140 bool is_valid_; 141 aidl_callback_util::AidlCallbackHandler<IWifiStaIfaceEventCallback> event_cb_handler_; 142 143 DISALLOW_COPY_AND_ASSIGN(WifiStaIface); 144 }; 145 146 } // namespace wifi 147 } // namespace hardware 148 } // namespace android 149 } // namespace aidl 150 151 #endif // WIFI_STA_IFACE_H_ 152