#include <string.h>
#include <dlog.h>
#include <time.h>
-
+#include <sys/time.h>
#include <oal-event.h>
#include "bt-service-event.h"
#include "bt-service-core-adapter.h"
-static time_t scan_start = 0;
-static time_t connect_start = 0;
-static time_t app_scan_base = 0;
+static struct timeval scan_start;
+static struct timeval connect_start;
+static struct timeval app_scan_base;
static int scan_cnt = 0;
static int connect_cnt = 0;
static gboolean is_session_started = FALSE;
static void __bt_bm_add_prev_time(uint32_t scan_time);
+uint32_t static __bt_dm_time_diff_msec(struct timeval prev, struct timeval cur)
+{
+ return (uint32_t)((cur.tv_sec - prev.tv_sec) * 1000.0f + (cur.tv_usec - prev.tv_usec) / 1000.0f);
+}
+
static void __bt_display_session_data()
{
BT_DBG("Displaying session data...");
/*After reading data, the function resets it*/
int _bt_bm_read_data(_bt_battery_data_t *data)
{
+ struct timeval cur_time;
uint32_t tx_time = 0;
uint32_t rx_time = 0;
uint32_t idle_time = 0;
uint32_t energy_used = 0;
- time_t base_time = 0;
uint16_t scan_time_per_app = 0;
int scan_app_cnt = 0;
return BLUETOOTH_ERROR_NOT_SUPPORT;
}
+ gettimeofday(&cur_time, 0);
+
data->tx_time = tx_time;
data->rx_time = rx_time;
data->idle_time = idle_time;
data->session_scan_time = current_session_data->session_scan_time;
if (scan_cnt) {
- data->session_scan_time += (uint16_t) (time(NULL) - scan_start);
- scan_start = time(NULL);
- base_time = app_scan_base;
- app_scan_base = scan_start;
+ data->session_scan_time += (uint16_t)__bt_dm_time_diff_msec(scan_start, cur_time);
+ gettimeofday(&scan_start, 0);
}
+ current_session_data->session_scan_time = 0;
data->session_connected_time = current_session_data->session_connected_time;
if (connect_cnt) {
- data->session_connected_time += (uint16_t) (time(NULL) - connect_start);
- connect_start = time(NULL);
+ data->session_connected_time += (uint16_t)__bt_dm_time_diff_msec(connect_start, cur_time);
+ gettimeofday(&connect_start, 0);
}
+ current_session_data->session_connected_time = 0;
scan_app_cnt = g_slist_length(scan_app_list);
if (scan_app_cnt > 0) {
- scan_time_per_app = (uint32_t)(app_scan_base - base_time) / scan_app_cnt;
+ scan_time_per_app = (uint32_t)__bt_dm_time_diff_msec(app_scan_base, cur_time) / scan_app_cnt;
__bt_bm_add_prev_time(scan_time_per_app);
}
+ gettimeofday(&app_scan_base, 0);
+
data->atm_list = current_session_data->atm_list;
if (data->atm_list == NULL) {
BT_DBG("No data transaction in this session");
bt_bm_scan_info_t *scan_info = NULL;
GSList *app_list = NULL;
int app_cnt = 0;
- time_t base_time = 0;
- uint16_t scan_time_per_app = 0;
+ uint32_t scan_time_per_app = 0;
BT_DBG("Scan type: %d", type);
- /* Update the base time */
- base_time = app_scan_base;
- app_scan_base = time(NULL);
-
if (scan_app_list) {
app_cnt = g_slist_length(scan_app_list);
app_list = __is_scan_app_present(scan_app_list, SCAN_BOTH, uid, pid);
scan_info->pid = pid;
scan_info->type = type;
- if (app_cnt > 0 && base_time != 0) {
- /* Update the base time */
- base_time = app_scan_base;
- app_scan_base = time(NULL);
+ if (app_cnt > 0) {
+ struct timeval cur_time;
- scan_time_per_app = (uint32_t)(app_scan_base - base_time) / app_cnt;
+ gettimeofday(&cur_time, 0);
+
+ scan_time_per_app = (uint32_t)(__bt_dm_time_diff_msec(app_scan_base, cur_time)) / app_cnt;
__bt_bm_add_prev_time(scan_time_per_app);
+
+ /* Update the base time */
+ gettimeofday(&app_scan_base, 0);
}
scan_app_list = g_slist_append(scan_app_list, scan_info);
bt_bm_scan_info_t *scan_info = NULL;
GSList *app_list = NULL;
int app_cnt = 0;
- time_t base_time = 0;
- uint16_t scan_time_per_app = 0;
+ uint32_t scan_time_per_app = 0;
BT_DBG("Scan type: %d", type);
app_list = __is_scan_app_present(scan_app_list, type, uid, pid);
if (app_list) {
+ struct timeval cur_time;
+
scan_info = (bt_bm_scan_info_t *)(app_list->data);
if (scan_info->type == SCAN_BOTH) {
return;
}
- /* Update the base time */
- base_time = app_scan_base;
- app_scan_base = time(NULL);
+ gettimeofday(&cur_time, 0);
- if (base_time != 0) {
- scan_time_per_app = (uint32_t)(app_scan_base - base_time) / app_cnt;
- __bt_bm_add_prev_time(scan_time_per_app);
- }
+ scan_time_per_app = (uint32_t)(__bt_dm_time_diff_msec(app_scan_base, cur_time)) / app_cnt;
+ __bt_bm_add_prev_time(scan_time_per_app);
+
+ /* Update the base time */
+ gettimeofday(&app_scan_base, 0);
scan_app_list = g_slist_remove(scan_app_list, scan_info);
if (current_session_data != NULL) {
if (scan_cnt == 0) {
BT_DBG("Starting scan time");
- scan_start = time(NULL);
- app_scan_base = scan_start;
+ gettimeofday(&scan_start, 0);
+ gettimeofday(&app_scan_base, 0);
}
scan_cnt++;
} else {
else {
scan_cnt--;
if(scan_cnt == 0) {
- time_t temp = time(NULL);
- current_session_data->session_scan_time += (uint16_t) (temp - scan_start);
- scan_start = 0;
- app_scan_base = scan_start;
+ struct timeval cur_time;
+
+ gettimeofday(&cur_time, 0);
+ current_session_data->session_scan_time += (uint16_t)(__bt_dm_time_diff_msec(scan_start, cur_time));
+ gettimeofday(&scan_start, 0);
+ gettimeofday(&app_scan_base, 0);
}
}
}
if (current_session_data != NULL) {
if (connect_cnt == 0) {
BT_DBG("Starting connect time");
- connect_start = time(NULL);
+ gettimeofday(&connect_start, 0);
}
connect_cnt++;
}
else {
connect_cnt--;
if(connect_cnt == 0) {
- time_t temp = time(NULL);
- current_session_data->session_connected_time += (uint16_t) (temp - connect_start);
+ struct timeval cur_time;
+
+ gettimeofday(&cur_time, 0);
+ current_session_data->session_connected_time += (uint16_t)(__bt_dm_time_diff_msec(connect_start, cur_time));
}
}
}