battery: Add attribute for handling abnormal battery health 51/312851/1
authorYunhee Seo <yuni.seo@samsung.com>
Thu, 30 May 2024 07:37:32 +0000 (16:37 +0900)
committerYunhee Seo <yuni.seo@samsung.com>
Mon, 17 Jun 2024 02:23:03 +0000 (11:23 +0900)
New attribute:
 - id: DEVICED_BATTERY_ATTR_BOOL_DO_NOT_DISTURB
 - type: SYSCOMMON_RESMAN_DATA_TYPE_BOOLEAN
 - setter: X
 - getter: O

New attribute:
 - id: DEVICED_BATTERY_ATTR_INT_LOW_BATTERY_POPUP
 - type: SYSCOMMON_RESMAN_DATA_TYPE_INT
 - setter: O
 - getter: X
 - 1st param: enum syscommon_deviced_battery_option_type

In order to handle abnormal battery health status, above battery attributes are needed.
To support above attribute getter/setter,
enum battery_option_type is replaced by enum syscommon_deviced_battery_option_type from libsyscommon.

Change-Id: I604e478e6c530dc55f1f287196cf31f2da024762
Signed-off-by: Yunhee Seo <yuni.seo@samsung.com>
plugins/mobile/battery/battery-notification.c
src/battery/battery.h
src/battery/lowbat-handler.c
src/battery/power-supply.c
src/battery/power-supply.h
src/battery/resource-battery.c

