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.",
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.",
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;
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
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)
.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,
#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 */
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.
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;
(gpointer)event_data, sizeof(uint8_t));
BT_DBG("-");
-}
\ No newline at end of file
+}
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) {
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;
#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;
/*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) {
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);
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;
} _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 {
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 */
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;
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;