Add the Rx / Tx / idle time in the battery monitor 29/228829/1
authorDoHyun Pyun <dh79.pyun@samsung.com>
Tue, 24 Mar 2020 07:19:24 +0000 (16:19 +0900)
committerDoHyun Pyun <dh79.pyun@samsung.com>
Tue, 24 Mar 2020 07:19:24 +0000 (16:19 +0900)
Change-Id: I353a31a7fff7279e98bfb8f3c0d7c25985073ebc
Signed-off-by: DoHyun Pyun <dh79.pyun@samsung.com>
15 files changed:
bt-api/bt-adapter.c
bt-api/bt-event-handler.c
bt-oal/bluez_hal/src/bt-hal-adapter-dbus-handler.c
bt-oal/bluez_hal/src/bt-hal-adapter-dbus-handler.h
bt-oal/bluez_hal/src/bt-hal-bluetooth.c
bt-oal/hardware/bluetooth.h
bt-oal/include/oal-adapter-mgr.h
bt-oal/oal-adapter-mgr.c
bt-service-adaptation/services/adapter/bt-service-core-adapter.c
bt-service-adaptation/services/bt-request-handler.c
bt-service-adaptation/services/bt-service-battery-monitor.c
bt-service-adaptation/services/include/bt-service-battery-monitor.h
bt-service-adaptation/services/include/bt-service-core-adapter.h
include/bluetooth-api.h
include/bt-internal-types.h

index fc41fa2..7d0d5be 100644 (file)
@@ -217,6 +217,9 @@ BT_EXPORT_API int bluetooth_read_battery_data(bt_battery_data *data)
        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->tx_time = info->tx_time;