index 013258f1756ffca10c310247aac7be5c5ac4a8c5..1a0c327abb6270ee8e0645ec046d46f63f148d93 100644 (file)
@@ -114,7 +114,7 @@ static void abnormal_popup_dbus_signal_handler(GDBusConnection  *conn,
                return;
 
        _I("Restart health timer.");
-       abnormal_timer = g_timeout_add_seconds(ABNORMAL_CHECK_TIMER_INTERVAL,
+       abnormal_timer = g_timeout_add_seconds(DEVICED_BATTERY_ABNORMAL_CHECK_TIMER_INTERVAL,
                                                health_timer_cb, NULL);
        if (abnormal_timer == 0)
                _E("Failed to add abnormal check timer.");
index 90110f90be7b4f5a302cc06b5c8d078e0f8c0e2e..8ad89e093f29eae003e94e25ef7805d9d1664e55 100644 (file)
 #define BATTERY_LEVEL_CHECK_LOW                5
 #define BATTERY_LEVEL_CHECK_CRITICAL   1
 
-enum battery_option_type {
-       BAT_OPT_NONE,
-       BAT_OPT_WARNING,
-       BAT_OPT_CRITICAL,
-       BAT_OPT_POWEROFF,
-       BAT_OPT_ERR_TEMP_LOW,
-       BAT_OPT_ERR_TEMP_HIGH,
-       BAT_OPT_ERR_CF_OPEN,
-};
-
 #define METHOD_NAME_MAX                        32
 
 struct battery_config_charger_event_handler {
index 967f8eaa1c30a5c97ed870a6c427213594400e3f..107194f7532ad6ca12bbc762948b063e37fd3d82 100644 (file)
@@ -190,7 +190,7 @@ static int delayed_init_done(void *data)
                popup = 0;
                if (battery->charge_now != CHARGER_CHARGING &&
                    battery->charge_full != CHARGING_FULL)
-                       lowbat_popup(BAT_OPT_NONE);
+                       lowbat_popup(SYSCOMMON_DEVICED_BATTERY_OPT_NONE);
                else
                        _I("Skip low battery popup during charging.");
        }
@@ -204,33 +204,33 @@ int lowbat_popup(int option)
        static int lowbat_popup_option;
        static char *value;
 
-       if (option == BAT_OPT_NONE) {
+       if (option == SYSCOMMON_DEVICED_BATTERY_OPT_NONE) {
                if (!value)
                        return -1;
                else
                        goto direct_launch;
        }
 
-       if (option == BAT_OPT_POWEROFF)
+       if (option == SYSCOMMON_DEVICED_BATTERY_OPT_POWEROFF)
                launched_poweroff = 0;
 
        switch (option) {
-       case BAT_OPT_CRITICAL:
+       case SYSCOMMON_DEVICED_BATTERY_OPT_CRITICAL:
                value = "lowbattery_critical";
                break;
-       case BAT_OPT_WARNING:
+       case SYSCOMMON_DEVICED_BATTERY_OPT_WARNING:
                value = "lowbattery_warning";
                break;
-       case BAT_OPT_POWEROFF:
+       case SYSCOMMON_DEVICED_BATTERY_OPT_POWEROFF:
                value = "poweroff";
                break;
-       case BAT_OPT_ERR_TEMP_LOW:
+       case SYSCOMMON_DEVICED_BATTERY_OPT_ERR_TEMP_LOW:
                value = "chargeerrlow";
                break;
-       case BAT_OPT_ERR_TEMP_HIGH:
+       case SYSCOMMON_DEVICED_BATTERY_OPT_ERR_TEMP_HIGH:
                value = "chargeerrhigh";
                break;
-       case BAT_OPT_ERR_CF_OPEN:
+       case SYSCOMMON_DEVICED_BATTERY_OPT_ERR_CF_OPEN:
                value = "battdisconnect";
                break;
        default:
@@ -249,23 +249,23 @@ direct_launch:
                        return 0;
                }
 
-               if (lowbat_popup_option == BAT_OPT_POWEROFF)
+               if (lowbat_popup_option == SYSCOMMON_DEVICED_BATTERY_OPT_POWEROFF)
                        launched_poweroff = 1;
 
                if (battery_do_not_disturb()) {
                        _I("block LCD and %s Popup", value);
                        return 0;
                }
-               if (lowbat_popup_option == BAT_OPT_ERR_TEMP_LOW ||
-                   lowbat_popup_option == BAT_OPT_ERR_TEMP_HIGH ||
-                   lowbat_popup_option == BAT_OPT_ERR_CF_OPEN) {
+               if (lowbat_popup_option == SYSCOMMON_DEVICED_BATTERY_OPT_ERR_TEMP_LOW ||
+                   lowbat_popup_option == SYSCOMMON_DEVICED_BATTERY_OPT_ERR_TEMP_HIGH ||
+                   lowbat_popup_option == SYSCOMMON_DEVICED_BATTERY_OPT_ERR_CF_OPEN) {
                        display_state_transition_request_state_transition_with_option(DEVICED_EVENT_BATTERY_CAPACITY_LOW, LCD_DIM);
                } else {
                        display_state_transition_request_state_transition_with_option(DEVICED_EVENT_BATTERY_CAPACITY_LOW, LCD_NORMAL);
                }
-               if (lowbat_popup_option == BAT_OPT_ERR_TEMP_LOW ||
-                   lowbat_popup_option == BAT_OPT_ERR_TEMP_HIGH ||
-                   lowbat_popup_option == BAT_OPT_ERR_CF_OPEN)
+               if (lowbat_popup_option == SYSCOMMON_DEVICED_BATTERY_OPT_ERR_TEMP_LOW ||
+                   lowbat_popup_option == SYSCOMMON_DEVICED_BATTERY_OPT_ERR_TEMP_HIGH ||
+                   lowbat_popup_option == SYSCOMMON_DEVICED_BATTERY_OPT_ERR_CF_OPEN)
                        return launch_system_app(APP_ABNORMAL,
                                2, APP_KEY_TYPE, value);
                return launch_system_app(APP_DEFAULT,
@@ -278,13 +278,13 @@ direct_launch:
 
 static int battery_warning_low_act(void *data)
 {
-       (void)lowbat_popup(BAT_OPT_WARNING);
+       (void)lowbat_popup(SYSCOMMON_DEVICED_BATTERY_OPT_WARNING);
        return 0;
 }
 
 static int battery_critical_low_act(void *data)
 {
-       (void)lowbat_popup(BAT_OPT_CRITICAL);
+       (void)lowbat_popup(SYSCOMMON_DEVICED_BATTERY_OPT_CRITICAL);
        return 0;
 }
 
@@ -296,21 +296,21 @@ static int battery_power_off_act(void *data)
 
 int battery_charge_err_cf_act(void *data)
 {
-       return lowbat_popup(BAT_OPT_ERR_CF_OPEN);
+       return lowbat_popup(SYSCOMMON_DEVICED_BATTERY_OPT_ERR_CF_OPEN);
 }
 
 int battery_charge_err_low_act(void *data)
 {
        display_lock_request_lock_with_option(DEVICED_EVENT_BATTERY_HEALTH_OVERCOOL, LCD_OFF, STAY_CUR_STATE, 60000);
 
-       return lowbat_popup(BAT_OPT_ERR_TEMP_LOW);
+       return lowbat_popup(SYSCOMMON_DEVICED_BATTERY_OPT_ERR_TEMP_LOW);
 }
 
 int battery_charge_err_high_act(void *data)
 {
        display_lock_request_lock_with_option(DEVICED_EVENT_BATTERY_HEALTH_OVERHEAT, LCD_OFF, STAY_CUR_STATE, 60000);
 
-       return lowbat_popup(BAT_OPT_ERR_TEMP_HIGH);
+       return lowbat_popup(SYSCOMMON_DEVICED_BATTERY_OPT_ERR_TEMP_HIGH);
 }
 
 static void lowbat_scenario_init(void)
index 9ed51b7aa57714c3573b1d8a9d24b4f12f450b62..59483f00b3c8fa6f652d82b3d9f29d7a21f53a48 100644 (file)
@@ -512,7 +512,7 @@ static void update_health(enum battery_noti_status status)
                CRITICAL_LOG("Popup: Battery health status is not good, %s.", battery.health_s);
                launch_health_popup();
                if (!abnormal_health_popup_timer)
-                       abnormal_health_popup_timer = g_timeout_add_seconds(ABNORMAL_CHECK_TIMER_INTERVAL, health_popup_cb, NULL);
+                       abnormal_health_popup_timer = g_timeout_add_seconds(DEVICED_BATTERY_ABNORMAL_CHECK_TIMER_INTERVAL, health_popup_cb, NULL);
        } else {
                battery_pm_change_internal(DEVICED_EVENT_MISC_POPUP, LCD_NORMAL);
                syscommon_notifier_emit_notify(DEVICED_NOTIFIER_BATTERY_HEALTH, (void *)&battery.health);
@@ -545,7 +545,7 @@ void relaunch_health_popup(void)
        else if (battery.health == SYSCOMMON_DEVICED_BATTERY_HEALTH_HIGH)
                battery_charge_err_high_act(NULL);
 
-       abnormal_health_popup_timer = g_timeout_add_seconds(ABNORMAL_CHECK_TIMER_INTERVAL, health_popup_cb, NULL);
+       abnormal_health_popup_timer = g_timeout_add_seconds(DEVICED_BATTERY_ABNORMAL_CHECK_TIMER_INTERVAL, health_popup_cb, NULL);
 
        launching_health_popup = false;
 }
index 6a7384c40a09a451544d0cea0673f63cc435c686..3aba8fde188d3bbd12c5483c2f8293701f788e75 100644 (file)
@@ -23,8 +23,6 @@
 #define CHARGER_TYPE_SIGNAL        "ChargerType"
 #define SIGNAL_CHARGEERR_RESPONSE "ChargeErrResponse"
 
-#define ABNORMAL_CHECK_TIMER_INTERVAL 60
-
 enum device_change_type {
        DEVICE_CHANGE_ABNORMAL,
        DEVICE_CHANGE_NORMAL,
index 5f106bcc4308e56aaab4320681382f687a3b2072..b9b7b834efe5f0470f7121435d9d0cb7cae9bea4 100644 (file)
@@ -25,6 +25,8 @@
 #include <system/syscommon-plugin-deviced-battery-interface.h>
 #include <system/syscommon-plugin-deviced-common-interface.h>
 
+#include "battery.h"
+#include "lowbat-handler.h"
 #include "power-supply.h"
 #include "shared/common.h"
 #include "core/log.h"
@@ -56,6 +58,9 @@ static int get_battery_attr_data(int resource_id,
        case DEVICED_BATTERY_ATTR_STRING_STATUS_HEALTH:
                ret = power_supply_get_battery_status_health_string(&attr_data.s);
                break;
+       case DEVICED_BATTERY_ATTR_BOOL_DO_NOT_DISTURB:
+               attr_data.b = battery_do_not_disturb();
+               break;
        default:
                ret = -EINVAL;
                break;
@@ -96,6 +101,31 @@ static int get_battery_attr_data(int resource_id,
        return 0;
 }
 
+static int set_battery_attr_data(int resource_id,
+       const struct syscommon_resman_resource_attribute *attr,
+       const void *data, int count)
+{
+       int ret = 0;
+
+       if (!data)
+               return -EINVAL;
+
+       switch (attr->id) {
+       case DEVICED_BATTERY_ATTR_INT_LOW_BATTERY_POPUP:
+               {
+                       enum syscommon_deviced_battery_option_type battery_option = *(enum syscommon_deviced_battery_option_type *) data;
+                       ret = lowbat_popup(battery_option);
+                       if (ret < 0)
+                               return ret;
+               }
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
 static const struct syscommon_resman_resource_attribute battery_attrs[] = {
        {
                .name = "DEVICED_BATTERY_ATTR_INT_STATUS_HEALTH",
@@ -115,7 +145,25 @@ static const struct syscommon_resman_resource_attribute battery_attrs[] = {
                        .get = get_battery_attr_data,
                        .is_supported = syscommon_resman_resource_attr_supported_always,
                },
-       },
+       }, {
+               .name = "DEVICED_BATTERY_ATTR_BOOL_DO_NOT_DISTURB",
+               .id = DEVICED_BATTERY_ATTR_BOOL_DO_NOT_DISTURB,
+               .type = SYSCOMMON_RESMAN_DATA_TYPE_BOOLEAN,
+               .flag = SYSCOMMON_RESMAN_RESOURCE_FLAG_PUBLIC,
+               .ops = {
+                       .get = get_battery_attr_data,
+                       .is_supported = syscommon_resman_resource_attr_supported_always,
+               },
+       }, {
+               .name = "DEVICED_BATTERY_ATTR_INT_LOW_BATTERY_POPUP",
+               .id = DEVICED_BATTERY_ATTR_INT_LOW_BATTERY_POPUP,
+               .type = SYSCOMMON_RESMAN_DATA_TYPE_INT,
+               .flag = SYSCOMMON_RESMAN_RESOURCE_FLAG_PUBLIC,
+               .ops = {
+                       .set = set_battery_attr_data,
+                       .is_supported = syscommon_resman_resource_attr_supported_always,
+               },
+       }
 };
 
 static const struct syscommon_resman_resource_driver deviced_battery_driver = {