修复多按键同时按下,失效bug
authorxue <2144439972@qq.com>
Wed, 17 Dec 2025 09:49:28 +0000 (17:49 +0800)
committerxue <2144439972@qq.com>
Wed, 17 Dec 2025 09:49:28 +0000 (17:49 +0800)
code/sdk/drivers/drivers/driver/button/button.c

index 0f6e94d..64005ca 100644 (file)
@@ -172,7 +172,11 @@ static void button_gpio_callback(pin_t pin, uintptr_t param)
 
     uapi_gpio_clear_interrupt(pin);
     g_gpio_key_record = pin;
+    #ifdef BOARD_LEINIAO
+    uapi_gpio_disable_interrupt(pin);
+    #else
     uapi_gpio_disable_interrupt(g_gpio_key_record);
+    #endif
     button_press_state_t press_state = button_get_press_state(pin);
     unsigned int irq_sts = osal_irq_lock();
     if (press_state == PRESSED) {
@@ -238,7 +242,17 @@ static void button_debounced_timer_callback(uint32_t data)
     } else {
         button_peripheral_api *button_api = button_port_get_api();
         button_api->button_remove_veto();
+        #ifdef BOARD_LEINIAO
+        // 修复:重新启用所有按键的中断,避免两个按键同时按下时,第一个按键的中断没有被重新启用导致失效
+        // 遍历所有按键pin,重新启用中断,确保即使g_gpio_key_record被覆盖,所有按键的中断都能被正确恢复
+        for (uint8_t i = 0; i < BUTTON_PIN_MAP_MAX; i++) {
+            if (g_button_pin_map[i].pin != PIN_NONE && g_button_pin_map[i].button != BUTTON_PWR) {
+                uapi_gpio_enable_interrupt(g_button_pin_map[i].pin);
+            }
+        }
+        #else
         uapi_gpio_enable_interrupt(g_gpio_key_record);
+        #endif
     }
 }