sensor_chip.cc
Go to the documentation of this file.
1 // BSD License
2 //
3 // Copyright (c) 2021, Ascent Robotics, Inc.
4 // All rights reserved.
5 
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are met:
8 
9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above copyright
12 // notice, this list of conditions and the following disclaimer in the
13 // documentation and/or other materials provided with the distribution.
14 // * Neither the name of Ascent Robotics, Inc. nor the names of its
15 // contributors may be used to endorse or promote products derived from
16 // this software without specific prior written permission.
17 
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 // POSSIBILITY OF SUCH DAMAGE.
29 
30 // Author Thomas Kostas/thomas.kostas@ascent.ai
31 
33 
34 #include <string>
35 
36 #include <sensors/sensors.h>
37 
39 
41 {
42 SensorChip::SensorChip(const sensors_chip_name* chip,
43  double default_critical_temp,
44  double default_max_temp)
45  : chip_name_(chip)
46 {
47  int feature_number = 0;
48  for (const sensors_feature* feature =
49  sensors_get_features(chip_name_, &feature_number);
50  feature != nullptr;
51  feature = sensors_get_features(chip_name_, &feature_number))
52  {
54  chip_name_, feature, default_critical_temp, default_max_temp))
55  {
56  temperature_features_.push_back(*feat);
57  }
58  }
59 }
60 
61 std::vector<temperature_info> SensorChip::get_temperature_readings() const
62 {
63  std::vector<temperature_info> readings;
64  readings.reserve(temperature_features_.size());
65  for (const auto& temperature_feature : temperature_features_)
66  {
67  auto temp_info = temperature_feature.read_temperature_info(chip_name_);
68  readings.push_back(temp_info);
69  }
70  return readings;
71 }
72 
73 std::string SensorChip::get_identifier() const
74 {
75  return std::string(chip_name_->prefix) + "-" +
76  std::to_string(chip_name_->addr);
77 }
78 
79 void SensorChip::critical_temp_override(double critical_temp)
80 {
81  for (auto& feature : temperature_features_)
82  {
83  feature.set_critical_temp(critical_temp);
84  }
85 }
86 void SensorChip::max_temp_override(double max_temp)
87 {
88  for (auto& feature : temperature_features_)
89  {
90  feature.set_max_temp(max_temp);
91  }
92 }
93 namespace sensors_chip_factory
94 {
95 std::vector<SensorChip> get_chips_with_prefix(const std::string& name)
96 {
97  std::vector<SensorChip> valid_chips;
98  int chip_number = 0;
99  for (const sensors_chip_name* chip_name =
100  sensors_get_detected_chips(nullptr, &chip_number);
101  chip_name != nullptr;
102  chip_name = sensors_get_detected_chips(nullptr, &chip_number))
103  {
104  if (std::string(chip_name->prefix) == name)
105  {
106  valid_chips.emplace_back(chip_name);
107  }
108  }
109  return valid_chips;
110 }
111 } // namespace sensors_chip_factory
112 } // namespace cpu_temperature_diagnostics
void critical_temp_override(double critical_temp)
Definition: sensor_chip.cc:79
const sensors_chip_name * chip_name_
Definition: sensor_chip.hh:63
SensorChip(const sensors_chip_name *chip, double default_critical_temp=100, double default_max_temp=85)
Construct a new Sensor Chip object.
Definition: sensor_chip.cc:42
std::vector< temperature_info > get_temperature_readings() const
Definition: sensor_chip.cc:61
std::vector< TemperatureFeature > temperature_features_
Definition: sensor_chip.hh:62
void max_temp_override(double max_temp)
Definition: sensor_chip.cc:86
static std::optional< TemperatureFeature > make_temp_feature(const sensors_chip_name *chip_name, const sensors_feature *feature, double default_critical_temp=100, double defaut_max_temp=85)
std::vector< SensorChip > get_chips_with_prefix(const std::string &name)
Definition: sensor_chip.cc:95


cpu_temperature_diagnostics
Author(s):
autogenerated on Mon Feb 28 2022 22:08:46