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;
}
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;
}
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,
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, ¶m);
+
+ 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;
#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;
}
}
+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;
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:
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;
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*/
*/
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);
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,
#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"