OSDN Git Service

Fix overflow in energy calculation
authorAdam Lesinski <adamlesinski@google.com>
Tue, 16 Jun 2015 00:42:28 +0000 (17:42 -0700)
committerAdam Lesinski <adamlesinski@google.com>
Tue, 16 Jun 2015 00:42:28 +0000 (17:42 -0700)
The energy value can get quite high, so use longs.

Change-Id: Ib03c07160339c82a834ea94fe155a65f0efb03d2

src/com/android/bluetooth/btservice/AdapterService.java

index 562cbba..039eda3 100644 (file)
@@ -2006,9 +2006,9 @@ public class AdapterService extends Service {
             // Energy is product of mA, V and ms. If the chipset doesn't
             // report it, we have to compute it from time
             if (energy_used == 0) {
-                energy_used = ((mTxTimeTotalMs * getTxCurrentMa()
+                energy_used = (long)((mTxTimeTotalMs * getTxCurrentMa()
                     + mRxTimeTotalMs * getRxCurrentMa()
-                    + mIdleTimeTotalMs * getIdleCurrentMa()) * getOperatingMilliVolt())/1000;
+                    + mIdleTimeTotalMs * getIdleCurrentMa()) * getOperatingVolt());
             }
             mEnergyUsedTotalVoltAmpSecMicro += energy_used;
         }
@@ -2031,8 +2031,8 @@ public class AdapterService extends Service {
         return getResources().getInteger(R.integer.config_bluetooth_rx_cur_ma);
     }
 
-    private int getOperatingMilliVolt() {
-        return getResources().getInteger(R.integer.config_bluetooth_operating_voltage_mv);
+    private double getOperatingVolt() {
+        return getResources().getInteger(R.integer.config_bluetooth_operating_voltage_mv) / 1000.0;
     }
 
     private void dump(FileDescriptor fd) {