Fix overflow in energy calculation
The energy value can get quite high, so use longs.
Change-Id: Ib03c07160339c82a834ea94fe155a65f0efb03d2
diff --git a/android/app/src/com/android/bluetooth/btservice/AdapterService.java b/android/app/src/com/android/bluetooth/btservice/AdapterService.java
index 562cbba..039eda3 100644
--- a/android/app/src/com/android/bluetooth/btservice/AdapterService.java
+++ b/android/app/src/com/android/bluetooth/btservice/AdapterService.java
@@ -2006,9 +2006,9 @@
// 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 @@
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) {