1094332d3Sopenharmony_ci/* 2094332d3Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License. 5094332d3Sopenharmony_ci * You may obtain a copy of the License at 6094332d3Sopenharmony_ci * 7094332d3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8094332d3Sopenharmony_ci * 9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and 13094332d3Sopenharmony_ci * limitations under the License. 14094332d3Sopenharmony_ci */ 15094332d3Sopenharmony_ci 16094332d3Sopenharmony_ci#include "wifi_sta_iface.h" 17094332d3Sopenharmony_ci#include <hdf_log.h> 18094332d3Sopenharmony_ci 19094332d3Sopenharmony_cinamespace OHOS { 20094332d3Sopenharmony_cinamespace HDI { 21094332d3Sopenharmony_cinamespace Wlan { 22094332d3Sopenharmony_cinamespace Chip { 23094332d3Sopenharmony_cinamespace V1_0 { 24094332d3Sopenharmony_ci 25094332d3Sopenharmony_ciWifiStaIface::WifiStaIface( 26094332d3Sopenharmony_ci const std::string& ifname, 27094332d3Sopenharmony_ci const std::weak_ptr<WifiVendorHal> vendorHal, 28094332d3Sopenharmony_ci const std::weak_ptr<IfaceUtil> ifaceUtil) 29094332d3Sopenharmony_ci : ifname_(ifname), 30094332d3Sopenharmony_ci vendorHal_(vendorHal), 31094332d3Sopenharmony_ci ifaceUtil_(ifaceUtil), 32094332d3Sopenharmony_ci isValid_(true) 33094332d3Sopenharmony_ci{} 34094332d3Sopenharmony_ci 35094332d3Sopenharmony_civoid WifiStaIface::Invalidate() 36094332d3Sopenharmony_ci{ 37094332d3Sopenharmony_ci vendorHal_.reset(); 38094332d3Sopenharmony_ci isValid_ = false; 39094332d3Sopenharmony_ci} 40094332d3Sopenharmony_ci 41094332d3Sopenharmony_cibool WifiStaIface::IsValid() 42094332d3Sopenharmony_ci{ 43094332d3Sopenharmony_ci return isValid_; 44094332d3Sopenharmony_ci} 45094332d3Sopenharmony_ci 46094332d3Sopenharmony_cistd::string WifiStaIface::GetName() 47094332d3Sopenharmony_ci{ 48094332d3Sopenharmony_ci return ifname_; 49094332d3Sopenharmony_ci} 50094332d3Sopenharmony_ci 51094332d3Sopenharmony_ciint32_t WifiStaIface::GetIfaceType(IfaceType& type) 52094332d3Sopenharmony_ci{ 53094332d3Sopenharmony_ci type = IfaceType::STA; 54094332d3Sopenharmony_ci return HDF_SUCCESS; 55094332d3Sopenharmony_ci} 56094332d3Sopenharmony_ci 57094332d3Sopenharmony_ciint32_t WifiStaIface::GetIfaceName(std::string& name) 58094332d3Sopenharmony_ci{ 59094332d3Sopenharmony_ci name = ifname_; 60094332d3Sopenharmony_ci return HDF_SUCCESS; 61094332d3Sopenharmony_ci} 62094332d3Sopenharmony_ci 63094332d3Sopenharmony_ciint32_t WifiStaIface::GetSupportFreqs(int band, std::vector<uint32_t>& frequencies) 64094332d3Sopenharmony_ci{ 65094332d3Sopenharmony_ci WifiError status; 66094332d3Sopenharmony_ci std::vector<uint32_t> validFrequencies; 67094332d3Sopenharmony_ci std::tie(status, validFrequencies) = vendorHal_.lock()->GetValidFrequenciesForBand( 68094332d3Sopenharmony_ci ifname_, band); 69094332d3Sopenharmony_ci frequencies = validFrequencies; 70094332d3Sopenharmony_ci if (status == HAL_SUCCESS) { 71094332d3Sopenharmony_ci return HDF_SUCCESS; 72094332d3Sopenharmony_ci } 73094332d3Sopenharmony_ci return HDF_FAILURE; 74094332d3Sopenharmony_ci} 75094332d3Sopenharmony_ci 76094332d3Sopenharmony_ciint32_t WifiStaIface::GetIfaceCap(uint32_t& capabilities) 77094332d3Sopenharmony_ci{ 78094332d3Sopenharmony_ci WifiError status = vendorHal_.lock()->GetSupportedFeatureSet(ifname_, capabilities); 79094332d3Sopenharmony_ci if (status != HAL_SUCCESS) { 80094332d3Sopenharmony_ci return HDF_FAILURE; 81094332d3Sopenharmony_ci } 82094332d3Sopenharmony_ci return HDF_SUCCESS; 83094332d3Sopenharmony_ci} 84094332d3Sopenharmony_ci 85094332d3Sopenharmony_ciint32_t WifiStaIface::SetMacAddress(const std::string& mac) 86094332d3Sopenharmony_ci{ 87094332d3Sopenharmony_ci bool status = ifaceUtil_.lock()->SetMacAddress(ifname_, mac); 88094332d3Sopenharmony_ci if (!status) { 89094332d3Sopenharmony_ci return HDF_FAILURE; 90094332d3Sopenharmony_ci } 91094332d3Sopenharmony_ci return HDF_SUCCESS; 92094332d3Sopenharmony_ci} 93094332d3Sopenharmony_ci 94094332d3Sopenharmony_ciint32_t WifiStaIface::SetCountryCode(const std::string& code) 95094332d3Sopenharmony_ci{ 96094332d3Sopenharmony_ci WifiError status = vendorHal_.lock()->SetCountryCode(ifname_, code); 97094332d3Sopenharmony_ci if (status == HAL_SUCCESS) { 98094332d3Sopenharmony_ci return HDF_SUCCESS; 99094332d3Sopenharmony_ci } 100094332d3Sopenharmony_ci return HDF_FAILURE; 101094332d3Sopenharmony_ci} 102094332d3Sopenharmony_ci 103094332d3Sopenharmony_ciint32_t WifiStaIface::GetPowerMode(int32_t& powerMode) 104094332d3Sopenharmony_ci{ 105094332d3Sopenharmony_ci return HDF_ERR_NOT_SUPPORT; 106094332d3Sopenharmony_ci} 107094332d3Sopenharmony_ci 108094332d3Sopenharmony_ciint32_t WifiStaIface::SetPowerMode(int32_t powerMode) 109094332d3Sopenharmony_ci{ 110094332d3Sopenharmony_ci return HDF_ERR_NOT_SUPPORT; 111094332d3Sopenharmony_ci} 112094332d3Sopenharmony_ci 113094332d3Sopenharmony_ciint32_t WifiStaIface::RegisterChipIfaceCallBack(const sptr<IChipIfaceCallback>& chipIfaceCallback) 114094332d3Sopenharmony_ci{ 115094332d3Sopenharmony_ci if (chipIfaceCallback == nullptr) { 116094332d3Sopenharmony_ci HDF_LOGE("chipIfaceCallback is null"); 117094332d3Sopenharmony_ci return HDF_FAILURE; 118094332d3Sopenharmony_ci } 119094332d3Sopenharmony_ci HDF_LOGI("register sta callback"); 120094332d3Sopenharmony_ci vendorHal_.lock()->RegisterIfaceCallBack(ifname_, chipIfaceCallback); 121094332d3Sopenharmony_ci return HDF_SUCCESS; 122094332d3Sopenharmony_ci} 123094332d3Sopenharmony_ci 124094332d3Sopenharmony_ciint32_t WifiStaIface::UnRegisterChipIfaceCallBack(const sptr<IChipIfaceCallback>& chipIfaceCallback) 125094332d3Sopenharmony_ci{ 126094332d3Sopenharmony_ci if (chipIfaceCallback == nullptr) { 127094332d3Sopenharmony_ci HDF_LOGE("chipIfaceCallback is null"); 128094332d3Sopenharmony_ci return HDF_FAILURE; 129094332d3Sopenharmony_ci } 130094332d3Sopenharmony_ci HDF_LOGI("unregister sta callback"); 131094332d3Sopenharmony_ci vendorHal_.lock()->UnRegisterIfaceCallBack(ifname_, chipIfaceCallback); 132094332d3Sopenharmony_ci return HDF_SUCCESS; 133094332d3Sopenharmony_ci} 134094332d3Sopenharmony_ci 135094332d3Sopenharmony_ciint32_t WifiStaIface::StartScan(const ScanParams& scanParam) 136094332d3Sopenharmony_ci{ 137094332d3Sopenharmony_ci HDF_LOGD("StartScan"); 138094332d3Sopenharmony_ci WifiError status = vendorHal_.lock()->StartScan(ifname_, scanParam); 139094332d3Sopenharmony_ci if (status == HAL_SUCCESS) { 140094332d3Sopenharmony_ci return HDF_SUCCESS; 141094332d3Sopenharmony_ci } 142094332d3Sopenharmony_ci return HDF_FAILURE; 143094332d3Sopenharmony_ci} 144094332d3Sopenharmony_ci 145094332d3Sopenharmony_ciint32_t WifiStaIface::GetScanInfos(std::vector<ScanResultsInfo>& scanResultsInfo) 146094332d3Sopenharmony_ci{ 147094332d3Sopenharmony_ci HDF_LOGD("GetScanInfos"); 148094332d3Sopenharmony_ci WifiError status = vendorHal_.lock()->GetScanInfos(ifname_, scanResultsInfo); 149094332d3Sopenharmony_ci if (status == HAL_SUCCESS) { 150094332d3Sopenharmony_ci return HDF_SUCCESS; 151094332d3Sopenharmony_ci } 152094332d3Sopenharmony_ci return HDF_FAILURE; 153094332d3Sopenharmony_ci} 154094332d3Sopenharmony_ci 155094332d3Sopenharmony_ciint32_t WifiStaIface::StartPnoScan(const PnoScanParams& pnoParams) 156094332d3Sopenharmony_ci{ 157094332d3Sopenharmony_ci HDF_LOGD("StartPnoScan"); 158094332d3Sopenharmony_ci WifiError status = vendorHal_.lock()->StartPnoScan(ifname_, pnoParams); 159094332d3Sopenharmony_ci if (status == HAL_SUCCESS) { 160094332d3Sopenharmony_ci return HDF_SUCCESS; 161094332d3Sopenharmony_ci } 162094332d3Sopenharmony_ci return HDF_FAILURE; 163094332d3Sopenharmony_ci} 164094332d3Sopenharmony_ci 165094332d3Sopenharmony_ciint32_t WifiStaIface::StopPnoScan() 166094332d3Sopenharmony_ci{ 167094332d3Sopenharmony_ci HDF_LOGD("StopPnoScan"); 168094332d3Sopenharmony_ci WifiError status = vendorHal_.lock()->StopPnoScan(ifname_); 169094332d3Sopenharmony_ci if (status == HAL_SUCCESS) { 170094332d3Sopenharmony_ci return HDF_SUCCESS; 171094332d3Sopenharmony_ci } 172094332d3Sopenharmony_ci return HDF_FAILURE; 173094332d3Sopenharmony_ci} 174094332d3Sopenharmony_ci 175094332d3Sopenharmony_ciint32_t WifiStaIface::GetSignalPollInfo(SignalPollResult& signalPollResult) 176094332d3Sopenharmony_ci{ 177094332d3Sopenharmony_ci WifiError status = vendorHal_.lock()->GetSignalPollInfo(ifname_, signalPollResult); 178094332d3Sopenharmony_ci if (status == HAL_SUCCESS) { 179094332d3Sopenharmony_ci return HDF_SUCCESS; 180094332d3Sopenharmony_ci } 181094332d3Sopenharmony_ci return HDF_FAILURE; 182094332d3Sopenharmony_ci} 183094332d3Sopenharmony_ci 184094332d3Sopenharmony_ciint32_t WifiStaIface::EnablePowerMode(int32_t mode) 185094332d3Sopenharmony_ci{ 186094332d3Sopenharmony_ci HDF_LOGD("EnablePowerMode"); 187094332d3Sopenharmony_ci if (ifaceUtil_.lock()->GetUpState(ifname_)) { 188094332d3Sopenharmony_ci HDF_LOGE("EnablePowerMode interface state is not OK."); 189094332d3Sopenharmony_ci return HDF_FAILURE; 190094332d3Sopenharmony_ci } 191094332d3Sopenharmony_ci WifiError status = vendorHal_.lock()->EnablePowerMode(ifname_, mode); 192094332d3Sopenharmony_ci if (status == HAL_SUCCESS) { 193094332d3Sopenharmony_ci return HDF_SUCCESS; 194094332d3Sopenharmony_ci } 195094332d3Sopenharmony_ci return HDF_FAILURE; 196094332d3Sopenharmony_ci} 197094332d3Sopenharmony_ci 198094332d3Sopenharmony_ciint32_t WifiStaIface::SetDpiMarkRule(int32_t uid, int32_t protocol, int32_t enable) 199094332d3Sopenharmony_ci{ 200094332d3Sopenharmony_ci WifiError status = vendorHal_.lock()->SetDpiMarkRule(uid, protocol, enable); 201094332d3Sopenharmony_ci if (status == HAL_SUCCESS) { 202094332d3Sopenharmony_ci return HDF_SUCCESS; 203094332d3Sopenharmony_ci } 204094332d3Sopenharmony_ci return HDF_FAILURE; 205094332d3Sopenharmony_ci} 206094332d3Sopenharmony_ci 207094332d3Sopenharmony_ciint32_t WifiStaIface::SetTxPower(int32_t power) 208094332d3Sopenharmony_ci{ 209094332d3Sopenharmony_ci WifiError status = vendorHal_.lock()->SetTxPower(ifname_, power); 210094332d3Sopenharmony_ci if (status == HAL_SUCCESS) { 211094332d3Sopenharmony_ci return HDF_SUCCESS; 212094332d3Sopenharmony_ci } 213094332d3Sopenharmony_ci return HDF_FAILURE; 214094332d3Sopenharmony_ci} 215094332d3Sopenharmony_ci 216094332d3Sopenharmony_ciint32_t WifiStaIface::SetIfaceState(bool state) 217094332d3Sopenharmony_ci{ 218094332d3Sopenharmony_ci if (ifaceUtil_.lock()->SetUpState(ifname_, state)) { 219094332d3Sopenharmony_ci return HDF_SUCCESS; 220094332d3Sopenharmony_ci } 221094332d3Sopenharmony_ci return HDF_FAILURE; 222094332d3Sopenharmony_ci} 223094332d3Sopenharmony_ci 224094332d3Sopenharmony_ciint32_t WifiStaIface::SendCmdToDriver(const std::string& ifName, int32_t cmdId, const std::vector<int8_t>& paramBuf) 225094332d3Sopenharmony_ci{ 226094332d3Sopenharmony_ci WifiError status = vendorHal_.lock()->SendCmdToDriver(ifName, cmdId, paramBuf); 227094332d3Sopenharmony_ci if (status == HAL_SUCCESS) { 228094332d3Sopenharmony_ci return HDF_SUCCESS; 229094332d3Sopenharmony_ci } 230094332d3Sopenharmony_ci return HDF_FAILURE; 231094332d3Sopenharmony_ci} 232094332d3Sopenharmony_ci 233094332d3Sopenharmony_ciint32_t WifiStaIface::SendActionFrame(const std::string& ifName, uint32_t freq, const std::vector<uint8_t>& frameData) 234094332d3Sopenharmony_ci{ 235094332d3Sopenharmony_ci return HDF_ERR_NOT_SUPPORT; 236094332d3Sopenharmony_ci} 237094332d3Sopenharmony_ci 238094332d3Sopenharmony_ciint32_t WifiStaIface::RegisterActionFrameReceiver(const std::string& ifName, const std::vector<uint8_t>& match) 239094332d3Sopenharmony_ci{ 240094332d3Sopenharmony_ci return HDF_ERR_NOT_SUPPORT; 241094332d3Sopenharmony_ci} 242094332d3Sopenharmony_ci 243094332d3Sopenharmony_ciint32_t WifiStaIface::GetCoexictenceChannelList(const std::string& ifName, std::vector<uint8_t>& paramBuf) 244094332d3Sopenharmony_ci{ 245094332d3Sopenharmony_ci return HDF_ERR_NOT_SUPPORT; 246094332d3Sopenharmony_ci} 247094332d3Sopenharmony_ci 248094332d3Sopenharmony_ci} 249094332d3Sopenharmony_ci} 250094332d3Sopenharmony_ci} 251094332d3Sopenharmony_ci} 252094332d3Sopenharmony_ci}