1 /*
2 * Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved.
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 #include "xpower_decoder.h"
16 #include <securec.h>
17 #include <climits>
18 #include <cstring>
19 #include "xpower_common.h"
XpowerDecoder()20 XpowerDecoder::XpowerDecoder() {}
21
~XpowerDecoder()22 XpowerDecoder::~XpowerDecoder() {}
23
CreateAppDetail(const AppDetail & appDetail)24 cJSON* XpowerDecoder::CreateAppDetail(const AppDetail& appDetail)
25 {
26 cJSON* cjsonAppDetail = cJSON_CreateObject();
27 cJSON_AddItemToObject(cjsonAppDetail, "cpu", CreateAppDetailCpu(appDetail.cpu()));
28 cJSON_AddItemToObject(cjsonAppDetail, "gpu", CreateAppDetailGpu(appDetail.gpu()));
29 cJSON_AddItemToObject(cjsonAppDetail, "wifi", CreateAppDetailWifi(appDetail.wifi()));
30 cJSON_AddItemToObject(cjsonAppDetail, "display", CreateAppDetailDisplay(appDetail.display()));
31 return cjsonAppDetail;
32 }
33
CreateAppStatistic(const AppStatistic & appStatistic)34 cJSON* XpowerDecoder::CreateAppStatistic(const AppStatistic& appStatistic)
35 {
36 cJSON* cjsonAppStatistic = cJSON_CreateObject();
37 cJSON_AddItemToObject(cjsonAppStatistic, "audio", CreatAppStatisticCommon(appStatistic.audio()));
38 cJSON_AddItemToObject(cjsonAppStatistic, "bluetooth", CreatAppStatisticCommon(appStatistic.audio()));
39 cJSON_AddItemToObject(cjsonAppStatistic, "camera", CreatAppStatisticCommon(appStatistic.camera()));
40 cJSON_AddItemToObject(cjsonAppStatistic, "cpu", CreatAppStatisticCommon(appStatistic.cpu()));
41 cJSON_AddItemToObject(cjsonAppStatistic, "display", CreatAppStatisticCommon(appStatistic.display()));
42 cJSON_AddItemToObject(cjsonAppStatistic, "flashlight", CreatAppStatisticCommon(appStatistic.flashlight()));
43 cJSON_AddItemToObject(cjsonAppStatistic, "gpu", CreatAppStatisticCommon(appStatistic.gpu()));
44 cJSON_AddItemToObject(cjsonAppStatistic, "location", CreatAppStatisticCommon(appStatistic.location()));
45 cJSON_AddItemToObject(cjsonAppStatistic, "wifiscan", CreatAppStatisticCommon(appStatistic.wifiscan()));
46 return cjsonAppStatistic;
47 }
48
CreateAppDetailGpu(const AppDetailGPU & appDeGpu)49 cJSON* XpowerDecoder::CreateAppDetailGpu(const AppDetailGPU& appDeGpu)
50 {
51 cJSON* cjsonGpu = cJSON_CreateObject();
52 cJSON_AddNumberToObject(cjsonGpu, "frequency_count", appDeGpu.frequency_count());
53 cJSON* frequencyArr = cJSON_CreateArray();
54 for (int i = 0; i < appDeGpu.frequency().size(); i++) {
55 cJSON_AddItemToArray(frequencyArr, cJSON_CreateNumber(appDeGpu.frequency(i)));
56 }
57 cJSON_AddItemToObject(cjsonGpu, "frequency", frequencyArr);
58
59 cJSON* idleTimeArr = cJSON_CreateArray();
60 for (int i = 0; i < appDeGpu.idle_time().size(); i++) {
61 cJSON_AddItemToArray(idleTimeArr, cJSON_CreateNumber(appDeGpu.idle_time(i)));
62 }
63 cJSON_AddItemToObject(cjsonGpu, "idle_time", idleTimeArr);
64
65 cJSON* runTimeArr = cJSON_CreateArray();
66 for (int i = 0; i < appDeGpu.run_time().size(); i++) {
67 cJSON_AddItemToArray(runTimeArr, cJSON_CreateNumber(appDeGpu.run_time(i)));
68 }
69 cJSON_AddItemToObject(cjsonGpu, "run_time", runTimeArr);
70 return cjsonGpu;
71 }
72
CreateAppDetailWifi(const AppDetailWifi & appWifi)73 cJSON* XpowerDecoder::CreateAppDetailWifi(const AppDetailWifi& appWifi)
74 {
75 cJSON* cjsonWifi = cJSON_CreateObject();
76 cJSON_AddNumberToObject(cjsonWifi, "tx_packets", appWifi.tx_packets());
77 cJSON_AddNumberToObject(cjsonWifi, "rx_packets", appWifi.rx_packets());
78 cJSON_AddNumberToObject(cjsonWifi, "tx_bytes", appWifi.tx_bytes());
79 cJSON_AddNumberToObject(cjsonWifi, "rx_bytes", appWifi.rx_bytes());
80 return cjsonWifi;
81 }
82
CreateAppDetailDisplay(const AppDetailDisplay & appDisplay)83 cJSON* XpowerDecoder::CreateAppDetailDisplay(const AppDetailDisplay& appDisplay)
84 {
85 cJSON* cjsonDisplay = cJSON_CreateObject();
86 cJSON_AddNumberToObject(cjsonDisplay, "count_1hz", appDisplay.count_1hz());
87 cJSON_AddNumberToObject(cjsonDisplay, "count_10hz", appDisplay.count_10hz());
88 cJSON_AddNumberToObject(cjsonDisplay, "count_15hz", appDisplay.count_15hz());
89 cJSON_AddNumberToObject(cjsonDisplay, "count_24hz", appDisplay.count_24hz());
90 cJSON_AddNumberToObject(cjsonDisplay, "count_30hz", appDisplay.count_30hz());
91 cJSON_AddNumberToObject(cjsonDisplay, "count_45hz", appDisplay.count_45hz());
92 cJSON_AddNumberToObject(cjsonDisplay, "count_60hz", appDisplay.count_60hz());
93 cJSON_AddNumberToObject(cjsonDisplay, "count_90hz", appDisplay.count_90hz());
94 cJSON_AddNumberToObject(cjsonDisplay, "count_120hz", appDisplay.count_120hz());
95 cJSON_AddNumberToObject(cjsonDisplay, "count_180hz", appDisplay.count_180hz());
96 return cjsonDisplay;
97 }
98
CreateAppDetailCpu(const AppDetailCPU & appDeCpu)99 cJSON* XpowerDecoder::CreateAppDetailCpu(const AppDetailCPU& appDeCpu)
100 {
101 cJSON* cjsonCpu = cJSON_CreateObject();
102 cJSON_AddNumberToObject(cjsonCpu, "thread_count", appDeCpu.thread_count());
103 cJSON* threadLoadArr = cJSON_CreateArray();
104 for (int i = 0; i < appDeCpu.thread_load().size(); i++) {
105 cJSON_AddItemToArray(threadLoadArr, cJSON_CreateNumber(appDeCpu.thread_load(i)));
106 }
107 cJSON_AddItemToObject(cjsonCpu, "thread_load", threadLoadArr);
108
109 cJSON* threadNameArr = cJSON_CreateArray();
110 for (int i = 0; i < appDeCpu.thread_name().size(); i++) {
111 cJSON_AddItemToArray(threadNameArr, cJSON_CreateString(appDeCpu.thread_name(i).c_str()));
112 }
113 cJSON_AddItemToObject(cjsonCpu, "thread_name", threadNameArr);
114
115 cJSON* threadTimeArr = cJSON_CreateArray();
116 for (int i = 0; i < appDeCpu.thread_time().size(); i++) {
117 cJSON_AddItemToArray(threadTimeArr, cJSON_CreateNumber(appDeCpu.thread_time(i)));
118 }
119 cJSON_AddItemToObject(cjsonCpu, "thread_time", threadTimeArr);
120
121 cJSON* threadEnergyArr = cJSON_CreateArray();
122 for (int i = 0; i < appDeCpu.thread_energy().size(); i++) {
123 cJSON_AddItemToArray(threadEnergyArr, cJSON_CreateNumber(appDeCpu.thread_energy(i)));
124 }
125 cJSON_AddItemToObject(cjsonCpu, "thread_energy", threadEnergyArr);
126 return cjsonCpu;
127 }
128
CreatAppStatisticCommon(const AppStatisticCommon & appCom)129 cJSON* XpowerDecoder::CreatAppStatisticCommon(const AppStatisticCommon& appCom)
130 {
131 cJSON* cjsonAppCom = cJSON_CreateObject();
132 cJSON_AddNumberToObject(cjsonAppCom, "energy", appCom.energy());
133 cJSON_AddNumberToObject(cjsonAppCom, "time", appCom.time());
134 return cjsonAppCom;
135 }
136
CreateRealBattery(const RealBattery & realBattery)137 cJSON* XpowerDecoder::CreateRealBattery(const RealBattery& realBattery)
138 {
139 cJSON* cjsonBattery = cJSON_CreateObject();
140 cJSON_AddNumberToObject(cjsonBattery, "capacity", realBattery.capacity());
141 cJSON_AddNumberToObject(cjsonBattery, "charge", realBattery.charge());
142 cJSON_AddNumberToObject(cjsonBattery, "current", realBattery.current());
143 cJSON_AddNumberToObject(cjsonBattery, "gas_gauge", realBattery.gas_gauge());
144 cJSON_AddNumberToObject(cjsonBattery, "level", realBattery.level());
145 cJSON_AddNumberToObject(cjsonBattery, "screen", realBattery.screen());
146 return cjsonBattery;
147 }
148
CreateComponentTopCommon(const ComponentTopCommon & topCommon)149 cJSON* XpowerDecoder::CreateComponentTopCommon(const ComponentTopCommon& topCommon)
150 {
151 cJSON* cjsonTopCommon = cJSON_CreateObject();
152 cJSON_AddNumberToObject(cjsonTopCommon, "count", topCommon.count());
153 cJSON* appnameArr = cJSON_CreateArray();
154 for (int i = 0; i < topCommon.appname().size(); i++) {
155 cJSON_AddItemToArray(appnameArr, cJSON_CreateString(topCommon.appname(i).c_str()));
156 }
157 cJSON_AddItemToObject(cjsonTopCommon, "appname", appnameArr);
158
159 cJSON* durationArr = cJSON_CreateArray();
160 for (int i = 0; i < topCommon.background_duration().size(); i++) {
161 cJSON_AddItemToArray(durationArr, cJSON_CreateNumber(topCommon.background_duration(i)));
162 }
163 cJSON_AddItemToObject(cjsonTopCommon, "background_duration", durationArr);
164
165 cJSON* energyArr = cJSON_CreateArray();
166 for (int i = 0; i < topCommon.background_energy().size(); i++) {
167 cJSON_AddItemToArray(energyArr, cJSON_CreateNumber(topCommon.background_energy(i)));
168 }
169 cJSON_AddItemToObject(cjsonTopCommon, "background_energy", energyArr);
170
171 cJSON* foreDurationArr = cJSON_CreateArray();
172 for (int i = 0; i < topCommon.foreground_duration().size(); i++) {
173 cJSON_AddItemToArray(foreDurationArr, cJSON_CreateNumber(topCommon.foreground_duration(i)));
174 }
175 cJSON_AddItemToObject(cjsonTopCommon, "foreground_duration", foreDurationArr);
176
177 cJSON* foreEnergyArr = cJSON_CreateArray();
178 for (int i = 0; i < topCommon.foreground_energy().size(); i++) {
179 cJSON_AddItemToArray(foreEnergyArr, cJSON_CreateNumber(topCommon.foreground_energy(i)));
180 }
181 cJSON_AddItemToObject(cjsonTopCommon, "foreground_energy", foreEnergyArr);
182
183 cJSON* screenDuraArr = cJSON_CreateArray();
184 for (int i = 0; i < topCommon.screen_off_duration().size(); i++) {
185 cJSON_AddItemToArray(screenDuraArr, cJSON_CreateNumber(topCommon.screen_off_duration(i)));
186 }
187 cJSON_AddItemToObject(cjsonTopCommon, "screen_off_duration", screenDuraArr);
188
189 cJSON* screenEnergyArr = cJSON_CreateArray();
190 for (int i = 0; i < topCommon.screen_off_energy().size(); i++) {
191 cJSON_AddItemToArray(screenEnergyArr, cJSON_CreateNumber(topCommon.screen_off_energy(i)));
192 }
193 cJSON_AddItemToObject(cjsonTopCommon, "screen_off_energy", screenEnergyArr);
194
195 cJSON* screenOnDuraArr = cJSON_CreateArray();
196 for (int i = 0; i < topCommon.screen_on_duration().size(); i++) {
197 cJSON_AddItemToArray(screenOnDuraArr, cJSON_CreateNumber(topCommon.screen_on_duration(i)));
198 }
199 cJSON_AddItemToObject(cjsonTopCommon, "screen_on_duration", screenOnDuraArr);
200
201 cJSON* screenOnEnergyArr = cJSON_CreateArray();
202 for (int i = 0; i < topCommon.screen_on_energy().size(); i++) {
203 cJSON_AddItemToArray(screenOnEnergyArr, cJSON_CreateNumber(topCommon.screen_on_energy(i)));
204 }
205 cJSON_AddItemToObject(cjsonTopCommon, "screen_on_energy", screenOnEnergyArr);
206 return cjsonTopCommon;
207 }
CreateComponentTopCamera(const ComponentTopCamera & topCamera)208 cJSON* XpowerDecoder::CreateComponentTopCamera(const ComponentTopCamera& topCamera)
209 {
210 cJSON* cjsonTopCommon = cJSON_CreateObject();
211 cJSON_AddNumberToObject(cjsonTopCommon, "count", topCamera.count());
212 cJSON* appnameArr = cJSON_CreateArray();
213 for (int i = 0; i < topCamera.appname().size(); i++) {
214 cJSON_AddItemToArray(appnameArr, cJSON_CreateString(topCamera.appname(i).c_str()));
215 }
216 cJSON_AddItemToObject(cjsonTopCommon, "appname", appnameArr);
217
218 cJSON* cameryIdArr = cJSON_CreateArray();
219 for (int i = 0; i < topCamera.camera_id().size(); i++) {
220 cJSON_AddItemToArray(cameryIdArr, cJSON_CreateNumber(topCamera.camera_id(i)));
221 }
222 cJSON_AddItemToObject(cjsonTopCommon, "camera_id", cameryIdArr);
223
224 cJSON* durationArr = cJSON_CreateArray();
225 for (int i = 0; i < topCamera.background_duration().size(); i++) {
226 cJSON_AddItemToArray(durationArr, cJSON_CreateNumber(topCamera.background_duration(i)));
227 }
228 cJSON_AddItemToObject(cjsonTopCommon, "background_duration", durationArr);
229
230 cJSON* energyArr = cJSON_CreateArray();
231 for (int i = 0; i < topCamera.background_energy().size(); i++) {
232 cJSON_AddItemToArray(energyArr, cJSON_CreateNumber(topCamera.background_energy(i)));
233 }
234 cJSON_AddItemToObject(cjsonTopCommon, "background_energy", energyArr);
235
236 cJSON* foreDurationArr = cJSON_CreateArray();
237 for (int i = 0; i < topCamera.foreground_duration().size(); i++) {
238 cJSON_AddItemToArray(foreDurationArr, cJSON_CreateNumber(topCamera.foreground_duration(i)));
239 }
240 cJSON_AddItemToObject(cjsonTopCommon, "foreground_duration", foreDurationArr);
241
242 cJSON* foreEnergyArr = cJSON_CreateArray();
243 for (int i = 0; i < topCamera.foreground_energy().size(); i++) {
244 cJSON_AddItemToArray(foreEnergyArr, cJSON_CreateNumber(topCamera.foreground_energy(i)));
245 }
246 cJSON_AddItemToObject(cjsonTopCommon, "foreground_energy", foreEnergyArr);
247
248 cJSON* screenDuraArr = cJSON_CreateArray();
249 for (int i = 0; i < topCamera.screen_off_duration().size(); i++) {
250 cJSON_AddItemToArray(screenDuraArr, cJSON_CreateNumber(topCamera.screen_off_duration(i)));
251 }
252 cJSON_AddItemToObject(cjsonTopCommon, "screen_off_duration", screenDuraArr);
253
254 cJSON* screenEnergyArr = cJSON_CreateArray();
255 for (int i = 0; i < topCamera.screen_off_energy().size(); i++) {
256 cJSON_AddItemToArray(screenEnergyArr, cJSON_CreateNumber(topCamera.screen_off_energy(i)));
257 }
258 cJSON_AddItemToObject(cjsonTopCommon, "screen_off_energy", screenEnergyArr);
259
260 cJSON* screenOnDuraArr = cJSON_CreateArray();
261 for (int i = 0; i < topCamera.screen_on_duration().size(); i++) {
262 cJSON_AddItemToArray(screenOnDuraArr, cJSON_CreateNumber(topCamera.screen_on_duration(i)));
263 }
264 cJSON_AddItemToObject(cjsonTopCommon, "screen_on_duration", screenOnDuraArr);
265
266 cJSON* screenOnEnergyArr = cJSON_CreateArray();
267 for (int i = 0; i < topCamera.screen_on_energy().size(); i++) {
268 cJSON_AddItemToArray(screenOnEnergyArr, cJSON_CreateNumber(topCamera.screen_on_energy(i)));
269 }
270 cJSON_AddItemToObject(cjsonTopCommon, "screen_on_energy", screenOnEnergyArr);
271 return cjsonTopCommon;
272 }
273
CreateComponentTopCpu(const ComponentTopCpu & topCpu)274 cJSON* XpowerDecoder::CreateComponentTopCpu(const ComponentTopCpu& topCpu)
275 {
276 cJSON* cjsonTopCommon = cJSON_CreateObject();
277 cJSON_AddNumberToObject(cjsonTopCommon, "count", topCpu.count());
278 cJSON* appnameArr = cJSON_CreateArray();
279 for (int i = 0; i < topCpu.appname().size(); i++) {
280 cJSON_AddItemToArray(appnameArr, cJSON_CreateString(topCpu.appname(i).c_str()));
281 }
282 cJSON_AddItemToObject(cjsonTopCommon, "appname", appnameArr);
283
284 cJSON* userIdArr = cJSON_CreateArray();
285 for (int i = 0; i < topCpu.uid().size(); i++) {
286 cJSON_AddItemToArray(userIdArr, cJSON_CreateNumber(topCpu.uid(i)));
287 }
288 cJSON_AddItemToObject(cjsonTopCommon, "uid", userIdArr);
289
290 cJSON* durationArr = cJSON_CreateArray();
291 for (int i = 0; i < topCpu.background_duration().size(); i++) {
292 cJSON_AddItemToArray(durationArr, cJSON_CreateNumber(topCpu.background_duration(i)));
293 }
294 cJSON_AddItemToObject(cjsonTopCommon, "background_duration", durationArr);
295
296 cJSON* energyArr = cJSON_CreateArray();
297 for (int i = 0; i < topCpu.background_energy().size(); i++) {
298 cJSON_AddItemToArray(energyArr, cJSON_CreateNumber(topCpu.background_energy(i)));
299 }
300 cJSON_AddItemToObject(cjsonTopCommon, "background_energy", energyArr);
301
302 cJSON* foreDurationArr = cJSON_CreateArray();
303 for (int i = 0; i < topCpu.foreground_duration().size(); i++) {
304 cJSON_AddItemToArray(foreDurationArr, cJSON_CreateNumber(topCpu.foreground_duration(i)));
305 }
306 cJSON_AddItemToObject(cjsonTopCommon, "foreground_duration", foreDurationArr);
307
308 cJSON* foreEnergyArr = cJSON_CreateArray();
309 for (int i = 0; i < topCpu.foreground_energy().size(); i++) {
310 cJSON_AddItemToArray(foreEnergyArr, cJSON_CreateNumber(topCpu.foreground_energy(i)));
311 }
312 cJSON_AddItemToObject(cjsonTopCommon, "foreground_energy", foreEnergyArr);
313
314 cJSON* screenDuraArr = cJSON_CreateArray();
315 for (int i = 0; i < topCpu.screen_off_duration().size(); i++) {
316 cJSON_AddItemToArray(screenDuraArr, cJSON_CreateNumber(topCpu.screen_off_duration(i)));
317 }
318 cJSON_AddItemToObject(cjsonTopCommon, "screen_off_duration", screenDuraArr);
319
320 cJSON* screenEnergyArr = cJSON_CreateArray();
321 for (int i = 0; i < topCpu.screen_off_energy().size(); i++) {
322 cJSON_AddItemToArray(screenEnergyArr, cJSON_CreateNumber(topCpu.screen_off_energy(i)));
323 }
324 cJSON_AddItemToObject(cjsonTopCommon, "screen_off_energy", screenEnergyArr);
325
326 cJSON* screenOnDuraArr = cJSON_CreateArray();
327 for (int i = 0; i < topCpu.screen_on_duration().size(); i++) {
328 cJSON_AddItemToArray(screenOnDuraArr, cJSON_CreateNumber(topCpu.screen_on_duration(i)));
329 }
330 cJSON_AddItemToObject(cjsonTopCommon, "screen_on_duration", screenOnDuraArr);
331
332 cJSON* screenOnEnergyArr = cJSON_CreateArray();
333 for (int i = 0; i < topCpu.screen_on_energy().size(); i++) {
334 cJSON_AddItemToArray(screenOnEnergyArr, cJSON_CreateNumber(topCpu.screen_on_energy(i)));
335 }
336 cJSON_AddItemToObject(cjsonTopCommon, "screen_on_energy", screenOnEnergyArr);
337
338 cJSON* loadArr = cJSON_CreateArray();
339 for (int i = 0; i < topCpu.load().size(); i++) {
340 cJSON_AddItemToArray(loadArr, cJSON_CreateNumber(topCpu.load(i)));
341 }
342 cJSON_AddItemToObject(cjsonTopCommon, "load", loadArr);
343
344 return cjsonTopCommon;
345 }
346
CreateComponentTopDisplay(const ComponentTopDisplay & topDisplay)347 cJSON* XpowerDecoder::CreateComponentTopDisplay(const ComponentTopDisplay& topDisplay)
348 {
349 cJSON* cjsonTopCommon = cJSON_CreateObject();
350 cJSON_AddNumberToObject(cjsonTopCommon, "count", topDisplay.count());
351 cJSON* appnameArr = cJSON_CreateArray();
352 for (int i = 0; i < topDisplay.appname().size(); i++) {
353 cJSON_AddItemToArray(appnameArr, cJSON_CreateString(topDisplay.appname(i).c_str()));
354 }
355 cJSON_AddItemToObject(cjsonTopCommon, "appname", appnameArr);
356
357 cJSON* timeArr = cJSON_CreateArray();
358 for (int i = 0; i < topDisplay.time().size(); i++) {
359 cJSON_AddItemToArray(timeArr, cJSON_CreateNumber(topDisplay.time(i)));
360 }
361 cJSON_AddItemToObject(cjsonTopCommon, "time", timeArr);
362
363 cJSON* energyArr = cJSON_CreateArray();
364 for (int i = 0; i < topDisplay.energy().size(); i++) {
365 cJSON_AddItemToArray(energyArr, cJSON_CreateNumber(topDisplay.energy(i)));
366 }
367 cJSON_AddItemToObject(cjsonTopCommon, "energy", energyArr);
368 return cjsonTopCommon;
369 }
370
CreateComponentTop(const ComponentTop & componentTop)371 cJSON* XpowerDecoder::CreateComponentTop(const ComponentTop& componentTop)
372 {
373 cJSON* jsonComTop = cJSON_CreateObject();
374 cJSON_AddItemToObject(jsonComTop, "audio", CreateComponentTopCommon(componentTop.audio()));
375 cJSON_AddItemToObject(jsonComTop, "bluetooth", CreateComponentTopCommon(componentTop.bluetooth()));
376 cJSON_AddItemToObject(jsonComTop, "camera", CreateComponentTopCamera(componentTop.camera()));
377 cJSON_AddItemToObject(jsonComTop, "cpu", CreateComponentTopCpu(componentTop.cpu()));
378 cJSON_AddItemToObject(jsonComTop, "display", CreateComponentTopDisplay(componentTop.display()));
379 cJSON_AddItemToObject(jsonComTop, "flashlight", CreateComponentTopCommon(componentTop.flashlight()));
380 cJSON_AddItemToObject(jsonComTop, "gpu", CreateComponentTopDisplay(componentTop.gpu()));
381 cJSON_AddItemToObject(jsonComTop, "location", CreateComponentTopCommon(componentTop.location()));
382 cJSON_AddItemToObject(jsonComTop, "wifiscan", CreateComponentTopCommon(componentTop.wifiscan()));
383 return jsonComTop;
384 }
385
CreateAbnormalEventInfo(const AbnormalEventInfo & eventInfo)386 cJSON* XpowerDecoder::CreateAbnormalEventInfo(const AbnormalEventInfo& eventInfo)
387 {
388 cJSON* jsonEventInfo = cJSON_CreateObject();
389 cJSON_AddStringToObject(jsonEventInfo, "abnormal_type",
390 eventInfo.AbnormalType_Name(eventInfo.abnormal_type()).c_str());
391 cJSON_AddNumberToObject(jsonEventInfo, "usage_time", eventInfo.usage_time());
392 cJSON_AddNumberToObject(jsonEventInfo, "usage_energy", eventInfo.usage_energy());
393 cJSON_AddNumberToObject(jsonEventInfo, "usage_load", eventInfo.usage_load());
394 cJSON_AddNumberToObject(jsonEventInfo, "usage_freq", eventInfo.usage_freq());
395 cJSON_AddNumberToObject(jsonEventInfo, "usage_count", eventInfo.usage_count());
396 return jsonEventInfo;
397 }
398
CreateAbnormalEvents(const AbnormalEvents & abnormEvent)399 cJSON* XpowerDecoder::CreateAbnormalEvents(const AbnormalEvents& abnormEvent)
400 {
401 cJSON* jsonEvent = cJSON_CreateObject();
402 cJSON_AddNumberToObject(jsonEvent, "anomaly_start_time", abnormEvent.anomaly_start_time());
403 cJSON_AddNumberToObject(jsonEvent, "anomaly_end_time", abnormEvent.anomaly_end_time());
404 cJSON_AddNumberToObject(jsonEvent, "count", abnormEvent.count());
405 cJSON* eventsArr = cJSON_CreateArray();
406 for (int i = 0; i < abnormEvent.events().size(); i++) {
407 cJSON_AddItemToArray(eventsArr, CreateAbnormalEventInfo(abnormEvent.events(i)));
408 }
409 return jsonEvent;
410 }
411
DecodeXpowerMessage(OptimizeReport & dataProto)412 std::string XpowerDecoder::DecodeXpowerMessage(OptimizeReport& dataProto)
413 {
414 std::string retStr;
415 cJSON* optReport = cJSON_CreateObject();
416 cJSON_AddNumberToObject(optReport, "start_time", dataProto.start_time());
417 cJSON_AddNumberToObject(optReport, "end_time", dataProto.end_time());
418 cJSON_AddStringToObject(optReport, "bundle_name", dataProto.bundle_name().c_str());
419 cJSON_AddNumberToObject(optReport, "message_type", dataProto.message_type());
420 uint32_t mesType = dataProto.message_type();
421 if ((mesType & OptimizeMessageType::MESSAGE_REAL_BATTERY) != 0) {
422 cJSON_AddItemToObject(optReport, "real_battery", CreateRealBattery(dataProto.real_battery()));
423 }
424 if ((mesType & OptimizeMessageType::MESSAGE_APP_STATISTIC) != 0) {
425 cJSON_AddItemToObject(optReport, "app_statistic", CreateAppStatistic(dataProto.app_statistic()));
426 }
427 if ((mesType & OptimizeMessageType::MESSAGE_APP_DETAIL) != 0) {
428 cJSON_AddItemToObject(optReport, "app_detail", CreateAppDetail(dataProto.app_detail()));
429 }
430 if ((mesType & OptimizeMessageType::MESSAGE_COMPONENT_TOP) != 0) {
431 cJSON_AddItemToObject(optReport, "component_top", CreateComponentTop(dataProto.component_top()));
432 }
433 if ((mesType & OptimizeMessageType::MESSAGE_ABNORMAL_EVENTS) != 0) {
434 cJSON_AddItemToObject(optReport, "abnormal_events", CreateAbnormalEvents(dataProto.abnormal_events()));
435 }
436 retStr = cJSON_Print(optReport);
437 cJSON_Delete(optReport);
438 return retStr;
439 }
440