12d43be4eSopenharmony_ci/*
22d43be4eSopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd.
32d43be4eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
42d43be4eSopenharmony_ci * you may not use this file except in compliance with the License.
52d43be4eSopenharmony_ci * You may obtain a copy of the License at
62d43be4eSopenharmony_ci *
72d43be4eSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
82d43be4eSopenharmony_ci *
92d43be4eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
102d43be4eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
112d43be4eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
122d43be4eSopenharmony_ci * See the License for the specific language governing permissions and
132d43be4eSopenharmony_ci * limitations under the License.
142d43be4eSopenharmony_ci */
152d43be4eSopenharmony_ci
162d43be4eSopenharmony_ci#include "cellular_data_dump_helper.h"
172d43be4eSopenharmony_ci
182d43be4eSopenharmony_ci#include "cellular_data_service.h"
192d43be4eSopenharmony_ci#include "core_service_client.h"
202d43be4eSopenharmony_ci#include "enum_convert.h"
212d43be4eSopenharmony_ci#include "telephony_types.h"
222d43be4eSopenharmony_ci
232d43be4eSopenharmony_cinamespace OHOS {
242d43be4eSopenharmony_cinamespace Telephony {
252d43be4eSopenharmony_ciCellularDataDumpHelper::CellularDataDumpHelper() {}
262d43be4eSopenharmony_ci
272d43be4eSopenharmony_cibool CellularDataDumpHelper::Dump(const std::vector<std::string> &args, std::string &result) const
282d43be4eSopenharmony_ci{
292d43be4eSopenharmony_ci    result.clear();
302d43be4eSopenharmony_ci    for (int32_t i = 0; i < (int32_t)args.size() - 1; i++) {
312d43be4eSopenharmony_ci        if (args[i] == "cellular_data" && args[i + 1] == "--help") {
322d43be4eSopenharmony_ci            ShowHelp(result);
332d43be4eSopenharmony_ci            return true;
342d43be4eSopenharmony_ci        }
352d43be4eSopenharmony_ci    }
362d43be4eSopenharmony_ci    ShowCellularDataInfo(result);
372d43be4eSopenharmony_ci    return true;
382d43be4eSopenharmony_ci}
392d43be4eSopenharmony_ci
402d43be4eSopenharmony_cibool CellularDataDumpHelper::HasSimCard(const int32_t slotId) const
412d43be4eSopenharmony_ci{
422d43be4eSopenharmony_ci    bool hasSimCard = false;
432d43be4eSopenharmony_ci    DelayedRefSingleton<CoreServiceClient>::GetInstance().HasSimCard(slotId, hasSimCard);
442d43be4eSopenharmony_ci    return hasSimCard;
452d43be4eSopenharmony_ci}
462d43be4eSopenharmony_ci
472d43be4eSopenharmony_civoid CellularDataDumpHelper::ShowHelp(std::string &result) const
482d43be4eSopenharmony_ci{
492d43be4eSopenharmony_ci    result.append("CellularData:\n");
502d43be4eSopenharmony_ci    result.append("Usage:dump <command> [options]\n");
512d43be4eSopenharmony_ci    result.append("Description:\n");
522d43be4eSopenharmony_ci    result.append("-cellular_data_info          ");
532d43be4eSopenharmony_ci    result.append("dump all cellular_data information in the system\n");
542d43be4eSopenharmony_ci    result.append("-output_slot        ");
552d43be4eSopenharmony_ci    result.append("default_slot_Id\n");
562d43be4eSopenharmony_ci    result.append("-output_state_machine");
572d43be4eSopenharmony_ci    result.append("Output state machine information and status\n");
582d43be4eSopenharmony_ci    result.append("-dataflow_info");
592d43be4eSopenharmony_ci    result.append("output_data_flow_info\n");
602d43be4eSopenharmony_ci    result.append("-show_log_level        ");
612d43be4eSopenharmony_ci    result.append("show cellular_data SA's log level\n");
622d43be4eSopenharmony_ci    result.append("-set_log_level <level>     ");
632d43be4eSopenharmony_ci    result.append("set cellular_data SA's log level\n");
642d43be4eSopenharmony_ci    result.append("-perf_dump         ");
652d43be4eSopenharmony_ci    result.append("dump performance statistics\n");
662d43be4eSopenharmony_ci}
672d43be4eSopenharmony_ci
682d43be4eSopenharmony_civoid CellularDataDumpHelper::ShowCellularDataInfo(std::string &result) const
692d43be4eSopenharmony_ci{
702d43be4eSopenharmony_ci    CellularDataService &dataService = DelayedRefSingleton<CellularDataService>::GetInstance();
712d43be4eSopenharmony_ci    result.append("Ohos cellular data service: \n");
722d43be4eSopenharmony_ci    result.append("BeginTime                    : ");
732d43be4eSopenharmony_ci    result.append(dataService.GetBeginTime());
742d43be4eSopenharmony_ci    result.append("\n");
752d43be4eSopenharmony_ci    result.append("EndTime                      : ");
762d43be4eSopenharmony_ci    result.append(dataService.GetEndTime());
772d43be4eSopenharmony_ci    result.append("\n");
782d43be4eSopenharmony_ci    result.append("SpendTime                    : ");
792d43be4eSopenharmony_ci    result.append(std::to_string(dataService.GetSpendTime()));
802d43be4eSopenharmony_ci    result.append("\n");
812d43be4eSopenharmony_ci    result.append("CellularDataSlotId           : ");
822d43be4eSopenharmony_ci    result.append(dataService.GetCellularDataSlotIdDump());
832d43be4eSopenharmony_ci    result.append("\n");
842d43be4eSopenharmony_ci    result.append("StateMachineCurrentStatus    : ");
852d43be4eSopenharmony_ci    result.append(dataService.GetStateMachineCurrentStatusDump());
862d43be4eSopenharmony_ci    result.append("\n");
872d43be4eSopenharmony_ci    result.append("FlowDataInfo                 : ");
882d43be4eSopenharmony_ci    result.append(dataService.GetFlowDataInfoDump());
892d43be4eSopenharmony_ci    result.append("\n");
902d43be4eSopenharmony_ci    result.append("ServiceRunningState          : ");
912d43be4eSopenharmony_ci    result.append(std::to_string(dataService.GetServiceRunningState()));
922d43be4eSopenharmony_ci    result.append("\n");
932d43be4eSopenharmony_ci    bool dataRoamingEnabled = false;
942d43be4eSopenharmony_ci    for (int32_t i = 0; i < SIM_SLOT_COUNT; i++) {
952d43be4eSopenharmony_ci        if (HasSimCard(i)) {
962d43be4eSopenharmony_ci            result.append("SlotId                       : ");
972d43be4eSopenharmony_ci            result.append(std::to_string(i));
982d43be4eSopenharmony_ci            result.append("\n");
992d43be4eSopenharmony_ci            result.append("CellularDataRoamingEnabled   : ");
1002d43be4eSopenharmony_ci            dataService.IsCellularDataRoamingEnabled(i, dataRoamingEnabled);
1012d43be4eSopenharmony_ci            result.append(GetBoolValue(dataRoamingEnabled));
1022d43be4eSopenharmony_ci            result.append("\n");
1032d43be4eSopenharmony_ci        }
1042d43be4eSopenharmony_ci    }
1052d43be4eSopenharmony_ci    bool dataEnabled = false;
1062d43be4eSopenharmony_ci    result.append("CellularDataEnabled          : ");
1072d43be4eSopenharmony_ci    dataService.IsCellularDataEnabled(dataEnabled);
1082d43be4eSopenharmony_ci    result.append(GetBoolValue(dataEnabled));
1092d43be4eSopenharmony_ci    result.append("\n");
1102d43be4eSopenharmony_ci    result.append("CellularDataState            : ");
1112d43be4eSopenharmony_ci    result.append(GetCellularDataConnectionState(dataService.GetCellularDataState()));
1122d43be4eSopenharmony_ci    result.append("\n");
1132d43be4eSopenharmony_ci}
1142d43be4eSopenharmony_ci} // namespace Telephony
1152d43be4eSopenharmony_ci} // namespace OHOS