blob: e319d2ba548e22eb4a4b827677ff0c4734b5e9d4 [file] [log] [blame]
Patrick Venture863b9242018-03-08 08:29:23 -08001#pragma once
2
Patrick Venture863b9242018-03-08 08:29:23 -08003#include "interfaces.hpp"
4
Ed Tanousf8b6e552025-06-27 13:27:50 -07005#include <cstdint>
Patrick Ventureda4a5dd2018-08-31 09:42:48 -07006#include <string>
Patrick Venture863b9242018-03-08 08:29:23 -08007
Patrick Venturea0764872020-08-08 07:48:43 -07008namespace pid_control
9{
10
Patrick Venture863b9242018-03-08 08:29:23 -080011/**
12 * Abstract base class for all sensors.
13 */
14class Sensor
15{
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070016 public:
Patrick Venturea510ea22019-02-08 09:30:49 -080017 /**
18 * Given a sensor's type, return the default timeout value.
19 * A timeout of 0 means there isn't a timeout for this sensor.
20 * By default a fan sensor isn't checked for a timeout, whereas
21 * any of sensor is meant to be sampled once per second. By default.
22 *
23 * @param[in] type - the sensor type (e.g. fan)
24 * @return the default timeout for that type (in seconds).
25 */
26 static int64_t getDefaultTimeout(const std::string& type)
27 {
28 return (type == "fan") ? 0 : 2;
29 }
30
Patrick Venturedf766f22018-10-13 09:30:58 -070031 Sensor(const std::string& name, int64_t timeout) :
32 _name(name), _timeout(timeout)
Patrick Venturea83a3ec2020-08-04 09:52:05 -070033 {}
Patrick Venture863b9242018-03-08 08:29:23 -080034
Ed Tanousd2768c52025-06-26 11:42:57 -070035 virtual ~Sensor() = default;
Patrick Venture863b9242018-03-08 08:29:23 -080036
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070037 virtual ReadReturn read(void) = 0;
38 virtual void write(double value) = 0;
Josh Lehan2400ce42020-10-01 01:50:39 -070039
40 virtual void write(double value, bool force, int64_t* written)
41 {
42 (void)force;
43 (void)written;
44 return write(value);
45 }
46
James Feist36b7d8e2018-10-05 15:39:01 -070047 virtual bool getFailed(void)
48 {
49 return false;
50 };
Patrick Venture863b9242018-03-08 08:29:23 -080051
Harvey Wua4270072024-05-29 16:11:13 +080052 virtual std::string getFailReason(void)
53 {
54 return "Unimplemented";
55 }
56
Patrick Venture563a3562018-10-30 09:31:26 -070057 std::string getName(void) const
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070058 {
59 return _name;
60 }
Patrick Venture863b9242018-03-08 08:29:23 -080061
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070062 /* Returns the configurable timeout period
63 * for this sensor in seconds (undecorated).
64 */
Patrick Venture563a3562018-10-30 09:31:26 -070065 int64_t getTimeout(void) const
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070066 {
67 return _timeout;
68 }
Patrick Venture863b9242018-03-08 08:29:23 -080069
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070070 private:
71 std::string _name;
72 int64_t _timeout;
Patrick Venture863b9242018-03-08 08:29:23 -080073};
Patrick Venturea0764872020-08-08 07:48:43 -070074
75} // namespace pid_control