Provide callback support to battery monitor frwk when BT is disabled 17/216117/4
authorSudipto <sudipto.bal@samsung.com>
Mon, 21 Oct 2019 07:03:29 +0000 (12:33 +0530)
committerSudipto Bal <sudipto.bal@samsung.com>
Thu, 24 Oct 2019 07:19:26 +0000 (07:19 +0000)
Change-Id: Ic7d9433a8be4475c339150685f6c045c0070ea69
Signed-off-by: Sudipto <sudipto.bal@samsung.com>
bt-api/bt-adapter.c
bt-api/bt-common.c
bt-api/bt-event-handler.c
bt-service-adaptation/services/bt-service-battery-monitor.c
bt-service-adaptation/services/bt-service-event-sender.c
include/bluetooth-api.h
include/bt-internal-types.h

index c391f75..e345387 100644 (file)
@@ -110,19 +110,23 @@ BT_EXPORT_API int bluetooth_enable_adapter(void)
        return result;
 }
 
-BT_EXPORT_API void bluetooth_set_battery_monitor_state(bool state)
+BT_EXPORT_API int bluetooth_set_battery_monitor_state(bool state)
 {
        BT_INFO("Setting vconf key");
        if (vconf_set_int(VCONFKEY_BATTERY_MONITOR_STATUS, state) != 0)
-                BT_ERR("vconf_set_int failed");
+       {
+               BT_ERR("vconf_set_int failed");
+               return BLUETOOTH_ERROR_INTERNAL;
+       }
+       return BLUETOOTH_ERROR_NONE;
 }
 
-BT_EXPORT_API bool bluetooth_get_battery_monitor_state()
+BT_EXPORT_API int bluetooth_get_battery_monitor_state()
 {
-       int state=0;
+       int state = 0;
        BT_INFO("Getting vconf key value");
        if (vconf_get_int(VCONFKEY_BATTERY_MONITOR_STATUS, &state) != 0)
-                BT_ERR("vconf_get_int failed");
+               BT_ERR("vconf_get_int failed");
        return state;
 }
 
index db2cb04..7e552bb 100644 (file)
@@ -152,7 +152,7 @@ int _bt_common_send_rfcomm_rx_details(bluetooth_rfcomm_received_data_t *data)
                in_param1, in_param2, in_param3, in_param4, &out_param);
 
        BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
-       BT_DBG("-");
+       BT_INFO("-");
        return ret;
 }
 
index 3afa060..b2360fa 100644 (file)
@@ -386,6 +386,20 @@ gboolean __bt_reliable_disable_cb(gpointer user_data)
        return FALSE;
 }
 