+       data->rx_time = info->rx_time;
+       data->idle_time = info->idle_time;
        data->atm_list = NULL;
 
        BT_DBG("Received battery data in bt-api: %ld %ld %d %d.",
index f0167ea..9240b15 100644 (file)
@@ -474,6 +474,9 @@ void __bt_adapter_event_filter(GDBusConnection *connection,
                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->tx_time = info->tx_time;
+               data->rx_time = info->rx_time;
+               data->idle_time = info->idle_time;
                data->atm_list = NULL;
 
                BT_INFO("Received battery data in bt-api: %ld %ld %d %d.",
index 41ed4d8..722b0e2 100644 (file)
@@ -539,6 +539,55 @@ int _bt_hal_dbus_stop_discovery(void)
        return BT_STATUS_SUCCESS;
 }
 
+int _bt_hal_dbus_get_energy_info(uint32_t *tx_time, uint32_t *rx_time,
+                                       uint32_t *idle_time, uint32_t *energy_used)
+{
+       GDBusProxy *proxy;
+       GError *error = NULL;
+       GVariant *result;
+
+       DBG("+");
+
+       if (!tx_time || !rx_time || !idle_time || !energy_used) {
+               ERR("Invalid parameter");
+               return BT_STATUS_FAIL;
+       }
+
+       proxy = _bt_hal_get_adapter_proxy();
+       if (!proxy) {
+               DBG("_bt_hal_dbus_get_energy_info: Adapter proxy get failed!!!");
+               return BT_STATUS_FAIL;
+       }
+
+       result = g_dbus_proxy_call_sync(proxy,
+                       "GetEnergyInfo",
+                       NULL,
+                       G_DBUS_CALL_FLAGS_NONE,
+                       -1,
+                       NULL,
+                       &error);
+
+       if (!result) {
+               if (error != NULL) {
+                       ERR("GetEnergyInfo failed (Error: %s)", error->message);
+                       g_clear_error(&error);
+               } else {
+                       ERR("GetEnergyInfo failed");
+               }
+               return BT_STATUS_FAIL;
+       }
+
+       g_variant_get(result, "(uuuu)", tx_time, rx_time, idle_time, energy_used);
+
+       DBG("Tx time: %d", *tx_time);
+       DBG("Rx time: %d", *rx_time);
+       DBG("Idle time: %d", *idle_time);
+
+       DBG("-");
+       g_variant_unref(result);
+       return BT_STATUS_SUCCESS;
+}
+
 static gboolean __bt_adapter_all_properties_cb(gpointer user_data)
 {
        GVariant *result = user_data;
index d5657c1..c665922 100644 (file)
@@ -68,6 +68,9 @@ int _bt_hal_dbus_set_adapter_property(const bt_property_t *property);
 
 int _bt_hal_dbus_get_adapter_class(unsigned int *adapter_class);
 
+int _bt_hal_dbus_get_energy_info(uint32_t *tx_time, uint32_t *rx_time,
+                                       uint32_t *idle_time, uint32_t *energy_used);
+
 int _bt_hal_enable_core(void);
 
 #ifdef __cplusplus
index 35859ad..3b53efd 100644 (file)
@@ -146,6 +146,12 @@ static int get_adapter_powered_status(uint8_t *state)
 
        return _bt_hal_get_adapter_powered_state(state);
 }
+
+static int get_adapter_energy_info(uint32_t *tx_time, uint32_t *rx_time,
+                                       uint32_t *idle_time, uint32_t *energy_used)
+{
+       return _bt_hal_dbus_get_energy_info(tx_time, rx_time, idle_time, energy_used);
+}
 #endif
 
 static int get_adapter_properties(void)
@@ -451,6 +457,7 @@ static const bt_interface_t bluetooth_if = {
        .cleanup = cleanup,
 #ifdef TIZEN_BT_HAL
        .get_adapter_powered_status = get_adapter_powered_status,
+       .get_adapter_energy_info = get_adapter_energy_info,
 #endif
        .get_adapter_properties = get_adapter_properties,
        .get_adapter_property = get_adapter_property,
index 598a74a..7c0bbac 100644 (file)
@@ -753,6 +753,10 @@ typedef struct {
 #ifdef TIZEN_BT_HAL
        /** Get Bluetooth Adapter Powered status */
        int (*get_adapter_powered_status)(uint8_t *status);
+
+       /** Get Bluetooth Adapter Energy Information */
+       int (*get_adapter_energy_info)(uint32_t *tx_time, uint32_t *rx_time,
+                                               uint32_t *idle_time, uint32_t *energy_used);
 #endif
 
        /** Get all Bluetooth Adapter properties at init */
index 6189700..df42987 100644 (file)
@@ -169,6 +169,18 @@ oal_status_t adapter_start_custom_inquiry(discovery_type_t disc_type);
 oal_status_t adapter_get_powered_status(gboolean *status);
 
 /**
+ * @brief Get Adapter Energy info.
+ *
+ * @details If API returns OAL_STATUS_FAIL, then adapter can be considered Powered Down.
+ * or the BT chip does not support the method.
+ *
+ * @return OAL_STATUS_SUCCESS on success, otherwise a non-zero error value.
+ * @retval #OAL_STATUS_SUCCESS Successful
+ *
+ */
+oal_status_t adapter_get_energy_info(uint32_t *tx_time, uint32_t *rx_time,
+                                       uint32_t *idle_time, uint32_t *energy_used);
+/**
  * @brief Reset Adapter.
  *
  * @remarks  Disables the BT stack and chip.
index 6b66301..3853d18 100644 (file)
@@ -356,6 +356,35 @@ oal_status_t adapter_get_powered_status(gboolean *status)
        return ret;
 }
 
+oal_status_t adapter_get_energy_info(uint32_t *tx_time, uint32_t *rx_time,
+                                       uint32_t *idle_time, uint32_t *energy_used)
+{
+       int ret;
+
+       API_TRACE();
+
+       CHECK_OAL_INITIALIZED();
+
+       OAL_CHECK_PARAMETER(tx_time, return);
+       OAL_CHECK_PARAMETER(rx_time, return);
+       OAL_CHECK_PARAMETER(idle_time, return);
+       OAL_CHECK_PARAMETER(energy_used, return);
+
+       BT_INFO("Get Adapter Energy Info");
+
+#ifdef TIZEN_BT_HAL
+       ret = blued_api->get_adapter_energy_info(tx_time, rx_time, idle_time, energy_used);
+       if (ret != BT_STATUS_SUCCESS) {
+               BT_ERR("get_adapter_energy_info failed: [%s]", status2string(ret));
+               return convert_to_oal_status(ret);
+       }
+#else
+       BT_INFO("Not Supported");
+       ret = OAL_STATUS_NOT_SUPPORT;
+#endif
+       return ret;
+}
+
 oal_status_t adapter_reset(void)
 {
        int ret;
@@ -1121,4 +1150,4 @@ void cb_controller_error_received(uint8_t error_code)
                (gpointer)event_data, sizeof(uint8_t));
 
        BT_DBG("-");
-}
\ No newline at end of file
+}
index dba5a06..bf3edac 100644 (file)
@@ -568,6 +568,28 @@ int _bt_get_timeout_value(int *timeout)
        return BLUETOOTH_ERROR_NONE;
 }
 
+int _bt_get_energy_info(unsigned int *tx_time, unsigned int *rx_time,
+                                       unsigned int *idle_time, unsigned int *energy_used)
+{
+       BT_INFO("+");
+
+       BT_CHECK_PARAMETER(tx_time, return);
+       BT_CHECK_PARAMETER(rx_time, return);
+       BT_CHECK_PARAMETER(idle_time, return);
+       BT_CHECK_PARAMETER(energy_used, return);
+
+       *tx_time = 0;
+       *rx_time = 0;
+       *idle_time = 0;
+       *energy_used = 0;
+
+       if (OAL_STATUS_SUCCESS != adapter_get_energy_info(tx_time, rx_time, idle_time, energy_used))
+               return BLUETOOTH_ERROR_INTERNAL;
+
+       return BLUETOOTH_ERROR_NONE;
+}
+
+
 static void __bt_visibility_alarm_remove()
 {
        if (visible_timer.event_id > 0) {
index 83b4582..93f75bb 100644 (file)
@@ -483,6 +483,9 @@ int __bt_bluez_request(int function_name,
                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;
+               dbus_data.tx_time = data->tx_time;
+               dbus_data.rx_time = data->rx_time;
+               dbus_data.idle_time = data->idle_time;
 
                /*Populating app data*/
                int n = 0;
index 33a11b4..59d93cd 100644 (file)
@@ -31,6 +31,7 @@
 #include "bt-service-battery-monitor.h"
 #include "bt-service-common.h"
 #include "bt-service-event.h"
+#include "bt-service-core-adapter.h"
 
 static time_t scan_start = 0;
 static time_t connect_start = 0;
@@ -57,6 +58,11 @@ static void __bt_display_session_data()
 /*After reading data, the function resets it*/
 int _bt_bm_read_data(_bt_battery_data_t *data)
 {
+       uint32_t tx_time = 0;
+       uint32_t rx_time = 0;
+       uint32_t idle_time = 0;
+       uint32_t energy_used = 0;
+
        BT_DBG("");
 
        if (data == NULL) {
@@ -64,6 +70,16 @@ int _bt_bm_read_data(_bt_battery_data_t *data)
                return BLUETOOTH_ERROR_NO_DATA;
        }
 
+       if (_bt_get_energy_info(&tx_time, &rx_time,
+                               &idle_time, &energy_used) != BLUETOOTH_ERROR_NONE) {
+               BT_ERR("Fail to get energy info");
+               return BLUETOOTH_ERROR_NOT_SUPPORT;
+       }
+
+       data->tx_time = tx_time;
+       data->rx_time = rx_time;
+       data->idle_time = idle_time;
+
        data->session_start_time = current_session_data->session_start_time;
        data->session_end_time = time(NULL);
        current_session_data->session_start_time = time(NULL);
@@ -248,6 +264,9 @@ static void _bt_notify_battery_data(void)
                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;
+               dbus_data.tx_time = data->tx_time;
+               dbus_data.rx_time = data->rx_time;
+               dbus_data.idle_time = data->idle_time;
 
                /*Populating app data*/
                int n = 0;
index 2cff901..784d4ba 100644 (file)
@@ -39,11 +39,14 @@ typedef struct {
 } _bt_battery_app_data_t;
 
 typedef struct {
-        time_t session_start_time;
-        time_t session_end_time;
-        uint16_t session_connected_time;
-        uint16_t session_scan_time;
-        GSList *atm_list;
+       time_t session_start_time;
+       time_t session_end_time;
+       uint32_t tx_time;
+       uint32_t rx_time;
+       uint32_t idle_time;
+       uint16_t session_connected_time;
+       uint16_t session_scan_time;
+       GSList *atm_list;
 } _bt_battery_data_t;
 
 typedef enum {
index 7849b18..f3852ee 100644 (file)
@@ -111,6 +111,9 @@ int _bt_set_adapter_request_state(int enable);
 
 int _bt_set_le_request_state(int enable);
 
+int _bt_get_energy_info(unsigned int *tx_time, unsigned int *rx_time,
+                                       unsigned int *idle_time, unsigned int *energy_used);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index 3146e6d..451a005 100644 (file)
@@ -329,6 +329,9 @@ typedef struct {
 typedef struct {
        time_t session_start_time;
        time_t session_end_time;
+       uint32_t tx_time;
+       uint32_t rx_time;
+       uint32_t idle_time;
        uint16_t session_connected_time;
        uint16_t session_scan_time;
        GSList *atm_list;
index d61d10c..c9e06a3 100644 (file)
@@ -36,6 +36,9 @@ extern "C" {
 typedef struct {
        time_t session_start_time;
        time_t session_end_time;
+       uint32_t tx_time;
+       uint32_t rx_time;
+       uint32_t idle_time;
        uint16_t session_connected_time;
        uint16_t session_scan_time;
        int num_app;