Fix SignalStrength response.
Properly remap LTE values to appropriate values
for older code.
Bug: 8561333
Change-Id: Ie6eb3b0335e8d7ea114ec70b3fb72e917094632e
diff --git a/libril/ril.cpp b/libril/ril.cpp
index 0f37cc1..7155de1 100644
--- a/libril/ril.cpp
+++ b/libril/ril.cpp
@@ -31,6 +31,7 @@
#include <cutils/jstring.h>
#include <sys/types.h>
+#include <sys/limits.h>
#include <pwd.h>
#include <stdio.h>
@@ -1999,22 +2000,43 @@
p.writeInt32(p_cur->EVDO_SignalStrength.ecio);
p.writeInt32(p_cur->EVDO_SignalStrength.signalNoiseRatio);
if (responselen >= sizeof (RIL_SignalStrength_v6)) {
- p.writeInt32(p_cur->LTE_SignalStrength.signalStrength);
-
/*
- * ril version <=6 receives negative values for rsrp
- * workaround for backward compatibility
+ * Fixup LTE for backwards compatibility
*/
- p_cur->LTE_SignalStrength.rsrp =
- ((s_callbacks.version <= 6) && (p_cur->LTE_SignalStrength.rsrp < 0 )) ?
- -(p_cur->LTE_SignalStrength.rsrp) : p_cur->LTE_SignalStrength.rsrp;
+ if (s_callbacks.version <= 6) {
+ // signalStrength: -1 -> 99
+ if (p_cur->LTE_SignalStrength.signalStrength == -1) {
+ p_cur->LTE_SignalStrength.signalStrength = 99;
+ }
+ // rsrp: -1 -> INT_MAX all other negative value to positive.
+ // So remap here
+ if (p_cur->LTE_SignalStrength.rsrp == -1) {
+ p_cur->LTE_SignalStrength.rsrp = INT_MAX;
+ } else if (p_cur->LTE_SignalStrength.rsrp < -1) {
+ p_cur->LTE_SignalStrength.rsrp = -p_cur->LTE_SignalStrength.rsrp;
+ }
+ // rsrq: -1 -> INT_MAX
+ if (p_cur->LTE_SignalStrength.rsrq == -1) {
+ p_cur->LTE_SignalStrength.rsrq = INT_MAX;
+ }
+ // Not remapping rssnr is already using INT_MAX
+ // cqi: -1 -> INT_MAX
+ if (p_cur->LTE_SignalStrength.cqi == -1) {
+ p_cur->LTE_SignalStrength.cqi = INT_MAX;
+ }
+ }
+ p.writeInt32(p_cur->LTE_SignalStrength.signalStrength);
p.writeInt32(p_cur->LTE_SignalStrength.rsrp);
p.writeInt32(p_cur->LTE_SignalStrength.rsrq);
p.writeInt32(p_cur->LTE_SignalStrength.rssnr);
p.writeInt32(p_cur->LTE_SignalStrength.cqi);
} else {
- memset(&p_cur->LTE_SignalStrength, sizeof (RIL_LTE_SignalStrength), 0);
+ p.writeInt32(99);
+ p.writeInt32(INT_MAX);
+ p.writeInt32(INT_MAX);
+ p.writeInt32(INT_MAX);
+ p.writeInt32(INT_MAX);
}
startResponse;