bool g_timer_is_running = false;
bool g_gpio_timer_is_running = false;
msg_send_callback_t g_msg_send_cb = NULL;
+pin_t g_gpio_key_record = 0;
static const char* g_state_str[PRESSED_MAX] = {
"BUTTON_PRESSED",
}
uapi_gpio_clear_interrupt(pin);
+ g_gpio_key_record = pin;
+ uapi_gpio_disable_interrupt(g_gpio_key_record);
button_press_state_t press_state = button_get_press_state(pin);
unsigned int irq_sts = osal_irq_lock();
if (press_state == PRESSED) {
button_group_set_bit(&pressed_group, bit);
button_group_clear_bit(&g_button_debounced.debounced, bit);
}
+
+ if ((button_get_press_state(pin) == RELEASED) &&
+ (time - g_button_debounced.debounced_time >= INTERFERENCE_INTERVAL)) {
+ /* Interference */
+ button_group_clear_bit(&g_button_debounced.debounced, bit);
+ }
}
}
} else {
button_peripheral_api *button_api = button_port_get_api();
button_api->button_remove_veto(1);
+ uapi_gpio_enable_interrupt(g_gpio_key_record);
}
}
timer_handle_t g_gpio_button_timer = {0};
button_info_t g_button_info = {0};
bool g_timer_is_running = false;
-bool g_button_timer_is_running = false;
+bool g_gpio_timer_is_running = false;
msg_send_callback_t g_msg_send_cb = NULL;
+pin_t g_gpio_key_record = 0;
static const char* g_state_str[PRESSED_MAX] = {
"BUTTON_PRESSED",
static void button_timer_start(void)
{
bool start = false;
- if (!g_timer_is_running) {
- g_timer_is_running = true;
+ if (!g_gpio_timer_is_running) {
+ g_gpio_timer_is_running = true;
start = true;
}
if (start) {
- uapi_rtc_stop(g_button_timer);
- uapi_rtc_start(g_button_timer, BUTTON_TIMER_INTERVAL, button_debounced_timer_callback, 0);
+ uapi_rtc_stop(g_gpio_button_timer);
+ uapi_rtc_start(g_gpio_button_timer, BUTTON_TIMER_INTERVAL, button_debounced_timer_callback, 0);
}
}
static void button_timer_start_check_released(void)
{
bool start = false;
- if (!g_button_timer_is_running) {
- g_button_timer_is_running = true;
+ if (!g_timer_is_running) {
+ g_timer_is_running = true;
start = true;
}
if (start) {
- uapi_rtc_stop(g_gpio_button_timer);
- uapi_rtc_start(g_gpio_button_timer, BUTTON_CHECK_RELEADSED, button_check_released_timer_callback, 0);
+ uapi_rtc_stop(g_button_timer);
+ uapi_rtc_start(g_button_timer, BUTTON_CHECK_RELEADSED, button_check_released_timer_callback, 0);
}
}
button_api->button_clear_interrupt(pin);
button_press_state_t press_state = button_get_press_state(pin);
button_send_msg(BUTTON_PWREN_ID, press_state);
- printf("button_irq_callback pin\r\n");
- button_api->button_add_veto(0);
+ button_api->button_add_veto(0);
button_timer_start_check_released();
}
}
uapi_gpio_clear_interrupt(pin);
+g_gpio_key_record = pin;
+ uapi_gpio_disable_interrupt(g_gpio_key_record);
button_press_state_t press_state = button_get_press_state(pin);
unsigned int irq_sts = osal_irq_lock();
if (press_state == PRESSED) {
button_group_set_bit(&pressed_group, bit);
button_group_clear_bit(&g_button_debounced.debounced, bit);
}
+
+ if ((button_get_press_state(pin) == RELEASED) &&
+ (time - g_button_debounced.debounced_time >= INTERFERENCE_INTERVAL)) {
+ /* Interference */
+ button_group_clear_bit(&g_button_debounced.debounced, bit);
+ }
}
}
static void button_debounced_timer_callback(uint32_t data)
{
unused(data);
- g_timer_is_running = false;
+ g_gpio_timer_is_running = false;
button_debounced_handler();
} else {
button_peripheral_api *button_api = button_port_get_api();
button_api->button_remove_veto(1);
+uapi_gpio_enable_interrupt(g_gpio_key_record);
}
}
{
unused(data);
- g_button_timer_is_running = false;
+ g_timer_is_running = false;
button_peripheral_api *button_api = button_port_get_api();
button_press_state_t press_state;