• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include <mutex>
25 
26 #include "wifi_hal.h"
27 #include "iface_tool.h"
28 #include "hdi_sync_util.h"
29 #include "v1_0/chip_types.h"
30 #include "callback_handler.h"
31 
32 namespace OHOS {
33 namespace HDI {
34 namespace Wlan {
35 namespace Chip {
36 namespace V1_0 {
37 
38 using OnVendorHalRestartCallback = std::function<void(const std::string&)>;
39 class WifiVendorHal {
40 public:
41     WifiVendorHal(const std::weak_ptr<IfaceTool> ifaceTool,
42         const WifiHalFn& fn, bool isPrimary);
43     virtual ~WifiVendorHal() = default;
44     virtual WifiError Initialize();
45     WifiError Start();
46     virtual WifiError Stop(std::unique_lock<std::recursive_mutex>* lock,
47         const std::function<void()>& onCompleteCallback);
48     WifiError GetSupportedFeatureSet(const std::string& ifaceName, uint32_t& capabilities);
49     WifiError CreateVirtualInterface(const std::string& ifname, HalIfaceType iftype);
50     WifiError DeleteVirtualInterface(const std::string& ifname);
51     std::pair<WifiError, std::vector<uint32_t>> GetValidFrequenciesForBand(
52         const std::string& ifaceName, int band);
53     WifiError SetCountryCode(const std::string& ifaceName, const std::string& code);
54     WifiError GetChipCaps(const std::string& ifaceName, uint32_t& capabilities);
55     WifiError RegisterRestartCallback(
56         const OnVendorHalRestartCallback& onRestartCallback);
57     std::pair<WifiError, int> GetPowerMode(const std::string& ifaceName);
58     WifiError SetPowerMode(const std::string& ifaceName, int mode);
59     WifiError StartScan(const std::string& ifaceName, const ScanParams& params);
60     WifiError IsSupportCoex(bool& isCoex);
61     WifiError StartPnoScan(const std::string& ifaceName, const PnoScanParams& pnoParams);
62     WifiError StopPnoScan(const std::string& ifaceName);
63     WifiError GetScanInfos(const std::string& ifaceName,
64         std::vector<ScanResultsInfo>& scanResultsInfo);
65     WifiError EnablePowerMode(const std::string& ifaceName, int mode);
66     WifiError GetSignalPollInfo(const std::string& ifaceName,
67         SignalPollResult& signalPollResult);
68     WifiError SetDpiMarkRule(int32_t uid, int32_t protocol, int32_t enable);
69     WifiError RegisterIfaceCallBack(const std::string& ifaceName, const sptr<IChipIfaceCallback>& chipIfaceCallback);
70     WifiError UnRegisterIfaceCallBack(const std::string& ifaceName, const sptr<IChipIfaceCallback>& chipIfaceCallback);
71     WifiError RegisterExtIfaceCallBack(const std::string& ifaceName, const sptr<IChipIfaceCallback>& chipIfaceCallback);
72     WifiError UnRegisterExtIfaceCallBack(const std::string& ifaceName,
73         const sptr<IChipIfaceCallback>& chipIfaceCallback);
74     static void OnAsyncGscanFullResult(int event);
75     static void OnAsyncRssiReport(int32_t index, int32_t c0Rssi, int32_t c1Rssi);
76     static void OnAsyncWifiNetlinkMsgReport(uint32_t type, const std::vector<uint8_t>& recvMsg);
77     static void OnAsyncWifiNetlinkMsgExtReport(uint32_t type, const std::vector<uint8_t>& recvMsg);
78     WifiError SetTxPower(const std::string& ifaceName, int mode);
79     WifiError SendCmdToDriver(const std::string& ifaceName, int32_t cmdId, const std::vector<int8_t>& paramBuf);
80     WifiError SendActionFrame(const std::string& ifaceName, uint32_t freq, const std::vector<uint8_t>& frameData);
81     WifiError RegisterActionFrameReceiver(const std::string& ifaceName, const std::vector<uint8_t>& match);
82     WifiError GetCoexictenceChannelList(const std::string& ifaceName, std::vector<uint8_t>& paramBuf);
83     WifiError SetProjectionScreenParam(const std::string& ifaceName, const ProjectionScreenCmdParam& param);
84 
85 private:
86     WifiError RetrieveIfaceHandles();
87     wifiInterfaceHandle GetIfaceHandle(const std::string& ifaceName);
88     void RunEventLoop();
89     void Invalidate();
90     WifiError HandleIfaceChangeStatus(const std::string& ifname, WifiError status);
91     WifiHalFn globalFuncTable_;
92     wifiHandle globalHandle_;
93     std::map<std::string, wifiInterfaceHandle> ifaceNameHandle_;
94     std::atomic<bool> awaitingEventLoopTermination_;
95     std::condition_variable_any stopWaitCv_;
96     bool isInited_;
97     std::weak_ptr<IfaceTool> ifaceTool_;
98     bool isPrimary_;
99     static CallbackHandler<IChipIfaceCallback> vendorHalCbHandler_;
100     static CallbackHandler<IChipIfaceCallback> vendorHalExtCbHandler_;
101     std::mutex vendorHalMutex;
102 };
103 
104 } // namespace v1_0
105 } // namespace Chip
106 } // namespace Wlan
107 } // namespace HDI
108 } // namespace OHOS
109 
110 #endif
111