From 3a8d14bc587b83e2ec1bc752b499240d83de67b2 Mon Sep 17 00:00:00 2001 From: hcj <1224667075@qq.com> Date: Mon, 23 Dec 2024 17:23:19 +0800 Subject: [PATCH] =?utf8?q?=E4=BF=AE=E6=94=B9=E6=8C=89=E9=94=AE=E6=8A=95?= =?utf8?q?=E7=A5=A8=E6=9C=BA=E5=88=B6=EF=BC=8C=E5=A2=9E=E5=8A=A0GPIO?= =?utf8?q?=E6=8C=89=E9=94=AE=E5=8D=95=E7=8B=AC=E6=8A=95=E7=A5=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../brandy/porting/button/button_porting.c | 53 +++++++++++++++++-- .../drivers/drivers/driver/button/button.c | 8 +-- code/sdk/drivers/peripheral/button/button.c | 9 ++-- code/sdk/drivers/peripheral/button/button.h | 4 +- .../chips/brandy/pm/include/pm_definition.h | 1 + code/sdk/middleware/chips/brandy/pm/pm.c | 1 + 6 files changed, 62 insertions(+), 14 deletions(-) diff --git a/code/sdk/drivers/chips/brandy/porting/button/button_porting.c b/code/sdk/drivers/chips/brandy/porting/button/button_porting.c index e319507e7..ea0e58763 100755 --- a/code/sdk/drivers/chips/brandy/porting/button/button_porting.c +++ b/code/sdk/drivers/chips/brandy/porting/button/button_porting.c @@ -320,14 +320,59 @@ static errcode_t porting_button_pmu_pwr_cfg(pin_t pin) return ERRCODE_SUCC; } -static void porting_button_add_veto(void) +static void porting_button_add_veto(uint8_t id) { - uapi_pm_add_sleep_veto(PM_ID_BUTTON); + if(id==0) + { + uint8_t cnt = pm_veto_get_id_cnt(PM_ID_BUTTON); + if(cnt==0) + { + uapi_pm_add_sleep_veto(PM_ID_BUTTON); + printf("PM_ID_BUTTON:%d\r\n",id); + } + else + { + printf(" porting_button_add_veto:%d\r\n",cnt); + } + } + else + { + + uint8_t cnt = pm_veto_get_id_cnt(PM_ID_BUTTON_GPIO); + if(cnt==0) + { + uapi_pm_add_sleep_veto(PM_ID_BUTTON_GPIO); + printf("PM_ID_BUTTON:%d\r\n",id); + } + else + { + printf(" porting_button_add_veto:%d\r\n",cnt); + } + } } -static void porting_button_remove_veto(void) +static void porting_button_remove_veto(uint8_t id) { - uapi_pm_remove_sleep_veto(PM_ID_BUTTON); + if(id==0) + { + uint8_t cnt = pm_veto_get_id_cnt(PM_ID_BUTTON); + for (int i = 0; i < cnt; i++) + { + uapi_pm_remove_sleep_veto(PM_ID_BUTTON); + } + printf("porting_button_remove_veto:%d\r\n",id); + } + else + { + uint8_t cnt = pm_veto_get_id_cnt(PM_ID_BUTTON_GPIO); + for (int i = 0; i < cnt; i++) + { + uapi_pm_remove_sleep_veto(PM_ID_BUTTON_GPIO); + } + printf("porting_button_remove_veto:%d\r\n",id); + } + + } button_peripheral_api g_brandy_button_api = { diff --git a/code/sdk/drivers/drivers/driver/button/button.c b/code/sdk/drivers/drivers/driver/button/button.c index 6e0fb2a0c..2a9ab717c 100644 --- a/code/sdk/drivers/drivers/driver/button/button.c +++ b/code/sdk/drivers/drivers/driver/button/button.c @@ -154,7 +154,7 @@ static void button_irq_callback(pin_t pin) 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); - button_api->button_add_veto(); + button_api->button_add_veto(0); button_timer_start_check_released(); } @@ -179,7 +179,7 @@ static void button_gpio_callback(pin_t pin, uintptr_t param) osal_irq_restore(irq_sts); button_peripheral_api *button_api = button_port_get_api(); - button_api->button_add_veto(); + button_api->button_add_veto(1); button_timer_start(); } @@ -228,7 +228,7 @@ static void button_debounced_timer_callback(uint32_t data) button_timer_start(); } else { button_peripheral_api *button_api = button_port_get_api(); - button_api->button_remove_veto(); + button_api->button_remove_veto(1); } } @@ -243,7 +243,7 @@ static void button_check_released_timer_callback(uint32_t data) press_state = button_get_press_state(PIN_NONE); if (press_state == 1) { button_send_msg(1, RELEASED); - button_api->button_remove_veto(); + button_api->button_remove_veto(0); } else { button_timer_start_check_released(); } diff --git a/code/sdk/drivers/peripheral/button/button.c b/code/sdk/drivers/peripheral/button/button.c index e038cd5c6..88e8a4f8b 100644 --- a/code/sdk/drivers/peripheral/button/button.c +++ b/code/sdk/drivers/peripheral/button/button.c @@ -154,7 +154,8 @@ static void button_irq_callback(pin_t pin) 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); - button_api->button_add_veto(); + printf("button_irq_callback pin\r\n"); + button_api->button_add_veto(0); button_timer_start_check_released(); } @@ -179,7 +180,7 @@ static void button_gpio_callback(pin_t pin, uintptr_t param) osal_irq_restore(irq_sts); button_peripheral_api *button_api = button_port_get_api(); - button_api->button_add_veto(); + button_api->button_add_veto(1); button_timer_start(); } @@ -228,7 +229,7 @@ static void button_debounced_timer_callback(uint32_t data) button_timer_start(); } else { button_peripheral_api *button_api = button_port_get_api(); - button_api->button_remove_veto(); + button_api->button_remove_veto(1); } } @@ -243,7 +244,7 @@ static void button_check_released_timer_callback(uint32_t data) press_state = button_get_press_state(PIN_NONE); if (press_state == 1) { button_send_msg(1, RELEASED); - button_api->button_remove_veto(); + button_api->button_remove_veto(0); } else { button_timer_start_check_released(); } diff --git a/code/sdk/drivers/peripheral/button/button.h b/code/sdk/drivers/peripheral/button/button.h index a32acabc0..4e644042f 100644 --- a/code/sdk/drivers/peripheral/button/button.h +++ b/code/sdk/drivers/peripheral/button/button.h @@ -72,8 +72,8 @@ typedef struct { button_press_state_t (*button_get_state)(pin_t pin); errcode_t (*button_register_callback)(pin_t pin, osal_irq_handler thread_handler); errcode_t (*button_unregister_callback)(pin_t pin); - void (*button_add_veto)(void); - void (*button_remove_veto)(void); + void (*button_add_veto)(uint8_t); + void (*button_remove_veto)(uint8_t); } button_peripheral_api; /** diff --git a/code/sdk/middleware/chips/brandy/pm/include/pm_definition.h b/code/sdk/middleware/chips/brandy/pm/include/pm_definition.h index 5517b07a1..9b49850f5 100755 --- a/code/sdk/middleware/chips/brandy/pm/include/pm_definition.h +++ b/code/sdk/middleware/chips/brandy/pm/include/pm_definition.h @@ -49,6 +49,7 @@ typedef enum { PM_ID_GSENSOR,//新增,加速计 PM_ID_CAT1,//Cat1 communication PM_ID_P_TEST,//产测 + PM_ID_BUTTON_GPIO,//gpio按键 PM_ID_MAX, } pm_id_t; diff --git a/code/sdk/middleware/chips/brandy/pm/pm.c b/code/sdk/middleware/chips/brandy/pm/pm.c index c07591e72..c72ad384e 100755 --- a/code/sdk/middleware/chips/brandy/pm/pm.c +++ b/code/sdk/middleware/chips/brandy/pm/pm.c @@ -238,6 +238,7 @@ const char* pm_id_name_arr[] ={ "PM_ID_GSENSOR",//新增,加速计 "PM_ID_CAT1",//Cat1 communication "PM_ID_P_TEST", + "PM_ID_BUTTON_GPIO",//GPIO按键 "PM_ID_MAX" }; -- 2.17.1