#pragma once #include "esphome/core/component.h" #include "esphome/core/hal.h" #include "esphome/components/switch/switch.h" #include namespace esphome { namespace gpio { enum GPIOSwitchRestoreMode { GPIO_SWITCH_RESTORE_DEFAULT_OFF, GPIO_SWITCH_RESTORE_DEFAULT_ON, GPIO_SWITCH_ALWAYS_OFF, GPIO_SWITCH_ALWAYS_ON, GPIO_SWITCH_RESTORE_INVERTED_DEFAULT_OFF, GPIO_SWITCH_RESTORE_INVERTED_DEFAULT_ON, }; class GPIOSwitch : public switch_::Switch, public Component { public: void set_pin(GPIOPin *pin) { pin_ = pin; } void set_restore_mode(GPIOSwitchRestoreMode restore_mode); // ========== INTERNAL METHODS ========== // (In most use cases you won't need these) float get_setup_priority() const override; void setup() override; void dump_config() override; void set_interlock(const std::vector &interlock); void set_interlock_wait_time(uint32_t interlock_wait_time) { interlock_wait_time_ = interlock_wait_time; } protected: void write_state(bool state) override; GPIOPin *pin_; GPIOSwitchRestoreMode restore_mode_{GPIO_SWITCH_RESTORE_DEFAULT_OFF}; std::vector interlock_; uint32_t interlock_wait_time_{0}; }; } // namespace gpio } // namespace esphome