From c1367492d505b6d6c9cc162d126aaea4866e3232 Mon Sep 17 00:00:00 2001 From: striving Date: Sat, 30 Mar 2024 00:00:49 +0800 Subject: [PATCH] sim support vsim slot Signed-off-by: striving --- services/sim/include/multi_sim_controller.h | 3 +++ services/sim/include/multi_sim_monitor.h | 1 + services/sim/src/multi_sim_controller.cpp | 12 +++++++++++- services/sim/src/multi_sim_monitor.cpp | 6 +++++- services/sim/src/sim_manager.cpp | 4 +++- 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/services/sim/include/multi_sim_controller.h b/services/sim/include/multi_sim_controller.h index 472f298bc..e276718cb 100755 --- a/services/sim/include/multi_sim_controller.h +++ b/services/sim/include/multi_sim_controller.h @@ -36,6 +36,9 @@ public: std::vector> simFileManager); virtual ~MultiSimController(); + void AddExtraManagers(std::shared_ptr simStateManager, + std::shared_ptr simFileManager); + void Init(); bool InitData(int32_t slotId); int32_t GetDefaultVoiceSlotId(); diff --git a/services/sim/include/multi_sim_monitor.h b/services/sim/include/multi_sim_monitor.h index aa2f946cc..f7cca503e 100644 --- a/services/sim/include/multi_sim_monitor.h +++ b/services/sim/include/multi_sim_monitor.h @@ -76,6 +76,7 @@ private: std::list listSimAccountCallbackRecord_; std::mutex mutexInner_; std::atomic remainCount_ = 30; + int32_t maxSlotCount_ = 0; }; } // namespace Telephony } // namespace OHOS diff --git a/services/sim/src/multi_sim_controller.cpp b/services/sim/src/multi_sim_controller.cpp index 8cc218f0e..794574377 100644 --- a/services/sim/src/multi_sim_controller.cpp +++ b/services/sim/src/multi_sim_controller.cpp @@ -92,6 +92,16 @@ bool MultiSimController::ForgetAllData(int32_t slotId) return simDbHelper_->ForgetAllData(slotId) != INVALID_VALUE; } +void MultiSimController::AddExtraManagers(std::shared_ptr simStateManager, + std::shared_ptr simFileManager) +{ + if (simStateManager_.size() == SIM_SLOT_COUNT) { + simStateManager_.push_back(simStateManager); + simFileManager_.push_back(simFileManager); + maxCount_ = MAX_SLOT_COUNT; + } +} + bool MultiSimController::InitData(int32_t slotId) { TELEPHONY_LOGI("start to initData slotId is %{public}d", slotId); @@ -396,7 +406,7 @@ void MultiSimController::SortCache() */ bool MultiSimController::IsValidData(int32_t slotId) { - if ((slotId < DEFAULT_SIM_SLOT_ID) || (slotId >= SIM_SLOT_COUNT)) { + if ((slotId < DEFAULT_SIM_SLOT_ID) || (static_cast(slotId) >= simStateManager_.size())) { TELEPHONY_LOGE("can not get simStateManager"); return false; } diff --git a/services/sim/src/multi_sim_monitor.cpp b/services/sim/src/multi_sim_monitor.cpp index 8f768b521..20d93a4e2 100644 --- a/services/sim/src/multi_sim_monitor.cpp +++ b/services/sim/src/multi_sim_monitor.cpp @@ -143,7 +143,11 @@ void MultiSimMonitor::RegisterCoreNotify( bool MultiSimMonitor::IsValidSlotId(int32_t slotId) { - return (slotId >= DEFAULT_SIM_SLOT_ID) && (slotId < SIM_SLOT_COUNT); + if (maxSlotCount_ == 0) { + maxSlotCount_ = (SIM_SLOT_COUNT == DUAL_SLOT_COUNT && VSIM_MODEM_COUNT == MAX_SLOT_COUNT) ? + MAX_SLOT_COUNT : SIM_SLOT_COUNT; + } + return (slotId >= DEFAULT_SIM_SLOT_ID) && (slotId < maxSlotCount_); } bool MultiSimMonitor::IsVSimSlotId(int32_t slotId) diff --git a/services/sim/src/sim_manager.cpp b/services/sim/src/sim_manager.cpp index 0ca5acefc..a362f05ac 100644 --- a/services/sim/src/sim_manager.cpp +++ b/services/sim/src/sim_manager.cpp @@ -85,6 +85,8 @@ int32_t SimManager::InitTelExtraModule(int32_t slotId) simFileManager_.resize(MAX_SLOT_COUNT); simAccountManager_.resize(MAX_SLOT_COUNT); InitBaseManager(slotId); + multiSimController_->AddExtraManagers(simStateManager_[slotId], simFileManager_[slotId]); + slotCount_ = MAX_SLOT_COUNT; return TELEPHONY_SUCCESS; } @@ -162,7 +164,7 @@ int32_t SimManager::GetSimState(int32_t slotId, SimState &simState) int32_t SimManager::GetCardType(int32_t slotId, CardType &cardType) { if (!HasSimCardInner(slotId)) { - TELEPHONY_LOGE("GetCardType has no sim card!"); + TELEPHONY_LOGE("slot%{public}d GetCardType has no sim card!", slotId); return TELEPHONY_ERR_NO_SIM_CARD; } cardType = simStateManager_[slotId]->GetCardType(); -- Gitee