修改按键投票机制,增加GPIO按键单独投票 1550/2 1550/head
authorhcj <1224667075@qq.com>
Mon, 23 Dec 2024 09:23:19 +0000 (17:23 +0800)
committerhcj <1224667075@qq.com>
Mon, 23 Dec 2024 09:23:19 +0000 (17:23 +0800)
code/sdk/drivers/chips/brandy/porting/button/button_porting.c
code/sdk/drivers/drivers/driver/button/button.c
code/sdk/drivers/peripheral/button/button.c
code/sdk/drivers/peripheral/button/button.h
code/sdk/middleware/chips/brandy/pm/include/pm_definition.h
code/sdk/middleware/chips/brandy/pm/pm.c

index e319507..ea0e587 100755 (executable)
@@ -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 = {
index 6e0fb2a..2a9ab71 100644 (file)
@@ -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();
     }
index e038cd5..88e8a4f 100644 (file)
@@ -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();
     }
index a32acab..4e64404 100644 (file)
@@ -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;
 
 /**
index 5517b07..9b49850 100755 (executable)
@@ -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;
 
index c07591e..c72ad38 100755 (executable)
@@ -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"
 };