summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDewal Agarwal <d1.agarwal@samsung.com>2020-03-31 16:53:46 +0530
committerDewal Agarwal <d1.agarwal@samsung.com>2020-03-31 16:53:46 +0530
commitb070cf5f97a6f6fc4a87fd1e16bad88b1a88aec7 (patch)
tree4029fbdff3836af2f598059c5f2b6dfdfa4c8c03
parentfadd0cff0e9b1f77963f9dc89dfe5bc2153d02df (diff)
downloadbatterymonitor-b070cf5f97a6f6fc4a87fd1e16bad88b1a88aec7.tar.gz
batterymonitor-b070cf5f97a6f6fc4a87fd1e16bad88b1a88aec7.tar.bz2
batterymonitor-b070cf5f97a6f6fc4a87fd1e16bad88b1a88aec7.zip
Modify Wi-Fi Power Model
Change-Id: I1eb88067802074b177cd5ab2be1c6b67c4cba367 Signed-off-by: Dewal Agarwal <d1.agarwal@samsung.com>
-rw-r--r--include/bm_plugin_interface.h2
-rw-r--r--src/bm_power_engine.c30
2 files changed, 22 insertions, 10 deletions
diff --git a/include/bm_plugin_interface.h b/include/bm_plugin_interface.h
index e8e0b32..05ef8e9 100644
--- a/include/bm_plugin_interface.h
+++ b/include/bm_plugin_interface.h
@@ -139,6 +139,8 @@ typedef struct {
uint time_level_2; /**< Total time in milliseconds during which rssi was on level 2 */
uint time_level_3; /**< Total time in milliseconds during which rssi was on level 3 */
uint time_level_4; /**< Total time in milliseconds during which rssi was on level 4 */
+ uint rxTime; /**< Total time in milliseconds (RX) mode */
+ uint txTime; /**< Total time in milliseconds (TX) mode */
time_t startTime; /**< start time of feature data collection session */
time_t endTime; /**< end time of feature data collection session */
uint scanTime; /**< Total time spent by the resource in (scan) mode during the session */
diff --git a/src/bm_power_engine.c b/src/bm_power_engine.c
index 331704e..a186b66 100644
--- a/src/bm_power_engine.c
+++ b/src/bm_power_engine.c
@@ -788,19 +788,18 @@ int bm_wifi_calc_power_and_commit(bm_wifi_st *handle, bool mode)
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;
@@ -847,6 +846,7 @@ int bm_wifi_calc_power_and_commit(bm_wifi_st *handle, bool mode)
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;
@@ -854,7 +854,11 @@ int bm_wifi_calc_power_and_commit(bm_wifi_st *handle, bool mode)
(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);
@@ -866,10 +870,16 @@ int bm_wifi_calc_power_and_commit(bm_wifi_st *handle, bool mode)
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");
@@ -885,7 +895,7 @@ int bm_wifi_calc_power_and_commit(bm_wifi_st *handle, bool mode)
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