137a09cd7Sopenharmony_ci/* 237a09cd7Sopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 337a09cd7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 437a09cd7Sopenharmony_ci * you may not use this file except in compliance with the License. 537a09cd7Sopenharmony_ci * You may obtain a copy of the License at 637a09cd7Sopenharmony_ci * 737a09cd7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 837a09cd7Sopenharmony_ci * 937a09cd7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1037a09cd7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1137a09cd7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1237a09cd7Sopenharmony_ci * See the License for the specific language governing permissions and 1337a09cd7Sopenharmony_ci * limitations under the License. 1437a09cd7Sopenharmony_ci */ 1537a09cd7Sopenharmony_ci 1637a09cd7Sopenharmony_ci#ifndef THERMAL_SERVICE_H 1737a09cd7Sopenharmony_ci#define THERMAL_SERVICE_H 1837a09cd7Sopenharmony_ci 1937a09cd7Sopenharmony_ci#include <atomic> 2037a09cd7Sopenharmony_ci#include <memory> 2137a09cd7Sopenharmony_ci#include "iremote_object.h" 2237a09cd7Sopenharmony_ci#include "system_ability.h" 2337a09cd7Sopenharmony_ci 2437a09cd7Sopenharmony_ci#include "action_popup.h" 2537a09cd7Sopenharmony_ci#include "fan_callback.h" 2637a09cd7Sopenharmony_ci#include "fan_fault_detect.h" 2737a09cd7Sopenharmony_ci#include "hdi_service_status_listener.h" 2837a09cd7Sopenharmony_ci#include "ithermal_level_callback.h" 2937a09cd7Sopenharmony_ci#include "ithermal_temp_callback.h" 3037a09cd7Sopenharmony_ci#include "state_machine.h" 3137a09cd7Sopenharmony_ci#include "thermal_action_manager.h" 3237a09cd7Sopenharmony_ci#include "thermal_callback.h" 3337a09cd7Sopenharmony_ci#include "thermal_config_base_info.h" 3437a09cd7Sopenharmony_ci#include "thermal_config_sensor_cluster.h" 3537a09cd7Sopenharmony_ci#include "thermal_observer.h" 3637a09cd7Sopenharmony_ci#include "thermal_policy.h" 3737a09cd7Sopenharmony_ci#include "thermal_sensor_info.h" 3837a09cd7Sopenharmony_ci#include "thermal_service_subscriber.h" 3937a09cd7Sopenharmony_ci#include "thermal_srv_config_parser.h" 4037a09cd7Sopenharmony_ci#include "thermal_srv_sensor_info.h" 4137a09cd7Sopenharmony_ci#include "thermal_srv_stub.h" 4237a09cd7Sopenharmony_ci#include "v1_1/ithermal_interface.h" 4337a09cd7Sopenharmony_ci#include "v1_1/thermal_types.h" 4437a09cd7Sopenharmony_ci#ifdef HAS_THERMAL_AIRPLANE_MANAGER_PART 4537a09cd7Sopenharmony_ci#include "common_event_data.h" 4637a09cd7Sopenharmony_ci#include "common_event_manager.h" 4737a09cd7Sopenharmony_ci#include "common_event_subscribe_info.h" 4837a09cd7Sopenharmony_ci#include "common_event_support.h" 4937a09cd7Sopenharmony_ci#endif 5037a09cd7Sopenharmony_ci 5137a09cd7Sopenharmony_cinamespace OHOS { 5237a09cd7Sopenharmony_cinamespace PowerMgr { 5337a09cd7Sopenharmony_ciusing TypeTempMap = std::map<std::string, int32_t>; 5437a09cd7Sopenharmony_ciusing namespace OHOS::HDI::Thermal::V1_1; 5537a09cd7Sopenharmony_ciusing namespace OHOS::HDI::ServiceManager::V1_0; 5637a09cd7Sopenharmony_ciclass ThermalService final : public SystemAbility, public ThermalSrvStub { 5737a09cd7Sopenharmony_ci DECLARE_SYSTEM_ABILITY(ThermalService); 5837a09cd7Sopenharmony_ci DISALLOW_COPY_AND_MOVE(ThermalService); 5937a09cd7Sopenharmony_ci 6037a09cd7Sopenharmony_cipublic: 6137a09cd7Sopenharmony_ci ThermalService(); 6237a09cd7Sopenharmony_ci virtual ~ThermalService(); 6337a09cd7Sopenharmony_ci virtual void OnStart() override; 6437a09cd7Sopenharmony_ci virtual void OnStop() override; 6537a09cd7Sopenharmony_ci virtual void OnAddSystemAbility(int32_t systemAbilityId, const std::string& deviceId) override; 6637a09cd7Sopenharmony_ci virtual int32_t Dump(int fd, const std::vector<std::u16string>& args) override; 6737a09cd7Sopenharmony_ci bool SubscribeThermalTempCallback( 6837a09cd7Sopenharmony_ci const std::vector<std::string>& typeList, const sptr<IThermalTempCallback>& callback) override; 6937a09cd7Sopenharmony_ci bool UnSubscribeThermalTempCallback(const sptr<IThermalTempCallback>& callback) override; 7037a09cd7Sopenharmony_ci bool SubscribeThermalLevelCallback(const sptr<IThermalLevelCallback>& callback) override; 7137a09cd7Sopenharmony_ci bool UnSubscribeThermalLevelCallback(const sptr<IThermalLevelCallback>& callback) override; 7237a09cd7Sopenharmony_ci bool SubscribeThermalActionCallback(const std::vector<std::string>& actionList, const std::string& desc, 7337a09cd7Sopenharmony_ci const sptr<IThermalActionCallback>& callback) override; 7437a09cd7Sopenharmony_ci bool UnSubscribeThermalActionCallback(const sptr<IThermalActionCallback>& callback) override; 7537a09cd7Sopenharmony_ci bool GetThermalSrvSensorInfo(const SensorType& type, ThermalSrvSensorInfo& sensorInfo) override; 7637a09cd7Sopenharmony_ci bool GetThermalLevel(ThermalLevel& level) override; 7737a09cd7Sopenharmony_ci bool GetThermalInfo() override; 7837a09cd7Sopenharmony_ci bool SetScene(const std::string& scene) override; 7937a09cd7Sopenharmony_ci bool UpdateThermalState(const std::string& tag, const std::string& val, bool isImmed = false) override; 8037a09cd7Sopenharmony_ci bool CreateConfigModule(); 8137a09cd7Sopenharmony_ci virtual std::string ShellDump(const std::vector<std::string>& args, uint32_t argc) override; 8237a09cd7Sopenharmony_ci 8337a09cd7Sopenharmony_ci int32_t HandleThermalCallbackEvent(const HdfThermalCallbackInfo& event); 8437a09cd7Sopenharmony_ci int32_t HandleFanCallbackEvent(const HdfThermalCallbackInfo& event); 8537a09cd7Sopenharmony_ci bool HandleTempEmulation(const TypeTempMap& typeTempMap); 8637a09cd7Sopenharmony_ci static sptr<ThermalService> GetInstance(); 8737a09cd7Sopenharmony_ci static void DestroyInstance(); 8837a09cd7Sopenharmony_ci 8937a09cd7Sopenharmony_ci void SetTempReportSwitch(bool enable) 9037a09cd7Sopenharmony_ci { 9137a09cd7Sopenharmony_ci isTempReport_ = enable; 9237a09cd7Sopenharmony_ci } 9337a09cd7Sopenharmony_ci 9437a09cd7Sopenharmony_ci bool IsServiceReady() const 9537a09cd7Sopenharmony_ci { 9637a09cd7Sopenharmony_ci return ready_; 9737a09cd7Sopenharmony_ci } 9837a09cd7Sopenharmony_ci 9937a09cd7Sopenharmony_ci std::shared_ptr<ThermalConfigBaseInfo> GetBaseinfoObj() const 10037a09cd7Sopenharmony_ci { 10137a09cd7Sopenharmony_ci return baseInfo_; 10237a09cd7Sopenharmony_ci } 10337a09cd7Sopenharmony_ci std::shared_ptr<StateMachine> GetStateMachineObj() const 10437a09cd7Sopenharmony_ci { 10537a09cd7Sopenharmony_ci return state_; 10637a09cd7Sopenharmony_ci } 10737a09cd7Sopenharmony_ci std::shared_ptr<ThermalActionManager> GetActionManagerObj() const 10837a09cd7Sopenharmony_ci { 10937a09cd7Sopenharmony_ci return actionMgr_; 11037a09cd7Sopenharmony_ci } 11137a09cd7Sopenharmony_ci std::shared_ptr<ThermalPolicy> GetPolicy() const 11237a09cd7Sopenharmony_ci { 11337a09cd7Sopenharmony_ci return policy_; 11437a09cd7Sopenharmony_ci } 11537a09cd7Sopenharmony_ci std::shared_ptr<ThermalObserver> GetObserver() const 11637a09cd7Sopenharmony_ci { 11737a09cd7Sopenharmony_ci return observer_; 11837a09cd7Sopenharmony_ci } 11937a09cd7Sopenharmony_ci std::shared_ptr<ThermalSensorInfo> GetSensorInfo() const 12037a09cd7Sopenharmony_ci { 12137a09cd7Sopenharmony_ci return info_; 12237a09cd7Sopenharmony_ci } 12337a09cd7Sopenharmony_ci std::shared_ptr<ThermalServiceSubscriber> GetSubscriber() const 12437a09cd7Sopenharmony_ci { 12537a09cd7Sopenharmony_ci return serviceSubscriber_; 12637a09cd7Sopenharmony_ci } 12737a09cd7Sopenharmony_ci 12837a09cd7Sopenharmony_ci std::shared_ptr<ActionPopup> GetActionPopup() const 12937a09cd7Sopenharmony_ci { 13037a09cd7Sopenharmony_ci return popup_; 13137a09cd7Sopenharmony_ci } 13237a09cd7Sopenharmony_ci 13337a09cd7Sopenharmony_ci sptr<IThermalInterface> GetThermalInterface() const 13437a09cd7Sopenharmony_ci { 13537a09cd7Sopenharmony_ci return thermalInterface_; 13637a09cd7Sopenharmony_ci } 13737a09cd7Sopenharmony_ci 13837a09cd7Sopenharmony_ci bool GetSimulationXml() 13937a09cd7Sopenharmony_ci { 14037a09cd7Sopenharmony_ci return isSimulation_; 14137a09cd7Sopenharmony_ci } 14237a09cd7Sopenharmony_ci 14337a09cd7Sopenharmony_ci void SetSimulationXml(bool isSimulation) 14437a09cd7Sopenharmony_ci { 14537a09cd7Sopenharmony_ci isSimulation_ = isSimulation; 14637a09cd7Sopenharmony_ci } 14737a09cd7Sopenharmony_ci 14837a09cd7Sopenharmony_ci std::shared_ptr<FanFaultDetect> GetFanFaultDetect() const 14937a09cd7Sopenharmony_ci { 15037a09cd7Sopenharmony_ci return fanFaultDetect_; 15137a09cd7Sopenharmony_ci } 15237a09cd7Sopenharmony_ci 15337a09cd7Sopenharmony_ci ThermalSrvConfigParser& GetConfigParser() 15437a09cd7Sopenharmony_ci { 15537a09cd7Sopenharmony_ci return configParser_; 15637a09cd7Sopenharmony_ci } 15737a09cd7Sopenharmony_ci 15837a09cd7Sopenharmony_ci void InitSystemTestModules() 15937a09cd7Sopenharmony_ci { 16037a09cd7Sopenharmony_ci InitConfigModule(); 16137a09cd7Sopenharmony_ci } 16237a09cd7Sopenharmony_ci 16337a09cd7Sopenharmony_ci static const std::string& GetScene() 16437a09cd7Sopenharmony_ci { 16537a09cd7Sopenharmony_ci return scene_; 16637a09cd7Sopenharmony_ci } 16737a09cd7Sopenharmony_ci#ifdef HAS_THERMAL_AIRPLANE_MANAGER_PART 16837a09cd7Sopenharmony_ci static bool userAirplaneState_; 16937a09cd7Sopenharmony_ci static bool isThermalAirplane_; 17037a09cd7Sopenharmony_ci#endif 17137a09cd7Sopenharmony_ci 17237a09cd7Sopenharmony_ciprivate: 17337a09cd7Sopenharmony_ci bool Init(); 17437a09cd7Sopenharmony_ci bool InitThermalDriver(); 17537a09cd7Sopenharmony_ci bool InitThermalObserver(); 17637a09cd7Sopenharmony_ci bool InitThermalSubscriber(); 17737a09cd7Sopenharmony_ci bool InitThermalAction(); 17837a09cd7Sopenharmony_ci bool InitThermalPolicy(); 17937a09cd7Sopenharmony_ci bool InitBaseInfo(); 18037a09cd7Sopenharmony_ci bool InitSensorCluser(); 18137a09cd7Sopenharmony_ci bool InitActionManager(); 18237a09cd7Sopenharmony_ci bool InitStateMachine(); 18337a09cd7Sopenharmony_ci bool InitModules(); 18437a09cd7Sopenharmony_ci bool InitConfigFile(); 18537a09cd7Sopenharmony_ci bool InitConfigModule(); 18637a09cd7Sopenharmony_ci void RegisterHdiStatusListener(); 18737a09cd7Sopenharmony_ci void RegisterThermalHdiCallback(); 18837a09cd7Sopenharmony_ci void UnRegisterThermalHdiCallback(); 18937a09cd7Sopenharmony_ci void RegisterFanHdiCallback(); 19037a09cd7Sopenharmony_ci void RegisterBootCompletedCallback(); 19137a09cd7Sopenharmony_ci void EnableMock(const std::string& actionName, void* mockObject); 19237a09cd7Sopenharmony_ci#ifdef HAS_THERMAL_AIRPLANE_MANAGER_PART 19337a09cd7Sopenharmony_ci bool SubscribeCommonEvent(); 19437a09cd7Sopenharmony_ci#endif 19537a09cd7Sopenharmony_ci bool ready_ {false}; 19637a09cd7Sopenharmony_ci static std::atomic_bool isBootCompleted_; 19737a09cd7Sopenharmony_ci bool isSimulation_ {false}; 19837a09cd7Sopenharmony_ci bool isTempReport_ {true}; 19937a09cd7Sopenharmony_ci std::mutex mutex_; 20037a09cd7Sopenharmony_ci std::shared_ptr<ThermalServiceSubscriber> serviceSubscriber_ {nullptr}; 20137a09cd7Sopenharmony_ci std::shared_ptr<ThermalObserver> observer_ {nullptr}; 20237a09cd7Sopenharmony_ci std::shared_ptr<ThermalSensorInfo> info_ {nullptr}; 20337a09cd7Sopenharmony_ci std::shared_ptr<ThermalPolicy> policy_ {nullptr}; 20437a09cd7Sopenharmony_ci std::shared_ptr<ThermalConfigBaseInfo> baseInfo_ {nullptr}; 20537a09cd7Sopenharmony_ci std::shared_ptr<StateMachine> state_ {nullptr}; 20637a09cd7Sopenharmony_ci std::shared_ptr<ThermalActionManager> actionMgr_ {nullptr}; 20737a09cd7Sopenharmony_ci std::shared_ptr<FanFaultDetect> fanFaultDetect_ {nullptr}; 20837a09cd7Sopenharmony_ci ThermalSrvConfigParser configParser_; 20937a09cd7Sopenharmony_ci sptr<IThermalInterface> thermalInterface_ {nullptr}; 21037a09cd7Sopenharmony_ci sptr<IServiceManager> hdiServiceMgr_ {nullptr}; 21137a09cd7Sopenharmony_ci sptr<HdiServiceStatusListener::IServStatListener> hdiServStatListener_ {nullptr}; 21237a09cd7Sopenharmony_ci std::shared_ptr<ActionPopup> popup_; 21337a09cd7Sopenharmony_ci std::atomic<bool> serviceConfigParsed {false}; 21437a09cd7Sopenharmony_ci static std::string scene_; 21537a09cd7Sopenharmony_ci static sptr<ThermalService> instance_; 21637a09cd7Sopenharmony_ci static std::mutex singletonMutex_; 21737a09cd7Sopenharmony_ci#ifdef HAS_THERMAL_AIRPLANE_MANAGER_PART 21837a09cd7Sopenharmony_ci std::shared_ptr<EventFwk::CommonEventSubscriber> subscriberPtr_; 21937a09cd7Sopenharmony_ci#endif 22037a09cd7Sopenharmony_ci}; 22137a09cd7Sopenharmony_ci#ifdef HAS_THERMAL_AIRPLANE_MANAGER_PART 22237a09cd7Sopenharmony_ciclass AirplaneCommonEventSubscriber : public EventFwk::CommonEventSubscriber { 22337a09cd7Sopenharmony_cipublic: 22437a09cd7Sopenharmony_ci explicit AirplaneCommonEventSubscriber(const EventFwk::CommonEventSubscribeInfo& subscribeInfo) 22537a09cd7Sopenharmony_ci : EventFwk::CommonEventSubscriber(subscribeInfo) {} 22637a09cd7Sopenharmony_ci virtual ~AirplaneCommonEventSubscriber() {} 22737a09cd7Sopenharmony_ci void OnReceiveEvent(const EventFwk::CommonEventData &data) override; 22837a09cd7Sopenharmony_ci}; 22937a09cd7Sopenharmony_ci#endif 23037a09cd7Sopenharmony_ci} // namespace PowerMgr 23137a09cd7Sopenharmony_ci} // namespace OHOS 23237a09cd7Sopenharmony_ci#endif // THERMAL_SERVICE_H 233