blob: 6fc8e4bf25d3c0698ff860affc2a96faaff4f7f9 [file] [log] [blame]
// Copyright 2020 The Fuchsia 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 GARNET_BIN_HWSTRESS_TEMPERATURE_SENSOR_H_
#define GARNET_BIN_HWSTRESS_TEMPERATURE_SENSOR_H_
#include <lib/zx/channel.h>
#include <memory>
#include <optional>
#include <string>
#include <string_view>
#include <vector>
namespace hwstress {
// A TemperatureSensor monitors the hardware's temperature.
class TemperatureSensor {
public:
virtual ~TemperatureSensor() = default;
// Read the temperature of the system temperature sensor, in degrees celcius,
// or nullopt if no value is available.
//
// Currently selects a single "sensible" sensor, because platforms of interest
// only have one. We may want to expand this in future.
virtual std::optional<double> ReadCelcius() = 0;
};
// Create a temperature sensor using devices on the system.
std::unique_ptr<TemperatureSensor> CreateSystemTemperatureSensor(std::string_view device_path);
std::unique_ptr<TemperatureSensor> CreateSystemTemperatureSensor(zx::channel channel);
// Create a null temperature sensor. Always returns "unknown".
std::unique_ptr<TemperatureSensor> CreateNullTemperatureSensor();
// A global, null temperature sensor.
TemperatureSensor* GetNullTemperatureSensor();
// Convert a temperature to a human-readable string.
std::string TemperatureToString(std::optional<double> temperature);
} // namespace hwstress
#endif // GARNET_BIN_HWSTRESS_TEMPERATURE_SENSOR_H_