77 std::chrono::milliseconds timeout)
noexcept;
112 struct ChannelState {
113 std::optional<int> gpio;
115 std::string value_path;
116 std::string device_path;
119 bool initialised =
false;
120 bool last_sample_pressed =
false;
121 bool stable_pressed =
false;
122 std::chrono::steady_clock::time_point last_transition{};
126 ChannelState arm_channel_;
127 ChannelState disarm_channel_;
128 ChannelState acknowledge_channel_;
129 bool available_ =
false;
130 std::string last_error_;
131 std::string status_string_;
133 static std::optional<int> parseEnvInt(
const char* name)
noexcept;
134 static bool parseEnvBool(
const char* name,
bool default_value)
noexcept;
135 static std::chrono::milliseconds parseEnvDuration(
137 std::chrono::milliseconds default_value)
noexcept;
138 static std::string makeValuePath(
int gpio);
140 void initialiseChannel(ChannelState& channel,
141 std::optional<int> gpio,
143 bool sampleChannel(ChannelState& channel,
144 std::chrono::steady_clock::time_point now,
146 bool readPressedState(
const ChannelState& channel,
bool& pressed)
noexcept;