| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #include "button.h"
- #include <esp_log.h>
- static const char* TAG = "Button";
- #if CONFIG_SOC_ADC_SUPPORTED
- Button::Button(const button_adc_config_t& adc_cfg) {
- button_config_t button_config = {
- .type = BUTTON_TYPE_ADC,
- .long_press_time = 1000,
- .short_press_time = 50,
- .adc_button_config = adc_cfg
- };
- button_handle_ = iot_button_create(&button_config);
- if (button_handle_ == NULL) {
- ESP_LOGE(TAG, "Failed to create button handle");
- return;
- }
- }
- #endif
- Button::Button(gpio_num_t gpio_num, bool active_high) : gpio_num_(gpio_num) {
- if (gpio_num == GPIO_NUM_NC) {
- return;
- }
- button_config_t button_config = {
- .type = BUTTON_TYPE_GPIO,
- .long_press_time = 1000,
- .short_press_time = 50,
- .gpio_button_config = {
- .gpio_num = gpio_num,
- .active_level = static_cast<uint8_t>(active_high ? 1 : 0)
- }
- };
- button_handle_ = iot_button_create(&button_config);
- if (button_handle_ == NULL) {
- ESP_LOGE(TAG, "Failed to create button handle");
- return;
- }
- }
- Button::~Button() {
- if (button_handle_ != NULL) {
- iot_button_delete(button_handle_);
- }
- }
- void Button::OnPressDown(std::function<void()> callback) {
- if (button_handle_ == nullptr) {
- return;
- }
- on_press_down_ = callback;
- iot_button_register_cb(button_handle_, BUTTON_PRESS_DOWN, [](void* handle, void* usr_data) {
- Button* button = static_cast<Button*>(usr_data);
- if (button->on_press_down_) {
- button->on_press_down_();
- }
- }, this);
- }
- void Button::OnPressUp(std::function<void()> callback) {
- if (button_handle_ == nullptr) {
- return;
- }
- on_press_up_ = callback;
- iot_button_register_cb(button_handle_, BUTTON_PRESS_UP, [](void* handle, void* usr_data) {
- Button* button = static_cast<Button*>(usr_data);
- if (button->on_press_up_) {
- button->on_press_up_();
- }
- }, this);
- }
- void Button::OnLongPress(std::function<void()> callback) {
- if (button_handle_ == nullptr) {
- return;
- }
- on_long_press_ = callback;
- iot_button_register_cb(button_handle_, BUTTON_LONG_PRESS_START, [](void* handle, void* usr_data) {
- Button* button = static_cast<Button*>(usr_data);
- if (button->on_long_press_) {
- button->on_long_press_();
- }
- }, this);
- }
- void Button::OnClick(std::function<void()> callback) {
- if (button_handle_ == nullptr) {
- return;
- }
- on_click_ = callback;
- iot_button_register_cb(button_handle_, BUTTON_SINGLE_CLICK, [](void* handle, void* usr_data) {
- Button* button = static_cast<Button*>(usr_data);
- if (button->on_click_) {
- button->on_click_();
- }
- }, this);
- }
- void Button::OnDoubleClick(std::function<void()> callback) {
- if (button_handle_ == nullptr) {
- return;
- }
- on_double_click_ = callback;
- iot_button_register_cb(button_handle_, BUTTON_DOUBLE_CLICK, [](void* handle, void* usr_data) {
- Button* button = static_cast<Button*>(usr_data);
- if (button->on_double_click_) {
- button->on_double_click_();
- }
- }, this);
- }
|