Allow newer message format indicating signal strength
This code expected v6 of the cellular signal strength
message. The framework allows up to v10, which takes
more memory. In fact, the framework requires that it
be given a buffer that is the right size for a v10
message.
This code now uses a buffer that is sized for v10.
It accepts either a v6 or a v10 message.
Bug: b.android.com/316334
Test: Manually verified correct behavior with Emulator.
Change-Id: Iaf8dda0e441393b6fde899fa30bcc90a4413f0ef
diff --git a/reference-ril/reference-ril.c b/reference-ril/reference-ril.c
index e8b45ef..42fa254 100644
--- a/reference-ril/reference-ril.c
+++ b/reference-ril/reference-ril.c
@@ -888,9 +888,13 @@
ATResponse *p_response = NULL;
int err;
char *line;
- int count =0;
- int numofElements=sizeof(RIL_SignalStrength_v6)/sizeof(int);
- int response[numofElements];
+ int count = 0;
+ // Accept a response that is at least v6, and up to v10
+ int minNumOfElements=sizeof(RIL_SignalStrength_v6)/sizeof(int);
+ int maxNumOfElements=sizeof(RIL_SignalStrength_v10)/sizeof(int);
+ int response[maxNumOfElements];
+
+ memset(response, 0, sizeof(response));
err = at_send_command_singleline("AT+CSQ", "+CSQ:", &p_response);
@@ -904,9 +908,9 @@
err = at_tok_start(&line);
if (err < 0) goto error;
- for (count =0; count < numofElements; count ++) {
+ for (count = 0; count < maxNumOfElements; count++) {
err = at_tok_nextint(&line, &(response[count]));
- if (err < 0) goto error;
+ if (err < 0 && count < minNumOfElements) goto error;
}
RIL_onRequestComplete(t, RIL_E_SUCCESS, response, sizeof(response));