Merge "Workaround for LTE RSRP -ve values in Signal"
diff --git a/libril/ril.cpp b/libril/ril.cpp
index b8aba01..e3f7e41 100644
--- a/libril/ril.cpp
+++ b/libril/ril.cpp
@@ -1995,6 +1995,15 @@
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
+ */
+ 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;
+
p.writeInt32(p_cur->LTE_SignalStrength.rsrp);
p.writeInt32(p_cur->LTE_SignalStrength.rsrq);
p.writeInt32(p_cur->LTE_SignalStrength.rssnr);
diff --git a/reference-ril/reference-ril.c b/reference-ril/reference-ril.c
index 37c87b2..578ff63 100644
--- a/reference-ril/reference-ril.c
+++ b/reference-ril/reference-ril.c
@@ -728,10 +728,12 @@
static void requestSignalStrength(void *data, size_t datalen, RIL_Token t)
{
- RIL_SignalStrength_v6 response;
ATResponse *p_response = NULL;
int err;
char *line;
+ int count =0;
+ int numofElements=sizeof(RIL_SignalStrength_v6)/sizeof(int);
+ int response[numofElements];
err = at_send_command_singleline("AT+CSQ", "+CSQ:", &p_response);
@@ -745,15 +747,12 @@
err = at_tok_start(&line);
if (err < 0) goto error;
- memset(&response, 0, sizeof(RIL_SignalStrength_v6));
+ for (count =0; count < numofElements; count ++) {
+ err = at_tok_nextint(&line, &(response[count]));
+ if (err < 0) goto error;
+ }
- err = at_tok_nextint(&line, &response.GW_SignalStrength.signalStrength);
- if (err < 0) goto error;
-
- err = at_tok_nextint(&line, &response.GW_SignalStrength.bitErrorRate);
- if (err < 0) goto error;
-
- RIL_onRequestComplete(t, RIL_E_SUCCESS, &response, sizeof(response));
+ RIL_onRequestComplete(t, RIL_E_SUCCESS, response, sizeof(response));
at_response_free(p_response);
return;