*
*/
+#include<sys/time.h>
#include "plugin.h"
#include "util.h"
#define BATTERY_MODE_GET 1
typedef struct {
- time_t time;
+ struct timeval start_time;
+ uint rest_time;
} battery_scan_data_s;
typedef struct {
int rssi;
} battery_rssi_data_s;
-static battery_scan_data_s g_wifi_scan_data = { 0, };
+static battery_scan_data_s g_wifi_scan_data;
static battery_rssi_data_s g_dn_rssi_data = { 0, };
static battery_rssi_data_s g_wifi_rssi_data = { 0, };
for (list = g_wifi_list; list != NULL; list = list->next) {
battery_wifi_data_s *wifi_data = (battery_wifi_data_s *)list->data;
- DBG("[Battery Wi-Fi] start[%ld] end[%ld] scan[%d] rssi[%d/%d/%d/%d/%d]",
+ DBG("[Battery Wi-Fi] start[%ld] end[%ld] scan[%d] rssi[%d/%d/%d/%d/%d] rx[%d] tx[%d]",
wifi_data->start_time, wifi_data->end_time, wifi_data->scan_time,
wifi_data->time_level_0, wifi_data->time_level_1, wifi_data->time_level_2,
- wifi_data->time_level_3, wifi_data->time_level_4);
+ wifi_data->time_level_3, wifi_data->time_level_4, wifi_data->rx_time, wifi_data->tx_time);
}
}
g_variant_new_uint32(wifi_data->time_level_3));
g_variant_builder_add(&sub_builder, "{sv}", BATTERY_WIFI_TIME_LEVEL_4,
g_variant_new_uint32(wifi_data->time_level_4));
+ g_variant_builder_add(&sub_builder, "{sv}", BATTERY_WIFI_RX_TIME,
+ g_variant_new_uint32(wifi_data->rx_time));
+ g_variant_builder_add(&sub_builder, "{sv}", BATTERY_WIFI_TX_TIME,
+ g_variant_new_uint32(wifi_data->tx_time));
g_variant_builder_add(&sub_builder, "{sv}", BATTERY_WIFI_START_TIME,
g_variant_new_uint32(wifi_data->start_time));
g_variant_builder_add(&sub_builder, "{sv}", BATTERY_WIFI_END_TIME,
g_variant_builder_add(&sub_builder, "{sv}", BATTERY_WIFI_SCAN_TIME,
g_variant_new_uint32(wifi_data->scan_time));
- DBG("[Battery Wi-Fi] start[%ld] end[%ld] scan[%d] rssi[%d/%d/%d/%d/%d]",
+ DBG("[Battery Wi-Fi] start[%ld] end[%ld] scan[%d] rssi[%d/%d/%d/%d/%d] rx[%d] tx[%d]",
wifi_data->start_time, wifi_data->end_time, wifi_data->scan_time,
wifi_data->time_level_0, wifi_data->time_level_1, wifi_data->time_level_2,
- wifi_data->time_level_3, wifi_data->time_level_4);
+ wifi_data->time_level_3, wifi_data->time_level_4, wifi_data->rx_time, wifi_data->tx_time);
if (wifi_data->atm_list != NULL) {
if (g_dn_rssi_data.time != 0) {
uint diff_time = curr_time - g_dn_rssi_data.time;
diff_time = (diff_time > 0) ? diff_time : 1;
+ diff_time *= 1000; /* Convert to milliseconds */
switch (g_dn_rssi_data.rssi) {
case 0:
g_dn_data->time_level_0 += diff_time;
void battery_update_wifi_scan(int state)
{
- time_t curr_time = time(NULL);
+ uint diff_time = 0;
+ struct timeval curr_time;
+ gettimeofday(&curr_time, NULL);
if (g_wifi_data == NULL)
return;
switch (state) {
case 0: /* scan done */
- DBG("[Battery Wi-Fi] scan(%ld) [done]", curr_time);
- if (g_wifi_scan_data.time != 0) {
- uint diff_time = curr_time - g_wifi_scan_data.time;
- diff_time = (diff_time > 0) ? diff_time : 1;
- g_wifi_data->scan_time += diff_time;
- DBG("[Battery Wi-Fi] scan time [%d/%d]", diff_time, g_wifi_data->scan_time);
+ DBG("[Battery Wi-Fi] scan(%ld/%ld) [done]", curr_time.tv_sec, curr_time.tv_usec);
+ if (g_wifi_scan_data.start_time.tv_sec != 0) {
+ diff_time = (curr_time.tv_sec - g_wifi_scan_data.start_time.tv_sec) * 1000;
+ diff_time += (curr_time.tv_usec - g_wifi_scan_data.start_time.tv_usec) / 1000;
+ diff_time += g_wifi_scan_data.rest_time;
+
+ g_wifi_data->scan_time += diff_time / 1000;
+ g_wifi_scan_data.rest_time = diff_time % 1000;
+ DBG("[Battery Wi-Fi] scan time [%d/%d]", diff_time / 1000, g_wifi_data->scan_time);
}
break;
case 1: /* scan started */
- g_wifi_scan_data.time = curr_time;
- DBG("[Battery Wi-Fi] scan(%ld) [started]", curr_time);
+ g_wifi_scan_data.start_time.tv_sec = curr_time.tv_sec;
+ g_wifi_scan_data.start_time.tv_usec = curr_time.tv_usec;
+ DBG("[Battery Wi-Fi] scan(%ld/%ld) [started]", curr_time.tv_sec, curr_time.tv_usec);
break;
default:
break;
if (g_wifi_rssi_data.time != 0) {
uint diff_time = curr_time - g_wifi_rssi_data.time;
diff_time = (diff_time > 0) ? diff_time : 1;
+ diff_time *= 1000; /* Convert to milliseconds */
switch (g_wifi_rssi_data.rssi) {
case 0:
g_wifi_data->time_level_0 += diff_time;
}
}
+void battery_update_rxtx_time(int rx, int tx)
+{
+ if (g_wifi_data == NULL)
+ return;
+
+ g_wifi_data->rx_time += rx;
+ g_wifi_data->tx_time += tx;
+}
+
void battery_start_wifi_data(void)
{
battery_wifi_data_s *wifi_data = NULL;
if (g_wifi_rssi_data.time)
g_wifi_rssi_data.time = curr_time;
+ g_wifi_scan_data.start_time.tv_sec = 0;
+ g_wifi_scan_data.start_time.tv_usec = 0;
+ g_wifi_scan_data.rest_time = 0;
+
DBG("[Battery Wi-Fi] start(%ld)", g_wifi_data->start_time);
}
g_wifi_rssi_data.rssi = 0;
}
- g_wifi_scan_data.time = 0;
-
g_wifi_data->end_time = curr_time;
get_stats_cb(g_wifi_data->start_time, g_wifi_data->end_time, &(g_wifi_data->atm_list));
battery_end_wifi_data,
battery_update_wifi_scan,
battery_update_wifi_rssi,
+ battery_update_rxtx_time,
battery_get_dn_list,
battery_get_wifi_list
};