+static void __bt_fill_garray_from_variant(GVariant *var, GArray *param)
+{
+       char *data;
+       int size;
+
+       size = g_variant_get_size(var);
+       if (size > 0) {
+               data = (char *)g_variant_get_data(var);
+               if (data)
+                       param = g_array_append_vals(param, data, size);
+
+       }
+}
+
 void __bt_adapter_event_filter(GDBusConnection *connection,
                                                 const gchar *sender_name,
                                                 const gchar *object_path,
@@ -422,6 +436,70 @@ void __bt_adapter_event_filter(GDBusConnection *connection,
                disable_timer_id = g_timeout_add(BT_RELIABLE_DISABLE_TIME,
                                (GSourceFunc)__bt_reliable_disable_cb,
                                event_info);
+       } else if (strcasecmp(signal_name, BT_DISABLED_BATTERY_DATA) == 0) {
+               BT_INFO("BT_DISABLED_BATTERY_DATA");
+
+               int result;
+               GVariant *param = NULL;
+               GArray *dbus_data = NULL;
+               bt_battery_dbus_data_t *info = NULL;
+               bt_battery_data *data = NULL;
+
+               g_variant_get(parameters, "(iv)", &result, &param);
+
+               if (!param) {
+                       result = BLUETOOTH_ERROR_INTERNAL;
+                        BT_ERR("No data reveived");
+                       _bt_common_event_cb(BLUETOOTH_EVENT_DISABLED_BATTERY_DATA,
+                               result, data,
+                                event_info->cb, event_info->user_data);
+                       return;
+               }
+
+               dbus_data = g_array_new(TRUE, TRUE, sizeof(gchar));
+               __bt_fill_garray_from_variant(param, dbus_data);
+               g_variant_unref(param);
+
+               info = &g_array_index(dbus_data, bt_battery_dbus_data_t, 0);
+
+               data = g_new0(bt_battery_data, 1);
+
+               data->session_start_time = info->session_start_time;
+               data->session_end_time = info->session_end_time;
+               data->session_scan_time = info->session_scan_time;
+               data->session_connected_time = info->session_connected_time;
+               data->atm_list = NULL;
+
+               BT_INFO("Received battery data in bt-api: %ld %ld %d %d.",
+               data->session_start_time, data->session_end_time,
+                       data->session_scan_time, data->session_connected_time);
+
+               /*Copying app wise details*/
+               int n = NUM_APP_MAX < info->num_app ? NUM_APP_MAX : info->num_app; //Maximum NUM_APP_MAX details will be fetched
+
+               for (int i = 0; i < n; i++) {
+                       bt_battery_app_data *app_data = NULL;
+                       app_data = g_malloc0(sizeof(bt_battery_app_data));
+                       memcpy(app_data, &(info->app_data[i]), sizeof(bt_battery_app_data));
+                       data->atm_list = g_slist_append(data->atm_list, app_data);
+               }
+
+               if (data->atm_list == NULL) {
+                       BT_INFO("No app data transaction in this session");
+               }
+               else {
+                       BT_INFO("App-wise data transaction details:");
+                       for (GSList *l = data->atm_list; l != NULL; l = g_slist_next(l)) {
+                               bt_battery_app_data *t = (bt_battery_app_data *)(l->data);
+                               BT_DBG("%ld %ld %d %d", (long int)(t->uid), (long int)(t->pid), t->rx_bytes, t->tx_bytes);
+                       }
+               }
+
+               _bt_common_event_cb(BLUETOOTH_EVENT_DISABLED_BATTERY_DATA,
+                               result, data,
+                               event_info->cb, event_info->user_data);
+               g_slist_free(data->atm_list);
+               g_free(data);
        } else if (strcasecmp(signal_name, BT_DISCOVERABLE_MODE_CHANGED) == 0) {
                int mode = 0;
 
index 908c551..930f05f 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "bt-service-battery-monitor.h"
 #include "bt-service-common.h"
+#include "bt-service-event.h"
 
 static time_t scan_start = 0;
 static time_t connect_start = 0;
@@ -226,6 +227,55 @@ void _bt_stop_connect_time()
        }
 }
 
