1 /* 2 * Copyright (C) 2021 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 #include "default.h" 17 18 #include "cellular_data_utils.h" 19 #include "core_manager_inner.h" 20 #include "telephony_log_wrapper.h" 21 22 namespace OHOS { 23 namespace Telephony { StateBegin()24 void Default::StateBegin() 25 { 26 TELEPHONY_LOGD("Enter default state"); 27 isActive_ = true; 28 } 29 StateEnd()30 void Default::StateEnd() 31 { 32 TELEPHONY_LOGD("Exit default state"); 33 isActive_ = false; 34 } 35 StateProcess(const AppExecFwk::InnerEvent::Pointer & event)36 bool Default::StateProcess(const AppExecFwk::InnerEvent::Pointer &event) 37 { 38 if (event == nullptr) { 39 TELEPHONY_LOGE("event is null"); 40 return false; 41 } 42 std::shared_ptr<CellularDataStateMachine> stateMachine = stateMachine_.lock(); 43 if (stateMachine == nullptr) { 44 TELEPHONY_LOGE("stateMachine is null"); 45 return false; 46 } 47 uint32_t eventCode = event->GetInnerEventId(); 48 std::map<uint32_t, Fun>::iterator it = eventIdFunMap_.find(eventCode); 49 if (it != eventIdFunMap_.end()) { 50 return it->second(event); 51 } 52 return false; 53 } 54 ProcessConnectDone(const AppExecFwk::InnerEvent::Pointer & event)55 bool Default::ProcessConnectDone(const AppExecFwk::InnerEvent::Pointer &event) 56 { 57 TELEPHONY_LOGI("Default::MSG_SM_CONNECT"); 58 return false; 59 } 60 ProcessDisconnectDone(const AppExecFwk::InnerEvent::Pointer & event)61 bool Default::ProcessDisconnectDone(const AppExecFwk::InnerEvent::Pointer &event) 62 { 63 if (event == nullptr) { 64 TELEPHONY_LOGE("event is null"); 65 return false; 66 } 67 std::shared_ptr<CellularDataStateMachine> stateMachine = stateMachine_.lock(); 68 if (stateMachine == nullptr) { 69 TELEPHONY_LOGE("The state machine pointer is null"); 70 return false; 71 } 72 TELEPHONY_LOGI("The data connection is disconnected by default"); 73 stateMachine->DeferEvent(std::move(event)); 74 return true; 75 } 76 ProcessDisconnectAllDone(const AppExecFwk::InnerEvent::Pointer & event)77 bool Default::ProcessDisconnectAllDone(const AppExecFwk::InnerEvent::Pointer &event) 78 { 79 if (event == nullptr) { 80 TELEPHONY_LOGE("event is null"); 81 return false; 82 } 83 std::shared_ptr<CellularDataStateMachine> stateMachine = stateMachine_.lock(); 84 if (stateMachine == nullptr) { 85 TELEPHONY_LOGE("The state machine pointer is null"); 86 return false; 87 } 88 TELEPHONY_LOGI("All data connections are disconnected by default"); 89 stateMachine->DeferEvent(std::move(event)); 90 return true; 91 } 92 ProcessDataConnectionDrsOrRatChanged(const AppExecFwk::InnerEvent::Pointer & event)93 bool Default::ProcessDataConnectionDrsOrRatChanged(const AppExecFwk::InnerEvent::Pointer &event) 94 { 95 if (event == nullptr) { 96 TELEPHONY_LOGE("event is null"); 97 return false; 98 } 99 std::shared_ptr<CellularDataStateMachine> stateMachine = stateMachine_.lock(); 100 if (stateMachine == nullptr) { 101 TELEPHONY_LOGE("stateMachine is null"); 102 return false; 103 } 104 TELEPHONY_LOGI("The RAT changes by default"); 105 CellularDataNetAgent &netAgent = CellularDataNetAgent::GetInstance(); 106 int32_t supplierId = netAgent.GetSupplierId(stateMachine->GetSlotId(), stateMachine->GetCapability()); 107 netAgent.UpdateNetSupplierInfo(supplierId, stateMachine->netSupplierInfo_); 108 if (stateMachine->IsActiveState() || stateMachine->IsActivatingState()) { 109 netAgent.UpdateNetLinkInfo(supplierId, stateMachine->netLinkInfo_); 110 } 111 int32_t radioTech = static_cast<int32_t>(RadioTech::RADIO_TECHNOLOGY_INVALID); 112 CoreManagerInner::GetInstance().GetPsRadioTech(stateMachine->GetSlotId(), radioTech); 113 netAgent.RegisterSlotType(supplierId, radioTech); 114 TELEPHONY_LOGI("RegisterSlotType: supplierId[%{public}d] slotId[%{public}d] radioTech[%{public}d]", 115 supplierId, stateMachine->GetSlotId(), radioTech); 116 return false; 117 } 118 ProcessDataConnectionRoamOn(const AppExecFwk::InnerEvent::Pointer & event)119 bool Default::ProcessDataConnectionRoamOn(const AppExecFwk::InnerEvent::Pointer &event) 120 { 121 TELEPHONY_LOGI("Default::EVENT_DATA_CONNECTION_ROAM_ON"); 122 return false; 123 } 124 ProcessDataConnectionRoamOff(const AppExecFwk::InnerEvent::Pointer & event)125 bool Default::ProcessDataConnectionRoamOff(const AppExecFwk::InnerEvent::Pointer &event) 126 { 127 TELEPHONY_LOGI("Default::EVENT_DATA_CONNECTION_ROAM_OFF"); 128 return false; 129 } 130 ProcessDataCallListChanged(const AppExecFwk::InnerEvent::Pointer & event)131 bool Default::ProcessDataCallListChanged(const AppExecFwk::InnerEvent::Pointer &event) 132 { 133 if (event == nullptr) { 134 TELEPHONY_LOGE("event is null"); 135 return false; 136 } 137 std::shared_ptr<SetupDataCallResultInfo> info = event->GetSharedObject<SetupDataCallResultInfo>(); 138 if (info == nullptr) { 139 TELEPHONY_LOGE("info is null"); 140 return false; 141 } 142 TELEPHONY_LOGI("Default::ProcessDataCallListChanged"); 143 std::shared_ptr<CellularDataStateMachine> stateMachine = stateMachine_.lock(); 144 if (stateMachine == nullptr) { 145 TELEPHONY_LOGE("stateMachine is null"); 146 return false; 147 } 148 if (stateMachine->IsActivatingState() || stateMachine->IsActiveState()) { 149 stateMachine->UpdateNetworkInfo(*info); 150 } 151 return true; 152 } 153 } // namespace Telephony 154 } // namespace OHOS 155