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