#pragma once #include #include #include namespace timbre { class EspRelayBank { public: static constexpr std::uint8_t kPrincipal = 0; static constexpr std::uint8_t kReserved = 1; static constexpr std::uint8_t kChannelCount = 2; static constexpr std::uint8_t kPrincipalPin = 22; static constexpr std::uint8_t kReservedPin = 23; static constexpr std::uint8_t kOffLevel = HIGH; static constexpr std::uint8_t kOnLevel = LOW; void beginSafe(); void set(std::uint8_t channel, bool energized); void allOff(); bool energized(std::uint8_t channel) const; bool validChannel(std::uint8_t channel) const; private: std::uint8_t pinFor(std::uint8_t channel) const; std::atomic stateMask_{0}; bool initialized_ = false; }; } // namespace timbre