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) {
} 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
}
}