1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef WIFI_LEGACY_HAL_H
17 #define WIFI_LEGACY_HAL_H
18 
19 #include <condition_variable>
20 #include <functional>
21 #include <map>
22 #include <thread>
23 #include <vector>
24 
25 #include "wifi_hal.h"
26 #include "iface_tool.h"
27 #include "hdi_sync_util.h"
28 #include "v1_0/chip_types.h"
29 #include "callback_handler.h"
30 
31 namespace OHOS {
32 namespace HDI {
33 namespace Wlan {
34 namespace Chip {
35 namespace V1_0 {
36 
37 using OnVendorHalRestartCallback = std::function<void(const std::string&)>;
38 class WifiVendorHal {
39 public:
40     WifiVendorHal(const std::weak_ptr<IfaceTool> ifaceTool,
41         const WifiHalFn& fn, bool isPrimary);
42     virtual ~WifiVendorHal() = default;
43     virtual WifiError Initialize();
44     WifiError Start();
45     virtual WifiError Stop(std::unique_lock<std::recursive_mutex>* lock,
46         const std::function<void()>& onCompleteCallback);
47     WifiError GetSupportedFeatureSet(const std::string& ifaceName, uint32_t& capabilities);
48     WifiError CreateVirtualInterface(const std::string& ifname, HalIfaceType iftype);
49     WifiError DeleteVirtualInterface(const std::string& ifname);
50     std::pair<WifiError, std::vector<uint32_t>> GetValidFrequenciesForBand(
51         const std::string& ifaceName, int band);
52     WifiError SetCountryCode(const std::string& ifaceName, const std::string& code);
53     WifiError GetChipCaps(const std::string& ifaceName, uint32_t& capabilities);
54     WifiError RegisterRestartCallback(
55         const OnVendorHalRestartCallback& onRestartCallback);
56     std::pair<WifiError, int> GetPowerMode(const std::string& ifaceName);
57     WifiError SetPowerMode(const std::string& ifaceName, int mode);
58     WifiError StartScan(const std::string& ifaceName, const ScanParams& params);
59     WifiError IsSupportCoex(bool& isCoex);
60     WifiError StartPnoScan(const std::string& ifaceName, const PnoScanParams& pnoParams);
61     WifiError StopPnoScan(const std::string& ifaceName);
62     WifiError GetScanInfos(const std::string& ifaceName,
63         std::vector<ScanResultsInfo>& scanResultsInfo);
64     WifiError EnablePowerMode(const std::string& ifaceName, int mode);
65     WifiError GetSignalPollInfo(const std::string& ifaceName,
66         SignalPollResult& signalPollResult);
67     WifiError SetDpiMarkRule(int32_t uid, int32_t protocol, int32_t enable);
68     WifiError RegisterIfaceCallBack(const std::string& ifaceName, const sptr<IChipIfaceCallback>& chipIfaceCallback);
69     WifiError UnRegisterIfaceCallBack(const std::string& ifaceName, const sptr<IChipIfaceCallback>& chipIfaceCallback);
70     static void OnAsyncGscanFullResult(int event);
71     static void OnAsyncRssiReport(int32_t index, int32_t c0Rssi, int32_t c1Rssi);
72     WifiError SetTxPower(const std::string& ifaceName, int mode);
73 
74 private:
75     WifiError RetrieveIfaceHandles();
76     wifiInterfaceHandle GetIfaceHandle(const std::string& ifaceName);
77     void RunEventLoop();
78     void Invalidate();
79     WifiError HandleIfaceChangeStatus(const std::string& ifname, WifiError status);
80     WifiHalFn globalFuncTable_;
81     wifiHandle globalHandle_;
82     std::map<std::string, wifiInterfaceHandle> ifaceNameHandle_;
83     std::atomic<bool> awaitingEventLoopTermination_;
84     std::condition_variable_any stopWaitCv_;
85     bool isInited_;
86     std::weak_ptr<IfaceTool> ifaceTool_;
87     bool isPrimary_;
88     static CallbackHandler<IChipIfaceCallback> vendorHalCbHandler_;
89 };
90 
91 } // namespace v1_0
92 } // namespace Chip
93 } // namespace Wlan
94 } // namespace HDI
95 } // namespace OHOS
96 
97 #endif
98