summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorZhenhua Zhang <zhenhua.zhang@intel.com>2009-11-25 13:47:16 +0800
committerDenis Kenzior <denkenz@gmail.com>2009-11-24 20:39:19 -0600
commita4a4bddbe940c565bac545124afdd5bd5ff16881 (patch)
treebc626748113dbbd68c5b473d07f4270a4d559f2b /plugins
parentc77f1d0cc9c5d2f9a97284cc17f75951dacec744 (diff)
downloadofono-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.c40
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: