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