From: Zhenhua Zhang Date: Wed, 25 Nov 2009 05:47:16 +0000 (+0800) Subject: Fix: Order of CMER and CIND in SLC connection X-Git-Tag: 0.12~24 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a4a4bddbe940c565bac545124afdd5bd5ff16881;p=platform%2Fupstream%2Fofono.git Fix: Order of CMER and CIND in SLC connection According to the HFP 1.5 specification the order of commands is actually important. The required sequence is to use CIND=?, CIND? and then CMER. Currently oFono issues commands in the order of CIND=?, CMER, CIND? --- diff --git a/plugins/hfp.c b/plugins/hfp.c index fc29ad9..6e630e8 100644 --- a/plugins/hfp.c +++ b/plugins/hfp.c @@ -63,6 +63,22 @@ static void hfp_debug(const char *str, void *user_data) ofono_info("%s", str); } +static void cmer_cb(gboolean ok, GAtResult *result, gpointer user_data) +{ + struct ofono_modem *modem = user_data; + struct hfp_data *data = ofono_modem_get_data(modem); + + if (!ok) { + hfp_disable(modem); + return; + } + + ofono_info("Service level connection established"); + g_at_chat_send(data->chat, "AT+CMEE=1", NULL, NULL, NULL, NULL); + + ofono_modem_set_powered(modem, TRUE); +} + static void cind_status_cb(gboolean ok, GAtResult *result, gpointer user_data) { @@ -95,30 +111,14 @@ static void cind_status_cb(gboolean ok, GAtResult *result, index += 1; } - ofono_info("Service level connection established"); - g_at_chat_send(data->chat, "AT+CMEE=1", NULL, NULL, NULL, NULL); - - ofono_modem_set_powered(modem, TRUE); + g_at_chat_send(data->chat, "AT+CMER=3,0,0,1", cmer_prefix, + cmer_cb, modem, NULL); return; error: hfp_disable(modem); } -static void cmer_cb(gboolean ok, GAtResult *result, gpointer user_data) -{ - struct ofono_modem *modem = user_data; - struct hfp_data *data = ofono_modem_get_data(modem); - - if (!ok) { - hfp_disable(modem); - return; - } - - g_at_chat_send(data->chat, "AT+CIND?", cind_prefix, - cind_status_cb, modem, NULL); -} - static void cind_cb(gboolean ok, GAtResult *result, gpointer user_data) { struct ofono_modem *modem = user_data; @@ -171,8 +171,8 @@ static void cind_cb(gboolean ok, GAtResult *result, gpointer user_data) index += 1; } - g_at_chat_send(data->chat, "AT+CMER=3,0,0,1", cmer_prefix, - cmer_cb, modem, NULL); + g_at_chat_send(data->chat, "AT+CIND?", cind_prefix, + cind_status_cb, modem, NULL); return; error: