long int sesTime = 0, scTime = 0, tl_total = 0;
long int tl0 = 0, tl1 = 0, tl2 = 0, tl3 = 0, tl4 = 0;
double onTime = 0;
- long int RX = 0, TX = 0;
+ long int RX = 0, TX = 0, rx_time = 0, tx_time = 0;
/* iterating over list for data accumulation */
for (wifi_data_iterator = handle->wifi_data_list; wifi_data_iterator; wifi_data_iterator = wifi_data_iterator->next) {
bm_wifi_st *datalistnode = (bm_wifi_st *)(wifi_data_iterator->data);
edTime = datalistnode->endTime;
stTime = datalistnode->startTime;
- sesTime += edTime - stTime;
+ sesTime += (edTime - stTime);
scTime += datalistnode->scanTime;
- tl0 += datalistnode->time_level_0;
- tl1 += datalistnode->time_level_1;
- tl2 += datalistnode->time_level_2;
- tl3 += datalistnode->time_level_3;
+ tl0 += datalistnode->time_level_0; tl1 += datalistnode->time_level_1;
+ tl2 += datalistnode->time_level_2; tl3 += datalistnode->time_level_3;
tl4 += datalistnode->time_level_4;
+ rx_time += datalistnode->rxTime; tx_time += datalistnode->txTime;
wifi_atm_iterator = datalistnode->atm_list;
for ( ; wifi_atm_iterator; wifi_atm_iterator = wifi_atm_iterator->next) {
app_time_map_st2 *wifi_atm_node = NULL;
tl0 /= 1000; tl1 /= 1000; tl2 /= 1000; tl3 /= 1000; tl4 /= 1000;
scTime /= 1000; sesTime /= 1000; onTime /= 1000;
+ rx_time /= 1000; tx_time /= 1000;
tl_total = tl0 + tl1 + tl2 + tl3 + tl4;
/* Wifi power consumption Level - 1 at the Resource Level */
long int P_power_wifi = 0, P_power_data = 0, P_power_conn = 0;
(sP_power_wf_tl2 * tl2) + (sP_power_wf_tl3 * tl3) +
(sP_power_wf_tl4 * tl4) + (sP_power_wf_scan * scTime) +
(sP_power_wf_idle * (sesTime - (tl_total + scTime))));
- P_power_data = ((sP_power_wf_tx) * TX) + ((sP_power_wf_rx) * RX);
+ /* Amount based usage calculation */
+// P_power_data = ((sP_power_wf_tx) * TX) + ((sP_power_wf_rx) * RX);
+
+ /* Use rx and tx time to calculate the usage */
+ P_power_data = ((sP_power_wf_tx * tx_time) + (sP_power_wf_rx * rx_time));
P_power_wifi = P_power_conn + P_power_data;
_DBG("Calculated Power for Wifi P_power_wifi(%ld), P_power_conn (%ld), P_power_data(%ld)", P_power_wifi, P_power_conn, P_power_data);
long int P_power_app_wifi = 0, P_power_app_data = 0, P_power_app_conn = 0;
char *appid = NULL;
long int apprx = 0, apptx = 0;
- double apptime = 0;
- long int rx_t = 0, tx_t = 0;
+ double apptime = 0, crtx_t = 0;
+ long int rx_t = 0, tx_t = 0, rx_tx_time = 0;
long int ret_time = bm_get_log_time();
+ /* Coefficient to divide the rx and tx time wrt rx and tx bytes */
+ if (RX != 0 || TX != 0) {
+ rx_tx_time = rx_time + tx_time;
+ crtx_t = (double)rx_tx_time/(RX + TX);
+ }
+
appid_usage_s *app_usage = (appid_usage_s *)calloc(1, sizeof(appid_usage_s));
if (app_usage == NULL) {
_ERR("memory allocation failed");
apptx = temp->tx; tx_t += apptx;
apptime = temp->time;
apptime /= 1000;
- P_power_app_data = ((sP_power_wf_tx) * apptx) + ((sP_power_wf_rx) * apprx);
+ P_power_app_data = (sP_power_wf_tx * (crtx_t * apptx)) + (sP_power_wf_rx * (crtx_t * apprx));
if (onTime != 0)
P_power_app_conn = (P_power_conn * apptime)/onTime; //check for 0 denominator & same units