| // 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_H_ |
| #define THERMALD_THERMAL_ZONE_H_ |
| |
| #include <limits> |
| #include <map> |
| #include <string> |
| #include <vector> |
| |
| |
| namespace thermald { |
| |
| enum { |
| kTemp0K = -273150, |
| kTempInfinite = std::numeric_limits<int>::max(), |
| }; |
| |
| // A thermal zone is a physical area on the device which is monitored through |
| // periodic sampling of the temperature at one or more thermal points. At any |
| // given moment a zone is in a certain thermal state. |
| // |
| // Thermal states are characterized by their level of criticality, their |
| // thresholds for the thermal points of the zone and the actions to be executed |
| // when the state is entered. The enumeration of the thermal states starts with |
| // 1 for the least critical ("coolest") state and increases towards the most |
| // critical state. Id 0 is reserved for the initial state. |
| // |
| // For each sensor two threshold values can be configured (per thermal state): |
| // an activation threshold for a transition from a less critical state and a |
| // bottom (or hysteresis) threshold for a transition from the current to a less |
| // critical state. If a thermal state does not define thresholds for a certain |
| // sensor of the zone the state can be entered regardless of the temperature |
| // of the termal point. |
| // |
| // When a thermal state is entered it can set one or more output values. |
| // These values are of integer type and are identified by a key. The thermal |
| // daemon may drive actions based on the values of these variables. |
| |
| struct ThermalPointThresholds { |
| int activation; |
| int bottom; |
| }; |
| |
| struct ThermalStateOutput { |
| std::string key; |
| int value; |
| }; |
| |
| struct ThermalState { |
| unsigned int id; |
| |
| // Thresholds for all thermal points of the state. |
| std::map<std::string, ThermalPointThresholds> thresholds; |
| |
| // Output values set when the state is entered. |
| std::vector<ThermalStateOutput> outputs; |
| }; |
| |
| struct ThermalZone { |
| std::string name; |
| |
| // The thermal states of the zone. |
| // |
| // NOTE: the ThermalStateEngine requires these states to be ordered |
| // by descending criticality (from higher to lower temperatures). |
| std::vector<std::unique_ptr<ThermalState>> states; |
| }; |
| |
| } // namespace thermald |
| |
| #endif // THERMALD_THERMAL_ZONE_H_ |