1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License.
5094332d3Sopenharmony_ci * You may obtain a copy of the License at
6094332d3Sopenharmony_ci *
7094332d3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8094332d3Sopenharmony_ci *
9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and
13094332d3Sopenharmony_ci * limitations under the License.
14094332d3Sopenharmony_ci */
15094332d3Sopenharmony_ci
16094332d3Sopenharmony_ci#ifndef THERMAL_HDF_CONFIG_H
17094332d3Sopenharmony_ci#define THERMAL_HDF_CONFIG_H
18094332d3Sopenharmony_ci
19094332d3Sopenharmony_ci#include <string>
20094332d3Sopenharmony_ci#include <vector>
21094332d3Sopenharmony_ci#include <memory>
22094332d3Sopenharmony_ci#include <map>
23094332d3Sopenharmony_ci#include <libxml/xpath.h>
24094332d3Sopenharmony_ci#include <libxml/tree.h>
25094332d3Sopenharmony_ci#include <libxml/parser.h>
26094332d3Sopenharmony_ci
27094332d3Sopenharmony_ci#include "base_info_config.h"
28094332d3Sopenharmony_ci#include "sensor_info_config.h"
29094332d3Sopenharmony_ci#include "isolate_info_config.h"
30094332d3Sopenharmony_ci
31094332d3Sopenharmony_cinamespace OHOS {
32094332d3Sopenharmony_cinamespace HDI {
33094332d3Sopenharmony_cinamespace Thermal {
34094332d3Sopenharmony_cinamespace V1_1 {
35094332d3Sopenharmony_cistruct XMLThermal {
36094332d3Sopenharmony_ci    std::string version;
37094332d3Sopenharmony_ci    std::string product;
38094332d3Sopenharmony_ci};
39094332d3Sopenharmony_ci
40094332d3Sopenharmony_cistruct DfxTraceInfo {
41094332d3Sopenharmony_ci    std::string title;
42094332d3Sopenharmony_ci    std::string valuePath;
43094332d3Sopenharmony_ci};
44094332d3Sopenharmony_ci
45094332d3Sopenharmony_cistruct XmlTraceConfig {
46094332d3Sopenharmony_ci    std::string outPath;
47094332d3Sopenharmony_ci};
48094332d3Sopenharmony_ci
49094332d3Sopenharmony_ciclass ThermalHdfConfig {
50094332d3Sopenharmony_cipublic:
51094332d3Sopenharmony_ci    using GroupMap = std::map<std::string, std::shared_ptr<SensorInfoConfig>>;
52094332d3Sopenharmony_ci    using PollingMap = std::map<std::string, GroupMap>;
53094332d3Sopenharmony_ci    ThermalHdfConfig() {};
54094332d3Sopenharmony_ci    ~ThermalHdfConfig() = default;
55094332d3Sopenharmony_ci    ThermalHdfConfig(const ThermalHdfConfig&) = delete;
56094332d3Sopenharmony_ci    ThermalHdfConfig& operator=(const ThermalHdfConfig&) = delete;
57094332d3Sopenharmony_ci    static ThermalHdfConfig& GetInstance();
58094332d3Sopenharmony_ci
59094332d3Sopenharmony_ci    int32_t ThermalHDIConfigInit(const std::string& path);
60094332d3Sopenharmony_ci    int32_t ParseThermalHdiXMLConfig(const std::string& path);
61094332d3Sopenharmony_ci    void ParseBaseNode(xmlNodePtr node);
62094332d3Sopenharmony_ci    void ParsePollingNode(xmlNodePtr node);
63094332d3Sopenharmony_ci    void ParsePollingSubNode(xmlNodePtr node, XMLThermalNodeInfo& tn);
64094332d3Sopenharmony_ci    void ParseTracingNode(xmlNodePtr node);
65094332d3Sopenharmony_ci    void ParseTracingSubNode(xmlNodePtr node);
66094332d3Sopenharmony_ci    void ParseConfigInfo(const xmlNode* cur, std::vector<XMLThermalZoneInfo>& tzInfoList,
67094332d3Sopenharmony_ci        std::vector<XMLThermalNodeInfo>& tnInfoList);
68094332d3Sopenharmony_ci    std::string GetXmlNodeName(xmlNodePtr node, std::string &defaultName);
69094332d3Sopenharmony_ci    void GetThermalZoneNodeInfo(XMLThermalZoneInfo& tz, const xmlNode* node);
70094332d3Sopenharmony_ci    std::shared_ptr<BaseInfoConfig> GetBaseConfig()
71094332d3Sopenharmony_ci    {
72094332d3Sopenharmony_ci        return baseConfig_;
73094332d3Sopenharmony_ci    }
74094332d3Sopenharmony_ci    std::vector<DfxTraceInfo>& GetTracingInfo()
75094332d3Sopenharmony_ci    {
76094332d3Sopenharmony_ci        return traceInfo_;
77094332d3Sopenharmony_ci    }
78094332d3Sopenharmony_ci    XmlTraceConfig& GetXmlTraceConfig()
79094332d3Sopenharmony_ci    {
80094332d3Sopenharmony_ci        return traceConfig_;
81094332d3Sopenharmony_ci    }
82094332d3Sopenharmony_ci    PollingMap& GetPollingConfig()
83094332d3Sopenharmony_ci    {
84094332d3Sopenharmony_ci        return pollingMap_;
85094332d3Sopenharmony_ci    }
86094332d3Sopenharmony_ci
87094332d3Sopenharmony_ci    using IsolateInfoMap = std::map<std::string, std::shared_ptr<IsolateInfoConfig>>;
88094332d3Sopenharmony_ci    void ParseIsolateNode(xmlNodePtr node);
89094332d3Sopenharmony_ci    void ParseIsolateSubNode(xmlNodePtr node, IsolateNodeInfo& tn);
90094332d3Sopenharmony_ci    int32_t GetIsolateCpuNodePath(bool isSim, const std::string &type, std::string &path);
91094332d3Sopenharmony_ciprivate:
92094332d3Sopenharmony_ci    std::shared_ptr<BaseInfoConfig> baseConfig_;
93094332d3Sopenharmony_ci    PollingMap pollingMap_;
94094332d3Sopenharmony_ci    XMLThermal thermal_;
95094332d3Sopenharmony_ci    XmlTraceConfig traceConfig_;
96094332d3Sopenharmony_ci    std::vector<DfxTraceInfo> traceInfo_;
97094332d3Sopenharmony_ci    IsolateInfoMap isolateInfoMap_;
98094332d3Sopenharmony_ci};
99094332d3Sopenharmony_ci} // V1_1
100094332d3Sopenharmony_ci} // Thermal
101094332d3Sopenharmony_ci} // HDI
102094332d3Sopenharmony_ci} // OHOS
103094332d3Sopenharmony_ci
104094332d3Sopenharmony_ci#endif // THERMAL_HDF_CONFIG_H
105