1 /* 2 * Copyright (C) 2021-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 #ifndef NETWORK_SEARCH_INCLUDE_NETWORK_REGISTER_H 16 #define NETWORK_SEARCH_INCLUDE_NETWORK_REGISTER_H 17 #include <memory> 18 #include <string> 19 #include <vector> 20 #include <map> 21 #include "event_handler.h" 22 23 #include "tel_ril_network_parcel.h" 24 #include "network_search_state.h" 25 26 namespace OHOS { 27 namespace Telephony { 28 class NetworkRegister { 29 public: 30 NetworkRegister(std::shared_ptr<NetworkSearchState> networkSearchState, 31 std::weak_ptr<NetworkSearchManager> networkSearchManager, int32_t slotId); 32 virtual ~NetworkRegister() = default; 33 void InitNrConversionConfig(); 34 void ProcessPsRegister(const std::shared_ptr<PsRegStatusResultInfo> psRegStatusResult); 35 void ProcessCsRegister(const std::shared_ptr<CsRegStatusInfo> csRegStateResult); 36 void ProcessRestrictedState(const AppExecFwk::InnerEvent::Pointer &event) const; 37 void ProcessPsAttachStatus(const AppExecFwk::InnerEvent::Pointer &event) const; 38 void ProcessChannelConfigInfo(const AppExecFwk::InnerEvent::Pointer &event); 39 int32_t RevertLastTechnology(); 40 int32_t NotifyStateChange(); 41 void DcPhysicalLinkActiveUpdate(bool isActive); 42 void UpdateCfgTech(); 43 void UpdateCellularCall(const RegServiceState ®Status, const int32_t callType); 44 int32_t HandleRrcStateChanged(int32_t status); 45 46 enum class RilRegister { 47 REG_STATE_NOT_REG = 0, 48 REG_STATE_HOME_ONLY = 1, 49 REG_STATE_SEARCH = 2, 50 REG_STATE_NO_SERVICE = 3, 51 REG_STATE_INVALID = 4, 52 REG_STATE_ROAMING = 5, 53 REG_STATE_EMERGENCY_ONLY = 6 54 }; 55 enum class ConnectServiceCell { 56 /** Connection status is unknown. */ 57 CONNECTION_UNKNOWN = 0, 58 /** UE has connection to primary cell cell(3GPP 36.331).*/ 59 CONNECTION_PRIMARY_CELL = 1, 60 /** UE has connectionto secondary cell cell(3GPP 36.331).*/ 61 CONNECTION_SECONDARY_CELL = 2 62 }; 63 64 private: 65 RegServiceState ConvertRegFromRil(RilRegister code) const; 66 RadioTech ConvertTechFromRil(TelRilRadioTech code) const; 67 void UpdateNrState(); 68 int32_t UpdateNsaState(int32_t nsaState); 69 void NotifyNrFrequencyChanged(); 70 int32_t GetRrcConnectionState(int32_t &rrcState); 71 bool IsValidConfig(const std::string &config); 72 RadioTech GetTechnologyByNrConfig(RadioTech tech); 73 int32_t GetSystemPropertiesConfig(std::string &config); 74 void UpdateNetworkSearchState(RegServiceState regStatus, RadioTech tech, RoamingType roam, DomainType type); 75 76 private: 77 std::shared_ptr<NetworkSearchState> networkSearchState_ = nullptr; 78 std::weak_ptr<NetworkSearchManager> networkSearchManager_; 79 /** 80 * Indicates that if E-UTRA-NR Dual Connectivity (EN-DC) is supported by the primary serving 81 * cell. 82 * 83 * Reference: 3GPP TS 36.331 V16.6.0 6.3.1 System information blocks. 84 */ 85 bool endcSupport_ = false; 86 /** 87 * Indicates if the use of dual connectivity with NR is restricted. 88 * Reference: 3GPP TS 24.301 V17.4.0 section 9.9.3.12A. 89 */ 90 bool dcNrRestricted_ = false; 91 /** 92 * Indicates if NR is supported by the selected PLMN. 93 * Reference: 3GPP TS 36.331 V16.6.0 section 6.3.1 PLMN-InfoList-r15. 94 * 3GPP TS 36.331 V16.6.0 section 6.2.2 SystemInformationBlockType1 message. 95 */ 96 bool nrSupport_ = false; 97 FrequencyType freqType_ = FrequencyType::FREQ_TYPE_UNKNOWN; 98 bool isNrSecondaryCell_ = false; 99 bool isPhysicalLinkActive_ = false; 100 NrState nrState_ = NrState::NR_STATE_NOT_SUPPORT; 101 std::vector<PhysicalChannelConfig> channelConfigInfos_; 102 std::map<NrState, RadioTech> nrConfigMap_; 103 104 int32_t slotId_ = 0; 105 bool isCsCapable_ = true; 106 std::string currentNrConfig_ = ""; 107 std::string systemPropertiesConfig_ = "ConfigD"; 108 }; 109 } // namespace Telephony 110 } // namespace OHOS 111 #endif // NETWORK_SEARCH_INCLUDE_NETWORK_REGISTER_H 112