Open Source Telephony
 help / color / mirror / Atom feed
* [PATCH] ublox: network-registration: Handle UREG unsolicited during poll
@ 2020-02-09 21:59 richard.rojfors
  2020-02-13 16:44 ` Denis Kenzior
  0 siblings, 1 reply; 3+ messages in thread
From: richard.rojfors @ 2020-02-09 21:59 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 1963 bytes --]

From: Richard Röjfors <richard@puffinpack.se>

In the case a unsolicited indication for UREG was received
while the status was polled. The poll response failed to parse.
This since the unsolicited indication only carries one
parameter, while the poll response is expected to carry two.

Update the code to loop until the response is found.

The log below shows a case where this happened.

10:07:55 ofonod[520]: Aux: > AT+UREG?\r
10:07:55 ofonod[520]: Aux: < \r\n+CGREG: 4\r\n\r\n+UREG: 0\r\n\r\n+CIEV: 9,1\r\n
10:07:55 ofonod[520]: src/gprs.c:ofono_gprs_status_notify() /ublox_0 status unknown (4)
10:07:55 ofonod[520]: src/gprs.c:ofono_gprs_detached_notify() /ublox_0
10:07:55 ofonod[520]: Aux: < \r\n+UREG: 1,0\r\n
10:07:55 ofonod[520]: Aux: < \r\nOK\r\n
---
 drivers/ubloxmodem/network-registration.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/drivers/ubloxmodem/network-registration.c b/drivers/ubloxmodem/network-registration.c
index 6a524f47..2c6358e3 100644
--- a/drivers/ubloxmodem/network-registration.c
+++ b/drivers/ubloxmodem/network-registration.c
@@ -288,15 +288,21 @@ static void ublox_ureg_cb(gboolean ok, GAtResult *result,
 
 	g_at_result_iter_init(&iter, result);
 
-	if (!g_at_result_iter_next(&iter, "+UREG:"))
-		return;
+	while (g_at_result_iter_next(&iter, "+UREG:")) {
+		if (!g_at_result_iter_next_number(&iter, &enabled))
+			return;
 
-	if (!g_at_result_iter_next_number(&iter, &enabled))
-		return;
+		/* Sometimes we get an unsolicited UREG here, skip it */
+		if (!g_at_result_iter_next_number(&iter, &state))
+			continue;
 
-	if (!g_at_result_iter_next_number(&iter, &state))
-		return;
+		goto parsed_state;
+	}
+
+	/* In case we get here, the response was not parsed */
+	goto error;
 
+parsed_state:
 	tech = ublox_ureg_state_to_tech(state);
 	if (tech < 0)
 		/* No valid UREG status, we have to trust CREG... */
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-02-14  9:07 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-02-09 21:59 [PATCH] ublox: network-registration: Handle UREG unsolicited during poll richard.rojfors
2020-02-13 16:44 ` Denis Kenzior
2020-02-14  9:07   ` Richard =?unknown-8bit?q?R=C3=B6jfors?=

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox