Hi Denis,

Really sorry, this patch is from Mariem and I haven't reviewed it.

the cinterion_parse_tech function really needs to be rework. I'll resend you
a cleaner version today.

On 15/03/2018 18:19, Denis Kenzior wrote:
Hi Gabriel,

On 03/15/2018 07:49 AM, Gabriel Lucas wrote:
From: Mariem Cherif <mariem.che...@ardia.com.tn>

---
  drivers/atmodem/network-registration.c | 45 ++++++++++++++++++++++++++++++++++
  1 file changed, 45 insertions(+)

diff --git a/drivers/atmodem/network-registration.c b/drivers/atmodem/network-registration.c
index a5e2af3..aec9c2d 100644
--- a/drivers/atmodem/network-registration.c
+++ b/drivers/atmodem/network-registration.c
@@ -48,6 +48,7 @@ static const char *cops_prefix[] = { "+COPS:", NULL };
  static const char *csq_prefix[] = { "+CSQ:", NULL };
  static const char *cind_prefix[] = { "+CIND:", NULL };
  static const char *cmer_prefix[] = { "+CMER:", NULL };
+static const char *smoni_prefix[] = { "^SMONI:", "", NULL };

Is there a reason why "" is added?  Is the modem sending lines not prefixed by '^SMONI:' in the response?

  static const char *zpas_prefix[] = { "+ZPAS:", NULL };
  static const char *option_tech_prefix[] = { "_OCTI:", "_OUWCTI:", NULL };
  @@ -178,6 +179,32 @@ static int option_parse_tech(GAtResult *result)
      return tech;
  }
  +static int cinterion_parse_tech(GAtResult *result)
+{
+    int tech = -1;
+    GAtResultIter iter;
+    GSList *l;

new line here please

+    g_at_result_iter_init(&iter, result);
+    l = result->lines;

What does the output look like?

+    if (strstr(l->data, "^SMONI: ") != NULL) {

Generally we use g_at_result_iter_next("^SMONI:");

+        gchar **body = g_strsplit(l->data, "^SMONI: ", 2);
+        if (*body != NULL) {
+            gchar **data = g_strsplit(body[1], ",", 20);
+            if (*data != NULL) {
+                if (g_strcmp0(data[0], "2G") == 0) {
+                    tech = ACCESS_TECHNOLOGY_GSM;
+                } else if (g_strcmp0 (data[0], "3G") == 0) {
+                    tech = ACCESS_TECHNOLOGY_UTRAN;
+                } else if (g_strcmp0 (data[0], "4G") == 0) {
+                    tech = ACCESS_TECHNOLOGY_EUTRAN;
+                }
+            }

Are you leaking data?  Have you run this through valgrind?

+            g_strfreev(body);

It seems all of this can be accomplished with g_at_result_iter_next_unquoted_string.

Regards,
-Denis

_______________________________________________
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono

Reply via email to