• 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 
25 #include "wifi_hal.h"
26 #include "iface_tool.h"
27 #include "hdi_sync_util.h"
28 #include "v2_0/chip_types.h"
29 #include "callback_handler.h"
30 
31 namespace OHOS {
32 namespace HDI {
33 namespace Wlan {
34 namespace Chip {
35 namespace V2_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     WifiError RegisterExtIfaceCallBack(const std::string& ifaceName, const sptr<IChipIfaceCallback>& chipIfaceCallback);
71     WifiError UnRegisterExtIfaceCallBack(const std::string& ifaceName,
72         const sptr<IChipIfaceCallback>& chipIfaceCallback);
73     static void OnAsyncGscanFullResult(int event);
74     static void OnAsyncRssiReport(int32_t index, int32_t c0Rssi, int32_t c1Rssi);
75     static void OnAsyncWifiNetlinkMsgReport(uint32_t type, const std::vector<uint8_t>& recvMsg);
76     WifiError SetTxPower(const std::string& ifaceName, int mode);
77     WifiError SendCmdToDriver(const std::string& ifaceName, int32_t cmdId,
78         const std::vector<int8_t>& paramBuf, std::vector<int8_t>& result);
79     WifiError SendActionFrame(const std::string& ifaceName, uint32_t freq, const std::vector<uint8_t>& frameData);
80     WifiError RegisterActionFrameReceiver(const std::string& ifaceName, const std::vector<uint8_t>& match);
81     WifiError GetCoexictenceChannelList(const std::string& ifaceName, std::vector<uint8_t>& paramBuf);
82     WifiError SetProjectionScreenParam(const std::string& ifaceName, const ProjectionScreenCmdParam& param);
83 
84 private:
85     WifiError RetrieveIfaceHandles();
86     wifiInterfaceHandle GetIfaceHandle(const std::string& ifaceName);
87     void RunEventLoop();
88     void Invalidate();
89     WifiError HandleIfaceChangeStatus(const std::string& ifname, WifiError status);
90     WifiHalFn globalFuncTable_;
91     wifiHandle globalHandle_;
92     std::map<std::string, wifiInterfaceHandle> ifaceNameHandle_;
93     std::atomic<bool> awaitingEventLoopTermination_;
94     std::condition_variable_any stopWaitCv_;
95     bool isInited_;
96     std::weak_ptr<IfaceTool> ifaceTool_;
97     bool isPrimary_;
98     static CallbackHandler<IChipIfaceCallback> vendorHalCbHandler_;
99     static CallbackHandler<IChipIfaceCallback> vendorHalExtCbHandler_;
100 };
101 
102 } // namespace v2_0
103 } // namespace Chip
104 } // namespace Wlan
105 } // namespace HDI
106 } // namespace OHOS
107 
108 #endif
109