From: Jarkko Lehtoranta <de...@jlranta.com>

Voice output serial port is enabled on some Huawei models (e.g. E169)
without problems, but for example on E173u-2 it is never enabled
during an incoming call. There might also be other Huawei models
having the same issue.

I traced the issue down to "^DDSETEX" AT command, which is used
to notify the device to start streaming audio. It seems that Ofono
sends this command too early on incoming calls. The command should
always be sent *after* the dial "D" or answer "A" command. The patch
fixes this behavior and afterwards voice will also work on E173u-2.

Signed-off-by: Jarkko Lehtoranta <de...@jlranta.com>
---
 drivers/huaweimodem/voicecall.c |   12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/huaweimodem/voicecall.c b/drivers/huaweimodem/voicecall.c
index 1ea2613..3952b95 100644
--- a/drivers/huaweimodem/voicecall.c
+++ b/drivers/huaweimodem/voicecall.c
@@ -78,9 +78,6 @@ static struct ofono_call *create_call(struct ofono_voicecall 
*vc, int type,
 
        d->calls = g_slist_insert_sorted(d->calls, call, at_util_call_compare);
 
-       g_at_chat_send(d->chat, "AT^DDSETEX=2", none_prefix,
-                                               NULL, NULL, NULL);
-
        return call;
 }
 
@@ -117,6 +114,7 @@ static void huawei_dial(struct ofono_voicecall *vc,
                                ofono_voicecall_cb_t cb, void *data)
 {
        char buf[256];
+       struct voicecall_data *vd = ofono_voicecall_get_data(vc);
 
        if (ph->type == 145)
                snprintf(buf, sizeof(buf), "ATD+%s", ph->number);
@@ -137,12 +135,20 @@ static void huawei_dial(struct ofono_voicecall *vc,
        strcat(buf, ";");
 
        huawei_template(vc, buf, cb, data);
+       
+       g_at_chat_send(vd->chat, "AT^DDSETEX=2", none_prefix,
+                                               NULL, NULL, NULL);
 }
 
 static void huawei_answer(struct ofono_voicecall *vc,
                                ofono_voicecall_cb_t cb, void *data)
 {
+       struct voicecall_data *vd = ofono_voicecall_get_data(vc);
+       
        huawei_template(vc, "ATA", cb, data);
+       
+       g_at_chat_send(vd->chat, "AT^DDSETEX=2", none_prefix,
+                                               NULL, NULL, NULL);
 }
 
 static void huawei_hangup(struct ofono_voicecall *vc,
-- 
1.7.9.3

_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to