| // Copyright 2015 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef THERMALD_THERMAL_ZONE_CONTROLLER_H_ |
| #define THERMALD_THERMAL_ZONE_CONTROLLER_H_ |
| |
| #include <memory> |
| #include <string> |
| #include <vector> |
| |
| #include "base/macros.h" |
| #include "base/memory/weak_ptr.h" |
| |
| #include "thermald/key_value_publisher.h" |
| #include "thermald/temperature_monitor_interface.h" |
| #include "thermald/thermal_state_engine.h" |
| #include "thermald/thermal_zone.h" |
| |
| namespace thermald { |
| |
| // Controls the temperature of a thermal zone. Subscribes to the temperature |
| // monitors of the zone and processes notifications about temperature |
| // updates. Uses a thermal state machine object to determine the current |
| // thermal state of the zone. When a new state is entered it sets the output |
| // values corresponding to this state. |
| class ThermalZoneController { |
| public: |
| // Does not take ownership of the thermal zone and the temperature monitors. |
| // The caller must ensure that these objects are valid during the lifetime |
| // of the thermal zone controller. |
| ThermalZoneController( |
| const ThermalZone *zone, |
| KeyValuePublisher *output_values, |
| std::vector<TemperatureMonitorInterface *> temperature_monitors); |
| |
| ~ThermalZoneController(); |
| |
| // Starts monitoring of the temperatures of the thermal zone. |
| // Subscribes to temperature monitors of the zone. Thermal outputs are |
| // published using the KeyValuePublisher passed in the constructor until |
| // Stop() is called. Returns true on success or false if the controller is |
| // already running. |
| bool Start(); |
| |
| // Stops monitoring of the temperatures of the thermal zone. |
| // Returns true on success or false if the controller is not running. |
| bool Stop(); |
| |
| private: |
| friend class ThermalZoneControllerTest; |
| |
| // Processes a temperature update. If the thermal state of the zone has |
| // changed it sets the outputs corresponding to the new state. |
| void ProcessTemperatureUpdate(const std::string &sensor, int temperature); |
| |
| const ThermalZone *zone_; |
| std::vector<TemperatureMonitorInterface *> temperature_monitors_; |
| #if BASE_VER < 860220 |
| std::vector<std::unique_ptr<TemperatureMonitorInterface::Subscription>> |
| subscriptions_; |
| #else |
| std::vector<base::CallbackListSubscription> subscriptions_; |
| #endif |
| bool is_running_; |
| ThermalStateEngine thermal_state_engine_; |
| const ThermalState *cur_thermal_state_; |
| KeyValuePublisher *outputs_; |
| base::WeakPtrFactory<ThermalZoneController> weak_ptr_factory_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ThermalZoneController); |
| }; |
| |
| } // namespace thermald |
| |
| #endif // THERMALD_THERMAL_ZONE_CONTROLLER_H_ |