From 9f74cef30955a69207528797d25173dcd73bb49c Mon Sep 17 00:00:00 2001 From: DoHyun Pyun Date: Tue, 24 Mar 2020 16:19:24 +0900 Subject: [PATCH] Add the Rx / Tx / idle time in the battery monitor Change-Id: I353a31a7fff7279e98bfb8f3c0d7c25985073ebc Signed-off-by: DoHyun Pyun --- bt-api/bt-adapter.c | 3 ++ bt-api/bt-event-handler.c | 3 ++ bt-oal/bluez_hal/src/bt-hal-adapter-dbus-handler.c | 49 ++++++++++++++++++++++ bt-oal/bluez_hal/src/bt-hal-adapter-dbus-handler.h | 3 ++ bt-oal/bluez_hal/src/bt-hal-bluetooth.c | 7 ++++ bt-oal/hardware/bluetooth.h | 4 ++ bt-oal/include/oal-adapter-mgr.h | 12 ++++++ bt-oal/oal-adapter-mgr.c | 31 +++++++++++++- .../services/adapter/bt-service-core-adapter.c | 22 ++++++++++ .../services/bt-request-handler.c | 3 ++ .../services/bt-service-battery-monitor.c | 19 +++++++++ .../services/include/bt-service-battery-monitor.h | 13 +++--- .../services/include/bt-service-core-adapter.h | 3 ++ include/bluetooth-api.h | 3 ++ include/bt-internal-types.h | 3 ++ 15 files changed, 172 insertions(+), 6 deletions(-) diff --git a/bt-api/bt-adapter.c b/bt-api/bt-adapter.c index fc41fa2..7d0d5be 100644 --- a/bt-api/bt-adapter.c +++ b/bt-api/bt-adapter.c @@ -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.", diff --git a/bt-api/bt-event-handler.c b/bt-api/bt-event-handler.c index f0167ea..9240b15 100644 --- a/bt-api/bt-event-handler.c +++ b/bt-api/bt-event-handler.c @@ -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.", diff --git a/bt-oal/bluez_hal/src/bt-hal-adapter-dbus-handler.c b/bt-oal/bluez_hal/src/bt-hal-adapter-dbus-handler.c index 41ed4d8..722b0e2 100644 --- a/bt-oal/bluez_hal/src/bt-hal-adapter-dbus-handler.c +++ b/bt-oal/bluez_hal/src/bt-hal-adapter-dbus-handler.c @@ -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; diff --git a/bt-oal/bluez_hal/src/bt-hal-adapter-dbus-handler.h b/bt-oal/bluez_hal/src/bt-hal-adapter-dbus-handler.h index d5657c1..c665922 100644 --- a/bt-oal/bluez_hal/src/bt-hal-adapter-dbus-handler.h +++ b/bt-oal/bluez_hal/src/bt-hal-adapter-dbus-handler.h @@ -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 diff --git a/bt-oal/bluez_hal/src/bt-hal-bluetooth.c b/bt-oal/bluez_hal/src/bt-hal-bluetooth.c index 35859ad..3b53efd 100644 --- a/bt-oal/bluez_hal/src/bt-hal-bluetooth.c +++ b/bt-oal/bluez_hal/src/bt-hal-bluetooth.c @@ -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, diff --git a/bt-oal/hardware/bluetooth.h b/bt-oal/hardware/bluetooth.h index 598a74a..7c0bbac 100644 --- a/bt-oal/hardware/bluetooth.h +++ b/bt-oal/hardware/bluetooth.h @@ -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 */ diff --git a/bt-oal/include/oal-adapter-mgr.h b/bt-oal/include/oal-adapter-mgr.h index 6189700..df42987 100644 --- a/bt-oal/include/oal-adapter-mgr.h +++ b/bt-oal/include/oal-adapter-mgr.h @@ -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. diff --git a/bt-oal/oal-adapter-mgr.c b/bt-oal/oal-adapter-mgr.c index 6b66301..3853d18 100644 --- a/bt-oal/oal-adapter-mgr.c +++ b/bt-oal/oal-adapter-mgr.c @@ -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 +} diff --git a/bt-service-adaptation/services/adapter/bt-service-core-adapter.c b/bt-service-adaptation/services/adapter/bt-service-core-adapter.c index dba5a06..bf3edac 100644 --- a/bt-service-adaptation/services/adapter/bt-service-core-adapter.c +++ b/bt-service-adaptation/services/adapter/bt-service-core-adapter.c @@ -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) { diff --git a/bt-service-adaptation/services/bt-request-handler.c b/bt-service-adaptation/services/bt-request-handler.c index 83b4582..93f75bb 100644 --- a/bt-service-adaptation/services/bt-request-handler.c +++ b/bt-service-adaptation/services/bt-request-handler.c @@ -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; diff --git a/bt-service-adaptation/services/bt-service-battery-monitor.c b/bt-service-adaptation/services/bt-service-battery-monitor.c index 33a11b4..59d93cd 100644 --- a/bt-service-adaptation/services/bt-service-battery-monitor.c +++ b/bt-service-adaptation/services/bt-service-battery-monitor.c @@ -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; diff --git a/bt-service-adaptation/services/include/bt-service-battery-monitor.h b/bt-service-adaptation/services/include/bt-service-battery-monitor.h index 2cff901..784d4ba 100644 --- a/bt-service-adaptation/services/include/bt-service-battery-monitor.h +++ b/bt-service-adaptation/services/include/bt-service-battery-monitor.h @@ -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 { diff --git a/bt-service-adaptation/services/include/bt-service-core-adapter.h b/bt-service-adaptation/services/include/bt-service-core-adapter.h index 7849b18..f3852ee 100644 --- a/bt-service-adaptation/services/include/bt-service-core-adapter.h +++ b/bt-service-adaptation/services/include/bt-service-core-adapter.h @@ -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 */ diff --git a/include/bluetooth-api.h b/include/bluetooth-api.h index 3146e6d..451a005 100644 --- a/include/bluetooth-api.h +++ b/include/bluetooth-api.h @@ -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; diff --git a/include/bt-internal-types.h b/include/bt-internal-types.h index d61d10c..c9e06a3 100644 --- a/include/bt-internal-types.h +++ b/include/bt-internal-types.h @@ -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; -- 2.7.4