1/*
2 * Copyright (C) 2021-2022 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 "module_service_utils.h"
17
18#include "cellular_call_config.h"
19#include "cellular_call_register.h"
20#include "ims_call_client.h"
21#include "ipc_skeleton.h"
22#include "string_ex.h"
23#include "telephony_log_wrapper.h"
24#include "telephony_types.h"
25
26namespace OHOS {
27namespace Telephony {
28bool ModuleServiceUtils::GetRadioState(int32_t slotId)
29{
30    int32_t ret = CoreManagerInner::GetInstance().GetRadioState(slotId);
31    if (ret != ModemPowerState::CORE_SERVICE_POWER_ON) {
32        TELEPHONY_LOGE("ModuleServiceUtils::GetRadioState radio off.");
33        return false;
34    }
35    return true;
36}
37
38int32_t ModuleServiceUtils::GetAirplaneMode(bool &airplaneMode)
39{
40    int32_t ret = CoreManagerInner::GetInstance().GetAirplaneMode(airplaneMode);
41    if (ret != TELEPHONY_SUCCESS) {
42        TELEPHONY_LOGE("ModuleServiceUtils::GetAirplaneMode fail.");
43        return ret;
44    }
45    return TELEPHONY_SUCCESS;
46}
47
48int32_t ModuleServiceUtils::UpdateRadioOn(int32_t slotId)
49{
50    CellularCallConfig config;
51    config.SetReadyToCall(slotId, false);
52    int32_t ret = CoreManagerInner::GetInstance().UpdateRadioOn(slotId);
53    if (ret != TELEPHONY_SUCCESS) {
54        TELEPHONY_LOGE("ModuleServiceUtils::UpdateRadioOn fail.");
55        return ret;
56    }
57    return TELEPHONY_SUCCESS;
58}
59
60PhoneType ModuleServiceUtils::GetNetworkStatus(int32_t slotId)
61{
62    return CoreManagerInner::GetInstance().GetPhoneType(slotId);
63}
64
65std::string ModuleServiceUtils::GetIsoCountryCode(int32_t slotId)
66{
67    std::u16string countryCode;
68    CoreManagerInner::GetInstance().GetISOCountryCodeForSim(slotId, countryCode);
69    return Str16ToStr8(countryCode);
70}
71
72std::string ModuleServiceUtils::GetNetworkCountryCode(int32_t slotId)
73{
74    std::u16string countryCode;
75    CoreManagerInner::GetInstance().GetIsoCountryCodeForNetwork(slotId, countryCode);
76    return Str16ToStr8(countryCode);
77}
78
79bool ModuleServiceUtils::GetSatelliteStatus()
80{
81    return CoreManagerInner::GetInstance().IsSatelliteEnabled();
82}
83
84bool ModuleServiceUtils::GetImsRegistrationState(int32_t slotId)
85{
86    ImsRegInfo info;
87    CoreManagerInner::GetInstance().GetImsRegStatus(slotId, ImsServiceType::TYPE_VOICE, info);
88    return info.imsRegState == ImsRegState::IMS_REGISTERED;
89}
90
91bool ModuleServiceUtils::GetImsUtSupportState(int32_t slotId)
92{
93    ImsRegInfo info;
94    CoreManagerInner::GetInstance().GetImsRegStatus(slotId, ImsServiceType::TYPE_UT, info);
95    return info.imsRegState == ImsRegState::IMS_REGISTERED;
96}
97
98std::vector<int32_t> ModuleServiceUtils::GetSlotInfo()
99{
100    const int32_t slotSingle = 1;
101    const int32_t slotDouble = 2;
102    std::vector<int32_t> slotVector;
103    if (SIM_SLOT_COUNT == slotSingle) {
104        slotVector.push_back(DEFAULT_SIM_SLOT_ID);
105    } else if (SIM_SLOT_COUNT == slotDouble) {
106        slotVector.push_back(SIM_SLOT_0);
107        slotVector.push_back(SIM_SLOT_1);
108    }
109    return slotVector;
110}
111
112bool ModuleServiceUtils::NeedCallImsService() const
113{
114    if (DelayedSingleton<ImsCallClient>::GetInstance() == nullptr) {
115        TELEPHONY_LOGE("ImsCallClient is nullptr.");
116        return false;
117    }
118    auto remoteProxy = DelayedSingleton<ImsCallClient>::GetInstance()->GetImsCallProxy();
119    if (remoteProxy == nullptr) {
120        TELEPHONY_LOGE("NeedCallImsService return, ims service SA not exists.");
121        return false;
122    }
123    return true;
124}
125
126sptr<ImsCallInterface> ModuleServiceUtils::GetImsServiceRemoteObject() const
127{
128    if (DelayedSingleton<ImsCallClient>::GetInstance() == nullptr) {
129        TELEPHONY_LOGE("ImsCallClient is nullptr.");
130        return nullptr;
131    }
132    return DelayedSingleton<ImsCallClient>::GetInstance()->GetImsCallProxy();
133}
134
135RegServiceState ModuleServiceUtils::GetCsRegState(int32_t slotId)
136{
137    return static_cast<RegServiceState>(CoreManagerInner::GetInstance().GetCsRegState(slotId));
138}
139
140RegServiceState ModuleServiceUtils::GetPsRegState(int32_t slotId)
141{
142    return static_cast<RegServiceState>(CoreManagerInner::GetInstance().GetPsRegState(slotId));
143}
144} // namespace Telephony
145} // namespace OHOS