hfpmodem: Fix connecting to AG with existing mpty
authorKuba Pawlak <kubax.t.pawlak@intel.com>
Wed, 3 Jun 2015 17:25:50 +0000 (19:25 +0200)
committerDenis Kenzior <denkenz@gmail.com>
Thu, 4 Jun 2015 21:18:08 +0000 (16:18 -0500)
If there is more then one active or held call, we are in mpty calls.
We won't get indicator update if any of them is released by CHLD=1x.
So we have to poll it.

drivers/hfpmodem/voicecall.c

index afeb35fb2a1c3ea02a3a2f2c8a731faf8561bb1f..e3e6e0f5eccbbd61972c4b823c8093dd227e4bb9 100644 (file)
@@ -1134,6 +1134,10 @@ static void hfp_clcc_cb(gboolean ok, GAtResult *result, gpointer user_data)
        struct ofono_voicecall *vc = user_data;
        struct voicecall_data *vd = ofono_voicecall_get_data(vc);
        unsigned int mpty_ids;
+       GSList *n;
+       struct ofono_call *nc;
+       unsigned int num_active = 0;
+       unsigned int num_held = 0;
 
        if (!ok)
                return;
@@ -1142,6 +1146,22 @@ static void hfp_clcc_cb(gboolean ok, GAtResult *result, gpointer user_data)
 
        g_slist_foreach(vd->calls, voicecall_notify, vc);
        ofono_voicecall_mpty_hint(vc, mpty_ids);
+
+       n = vd->calls;
+
+       while (n) {
+               nc = n->data;
+
+               if (nc->status == CALL_STATUS_ACTIVE)
+                       num_active++;
+               else if (nc->status == CALL_STATUS_HELD)
+                       num_held++;
+
+               n = n->next;
+       }
+
+       if ((num_active > 1 || num_held > 1) && !vd->clcc_source)
+               vd->clcc_source = g_timeout_add(POLL_CLCC_INTERVAL, poll_clcc, vc);
 }
 
 static void hfp_voicecall_initialized(gboolean ok, GAtResult *result,