forked from xiaozhi/xiaozhi-esp32
Upgrade components
This commit is contained in:
@@ -1,42 +1,28 @@
|
||||
#include "button.h"
|
||||
|
||||
#include <button_gpio.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
|
||||
#define TAG "Button"
|
||||
|
||||
Button::Button(gpio_num_t gpio_num, bool active_high) : gpio_num_(gpio_num) {
|
||||
Button::Button(button_handle_t button_handle) : button_handle_(button_handle) {
|
||||
}
|
||||
|
||||
Button::Button(gpio_num_t gpio_num, bool active_high, uint16_t long_press_time, uint16_t short_press_time) : 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)
|
||||
}
|
||||
.long_press_time = long_press_time,
|
||||
.short_press_time = short_press_time
|
||||
};
|
||||
button_handle_ = iot_button_create(&button_config);
|
||||
if (button_handle_ == NULL) {
|
||||
ESP_LOGE(TAG, "Failed to create button handle");
|
||||
return;
|
||||
}
|
||||
button_gpio_config_t gpio_config = {
|
||||
.gpio_num = gpio_num,
|
||||
.active_level = static_cast<uint8_t>(active_high ? 1 : 0),
|
||||
.enable_power_save = false,
|
||||
.disable_pull = false
|
||||
};
|
||||
ESP_ERROR_CHECK(iot_button_new_gpio_device(&button_config, &gpio_config, &button_handle_));
|
||||
}
|
||||
|
||||
Button::~Button() {
|
||||
@@ -50,7 +36,7 @@ void Button::OnPressDown(std::function<void()> callback) {
|
||||
return;
|
||||
}
|
||||
on_press_down_ = callback;
|
||||
iot_button_register_cb(button_handle_, BUTTON_PRESS_DOWN, [](void* handle, void* usr_data) {
|
||||
iot_button_register_cb(button_handle_, BUTTON_PRESS_DOWN, nullptr, [](void* handle, void* usr_data) {
|
||||
Button* button = static_cast<Button*>(usr_data);
|
||||
if (button->on_press_down_) {
|
||||
button->on_press_down_();
|
||||
@@ -63,7 +49,7 @@ void Button::OnPressUp(std::function<void()> callback) {
|
||||
return;
|
||||
}
|
||||
on_press_up_ = callback;
|
||||
iot_button_register_cb(button_handle_, BUTTON_PRESS_UP, [](void* handle, void* usr_data) {
|
||||
iot_button_register_cb(button_handle_, BUTTON_PRESS_UP, nullptr, [](void* handle, void* usr_data) {
|
||||
Button* button = static_cast<Button*>(usr_data);
|
||||
if (button->on_press_up_) {
|
||||
button->on_press_up_();
|
||||
@@ -76,7 +62,7 @@ void Button::OnLongPress(std::function<void()> callback) {
|
||||
return;
|
||||
}
|
||||
on_long_press_ = callback;
|
||||
iot_button_register_cb(button_handle_, BUTTON_LONG_PRESS_START, [](void* handle, void* usr_data) {
|
||||
iot_button_register_cb(button_handle_, BUTTON_LONG_PRESS_START, nullptr, [](void* handle, void* usr_data) {
|
||||
Button* button = static_cast<Button*>(usr_data);
|
||||
if (button->on_long_press_) {
|
||||
button->on_long_press_();
|
||||
@@ -89,7 +75,7 @@ void Button::OnClick(std::function<void()> callback) {
|
||||
return;
|
||||
}
|
||||
on_click_ = callback;
|
||||
iot_button_register_cb(button_handle_, BUTTON_SINGLE_CLICK, [](void* handle, void* usr_data) {
|
||||
iot_button_register_cb(button_handle_, BUTTON_SINGLE_CLICK, nullptr, [](void* handle, void* usr_data) {
|
||||
Button* button = static_cast<Button*>(usr_data);
|
||||
if (button->on_click_) {
|
||||
button->on_click_();
|
||||
@@ -102,10 +88,28 @@ void Button::OnDoubleClick(std::function<void()> callback) {
|
||||
return;
|
||||
}
|
||||
on_double_click_ = callback;
|
||||
iot_button_register_cb(button_handle_, BUTTON_DOUBLE_CLICK, [](void* handle, void* usr_data) {
|
||||
iot_button_register_cb(button_handle_, BUTTON_DOUBLE_CLICK, nullptr, [](void* handle, void* usr_data) {
|
||||
Button* button = static_cast<Button*>(usr_data);
|
||||
if (button->on_double_click_) {
|
||||
button->on_double_click_();
|
||||
}
|
||||
}, this);
|
||||
}
|
||||
|
||||
void Button::OnMultipleClick(std::function<void()> callback, uint8_t click_count) {
|
||||
if (button_handle_ == nullptr) {
|
||||
return;
|
||||
}
|
||||
on_multiple_click_ = callback;
|
||||
button_event_args_t event_args = {
|
||||
.multiple_clicks = {
|
||||
.clicks = click_count
|
||||
}
|
||||
};
|
||||
iot_button_register_cb(button_handle_, BUTTON_MULTIPLE_CLICK, &event_args, [](void* handle, void* usr_data) {
|
||||
Button* button = static_cast<Button*>(usr_data);
|
||||
if (button->on_multiple_click_) {
|
||||
button->on_multiple_click_();
|
||||
}
|
||||
}, this);
|
||||
}
|
||||
Reference in New Issue
Block a user