+static void _bt_notify_battery_data(void)
+{
+       BT_INFO("+");
+       _bt_battery_data_t *data = NULL;
+       int result;
+
+       data = g_new0(_bt_battery_data_t, 1);
+       result = _bt_bm_read_data(data);
+       GVariant *out_var = NULL, *param = NULL;
+       GArray *info = NULL;
+
+       if (result != BLUETOOTH_ERROR_NONE) {
+               BT_ERR("Battery data not collected");
+       }
+       else {
+               bt_battery_dbus_data_t dbus_data;
+               memset(&dbus_data, 0, sizeof(bt_battery_dbus_data_t));
+               dbus_data.session_start_time = data->session_start_time;
+               dbus_data.session_end_time = data->session_end_time;
+               dbus_data.session_scan_time = data->session_scan_time;
+               dbus_data.session_connected_time = data->session_connected_time;
+
+               /*Populating app data*/
+               int n = 0;
+               for (GSList *l = data->atm_list; l != NULL; l = g_slist_next(l)) {
+                       bt_battery_app_data *t = (bt_battery_app_data *)(l->data);
+                       memcpy(&dbus_data.app_data[n], t, sizeof(bt_battery_app_data));
+                       n++;
+               }
+               dbus_data.num_app = n;
+
+               info = g_array_new(FALSE, FALSE, sizeof(gchar));
+               g_array_append_vals(info, &dbus_data, sizeof(bt_battery_dbus_data_t));
+
+               out_var = g_variant_new_from_data((const GVariantType *)"ay",
+                               info->data, info->len,
+                               TRUE, NULL, NULL);
+       }
+       param = g_variant_new("(iv)", result, out_var);
+       _bt_send_event(BT_ADAPTER_EVENT,
+               BLUETOOTH_EVENT_DISABLED_BATTERY_DATA,
+               param);
+
+       g_slist_free(data->atm_list);
+       g_free(data);
+       g_array_free(info, TRUE);
+       BT_INFO("-");
+}
+
 void _bt_bm_event_handler(gpointer data)
 {
        bt_service_oal_event_data_t *oal_event = data;
@@ -239,6 +289,7 @@ void _bt_bm_event_handler(gpointer data)
        case OAL_EVENT_ADAPTER_DISABLED:
                BT_DBG("Handling Adapter Disabled");
                _bt_stop_session_time();
+               _bt_notify_battery_data();
                break;
        case OAL_EVENT_ADAPTER_INQUIRY_STARTED:
        case OAL_EVENT_BLE_DISCOVERY_STARTED:
index bbc0f7b..9da97fa 100644 (file)
@@ -143,6 +143,10 @@ int _bt_send_event(int event_type, int event, GVariant *param)
                signal = BT_DISABLED;
                BT_INFO_C("### BT Disabled");
                break;
+       case BLUETOOTH_EVENT_DISABLED_BATTERY_DATA:
+               signal = BT_DISABLED_BATTERY_DATA;
+               BT_INFO_C("### Sending battery data for last session");
+               break;
        case BLUETOOTH_EVENT_LE_ENABLED:
                signal = BT_LE_ENABLED;
                break;
index 02e9f5d..30dbdb9 100644 (file)
@@ -718,6 +718,7 @@ typedef enum {
 
        BLUETOOTH_EVENT_ENABLED,                    /**< Bluetooth event adpater enabled */
        BLUETOOTH_EVENT_DISABLED,                   /**< Bluetooth event adpater disabled */
+       BLUETOOTH_EVENT_DISABLED_BATTERY_DATA,      /**< Bluetooth event adapter disabled battery data*/
        BLUETOOTH_EVENT_LE_ENABLED,                 /**< Bluetooth event adpater enabled */
        BLUETOOTH_EVENT_LE_DISABLED,                /**< Bluetooth event adpater disabled */
        BLUETOOTH_EVENT_LOCAL_NAME_CHANGED,         /**< Bluetooth event local name changed*/
@@ -2409,8 +2410,8 @@ ret = bluetooth_disable_adapter();
  */
 int bluetooth_disable_adapter(void);
 int bluetooth_read_battery_data(bt_battery_data *latest);
-void bluetooth_set_battery_monitor_state(bool state);
-bool bluetooth_get_battery_monitor_state(void);
+int bluetooth_set_battery_monitor_state(bool state);
+int bluetooth_get_battery_monitor_state(void);
 int bluetooth_recover_adapter(void);
 int bluetooth_check_adapter_le(void);
 int bluetooth_enable_adapter_le(void);
index 51de888..8b5fc6c 100644 (file)
@@ -42,6 +42,8 @@ typedef struct {
        bt_battery_app_data app_data[NUM_APP_MAX];
 } bt_battery_dbus_data_t;
 
+typedef void (*bt_adapter_disable_bm_data_cb)(bt_battery_data *data);
+
 typedef enum {
        BT_NO_SERVER,
        BT_NATIVE_SERVER,
@@ -527,6 +529,7 @@ typedef struct {
 
 #define BT_ENABLED "Enabled"
 #define BT_DISABLED "Disabled"
+#define BT_DISABLED_BATTERY_DATA "AdapterDisabledBatteryData"
 #define BT_LE_ENABLED "LeEnabled"
 #define BT_LE_DISABLED "LeDisabled"
 #define BT_DISCOVERABLE_MODE_CHANGED "DiscoverableModeChanged"