• 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 OHOS_WIFI_CONFIG_CENTER_H
17 #define OHOS_WIFI_CONFIG_CENTER_H
18 
19 #include <atomic>
20 #include <chrono>
21 #include <map>
22 #include <memory>
23 #include <string>
24 #include <vector>
25 #include "wifi_internal_msg.h"
26 #include "wifi_settings.h"
27 #include "wifi_scan_config.h"
28 
29 #define SOFT_BUS_SERVICE_UID 1024
30 #define CAST_ENGINE_SERVICE_UID 5526
31 #define MIRACAST_SERVICE_UID 5529
32 #define MIRACAST_SERVICE_SA_ID 5527
33 #define SHARE_SERVICE_UID 5520
34 #define MOUSE_CROSS_SERVICE_UID 6699
35 namespace OHOS {
36 namespace Wifi {
37 using ChannelsTable = std::map<BandType, std::vector<int32_t>>;
38 
39 class WifiConfigCenter {
40 public:
41     static WifiConfigCenter &GetInstance();
42     ~WifiConfigCenter();
43 
44     int Init();
45 
46     std::unique_ptr<WifiScanConfig>& GetWifiScanConfig();
47 
48     void SetWifiSelfcureReset(const bool isReset);
49 
50     bool GetWifiSelfcureReset() const;
51 
52     void SetWifiSelfcureResetEntered(const bool isReset);
53 
54     bool GetWifiSelfcureResetEntered() const;
55 
56     void SetLastNetworkId(const int networkId);
57 
58     int GetLastNetworkId() const;
59 
60     void SetSelectedCandidateNetworkId(const int networkId);
61 
62     int GetSelectedCandidateNetworkId() const;
63 
64     void SetWifiAllowSemiActive(bool isAllowed);
65 
66     bool GetWifiAllowSemiActive() const;
67 
68     void SetWifiStopState(bool state);
69 
70     bool GetWifiStopState() const;
71 
72     void SetStaIfaceName(const std::string &ifaceName, int instId = 0);
73 
74     std::string GetStaIfaceName(int instId = 0);
75 
76     int GetWifiState(int instId = 0);
77 
78     int SetWifiState(int state, int instId = 0);
79 
80     WifiDetailState GetWifiDetailState(int instId = 0);
81 
82     int SetWifiDetailState(WifiDetailState state, int instId);
83 
84     WifiOprMidState GetWifiMidState(int instId = 0);
85 
86     bool SetWifiMidState(WifiOprMidState expState, WifiOprMidState state, int instId = 0);
87 
88     void SetWifiMidState(WifiOprMidState state, int instId = 0);
89 
90     void SetWifiStaCloseTime(int instId = 0);
91 
92     double GetWifiStaInterval(int instId = 0);
93 
94     bool GetWifiConnectedMode(int instId = 0);
95 
96     void SetWifiConnectedMode(bool isContainerConnected, int instId = 0);
97 
98     int SetChangeDeviceConfig(ConfigChange value, const WifiDeviceConfig &config);
99 
100     bool GetChangeDeviceConfig(ConfigChange& value, WifiDeviceConfig &config);
101 
102     int GetIpInfo(IpInfo &info, int instId = 0);
103 
104     int SaveIpInfo(const IpInfo &info, int instId = 0);
105 
106     int GetIpv6Info(IpV6Info &info, int instId = 0);
107 
108     int SaveIpV6Info(const IpV6Info &info, int instId = 0);
109 
110     std::map<int, WifiLinkedInfo> GetAllWifiLinkedInfo();
111 
112     int GetLinkedInfo(WifiLinkedInfo &info, int instId = 0);
113 
114     int SaveLinkedInfo(const WifiLinkedInfo &info, int instId = 0);
115 
116     int SetMacAddress(const std::string &macAddress, int instId = 0);
117 
118     int GetMacAddress(std::string &macAddress, int instId = 0);
119 
120     void SetUserLastSelectedNetworkId(int networkId, int instId = 0);
121 
122     int GetUserLastSelectedNetworkId(int instId = 0);
123 
124     time_t GetUserLastSelectedNetworkTimeVal(int instId = 0);
125 
126     std::string GetConnectTimeoutBssid(int instId = 0);
127 
128     int SetConnectTimeoutBssid(std::string &bssid, int instId = 0);
129 
130     void SaveDisconnectedReason(DisconnectedReason discReason, int instId = 0);
131 
132     int GetDisconnectedReason(DisconnectedReason &discReason, int instId = 0);
133 
134     void InsertWifiCategoryBlackListCache(int blacklistType, const std::string currentBssid,
135         const WifiCategoryBlackListInfo wifiBlackListInfo);
136 
137     void RemoveWifiCategoryBlackListCache(int blacklistType, const std::string bssid);
138 
139     int GetWifiCategoryBlackListCache(int blacklistType,
140         std::map<std::string, WifiCategoryBlackListInfo> &blackListCache);
141 
142     void UpdateWifiConnectFailListCache(int blacklistType, const std::string bssid,
143         const WifiCategoryConnectFailInfo wifi7ConnectFailInfo);
144 
145     void RemoveWifiConnectFailListCache(const std::string bssid);
146 
147     int GetWifiConnectFailListCache(
148         std::map<std::string, WifiCategoryConnectFailInfo> &connectFailCache);
149 
150     bool EnableNetwork(int networkId, bool disableOthers, int instId = 0);
151 
152     WifiOprMidState GetScanMidState(int instId = 0);
153 
154     bool SetScanMidState(WifiOprMidState expState, WifiOprMidState state, int instId = 0);
155 
156     void SetScanMidState(WifiOprMidState state, int instId = 0);
157 
158     WifiOprMidState GetWifiScanOnlyMidState(int instId = 0);
159 
160     bool SetWifiScanOnlyMidState(WifiOprMidState expState, WifiOprMidState state, int instId = 0);
161 
162     void SetWifiScanOnlyMidState(WifiOprMidState state, int instId = 0);
163 
164     int GetScanControlInfo(ScanControlInfo &info, int instId = 0);
165 
166     int SetScanControlInfo(const ScanControlInfo &info, int instId = 0);
167 
168     void RecordWifiCategory(const std::string bssid, WifiCategory category);
169 
170     void CleanWifiCategoryRecord();
171 
172     void SetAbnormalApps(const std::vector<std::string> &abnormalAppList);
173 
174     int GetAbnormalApps(std::vector<std::string> &abnormalAppList);
175 
176     int SaveScanInfoList(const std::vector<WifiScanInfo> &results);
177 
178     int ClearScanInfoList();
179 
180     int GetScanInfoList(std::vector<WifiScanInfo> &results);
181 
182     int SetWifiLinkedStandardAndMaxSpeed(WifiLinkedInfo &linkInfo);
183 
184     bool CheckScanOnlyAvailable(int instId = 0);
185 
186     std::string GetConnectedBssid(int instId = 0);
187 
188     void SetSoftapToggledState(bool state);
189 
190     bool GetSoftapToggledState() const;
191 
192     int SetHotspotIdleTimeout(int time);
193 
194     int GetHotspotIdleTimeout() const;
195 
196     void SetApIfaceName(const std::string &ifaceName);
197 
198     std::string GetApIfaceName();
199 
200     WifiOprMidState GetApMidState(int id = 0);
201 
202     bool SetApMidState(WifiOprMidState expState, WifiOprMidState state, int id = 0);
203 
204     void SetApMidState(WifiOprMidState state, int id = 0);
205 
206     int GetHotspotState(int id = 0);
207 
208     int SetHotspotState(int state, int id = 0);
209 
210     int SetPowerModel(const PowerModel& model, int id = 0);
211 
212     int GetPowerModel(PowerModel& model, int id = 0);
213 
214     int GetStationList(std::vector<StationInfo> &results, int id = 0);
215 
216     int ManageStation(const StationInfo &info, int mode, int id = 0);
217 
218     int ClearStationList(int id = 0);
219 
220     void SetP2pIfaceName(const std::string &ifaceName);
221 
222     std::string GetP2pIfaceName();
223 
224     int SetHid2dUpperScene(int uid, const Hid2dUpperScene &scene);
225 
226     int GetHid2dUpperScene(int uid, Hid2dUpperScene &scene);
227 
228     void ClearLocalHid2dInfo(int uid = 0);
229 
230     int SetP2pEnhanceState(int state);
231 
232     int GetP2pEnhanceState();
233 
234     WifiOprMidState GetP2pMidState();
235 
236     bool SetP2pMidState(WifiOprMidState expState, WifiOprMidState state);
237 
238     void SetP2pMidState(WifiOprMidState state);
239 
240     int SetP2pState(int state);
241 
242     int GetP2pState();
243 
244     int SetP2pDiscoverState(int state);
245 
246     int GetP2pDiscoverState();
247 
248     int SetP2pBusinessType(const P2pBusinessType &type);
249 
250     int GetP2pBusinessType(P2pBusinessType &type);
251 
252     int SaveP2pCreatorUid(int uid);
253 
254     int GetP2pCreatorUid();
255 
256     void SetExplicitGroup(bool isExplicit);
257 
258     bool IsExplicitGroup(void);
259 
260     int SaveP2pInfo(WifiP2pLinkedInfo &linkedInfo);
261 
262     int GetP2pInfo(WifiP2pLinkedInfo &linkedInfo);
263 
264     void SetCurrentP2pGroupInfo(const WifiP2pGroupInfo &group);
265 
266     WifiP2pGroupInfo GetCurrentP2pGroupInfo();
267 
268     void SetCoexSupport(bool isSupport);
269 
270     bool GetCoexSupport() const;
271 
272     void SetScreenState(const int &state);
273 
274     int GetScreenState() const;
275 
276     void SetThermalLevel(const int &level);
277 
278     int GetThermalLevel() const;
279 
280     void SetPowerIdelState(const int &state);
281 
282     int GetPowerIdelState() const;
283 
284     void SetGnssFixState(const int &state);
285 
286     int GetGnssFixState() const;
287 
288     void SetScanGenieState(const int &state);
289 
290     int GetScanGenieState() const;
291 
292     bool SetWifiStateOnAirplaneChanged(const int &state);
293 
294     int GetAirplaneModeState() const;
295 
296     int GetWifiToggledEnable(int id = 0);
297 
298     void SetWifiToggledState(int state, int id = 0);
299 
300     void SetPowerSavingModeState(const int &state);
301 
302     int GetPowerSavingModeState() const;
303 
304     void SetFreezeModeState(int state);
305 
306     int GetFreezeModeState() const;
307 
308     void SetNoChargerPlugModeState(int state);
309 
310     int GetNoChargerPlugModeState() const;
311 
312     void SetThreadStatusFlag(bool state);
313 
314     bool GetThreadStatusFlag(void) const;
315 
316     uint64_t GetThreadStartTime(void) const;
317 
318     bool StoreWifiMacAddrPairInfo(WifiMacAddrInfoType type, const std::string &realMacAddr,
319         const std::string &randomAddr);
320 
321     std::string GetRandomMacAddr(WifiMacAddrInfoType type, std::string bssid);
322 
323     int RemoveMacAddrPairs(WifiMacAddrInfoType type, const WifiMacAddrInfo &macAddrInfo);
324 
325     std::string GetMacAddrPairs(WifiMacAddrInfoType type, const WifiMacAddrInfo &macAddrInfo);
326 
327     void ClearMacAddrPairs(WifiMacAddrInfoType type);
328 
329     std::set<int> GetAllWifiLinkedNetworkId();
330 
331     void SetPersistWifiState(int state, int instId);
332 
333     int GetPersistWifiState(int instId);
334 
335     bool HasWifiActive();
336 
337     void RemoveMacAddrPairInfo(WifiMacAddrInfoType type, std::string bssid);
338 
339     void UpdateLinkedInfo(int instId = 0);
340 private:
341     WifiConfigCenter();
342     std::string GetPairMacAddress(std::map<WifiMacAddrInfo, std::string>& macAddrInfoMap,
343         const WifiMacAddrInfo &macAddrInfo);
344     WifiMacAddrErrCode InsertMacAddrPairs(std::map<WifiMacAddrInfo, std::string>& macAddrInfoMap,
345         const WifiMacAddrInfo &macAddrInfo, std::string& randomMacAddr);
346     void DelMacAddrPairs(std::map<WifiMacAddrInfo, std::string>& macAddrInfoMap, const WifiMacAddrInfo &macAddrInfo);
347     WifiMacAddrErrCode AddMacAddrPairs(WifiMacAddrInfoType type, const WifiMacAddrInfo &macAddrInfo,
348         std::string randomMacAddr);
349 
350 private:
351     // STA
352     std::mutex mStaMutex;
353     std::atomic<bool> mWifiSelfcureReset {false};
354     std::atomic<bool> mWifiSelfcureResetEntered {false};
355     std::atomic<int> mLastNetworkId {INVALID_NETWORK_ID};
356     std::atomic<int> mSelectedCandidateNetworkId {INVALID_NETWORK_ID};
357     std::atomic<bool> mWifiAllowSemiActive {false};
358     std::atomic<bool> mWifiStoping {false};
359     std::vector<std::string> mStaIfaceName = {"wlan0", "wlan1"};
360     std::map<int, std::atomic<int>> mWifiState;
361     std::map<int, WifiDetailState> mWifiDetailState;
362     std::map<int, std::atomic<WifiOprMidState>> mStaMidState;
363     std::map<int, std::chrono::steady_clock::time_point> mWifiCloseTime;
364     std::map<int, std::atomic<bool>> mIsAncoConnected;
365     std::pair<int, WifiDeviceConfig> mLastRemoveDeviceConfig;
366     std::map<int, IpInfo> mWifiIpInfo;
367     std::map<int, IpV6Info> mWifiIpV6Info;
368     std::map<int, WifiLinkedInfo> mWifiLinkedInfo;
369     std::map<int, std::string> mMacAddress;
370     std::map<int, int> mLastSelectedNetworkId;
371     std::map<int, time_t> mLastSelectedTimeVal;
372     std::map<int, std::pair<std::string, int>> mBssidToTimeoutTime;
373     std::map<int, DisconnectedReason> mLastDiscReason;
374     std::map<int, std::map<std::string, WifiCategoryBlackListInfo>> mWifiCategoryBlackListCache;
375     std::map<std::string, WifiCategoryConnectFailInfo> mWifiConnectFailCache;
376 
377     // SCAN
378     std::mutex mScanMutex;
379     std::map<int, std::atomic<WifiOprMidState>> mScanMidState;
380     std::map<int, std::atomic<WifiOprMidState>> mScanOnlyMidState;
381     std::unique_ptr<WifiScanConfig> wifiScanConfig = nullptr;
382     std::map<int, ScanControlInfo> mScanControlInfo;
383     std::map<std::string, WifiCategory> mWifiCategoryRecord;
384     std::vector<std::string> mAbnormalAppList;
385     std::vector<WifiScanInfo> mWifiScanInfoList;
386 
387     // AP
388     std::mutex mApMutex;
389     std::atomic<bool> mSoftapToggled {false};
390     std::atomic<int> mHotspotIdleTimeout {HOTSPOT_IDLE_TIMEOUT_INTERVAL_MS};
391     std::string mApIfaceName {"wlan0"};
392     std::map<int, std::atomic<WifiOprMidState>> mApMidState;
393     std::map <int, std::atomic<int>> mHotspotState;
394     std::map<int, PowerModel> powerModel;
395     std::map<std::string, StationInfo> mConnectStationInfo;
396 
397     // P2P
398     std::mutex mP2pMutex;
399 #ifdef HDI_CHIP_INTERFACE_SUPPORT
400     std::string mP2pIfaceName {"p2p0"};
401 #else
402     std::string mP2pIfaceName {"p2p-dev-wlan0"};
403 #endif
404     std::map<int, Hid2dUpperScene> mHid2dUpperScenePair;
405     std::atomic<WifiOprMidState> mP2pMidState {WifiOprMidState::CLOSED};
406     std::atomic<int> mP2pState {static_cast<int>(P2pState::P2P_STATE_CLOSED)};
407     std::atomic<int> mP2pEnhanceState {0};
408     std::atomic<int> mP2pDiscoverState {0};
409     std::atomic<P2pBusinessType> mP2pBusinessType {P2pBusinessType::INVALID};
410     std::atomic<int> mP2pCreatorUid {-1};
411     std::atomic<bool> mExplicitGroup {false};
412     WifiP2pLinkedInfo mWifiP2pInfo;
413     WifiP2pGroupInfo m_P2pGroupInfo;
414 
415     // COMMON
416     std::atomic<bool> mIsSupportCoex {false};
417     std::atomic<int> mScreenState {MODE_STATE_DEFAULT};
418     std::atomic<int> mThermalLevel {static_cast<int>(ThermalLevel::NORMAL)};
419     std::atomic<int> mPowerIdelState {MODE_STATE_CLOSE};
420     std::atomic<int> mGnssFixState {MODE_STATE_CLOSE};
421     std::atomic<int> mScanGenieState {MODE_STATE_OPEN};
422     std::atomic<int> mAirplaneModeState {MODE_STATE_CLOSE};
423     std::vector<int> mPersistWifiState {std::vector<int>(2, WIFI_STATE_DISABLED)};
424     std::atomic<int> mPowerSavingModeState {MODE_STATE_CLOSE};
425     std::atomic<int> mFreezeModeState {MODE_STATE_CLOSE};
426     std::atomic<int> mNoChargerPlugModeState {MODE_STATE_CLOSE};
427     std::atomic<bool> mThreadStatusFlag_ {false};
428     std::atomic<uint64_t> mThreadStartTime {0};
429     std::mutex mMacAddrPairMutex;
430     std::map<WifiMacAddrInfo, std::string> mWifiScanMacAddrPair;
431     std::map<WifiMacAddrInfo, std::string> mHotspotMacAddrPair;
432     std::map<WifiMacAddrInfo, std::string> mP2pDeviceMacAddrPair;
433     std::map<WifiMacAddrInfo, std::string> mP2pGroupsInfoMacAddrPair;
434     std::map<WifiMacAddrInfo, std::string> mP2pCurrentgroupMacAddrPair;
435 };
436 } // namespace Wifi
437 } // namespace OHOS
438 #endif
439