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#ifndef WIFI_LEGACY_HAL_H 17094332d3Sopenharmony_ci#define WIFI_LEGACY_HAL_H 18094332d3Sopenharmony_ci 19094332d3Sopenharmony_ci#include <condition_variable> 20094332d3Sopenharmony_ci#include <functional> 21094332d3Sopenharmony_ci#include <map> 22094332d3Sopenharmony_ci#include <thread> 23094332d3Sopenharmony_ci#include <vector> 24094332d3Sopenharmony_ci 25094332d3Sopenharmony_ci#include "wifi_hal.h" 26094332d3Sopenharmony_ci#include "iface_tool.h" 27094332d3Sopenharmony_ci#include "hdi_sync_util.h" 28094332d3Sopenharmony_ci#include "v1_0/chip_types.h" 29094332d3Sopenharmony_ci#include "callback_handler.h" 30094332d3Sopenharmony_ci 31094332d3Sopenharmony_cinamespace OHOS { 32094332d3Sopenharmony_cinamespace HDI { 33094332d3Sopenharmony_cinamespace Wlan { 34094332d3Sopenharmony_cinamespace Chip { 35094332d3Sopenharmony_cinamespace V1_0 { 36094332d3Sopenharmony_ci 37094332d3Sopenharmony_ciusing OnVendorHalRestartCallback = std::function<void(const std::string&)>; 38094332d3Sopenharmony_ciclass WifiVendorHal { 39094332d3Sopenharmony_cipublic: 40094332d3Sopenharmony_ci WifiVendorHal(const std::weak_ptr<IfaceTool> ifaceTool, 41094332d3Sopenharmony_ci const WifiHalFn& fn, bool isPrimary); 42094332d3Sopenharmony_ci virtual ~WifiVendorHal() = default; 43094332d3Sopenharmony_ci virtual WifiError Initialize(); 44094332d3Sopenharmony_ci WifiError Start(); 45094332d3Sopenharmony_ci virtual WifiError Stop(std::unique_lock<std::recursive_mutex>* lock, 46094332d3Sopenharmony_ci const std::function<void()>& onCompleteCallback); 47094332d3Sopenharmony_ci WifiError GetSupportedFeatureSet(const std::string& ifaceName, uint32_t& capabilities); 48094332d3Sopenharmony_ci WifiError CreateVirtualInterface(const std::string& ifname, HalIfaceType iftype); 49094332d3Sopenharmony_ci WifiError DeleteVirtualInterface(const std::string& ifname); 50094332d3Sopenharmony_ci std::pair<WifiError, std::vector<uint32_t>> GetValidFrequenciesForBand( 51094332d3Sopenharmony_ci const std::string& ifaceName, int band); 52094332d3Sopenharmony_ci WifiError SetCountryCode(const std::string& ifaceName, const std::string& code); 53094332d3Sopenharmony_ci WifiError GetChipCaps(const std::string& ifaceName, uint32_t& capabilities); 54094332d3Sopenharmony_ci WifiError RegisterRestartCallback( 55094332d3Sopenharmony_ci const OnVendorHalRestartCallback& onRestartCallback); 56094332d3Sopenharmony_ci std::pair<WifiError, int> GetPowerMode(const std::string& ifaceName); 57094332d3Sopenharmony_ci WifiError SetPowerMode(const std::string& ifaceName, int mode); 58094332d3Sopenharmony_ci WifiError StartScan(const std::string& ifaceName, const ScanParams& params); 59094332d3Sopenharmony_ci WifiError IsSupportCoex(bool& isCoex); 60094332d3Sopenharmony_ci WifiError StartPnoScan(const std::string& ifaceName, const PnoScanParams& pnoParams); 61094332d3Sopenharmony_ci WifiError StopPnoScan(const std::string& ifaceName); 62094332d3Sopenharmony_ci WifiError GetScanInfos(const std::string& ifaceName, 63094332d3Sopenharmony_ci std::vector<ScanResultsInfo>& scanResultsInfo); 64094332d3Sopenharmony_ci WifiError EnablePowerMode(const std::string& ifaceName, int mode); 65094332d3Sopenharmony_ci WifiError GetSignalPollInfo(const std::string& ifaceName, 66094332d3Sopenharmony_ci SignalPollResult& signalPollResult); 67094332d3Sopenharmony_ci WifiError SetDpiMarkRule(int32_t uid, int32_t protocol, int32_t enable); 68094332d3Sopenharmony_ci WifiError RegisterIfaceCallBack(const std::string& ifaceName, const sptr<IChipIfaceCallback>& chipIfaceCallback); 69094332d3Sopenharmony_ci WifiError UnRegisterIfaceCallBack(const std::string& ifaceName, const sptr<IChipIfaceCallback>& chipIfaceCallback); 70094332d3Sopenharmony_ci WifiError RegisterExtIfaceCallBack(const std::string& ifaceName, const sptr<IChipIfaceCallback>& chipIfaceCallback); 71094332d3Sopenharmony_ci WifiError UnRegisterExtIfaceCallBack(const std::string& ifaceName, 72094332d3Sopenharmony_ci const sptr<IChipIfaceCallback>& chipIfaceCallback); 73094332d3Sopenharmony_ci static void OnAsyncGscanFullResult(int event); 74094332d3Sopenharmony_ci static void OnAsyncRssiReport(int32_t index, int32_t c0Rssi, int32_t c1Rssi); 75094332d3Sopenharmony_ci static void OnAsyncWifiNetlinkMsgReport(uint32_t type, const std::vector<uint8_t>& recvMsg); 76094332d3Sopenharmony_ci WifiError SetTxPower(const std::string& ifaceName, int mode); 77094332d3Sopenharmony_ci WifiError SendCmdToDriver(const std::string& ifName, int32_t cmdId, const std::vector<int8_t>& paramBuf); 78094332d3Sopenharmony_ci WifiError SendActionFrame(const std::string& ifName, uint32_t freq, const std::vector<uint8_t>& frameData); 79094332d3Sopenharmony_ci WifiError RegisterActionFrameReceiver(const std::string& ifName, const std::vector<uint8_t>& match); 80094332d3Sopenharmony_ci WifiError GetCoexictenceChannelList(const std::string& ifName, std::vector<uint8_t>& paramBuf); 81094332d3Sopenharmony_ci 82094332d3Sopenharmony_ciprivate: 83094332d3Sopenharmony_ci WifiError RetrieveIfaceHandles(); 84094332d3Sopenharmony_ci wifiInterfaceHandle GetIfaceHandle(const std::string& ifaceName); 85094332d3Sopenharmony_ci void RunEventLoop(); 86094332d3Sopenharmony_ci void Invalidate(); 87094332d3Sopenharmony_ci WifiError HandleIfaceChangeStatus(const std::string& ifname, WifiError status); 88094332d3Sopenharmony_ci WifiHalFn globalFuncTable_; 89094332d3Sopenharmony_ci wifiHandle globalHandle_; 90094332d3Sopenharmony_ci std::map<std::string, wifiInterfaceHandle> ifaceNameHandle_; 91094332d3Sopenharmony_ci std::atomic<bool> awaitingEventLoopTermination_; 92094332d3Sopenharmony_ci std::condition_variable_any stopWaitCv_; 93094332d3Sopenharmony_ci bool isInited_; 94094332d3Sopenharmony_ci std::weak_ptr<IfaceTool> ifaceTool_; 95094332d3Sopenharmony_ci bool isPrimary_; 96094332d3Sopenharmony_ci static CallbackHandler<IChipIfaceCallback> vendorHalCbHandler_; 97094332d3Sopenharmony_ci static CallbackHandler<IChipIfaceCallback> vendorHalExtCbHandler_; 98094332d3Sopenharmony_ci}; 99094332d3Sopenharmony_ci 100094332d3Sopenharmony_ci} // namespace v1_0 101094332d3Sopenharmony_ci} // namespace Chip 102094332d3Sopenharmony_ci} // namespace Wlan 103094332d3Sopenharmony_ci} // namespace HDI 104094332d3Sopenharmony_ci} // namespace OHOS 105094332d3Sopenharmony_ci 106094332d3Sopenharmony_ci#endif 107