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