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