• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "battery_stats_client.h"
17 
18 #include "datetime_ex.h"
19 #include "if_system_ability_manager.h"
20 #include "ipc_skeleton.h"
21 #include "iservice_registry.h"
22 #include "string_ex.h"
23 #include "system_ability_definition.h"
24 
25 #include "battery_stats_proxy.h"
26 #include "stats_common.h"
27 
28 namespace OHOS {
29 namespace PowerMgr {
BatteryStatsClient()30 BatteryStatsClient::BatteryStatsClient() {}
~BatteryStatsClient()31 BatteryStatsClient::~BatteryStatsClient() {}
32 
Connect()33 ErrCode BatteryStatsClient::Connect()
34 {
35     STATS_HILOGI(STATS_MODULE_INNERKIT, "Enter");
36     std::lock_guard<std::mutex> lock(mutex_);
37     if (proxy_ != nullptr) {
38         return ERR_OK;
39     }
40     sptr<ISystemAbilityManager> sam = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
41     if (sam == nullptr) {
42         STATS_HILOGE(STATS_MODULE_INNERKIT, "Fail to get Registry");
43         return E_STATS_GET_SYSTEM_ABILITY_MANAGER_FAILED;
44     }
45     sptr<IRemoteObject> remoteObject_ = sam->CheckSystemAbility(POWER_MANAGER_BATT_STATS_SERVICE_ID);
46     if (remoteObject_ == nullptr) {
47         STATS_HILOGE(STATS_MODULE_INNERKIT, "GetSystemAbility failed.");
48         return E_STATS_GET_SERVICE_FAILED;
49     }
50     proxy_ = iface_cast<IBatteryStats>(remoteObject_);
51     STATS_HILOGI(STATS_MODULE_INNERKIT, "Connect BatteryStatsService ok.");
52     STATS_HILOGI(STATS_MODULE_INNERKIT, "Exit");
53     return ERR_OK;
54 }
55 
ResetProxy(const wptr<IRemoteObject> & remote)56 void BatteryStatsClient::ResetProxy(const wptr<IRemoteObject>& remote)
57 {
58     STATS_HILOGI(STATS_MODULE_INNERKIT, "Enter");
59     std::lock_guard<std::mutex> lock(mutex_);
60     STATS_RETURN_IF(proxy_ == nullptr);
61     auto serviceRemote = proxy_->AsObject();
62     if ((serviceRemote != nullptr) && (serviceRemote == remote.promote())) {
63         serviceRemote->RemoveDeathRecipient(deathRecipient_);
64         proxy_ = nullptr;
65     }
66     STATS_HILOGI(STATS_MODULE_INNERKIT, "Exit");
67 }
68 
OnRemoteDied(const wptr<IRemoteObject> & remote)69 void BatteryStatsClient::BatteryStatsDeathRecipient::OnRemoteDied(const wptr<IRemoteObject>& remote)
70 {
71     STATS_HILOGI(STATS_MODULE_INNERKIT, "Enter");
72     if (remote == nullptr) {
73         STATS_HILOGE(STATS_MODULE_INNERKIT, "BatteryStatsDeathRecipient::OnRemoteDied failed, remote is nullptr.");
74         return;
75     }
76     BatteryStatsClient::GetInstance().ResetProxy(remote);
77     STATS_HILOGI(STATS_MODULE_INNERKIT, "BatteryStatsDeathRecipient::Recv death notice.");
78     STATS_HILOGI(STATS_MODULE_INNERKIT, "Exit");
79 }
80 
GetBatteryStats()81 BatteryStatsInfoList BatteryStatsClient::GetBatteryStats()
82 {
83     STATS_HILOGI(STATS_MODULE_INNERKIT, "Enter");
84     BatteryStatsInfoList entityList;
85     STATS_RETURN_IF_WITH_RET(Connect() != ERR_OK, entityList);
86     entityList = proxy_->GetBatteryStats();
87     STATS_HILOGI(STATS_MODULE_INNERKIT, "Calling GetBatteryStats Success!");
88     return entityList;
89 }
90 
GetAppStatsMah(const int32_t & uid)91 double BatteryStatsClient::GetAppStatsMah(const int32_t& uid)
92 {
93     STATS_HILOGI(STATS_MODULE_INNERKIT, "Enter");
94     double appStatsMah = StatsUtils::DEFAULT_VALUE;
95     STATS_RETURN_IF_WITH_RET(Connect() != ERR_OK, appStatsMah);
96     appStatsMah = proxy_->GetAppStatsMah(uid);
97     STATS_HILOGI(STATS_MODULE_INNERKIT, "Calling GetAppStatsMah Success!");
98     return appStatsMah;
99 }
100 
SetOnBattery(bool isOnBattery)101 void BatteryStatsClient::SetOnBattery(bool isOnBattery)
102 {
103     STATS_HILOGI(STATS_MODULE_INNERKIT, "Enter");
104     STATS_RETURN_IF(Connect() != ERR_OK);
105     proxy_->SetOnBattery(isOnBattery);
106     STATS_HILOGI(STATS_MODULE_INNERKIT, "Calling SetOnBattery Success!");
107     STATS_HILOGI(STATS_MODULE_INNERKIT, "Exit");
108 }
109 
GetAppStatsPercent(const int32_t & uid)110 double BatteryStatsClient::GetAppStatsPercent(const int32_t& uid)
111 {
112     STATS_HILOGI(STATS_MODULE_INNERKIT, "Enter");
113     double appStatsPercent = StatsUtils::DEFAULT_VALUE;
114     STATS_RETURN_IF_WITH_RET(Connect() != ERR_OK, appStatsPercent);
115     appStatsPercent = proxy_->GetAppStatsPercent(uid);
116     STATS_HILOGI(STATS_MODULE_INNERKIT, "Calling GetAppStatsPercent Success!");
117     return appStatsPercent;
118 }
119 
GetPartStatsMah(const BatteryStatsInfo::ConsumptionType & type)120 double BatteryStatsClient::GetPartStatsMah(const BatteryStatsInfo::ConsumptionType& type)
121 {
122     STATS_HILOGI(STATS_MODULE_INNERKIT, "Enter");
123     double partStatsMah = StatsUtils::DEFAULT_VALUE;
124     STATS_RETURN_IF_WITH_RET(Connect() != ERR_OK, partStatsMah);
125     partStatsMah = proxy_->GetPartStatsMah(type);
126     STATS_HILOGI(STATS_MODULE_INNERKIT, "Calling GetPartStatsMah Success!");
127     return partStatsMah;
128 }
129 
GetPartStatsPercent(const BatteryStatsInfo::ConsumptionType & type)130 double BatteryStatsClient::GetPartStatsPercent(const BatteryStatsInfo::ConsumptionType& type)
131 {
132     STATS_HILOGI(STATS_MODULE_INNERKIT, "Enter");
133     double partStatsPercent = StatsUtils::DEFAULT_VALUE;
134     STATS_RETURN_IF_WITH_RET(Connect() != ERR_OK, partStatsPercent);
135     partStatsPercent = proxy_->GetPartStatsPercent(type);
136     STATS_HILOGI(STATS_MODULE_INNERKIT, "Calling GetPartStatsPercent Success!");
137     return partStatsPercent;
138 }
139 
Reset()140 void BatteryStatsClient::Reset()
141 {
142     STATS_HILOGI(STATS_MODULE_INNERKIT, "Enter");
143     STATS_RETURN_IF(Connect() != ERR_OK);
144     proxy_->Reset();
145     STATS_HILOGI(STATS_MODULE_INNERKIT, "Calling Reset Success!");
146     STATS_HILOGI(STATS_MODULE_INNERKIT, "Exit");
147 }
148 
GetTotalTimeSecond(const StatsUtils::StatsType & statsType,const int32_t & uid)149 uint64_t BatteryStatsClient::GetTotalTimeSecond(const StatsUtils::StatsType& statsType, const int32_t& uid)
150 {
151     STATS_HILOGI(STATS_MODULE_INNERKIT, "Enter");
152     uint64_t time = StatsUtils::DEFAULT_VALUE;
153     STATS_RETURN_IF_WITH_RET(Connect() != ERR_OK, time);
154     time = proxy_->GetTotalTimeSecond(statsType, uid);
155     STATS_HILOGI(STATS_MODULE_INNERKIT, "Calling GetTotalTimeSecond Success!");
156     return time;
157 }
158 
GetTotalDataBytes(const StatsUtils::StatsType & statsType,const int32_t & uid)159 uint64_t BatteryStatsClient::GetTotalDataBytes(const StatsUtils::StatsType& statsType, const int32_t& uid)
160 {
161     STATS_HILOGI(STATS_MODULE_INNERKIT, "Enter");
162     uint64_t count = StatsUtils::DEFAULT_VALUE;
163     STATS_RETURN_IF_WITH_RET(Connect() != ERR_OK, count);
164     count = proxy_->GetTotalDataBytes(statsType, uid);
165     STATS_HILOGI(STATS_MODULE_INNERKIT, "Calling GetTotalDataBytes Success!");
166     return count;
167 }
168 
Dump(const std::vector<std::string> & args)169 std::string BatteryStatsClient::Dump(const std::vector<std::string>& args)
170 {
171     std::string error = "can't connect service";
172     STATS_RETURN_IF_WITH_RET(Connect() != ERR_OK, error);
173     STATS_HILOGI(STATS_MODULE_INNERKIT, "%{public}s called.", __func__);
174     return proxy_->ShellDump(args, args.size());
175 }
176 }  // namespace PowerMgr
177 }  // namespace OHOS
178