summaryrefslogtreecommitdiffstats
path: root/src/emulator.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2014-01-17 14:37:41 -0600
committerDenis Kenzior <denkenz@gmail.com>2014-10-20 13:40:27 -0500
commit0727da1d5b004da0361f0a807ecbef2339cb35e2 (patch)
treef11627aeda55c6a20a3a707abe3c8d18237aea82 /src/emulator.c
parentd292e0e0ede635b2398f2176a4ddfa01022f0ef3 (diff)
downloadofono-0727da1d5b004da0361f0a807ecbef2339cb35e2.tar.bz2
emulator: Improve SLC establishment logic
Diffstat (limited to 'src/emulator.c')
-rw-r--r--src/emulator.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/emulator.c b/src/emulator.c
index 70505b5c..6171525e 100644
--- a/src/emulator.c
+++ b/src/emulator.c
@@ -636,7 +636,8 @@ done:
g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
- em->slc = TRUE;
+ __ofono_emulator_slc_condition(em,
+ OFONO_EMULATOR_SLC_CONDITION_CMER);
break;
}
@@ -1266,3 +1267,31 @@ void __ofono_emulator_set_indicator_forced(struct ofono_emulator *em,
ind->deferred = TRUE;
}
}
+
+void __ofono_emulator_slc_condition(struct ofono_emulator *em,
+ enum ofono_emulator_slc_condition cond)
+{
+ if (em->slc == TRUE)
+ return;
+
+ switch (cond) {
+ case OFONO_EMULATOR_SLC_CONDITION_CMER:
+ if ((em->r_features & HFP_HF_FEATURE_3WAY) &&
+ (em->l_features & HFP_AG_FEATURE_3WAY))
+ return;
+ /* Fall Through */
+
+ case OFONO_EMULATOR_SLC_CONDITION_CHLD:
+ if ((em->r_features & HFP_HF_FEATURE_HF_INDICATORS) &&
+ (em->l_features & HFP_HF_FEATURE_HF_INDICATORS))
+ return;
+ /* Fall Through */
+
+ case OFONO_EMULATOR_SLC_CONDITION_BIND:
+ ofono_info("SLC reached");
+ em->slc = TRUE;
+
+ default:
+ break;
+ }
+}