#pragma once #include "esphome/core/component.h" #include "esphome/components/switch/switch.h" namespace esphome { namespace gpio { enum GPIOSwitchRestoreMode { GPIO_SWITCH_RESTORE_DEFAULT_OFF, GPIO_SWITCH_RESTORE_DEFAULT_ON, GPIO_SWITCH_ALWAYS_OFF, GPIO_SWITCH_ALWAYS_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); protected: void write_state(bool state) override; GPIOPin *pin_; GPIOSwitchRestoreMode restore_mode_{GPIO_SWITCH_RESTORE_DEFAULT_OFF}; std::vector interlock_; }; } // namespace gpio } // namespace esphome