Fix to reduce overall dbus calls to get battery related information 34/236834/1 submit/tizen_5.5/20200622.125807 submit/tizen_5.5/20200623.044855
authorkamaljeet chauhan <kamal.jc@samsung.com>
Thu, 18 Jun 2020 11:48:37 +0000 (17:18 +0530)
committerKamaljeet Chauhan <kamal.jc@samsung.com>
Mon, 22 Jun 2020 11:48:19 +0000 (11:48 +0000)
Change-Id: Ic42c7e6633a457eb9f269d139e82c6745cd420a8
Signed-off-by: kamaljeet chauhan <kamal.jc@samsung.com>
include/bd_history_item.h
include/bm_listeners.h
src/battery_dump/bd_history_item.c
src/battery_dump/bm_listeners.c

index 7263e01..19876fd 100644 (file)
@@ -59,8 +59,8 @@ typedef struct _history_item_s {
 typedef struct _dump_data_s {
        long long time_s;
        long long time_current;
-       int dump_1;
-       int dump_2;
+       long long dump_1;
+       long long dump_2;
        int state_1;
        int state_2;
        int battery_chargeUAh;
index c9266bc..95d4e21 100644 (file)
@@ -27,7 +27,7 @@
 #include "bd_private.h"
 #include <pthread.h>
 
-
+#define BATTERY_INFO_DELAY 1
 #define MAX_BUFF 1
 #define        LISTEN_BT_STATE 0
 #define        LISTEN_BT_CONNECTION_STATE 1
index 49270ae..2f38637 100644 (file)
@@ -708,12 +708,12 @@ static int bd_get_history_detail_from_dump(int index, history_item_s* dump_node)
        _DBG("Value of index %d", index);
        _DBG("Value of h_count %d", h_count);
 
-       int dvar1 = 0, dvar2 = 0;
+       long long dvar1 = 0, dvar2 = 0;
        dvar1 = history_data[index].dump_1;
        dvar2 = history_data[index].dump_2;
 
-       _DBG("Value of encoded value 1 %d", dvar1);
-       _DBG("Value of encoded value 2 %d", dvar2);
+       _DBG("Value of encoded value 1 %lld", dvar1);
+       _DBG("Value of encoded value 2 %lld", dvar2);
 
        dump_node->cmd_s = ((dvar1) & 0xff);
        _DBG("cmd_s %d", dump_node->cmd_s);
@@ -730,10 +730,10 @@ static int bd_get_history_detail_from_dump(int index, history_item_s* dump_node)
        dump_node->battery_plugtype = ((dvar1>>24) & 0xf);
        _DBG("battery_plugtype %d", dump_node->battery_plugtype);
 
-       dump_node->battery_temperature = ((dvar2) & 0xffff);
+       dump_node->battery_temperature = (dvar2 & 0xffffffff);
        _DBG("battery_temperature %d", dump_node->battery_temperature);
 
-       dump_node->battery_voltage = ((dvar2>>16) & 0xffff);
+       dump_node->battery_voltage = ((dvar2>>32) & 0x0fffffff);
        _DBG("battery_voltage %d", dump_node->battery_voltage);
 
        dump_node->battery_charge = history_data[index].battery_chargeUAh;
@@ -1333,7 +1333,7 @@ static int bd_set_history_from_listener(history_item_s* nrec)
        ENTER;
        BM_CHECK_INPUT_PARAM(nrec);
 
-       int dvar1 = 0, dvar2 = 0;
+       long long dvar1 = 0, dvar2 = 0;
        struct timeval tv;
        gettimeofday(&tv, NULL);
 
@@ -1356,11 +1356,11 @@ static int bd_set_history_from_listener(history_item_s* nrec)
                ((nrec->wakereason_tag != NULL) ? 0x20000000 : 0) |
                ((nrec->event_code != ET_NONE) ? 0x40000000 : 0);
 
-       dvar2 = ((nrec->battery_temperature) & 0xffff) |
-               ((nrec->battery_voltage << 16) & 0xffff0000);
+       dvar2 = ((nrec->battery_voltage) & 0x0fffffff);
+       dvar2 = ((dvar2 << 32) | (nrec->battery_temperature & 0xffffffff));
 
-       _DBG("Value of encoded value 1 %d", dvar1);
-       _DBG("Value of encoded value 2 %d", dvar2);
+       _DBG("Value of encoded value 1 %lld", dvar1);
+       _DBG("Value of encoded value 2 %lld", dvar2);
 
        history_data[h_count].dump_1 = dvar1;
        history_data[h_count].dump_2 = dvar2;
index c13f5be..de3d535 100644 (file)
@@ -25,6 +25,7 @@
 #include <TapiUtility.h>
 #include <ITapiNetwork.h>
 #include <glib.h>
+#include <device/battery-internal.h>
 
 wifi_manager_h wifi = NULL;
 static bool display_on;
@@ -33,6 +34,7 @@ static int brightness_flag = 0;
 static int ss_val = 0;
 static int ss_flag = 0;
 static history_item_s *data_obj = NULL;
+struct timeval prev_event_time;
 
 display_state_e display_flag = DISPLAY_STATE_SCREEN_OFF;
 static int listener_hsp = -1;
@@ -117,151 +119,74 @@ int bm_listener_dbus_deinit()
        return BATTERY_MONITOR_ERROR_NONE;
 }
 
-static int bm_battery_level_listener()
+static int fill_battery_info()
 {
        ENTER;
-       int ret_val = BATTERY_MONITOR_ERROR_NONE;
-
-       int battery_level;
-       ret_val = device_battery_get_percent(&battery_level);
-       if (ret_val != BATTERY_MONITOR_ERROR_NONE) {
-               _ERR("Failed to get battery percentage (%d)", ret_val);
-               return -1;
-       }
-
-       EXIT;
-       return battery_level;
-}
-
-static int bm_battery_status_listener()
-{
-       ENTER;
-       int ret_val = BATTERY_MONITOR_ERROR_NONE;
-
-       device_battery_status_e battery_status;
-       ret_val = device_battery_get_status(&battery_status);
-       if (ret_val != BATTERY_MONITOR_ERROR_NONE) {
-               _ERR("Failed to get battery status (%d)", ret_val);
-               return -1;
-       }
-
-       BD_BSTA_IDX bm_status;
-       if (battery_status == DEVICE_BATTERY_STATUS_CHARGING)
-               bm_status = BD_BSTA_CHAR;
-       else if (battery_status == DEVICE_BATTERY_STATUS_DISCHARGING)
-               bm_status = BD_BSTA_DISC;
-       else if (battery_status == DEVICE_BATTERY_STATUS_FULL)
-               bm_status = BD_BSTA_FULL;
-       else if (battery_status == DEVICE_BATTERY_STATUS_NOT_CHARGING)
-               bm_status = BD_BSTA_NCHA;
-       else
-               return BD_BSTA_NONE;
-
-       EXIT;
-       return bm_status;
-}
-
-static int bm_battery_health_listener()
-{
-       ENTER;
-       int ret_val = BATTERY_MONITOR_ERROR_NONE;
-
-       device_battery_health_e health;
-       BD_BHLT_IDX bm_health;
-       ret_val = device_battery_get_health(&health);
-       if (ret_val != BATTERY_MONITOR_ERROR_NONE) {
-               _ERR("Failed to get battery health (%d)", ret_val);
-               return -1;
-       }
-
-       if (health == DEVICE_BATTERY_HEALTH_GOOD)
-               bm_health = BD_BHLT_GOOD;
-       else if (health == DEVICE_BATTERY_HEALTH_COLD)
-               bm_health = BD_BHLT_CLD;
-       else if (health == DEVICE_BATTERY_HEALTH_DEAD)
-               bm_health = BD_BHLT_DEAD;
-       else if (health == DEVICE_BATTERY_HEALTH_OVER_HEAT)
-               bm_health = BD_BHLT_OVRH;
-       else if (health == DEVICE_BATTERY_HEALTH_OVER_VOLTAGE)
-               bm_health = BD_BHLT_OVRV;
-       else
-               return BD_BHLT_NONE;
-
-       EXIT;
-       return bm_health;
-}
-
-static int bm_battery_plugtype_listener()
-{
-       ENTER;
-       int ret_val = BATTERY_MONITOR_ERROR_NONE;
-
-       device_battery_power_source_e source;
-       ret_val = device_battery_get_power_source(&source);
-       if (ret_val != BATTERY_MONITOR_ERROR_NONE) {
-               _ERR("Failed to get battery percentage (%d)", ret_val);
-               return -1;
-       }
-
-       BD_BPLT_IDX bm_plugtype = BD_BPLT_NONE;
-       if (source == DEVICE_BATTERY_POWER_SOURCE_AC)
-               bm_plugtype = BD_BPLT_AC;
-       else if (source == DEVICE_BATTERY_POWER_SOURCE_USB)
-               bm_plugtype = BD_BPLT_USB;
-       else if (source == DEVICE_BATTERY_POWER_SOURCE_WIRELESS)
-               bm_plugtype = BD_BPLT_WL;
-       else if (source == DEVICE_BATTERY_POWER_SOURCE_NONE)
-               bm_plugtype = BD_BPLT_NONE;
-
-       EXIT;
-       return bm_plugtype;
-}
+       struct battery_info info;
+       int ret = device_battery_get_info(&info);
+       if (ret == DEVICE_ERROR_NONE) {
+               data_obj->battery_level = info.capacity;
+               if (data_obj->battery_level < 0)
+                       _ERR("Failed to get  ts->battery_level = %d ", data_obj->battery_level);
+
+               size_t len = strlen(info.status);
+               if (!strncmp(info.status, "Charging", len))
+                       data_obj->battery_status = BD_BSTA_CHAR;
+               else if (!strncmp(info.status, "Discharging", len))
+                       data_obj->battery_status = BD_BSTA_DISC;
+               else if (!strncmp(info.status, "Full", len))
+                       data_obj->battery_status = BD_BSTA_FULL;
+               else if (!strncmp(info.status, "Not charging", len))
+                       data_obj->battery_status = BD_BSTA_NCHA;
+               else {
+                       _ERR("Failed to get info.status = %s ", info.status);
+                       data_obj->battery_status = BD_BSTA_UNKN;
+               }
 
-static int bm_battery_voltage_temperature_charge_listener(history_item_s *ts)
-{
-       ENTER;
+               len = strlen(info.health);
+               if (!strncmp(info.health, "Good", len))
+                       data_obj->battery_health = BD_BHLT_GOOD;
+               else if (!strncmp(info.health, "Cold", len))
+                       data_obj->battery_health = BD_BHLT_CLD;
+               else if (!strncmp(info.health, "Dead", len))
+                       data_obj->battery_health = BD_BHLT_DEAD;
+               else if (!strncmp(info.health, "Overheat", len))
+                       data_obj->battery_health = BD_BHLT_OVRH;
+               else if (!strncmp(info.health, "Over voltage", len))
+                       data_obj->battery_health = BD_BHLT_OVRV;
+               else
+                       data_obj->battery_health = BD_BHLT_UNKN;
+
+               len = strlen(info.power_source);
+               if (!strncmp(info.power_source, "ac", len))
+                       data_obj->battery_plugtype = BD_BPLT_AC;
+               else if (!strncmp(info.power_source, "usb", len))
+                       data_obj->battery_plugtype = BD_BPLT_USB;
+               else if (!strncmp(info.power_source, "wireless", len))
+                       data_obj->battery_plugtype = BD_BPLT_WL;
+               else
+                       data_obj->battery_plugtype = BD_BPLT_NONE;
 
-       device_battery_property_e property;
-       int val, ret;
+               _INFO("battery_level = %d, battery_status = %d, battery_health = %d, battery_plugtype = %d",
+                       data_obj->battery_level, data_obj->battery_status, data_obj->battery_health, data_obj->battery_plugtype);
 
-       /* get the battery voltage*/
-       property = DEVICE_BATTERY_PROPERTY_VOLTAGE_NOW;
-       ret = device_battery_get_property(property, &val);
-       if (ret != BATTERY_MONITOR_ERROR_NONE) {
-               _ERR("Failed to get battery voltage (%d)", ret);
-               return ret;
-       }
-       ts->battery_voltage = val;
+               data_obj->battery_temperature = info.temperature;
+               data_obj->battery_voltage = info.voltage_now;
 
-       /* get the battery temperature*/
-       property = DEVICE_BATTERY_PROPERTY_TEMPERATURE;
-       ret = device_battery_get_property(property, &val);
-       if (ret != BATTERY_MONITOR_ERROR_NONE) {
-               _ERR("Failed to get battery temperature (%d)", ret);
-               return ret;
+               _INFO("battery_voltage = %d, battery_temperature = %d", data_obj->battery_voltage, data_obj->battery_temperature);
+       } else {
+               _ERR("Failed to get battery info (%d)", ret);
        }
-       ts->battery_temperature = val;
 
-       /* get the battery charge*/
-       /*      property = DEVICE_BATTERY_PROPERTY_CAPACITY;
-               ret = device_battery_get_property(property, &val);
-               if (ret != BATTERY_MONITOR_ERROR_NONE) {
-                       _ERR("Failed to get battery capacity (%d)", ret); //LCOV_EXCL_LINE Logs
-                       return ret;
-               }
-               _INFO("success to get battery capacity (%d)", ret);
-       */
-
-       ts->battery_charge = 0;
        EXIT;
-       return BATTERY_MONITOR_ERROR_NONE;
+       return ret;
 }
 
 static void fill_bt_adapter_state_changed_data(int adapter_state)
 {
        ENTER;
 
-       _INFO("state: %s", (adapter_state == BT_ADAPTER_ENABLED) ? "ENABLED" : "DISABLED");
+       _WARN("state: %s", (adapter_state == BT_ADAPTER_ENABLED) ? "ENABLED" : "DISABLED");
        int bt_state;
        if (adapter_state == BT_ADAPTER_ENABLED)
                bt_state = 1;
@@ -312,7 +237,7 @@ static void fill_bt_device_discovery_state_changed_data(int discovery_state)
 {
        ENTER;
 
-       _INFO(" discovery_state = %d", discovery_state);
+       _WARN(" discovery_state = %d", discovery_state);
 
        if (data_obj) {
                switch (discovery_state) {
@@ -365,7 +290,7 @@ static void fill_bt_device_connection_state_changed_data(int connected)
 {
        ENTER;
 
-       _INFO("__bt_device_connection_state_changed_cb [%d]", connected);
+       _WARN("__bt_device_connection_state_changed_cb [%d]", connected);
        if (!connected)
                _INFO("bt is disconnected");
 
@@ -409,7 +334,7 @@ static void fill_wifi_device_state_data(int state)
 {
        ENTER;
 
-       _INFO(" Wifi Device state changed callback");
+       _WARN(" Wifi Device state changed callback");
 
        if (state == WIFI_MANAGER_DEVICE_STATE_ACTIVATED)
                _INFO(", state : Activated\n");
@@ -458,7 +383,7 @@ static void fill_wifi_scan_changed_data(int state)
 {
        ENTER;
 
-       _INFO("Wifi Scan changed, scan state : %d\n", state);
+       _WARN("Wifi Scan changed, scan state : %d\n", state);
        if (data_obj) {
                if (state == WIFI_MANAGER_SCAN_STATE_SCANNING) {
                        data_obj->event_code = ET_NONE;
@@ -505,7 +430,7 @@ static void fill_wifi_connection_state_changed_data(int state)
 {
        ENTER;
 
-       _INFO("Wifi Connection changed, connection state : %d\n", state);
+       _WARN("Wifi Connection changed, connection state : %d\n", state);
 
        if (data_obj) {
                switch (state) {
@@ -551,7 +476,7 @@ static void fill_wifi_connection_state_changed_data(int state)
 static void fill_device_display_change(int value)
 {
        ENTER;
-       _INFO("device state changed succeeded\n");
+       _WARN("device state changed succeeded\n");
 
        switch (value) {
        case DISPLAY_STATE_NORMAL:
@@ -617,7 +542,7 @@ static void fill_display_brightness_change(int brightness_level)
 {
        ENTER;
 
-       _INFO(" device brightness changed =%d ", brightness_level);
+       _WARN(" device brightness changed =%d ", brightness_level);
        if (data_obj) {
                data_obj->state_1 &= ~brightness_val;
                brightness_val = brightness_level;
@@ -634,7 +559,7 @@ static void fill_battery_capacity_change(int charging_level)
 {
        ENTER;
 
-       _INFO(" device battery_capacity changed =%d ", charging_level);
+       _WARN(" device battery_capacity changed =%d ", charging_level);
        if (data_obj) {
                data_obj->event_code = ET_NONE;
                data_obj->event_tag = NULL;
@@ -693,7 +618,7 @@ static void fill_signal_strength_change(int ss)
 {
        ENTER;
 
-       _INFO(" device signal_strength changed =%d ", ss);
+       _WARN(" device signal_strength changed =%d ", ss);
        if (data_obj) {
                data_obj->state_1 &= ~ss_val << ST1_PHONE_SIGNAL_STRENGTH_SHIFT;
                ss_val = ss;
@@ -710,7 +635,7 @@ static void fill_sleep_wakeup_change(int val)
 {
        ENTER;
 
-       _INFO(" sleep/wake up changed =%d ", val);
+       _WARN(" sleep/wake up changed =%d ", val);
        if (val) {
                data_obj->event_code = ET_NONE;
                data_obj->event_tag = NULL;
@@ -765,7 +690,7 @@ static void fill_location_change(int gps)
 {
        ENTER;
 
-       _INFO(" maps location changed =%d ", gps);
+       _WARN(" maps location changed =%d ", gps);
        if (data_obj) {
                if (gps) {
                        data_obj->event_code = ET_NONE;
@@ -808,8 +733,8 @@ static int fill_power_lock_unlock_change(int lock)
 {
        ENTER;
 
-       _INFO(" fill_powerlock_change changed =%d ", lock);
-       if(prev_wakeup == lock)
+       _WARN(" fill_powerlock_change changed =%d ", lock);
+       if (prev_wakeup == lock)
                return 1;
        else
                prev_wakeup = lock;
@@ -873,7 +798,7 @@ static int fill_app_status_change(int val, char *app_id)
        void *prv_app_id = NULL;
        int error_code = 0;
 
-       _INFO(" App status changed for = %s ", app_id);
+       _WARN(" App status changed for = %s ", app_id);
        if (data_obj) {
                if (val) {
                        data_obj->event_code = ET_NONE;
@@ -950,7 +875,7 @@ static void fill_modem_power_state_change(int state)
 {
        ENTER;
 
-       _INFO("fill_modem_power_state_change - state[%d]", state);
+       _WARN("fill_modem_power_state_change - state[%d]", state);
 
        if (data_obj && state == 0) { /* ON */
                data_obj->event_code = ET_NONE;
@@ -1066,43 +991,25 @@ static void bm_create_event_data(int type, int val, char *app)
        gettimeofday(&tv, NULL);
        data_obj->time_s = ((long long)tv.tv_sec * 1000) + ((long long)tv.tv_usec / 1000);
 
-       data_obj->battery_level = bm_battery_level_listener();
-       if (data_obj->battery_level < 0) {
-               _ERR("Failed to get  ts->battery_level = %d ", data_obj->battery_level);
-               return;
-       } else {
-               if (type == LISTEN_BATTERY_CAPACITY_CHANGE && prev_battery_level == data_obj->battery_level)
-                       return;
-               else
-                       prev_battery_level = data_obj->battery_level;
-       }
-
-       data_obj->battery_status = bm_battery_status_listener();
-       if (data_obj->battery_status < 0) {
-               _ERR("Failed to get ts->battery_status = %d ", data_obj->battery_status);
-               return;
-       }
+       double time_taken;
+       time_taken = (tv.tv_sec - prev_event_time.tv_sec) * 1000000;
+       time_taken = (time_taken + (tv.tv_usec - prev_event_time.tv_usec)) * 0.000001;
 
-       data_obj->battery_health = bm_battery_health_listener();
-       if (data_obj->battery_health < 0) {
-               _ERR("Failed to get ts->battery_health = %d ", data_obj->battery_health);
-               return;
-       }
+       _DBG("time_taken = %lf ", time_taken);
 
-       data_obj->battery_plugtype = bm_battery_plugtype_listener();
-       if (data_obj->battery_plugtype < 0)
-               _WARN("Failed to get ts->battery_plugtype = %d ", data_obj->battery_plugtype);
+       if (time_taken >= BATTERY_INFO_DELAY) {
+               if (fill_battery_info() != DEVICE_ERROR_NONE)
+                       _ERR("Fill Battery information failed ");
 
-       _INFO("battery_level = %d, battery_status = %d, battery_health = %d, battery_plugtype = %d",
-               data_obj->battery_level, data_obj->battery_status, data_obj->battery_health, data_obj->battery_plugtype);
+               prev_event_time = tv;
+       } else {
+               _DBG("Event occur too early, not updating battery information ");
+       }
 
-       int ret = bm_battery_voltage_temperature_charge_listener(data_obj);
-       if (ret != BATTERY_MONITOR_ERROR_NONE) {
-               _ERR("bm_battery_voltage_temperature_charge_listener failed ");
+       if (type == LISTEN_BATTERY_CAPACITY_CHANGE && prev_battery_level == data_obj->battery_level)
                return;
-       } else
-               _INFO("battery_voltage = %d, battery_temperature = %d, battery_charge = %d",
-                       data_obj->battery_voltage, data_obj->battery_temperature, data_obj->battery_charge);
+       else
+               prev_battery_level = data_obj->battery_level;
 
        if (data_obj->event_tag) {
                data_obj->event_tag->uid = 1000;
@@ -1172,7 +1079,7 @@ void __bm_bt_adapter_state_changed_cb(int result, bt_adapter_state_e adapter_sta
        else
                bt_state = 0;
 
-       if(bt_adaptor == bt_state)
+       if (bt_adaptor == bt_state)
                return;
        else
                bt_adaptor = bt_state;
@@ -1357,7 +1264,7 @@ static void __bm_device_display_change(device_callback_e type, void *value, void
 
        display_state_e state = (display_state_e)value;
 
-       if(state == display_flag)
+       if (state == display_flag)
                return;
        else
                display_flag = state;
@@ -1507,7 +1414,7 @@ static void __bm_location_change(keynode_t *key, void* data)
 
        _INFO(" device location changed = %d ", location);
 
-       if(location == location_flag)
+       if (location == location_flag)
                return;
        else
                location_flag = location;
@@ -1631,17 +1538,17 @@ static void _bm_notify_modem_power(TapiHandle *handle, const char *noti_id, void
        int state = -1;
 
        /* handling only On/Off states */
-       switch(*status) {
-               case 0: /* ON */
-                       state = 0;
-                       modem_flag = 1;
-                       break;
-               case 1: /* OFF */
-                       state = 1;
-                       modem_flag = 0;
-                       break;
-               default:
-                       break;
+       switch (*status) {
+       case 0: /* ON */
+               state = 0;
+               modem_flag = 1;
+               break;
+       case 1: /* OFF */
+               state = 1;
+               modem_flag = 0;
+               break;
+       default:
+               break;
        }
 
        if (state != -1) {
@@ -1818,7 +1725,7 @@ static void __app_status_signal_callback(GDBusConnection *conn,
                gpointer user_data)
 {
        ENTER;
-       int pid,val;
+       int pid, val;
        char *appid;
        char *status;
 
@@ -2212,6 +2119,18 @@ static int bm_initialize_history_data_obj()
                return BATTERY_MONITOR_ERROR_OUT_OF_MEMORY;
        }
 
+       if (fill_battery_info() != DEVICE_ERROR_NONE) {
+               _ERR("Battery information failed ");
+               data_obj->battery_level = 0;
+               data_obj->battery_temperature = 0;
+               data_obj->battery_voltage = 0;
+               data_obj->battery_health = BD_BHLT_UNKN;
+               data_obj->battery_plugtype = BD_BPLT_NONE;
+               data_obj->battery_status = BD_BSTA_UNKN;
+       }
+
+       gettimeofday(&prev_event_time, NULL);
+
        EXIT;
        return BATTERY_MONITOR_ERROR_NONE;
 }
@@ -2240,7 +2159,7 @@ int bd_initialize_listeners(void)
                _ERR("pthread_attr_setdetachstate failed");
 
        /*Initialize DBus*/
-       if(bm_listener_dbus_init())
+       if (bm_listener_dbus_init())
                _ERR("bm_listener_dbus_init failed \n");
 
        /*  Wifi callbacks */
@@ -2378,7 +2297,7 @@ int bd_deinitialize_listeners()
        }
 
        /*Dbus Deinitialize*/
-       if(bm_listener_dbus_deinit())
+       if (bm_listener_dbus_deinit())
                _ERR("failed to de-init dbus ");
 
        /* de-initialize pthread attributes */