• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025-2026 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 "state_utils.h"
17 #include <sys/time.h>
18 #include "netmgr_ext_log_wrapper.h"
19 #include "core_service_client.h"
20 
21 namespace OHOS::NetManagerStandard {
22 constexpr int32_t SLOT_0 = 0;
23 constexpr int32_t SLOT_1 = 1;
24 constexpr int32_t UTIL_SLOT_0 = 0;
25 constexpr int32_t UTIL_SLOT_2 = 2;
26 constexpr int32_t MODEM_ID_0 = 0x00;
27 constexpr int32_t MODEM_ID_1 = 0x01;
28 constexpr int32_t TIME_RATE = 1000;
29 constexpr int32_t HTTP_DETECTION_TIMEOUT = 3000;
30 
GetNowMilliSeconds()31 int64_t StateUtils::GetNowMilliSeconds()
32 {
33     auto nowSys = AppExecFwk::InnerEvent::Clock::now();
34     auto epoch = nowSys.time_since_epoch();
35     return std::chrono::duration_cast<std::chrono::milliseconds>(epoch).count();
36 }
37 
GetCurrentSysTimeMs()38 int64_t StateUtils::GetCurrentSysTimeMs()
39 {
40     struct timeval time = {0};
41     gettimeofday(&time, nullptr);
42     return static_cast<int64_t>(
43         static_cast<uint64_t>(time.tv_sec * TIME_RATE) + static_cast<uint64_t>(time.tv_usec / TIME_RATE));
44 }
45 
GetDefaultSlotId()46 int32_t StateUtils::GetDefaultSlotId()
47 {
48     int32_t slotId = DelayedRefSingleton<Telephony::CellularDataClient>::GetInstance().GetDefaultCellularDataSlotId();
49     return slotId;
50 }
51 
GetPrimarySlotId()52 int32_t StateUtils::GetPrimarySlotId()
53 {
54     int32_t slotId = -1;
55     int32_t ret = DelayedRefSingleton<Telephony::CoreServiceClient>::GetInstance().GetPrimarySlotId(slotId);
56     if (ret != Telephony::TELEPHONY_SUCCESS) {
57         NETMGR_EXT_LOG_E("get primary slotid fail, ret:%{public}d", ret);
58         return -1;
59     }
60     return slotId;
61 }
62 
GetSlaveCardSlotId()63 int32_t StateUtils::GetSlaveCardSlotId()
64 {
65     return (GetPrimarySlotId() == SLOT_0) ? SLOT_1 : SLOT_0;
66 }
67 
IsValidSlotId(int32_t slotId)68 bool StateUtils::IsValidSlotId(int32_t slotId)
69 {
70     return (slotId >= UTIL_SLOT_0) && (slotId <= UTIL_SLOT_2);
71 }
72 
IsRoaming(int32_t slotId)73 bool StateUtils::IsRoaming(int32_t slotId)
74 {
75     if (!StateUtils::IsValidSlotId(slotId)) {
76         NETMGR_EXT_LOG_E("IsRoaming slotId is inValid");
77         return false;
78     }
79     sptr<Telephony::NetworkState> networkState = nullptr;
80     DelayedRefSingleton<Telephony::CoreServiceClient>::GetInstance().GetNetworkState(slotId, networkState);
81     if (networkState != nullptr) {
82         return networkState->IsRoaming();
83     }
84     return false;
85 }
86 
GetModemIdBySlotId(int32_t slotId)87 int32_t StateUtils::GetModemIdBySlotId(int32_t slotId)
88 {
89     int32_t masterCardSlotId = GetPrimarySlotId();
90     if (!IsValidSlotId(masterCardSlotId)) {
91         NETMGR_EXT_LOG_E("invalid masterCardSlotId: %{public}d", masterCardSlotId);
92         masterCardSlotId = 0;
93     }
94 
95     if (slotId == UTIL_SLOT_2) {
96         return MODEM_ID_0;
97     }
98 
99     if (masterCardSlotId == slotId) {
100         return MODEM_ID_0;
101     } else {
102         return MODEM_ID_1;
103     }
104 }
105 
GetSlotIdByModemId(int32_t modemId)106 int32_t StateUtils::GetSlotIdByModemId(int32_t modemId)
107 {
108     int32_t masterCardSlotId = GetPrimarySlotId();
109     int32_t slaveCardSlotId = GetSlaveCardSlotId();
110 
111     if (MODEM_ID_0 == modemId) {
112         return IsValidSlotId(masterCardSlotId) ? masterCardSlotId : UTIL_SLOT_0;
113     } else {
114         return IsValidSlotId(slaveCardSlotId) ? slaveCardSlotId : UTIL_SLOT_0;
115     }
116 }
117 }  // namespace OHOS::NetManagerStandard
118