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_ZONE_MANAGER_H
17094332d3Sopenharmony_ci#define THERMAL_ZONE_MANAGER_H
18094332d3Sopenharmony_ci
19094332d3Sopenharmony_ci#include <list>
20094332d3Sopenharmony_ci#include <map>
21094332d3Sopenharmony_ci#include <string>
22094332d3Sopenharmony_ci#include <mutex>
23094332d3Sopenharmony_ci#include "thermal_hdf_config.h"
24094332d3Sopenharmony_ci#include "v1_1/thermal_types.h"
25094332d3Sopenharmony_ci#include "v1_1/ithermal_callback.h"
26094332d3Sopenharmony_ci#include "v1_1/ifan_callback.h"
27094332d3Sopenharmony_ci
28094332d3Sopenharmony_cinamespace OHOS {
29094332d3Sopenharmony_cinamespace HDI {
30094332d3Sopenharmony_cinamespace Thermal {
31094332d3Sopenharmony_cinamespace V1_1 {
32094332d3Sopenharmony_cistruct ThermalZoneSysfsPathInfo {
33094332d3Sopenharmony_ci    char* name;
34094332d3Sopenharmony_ci    char temperturePath[PATH_MAX];
35094332d3Sopenharmony_ci    char typePath[PATH_MAX];
36094332d3Sopenharmony_ci    int32_t fd;
37094332d3Sopenharmony_ci};
38094332d3Sopenharmony_ci
39094332d3Sopenharmony_cistruct ThermalSysfsPathInfo {
40094332d3Sopenharmony_ci    char* name;
41094332d3Sopenharmony_ci    char thermalZonePath[PATH_MAX];
42094332d3Sopenharmony_ci    char coolingDevicePath[PATH_MAX];
43094332d3Sopenharmony_ci    int32_t fd;
44094332d3Sopenharmony_ci};
45094332d3Sopenharmony_ci
46094332d3Sopenharmony_ciclass ThermalZoneManager {
47094332d3Sopenharmony_cipublic:
48094332d3Sopenharmony_ci    ThermalZoneManager() = default;
49094332d3Sopenharmony_ci    ~ThermalZoneManager() = default;
50094332d3Sopenharmony_ci
51094332d3Sopenharmony_ci    ThermalZoneSysfsPathInfo GetTzPathInfo()
52094332d3Sopenharmony_ci    {
53094332d3Sopenharmony_ci        return tzSysPathInfo_;
54094332d3Sopenharmony_ci    };
55094332d3Sopenharmony_ci
56094332d3Sopenharmony_ci    void SetTzPathInfo(ThermalZoneSysfsPathInfo tzSysPathInfo)
57094332d3Sopenharmony_ci    {
58094332d3Sopenharmony_ci        tzSysPathInfo_ = tzSysPathInfo;
59094332d3Sopenharmony_ci    }
60094332d3Sopenharmony_ci
61094332d3Sopenharmony_ci    std::list<ThermalZoneSysfsPathInfo> GetLTZPathInfo()
62094332d3Sopenharmony_ci    {
63094332d3Sopenharmony_ci        return lTzSysPathInfo_;
64094332d3Sopenharmony_ci    }
65094332d3Sopenharmony_ci
66094332d3Sopenharmony_ci    std::vector<ThermalZoneInfo> GetlTzInfo()
67094332d3Sopenharmony_ci    {
68094332d3Sopenharmony_ci        return tzInfoList_;
69094332d3Sopenharmony_ci    }
70094332d3Sopenharmony_ci
71094332d3Sopenharmony_ci    int32_t ConvertInt(const std::string &value)
72094332d3Sopenharmony_ci    {
73094332d3Sopenharmony_ci        return std::stoi(value.c_str());
74094332d3Sopenharmony_ci    }
75094332d3Sopenharmony_ci
76094332d3Sopenharmony_ci    void SetThermalEventCb(const sptr<IThermalCallback> &thermalCb)
77094332d3Sopenharmony_ci    {
78094332d3Sopenharmony_ci        thermalCb_ = thermalCb;
79094332d3Sopenharmony_ci    }
80094332d3Sopenharmony_ci
81094332d3Sopenharmony_ci    const sptr<IThermalCallback>& GetThermalEventCb()
82094332d3Sopenharmony_ci    {
83094332d3Sopenharmony_ci        return thermalCb_;
84094332d3Sopenharmony_ci    }
85094332d3Sopenharmony_ci
86094332d3Sopenharmony_ci    void DelThermalEventCb()
87094332d3Sopenharmony_ci    {
88094332d3Sopenharmony_ci        thermalCb_ = nullptr;
89094332d3Sopenharmony_ci    }
90094332d3Sopenharmony_ci
91094332d3Sopenharmony_ci    void SetFanEventCb(const sptr<IFanCallback> &fanCb)
92094332d3Sopenharmony_ci    {
93094332d3Sopenharmony_ci        fanCb_ = fanCb;
94094332d3Sopenharmony_ci    }
95094332d3Sopenharmony_ci
96094332d3Sopenharmony_ci    const sptr<IFanCallback>& GetFanEventCb()
97094332d3Sopenharmony_ci    {
98094332d3Sopenharmony_ci        return fanCb_;
99094332d3Sopenharmony_ci    }
100094332d3Sopenharmony_ci
101094332d3Sopenharmony_ci    void DelFanEventCb()
102094332d3Sopenharmony_ci    {
103094332d3Sopenharmony_ci        fanCb_ = nullptr;
104094332d3Sopenharmony_ci    }
105094332d3Sopenharmony_ci
106094332d3Sopenharmony_ci    int32_t GetMaxReportTime()
107094332d3Sopenharmony_ci    {
108094332d3Sopenharmony_ci        return maxReportTime_;
109094332d3Sopenharmony_ci    }
110094332d3Sopenharmony_ci
111094332d3Sopenharmony_ci    int32_t GetMaxCd()
112094332d3Sopenharmony_ci    {
113094332d3Sopenharmony_ci        return maxCd_;
114094332d3Sopenharmony_ci    }
115094332d3Sopenharmony_ci
116094332d3Sopenharmony_ci    void Init();
117094332d3Sopenharmony_ci    int32_t UpdateThermalZoneData();
118094332d3Sopenharmony_ci    void CalculateMaxCd();
119094332d3Sopenharmony_ci    void ReportThermalZoneData(int32_t reportTime);
120094332d3Sopenharmony_ci    HdfThermalCallbackInfo GetCallbackInfo();
121094332d3Sopenharmony_ci    void DumpPollingInfo();
122094332d3Sopenharmony_ci
123094332d3Sopenharmony_ciprivate:
124094332d3Sopenharmony_ci    void InitThermalZoneSysfs();
125094332d3Sopenharmony_ci    void CallbackOnEvent(std::string name, HdfThermalCallbackInfo &info);
126094332d3Sopenharmony_ci    void CollectCallbackInfo(
127094332d3Sopenharmony_ci        HdfThermalCallbackInfo &callbackInfo, const std::shared_ptr<SensorInfoConfig> &sensorInfo, int32_t reportTime);
128094332d3Sopenharmony_ci    void UpdateDataType(XMLThermalZoneInfo& tzIter, ReportedThermalData& data, int32_t tzn);
129094332d3Sopenharmony_ci    void UpdateThermalZoneInfo(std::shared_ptr<SensorInfoConfig> &infoConfig);
130094332d3Sopenharmony_ci    int32_t GetIntervalCommonDivisor(std::vector<int32_t> intervalList);
131094332d3Sopenharmony_ci    struct ThermalZoneSysfsPathInfo tzSysPathInfo_;
132094332d3Sopenharmony_ci    std::list<ThermalZoneSysfsPathInfo> lTzSysPathInfo_;
133094332d3Sopenharmony_ci    std::vector<ThermalZoneInfo> tzInfoList_;
134094332d3Sopenharmony_ci    ThermalHdfConfig::PollingMap pollingMap_;
135094332d3Sopenharmony_ci    sptr<IThermalCallback> thermalCb_;
136094332d3Sopenharmony_ci    sptr<IFanCallback> fanCb_;
137094332d3Sopenharmony_ci    int32_t maxCd_;
138094332d3Sopenharmony_ci    int32_t maxReportTime_;
139094332d3Sopenharmony_ci    std::map<std::string, int32_t> tznMap_;
140094332d3Sopenharmony_ci    std::mutex mutex_;
141094332d3Sopenharmony_ci};
142094332d3Sopenharmony_ci} // V1_1
143094332d3Sopenharmony_ci} // Thermal
144094332d3Sopenharmony_ci} // HDI
145094332d3Sopenharmony_ci} // OHOS
146094332d3Sopenharmony_ci#endif // THERMAL_ZONE_MANAGER_H
147