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