diff options
author | Zhenhua Zhang <zhenhua.zhang@intel.com> | 2009-11-25 13:47:16 +0800 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2009-11-24 20:39:19 -0600 |
commit | a4a4bddbe940c565bac545124afdd5bd5ff16881 (patch) | |
tree | bc626748113dbbd68c5b473d07f4270a4d559f2b /plugins | |
parent | c77f1d0cc9c5d2f9a97284cc17f75951dacec744 (diff) | |
download | ofono-a4a4bddbe940c565bac545124afdd5bd5ff16881.tar.bz2 |
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?
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/hfp.c | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/plugins/hfp.c b/plugins/hfp.c index fc29ad94..6e630e8d 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: |