#ifndef BUTTON_H_ #define BUTTON_H_ #include #include #include #include #include #include class Button { public: Button(button_handle_t button_handle); Button(gpio_num_t gpio_num, bool active_high = false, uint16_t long_press_time = 0, uint16_t short_press_time = 0, bool enable_power_save = false); ~Button(); void OnPressDown(std::function callback); void OnPressUp(std::function callback); void OnLongPress(std::function callback); void OnClick(std::function callback); void OnDoubleClick(std::function callback); void OnMultipleClick(std::function callback, uint8_t click_count = 3); protected: gpio_num_t gpio_num_; button_handle_t button_handle_ = nullptr; std::function on_press_down_; std::function on_press_up_; std::function on_long_press_; std::function on_click_; std::function on_double_click_; std::function on_multiple_click_; }; #if CONFIG_SOC_ADC_SUPPORTED class AdcButton : public Button { public: AdcButton(const button_adc_config_t& adc_config); }; #endif class PowerSaveButton : public Button { public: PowerSaveButton(gpio_num_t gpio_num) : Button(gpio_num, false, 0, 0, true) { } }; #endif // BUTTON_H_