From 0727da1d5b004da0361f0a807ecbef2339cb35e2 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Fri, 17 Jan 2014 14:37:41 -0600 Subject: emulator: Improve SLC establishment logic --- src/emulator.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'src/emulator.c') 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; + } +} -- cgit v1.2.3