Provide methods to initialize and deinitialize battery monitor 04/214904/7
authorSudipto <sudipto.bal@samsung.com>
Fri, 27 Sep 2019 07:56:41 +0000 (13:26 +0530)
committerSudipto Bal <sudipto.bal@samsung.com>
Wed, 23 Oct 2019 05:14:37 +0000 (05:14 +0000)
feature

Provide callback during initialization so that the following
bluetooth data for the session is provided to battery monitor frwk
when bluetooth adapter is disabled:
session_start_time
session_end_time
session_scan_time
session_connected_time
app-wise data transaction details for the session

Change-Id: If48adf6944a50d67e91d3b18c54b163b5adc745b
Signed-off-by: Sudipto <sudipto.bal@samsung.com>
include/bluetooth_internal.h
include/bluetooth_private.h
include/bluetooth_type_internal.h
src/bluetooth-adapter.c
src/bluetooth-common.c
test/bt_unit_test.c
test/bt_unit_test.h

index ebcac01a00b0a1b40a7f7df553e0b7f1816392d3..8344a4451a0ddf0bf05991cccfbd659302904446 100644 (file)
@@ -123,6 +123,36 @@ int bt_adapter_read_battery_info(bt_battery_info_s *data);
  */
 int bt_adapter_disable(void);
 
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Initializes and activates battery monitor
+ * @since_tizen5.5
+ *
+ * @param[in] callback Address of callback function
+ * @param[in] user_data user
+ *
+ * @pre This function will initialize and activate the battery monitor feature.
+ * It sets a callback function that will be called when bluetooth adapter
+ * is disabled.
+ *
+ * @see *bt_adapter_disable_battery_cb
+ */
+int bt_adapter_init_battery_monitor(bt_adapter_disable_battery_cb callback,
+                                                        void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Deinitializes and disables battery monitor.
+ * @since_tizen5.5
+ *
+ * @pre This function will disable the battery monitor feature
+ * and unset the related callback function
+ *
+ * @see bt_adapter_init_battery_monitor
+ * @see *bt_adapter_disable_battery_cb
+ */
+int bt_adapter_deinit_battery_monitor();
+
 /**
  * @internal
  * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
index a95b30f45e28b5b66d73f3fdc4474810f2b60385..882ed0454f8dbccbfcd665107da62279b07b6b5e 100644 (file)
@@ -67,6 +67,7 @@ extern "C" {
  */
 typedef enum {
        BT_EVENT_STATE_CHANGED = 0x00, /**< Adapter state is changed */
+       BT_EVENT_ADAPTER_DISABLED_BATTERY_DATA, /**Notify BT usage data to battery monitor frwk**/
        BT_EVENT_LE_STATE_CHANGED, /**< Adapter le state is changed */
        BT_EVENT_NAME_CHANGED, /**< Adapter name is changed */
        BT_EVENT_VISIBILITY_MODE_CHANGED, /**< Adapter visibility mode is changed */
index 28232373e93241d022cd4af747fda617d92c19d4..1eca276a2870f728b415ec92509b766305e90fd5 100644 (file)
@@ -336,6 +336,20 @@ typedef void (*bt_map_client_get_message_cb)(int result, bt_map_client_message_h
 typedef void (*bt_adapter_connectable_changed_cb)
        (int result, bool connectable, void *user_data);
 
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief  Called when adapter is disabled.
+ * @since_tizen5.5
+ *
+ * @param[in] data Bluetooth session data
+ *
+ * @pre This function will be invoked when Bluetooth adapter is disabled
+ * if you activate the battery monitor feature using bt_adapter_init_battery_monitor
+ *
+ * @see bt_adapter_init_battery_monitor
+ */
+typedef void (*bt_adapter_disable_battery_cb)(bt_battery_info_s *data);
+
 /**
  * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
  * @brief  Called when the push is requested.
index 5d9e469ce79d1eb6e0c9a3ca2b7b28f033b43164..4427f6f41b89a055ece63dd240a00cf96ba15040 100644 (file)
@@ -612,6 +612,39 @@ int bt_adapter_unset_connectable_changed_cb(void)
        return BT_ERROR_NONE;
 }
 
+int bt_adapter_init_battery_monitor(bt_adapter_disable_battery_cb callback,
+                                                       void *user_data)
+{
+       BT_CHECK_SUPPORTED_FEATURE(BT_FEATURE_COMMON);
+       BT_CHECK_INIT_STATUS();
+       BT_CHECK_INPUT_PARAMETER(callback);
+
+       int ret = bluetooth_set_battery_monitor_state(TRUE);
+       if (ret != BT_ERROR_NONE) {
+               BT_ERR("Battery monitor could not be activated");
+               return BT_ERROR_OPERATION_FAILED;
+       }
+
+       _bt_set_cb(BT_EVENT_ADAPTER_DISABLED_BATTERY_DATA, callback, user_data);
+
+       return BT_ERROR_NONE;
+}
+
+int bt_adapter_deinit_battery_monitor(void)
+{
+       BT_CHECK_SUPPORTED_FEATURE(BT_FEATURE_COMMON);
+       BT_CHECK_INIT_STATUS();
+
+       int ret = bluetooth_set_battery_monitor_state(FALSE);
+       if (ret != BT_ERROR_NONE) {
+               BT_ERR("Battery monitor could not be deactivated");
+               return BT_ERROR_OPERATION_FAILED;
+       }
+
+       _bt_unset_cb(BT_EVENT_ADAPTER_DISABLED_BATTERY_DATA);
+       return BT_ERROR_NONE;
+}
+
 int bt_adapter_get_connectable(bool *connectable)
 {
        gboolean is_connectable = FALSE;
index d5966fb2ea40e13853c18d1d928f5f29c860073a..c59f074d45b9f95ac276ee3e1e32b8e92977a71d 100644 (file)
@@ -127,6 +127,7 @@ typedef struct {
 static bt_event2index_table_t event2index[] = {
        { BLUETOOTH_EVENT_ENABLED, BT_EVENT_STATE_CHANGED },
        { BLUETOOTH_EVENT_DISABLED, BT_EVENT_STATE_CHANGED },
+       { BLUETOOTH_EVENT_DISABLED_BATTERY_DATA, BT_EVENT_ADAPTER_DISABLED_BATTERY_DATA},
        { BLUETOOTH_EVENT_LE_ENABLED, BT_EVENT_LE_STATE_CHANGED },
        { BLUETOOTH_EVENT_LE_DISABLED, BT_EVENT_LE_STATE_CHANGED },
        { BLUETOOTH_EVENT_LOCAL_NAME_CHANGED, BT_EVENT_NAME_CHANGED },
@@ -1347,7 +1348,11 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
        case BLUETOOTH_EVENT_DISABLED:
                BT_INFO("bt_adapter_state_changed_cb() will be called with BT_ADAPTER_DISABLED");
                ((bt_adapter_state_changed_cb) bt_event_slot_container[event_index].callback)
-                   (_bt_get_error_code(param->result), BT_ADAPTER_DISABLED, bt_event_slot_container[event_index].user_data);
+                       (_bt_get_error_code(param->result), BT_ADAPTER_DISABLED, bt_event_slot_container[event_index].user_data);
+               break;
+       case BLUETOOTH_EVENT_DISABLED_BATTERY_DATA:
+               BT_INFO("bt_adapter_disable_battery_cb() will be called");
+               ((bt_adapter_disable_battery_cb)bt_event_slot_container[event_index].callback)((bt_battery_info_s *)(param->param_data));
                break;
        case BLUETOOTH_EVENT_LOCAL_NAME_CHANGED:
                BT_INFO("bt_adapter_name_changed_cb() will be called");
index ee3c185006f03e699c71e3270fa4d5ef2a6545f6..58153673e9080d2db6cf786c40a782e43e4228fc 100644 (file)
@@ -239,6 +239,10 @@ tc_table_t tc_adapter[] = {
                , BT_UNIT_TEST_FUNCTION_ADAPTER_SET_REMOTE_OOB_EXT_DATA},
        {"bt_adapter_read_battery_info"
                , BT_UNIT_TEST_FUNCTION_ADAPTER_READ_BATTERY_INFO},
+       {"bt_adapter_init_battery_monitor"
+               , BT_UNIT_TEST_FUNCTION_ADAPTER_INIT_BATTERY_MONITOR},
+       {"bt_adapter_deinit_battery_monitor"
+               , BT_UNIT_TEST_FUNCTION_ADAPTER_DEINIT_BATTERY_MONITOR},
        {"bt_adapter_set_visibility_mode_changed_cb"
                , BT_UNIT_TEST_FUNCTION_ADAPTER_SET_VISIBILITY_MODE_CHANGED_CB},
        {"bt_adapter_unset_visibility_mode_changed_cb"
@@ -1467,6 +1471,23 @@ void __bt_adapter_state_changed_cb(int result,
                                        "ENABLED" : "DISABLED");
 }
 
+static void __bt_adapter_disable_battery_cb(bt_battery_info_s *data)
+{
+       TC_PRT("Battery data: %ld %ld %d %d", data->session_start_time,
+               data->session_end_time, data->session_scan_time, data->session_connected_time);
+       if (data->atm_list == NULL) {
+               TC_PRT("No data transaction in this session");
+               return;
+       }
+
+       TC_PRT("Displaying app-wise transaction details");
+       for (GSList *l = data->atm_list; l != NULL; l = g_slist_next(l)) {
+               bt_battery_app_info_s *t = (bt_battery_app_info_s *)(l->data);
+               TC_PRT("uid: %ld, pid: %ld, received bytes: %d, sent bytes: %d",
+                       (long int)(t->uid), (long int)(t->pid), t->rx_bytes, t->tx_bytes);
+       }
+}
+
 static void __bt_adapter_device_visibility_mode_changed_cb(int result,
                                bt_adapter_visibility_mode_e visibility_mode,
                                void *user_data)
@@ -4243,6 +4264,22 @@ int test_input_callback(void *data)
                        }
                         break;
                }
+               case BT_UNIT_TEST_FUNCTION_ADAPTER_INIT_BATTERY_MONITOR: {
+                       int ret = bt_adapter_init_battery_monitor(__bt_adapter_disable_battery_cb, NULL);
+                       if (ret == BLUETOOTH_ERROR_NONE)
+                               TC_PRT("Battery monitor initialized and activated");
+                       else
+                               TC_PRT("Battery monitor could not be initialized and activated");
+                       break;
+               }
+               case BT_UNIT_TEST_FUNCTION_ADAPTER_DEINIT_BATTERY_MONITOR: {
+                       int ret = bt_adapter_deinit_battery_monitor();
+                       if (ret == BLUETOOTH_ERROR_NONE)
+                               TC_PRT("Battery monitor deinitialized successfully");
+                       else
+                               TC_PRT("Battery monitor could not be deinitialized");
+                       break;
+               }
                case BT_UNIT_TEST_FUNCTION_ADAPTER_SET_REMOTE_OOB_EXT_DATA: {
                        char remote_addr[18];
                        unsigned char *param_data[4];
index 2278306742b11ad616805522a7c691acf7dd271d..43294e2ce2fd3905c64183d8b937b58b42419b64 100644 (file)
@@ -85,6 +85,8 @@ typedef enum {
        BT_UNIT_TEST_FUNCTION_ADAPTER_SET_REMOTE_OOB_EXT_DATA,
        BT_UNIT_TEST_FUNCTION_ADAPTER_REMOVE_REMOTE_OOB_DATA,
        BT_UNIT_TEST_FUNCTION_ADAPTER_READ_BATTERY_INFO,
+       BT_UNIT_TEST_FUNCTION_ADAPTER_INIT_BATTERY_MONITOR,
+       BT_UNIT_TEST_FUNCTION_ADAPTER_DEINIT_BATTERY_MONITOR,
        BT_UNIT_TEST_FUNCTION_ADAPTER_SET_VISIBILITY_MODE_CHANGED_CB,
        BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_VISIBILITY_MODE_CHANGED_CB,
        BT_UNIT_TEST_FUNCTION_ADAPTER_SET_VISIBILITY_DURATION_CHANGED_CB,