diff options
author | Denis Kenzior <denkenz@gmail.com> | 2014-01-27 11:56:33 -0600 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2014-10-20 13:40:28 -0500 |
commit | eef67018b60b5c7118ce20a17e20203ec0f02671 (patch) | |
tree | 2740707a9c3629521331ccdd09ebcc13df1d2b02 /drivers/hfpmodem/handsfree.c | |
parent | 299ffc962078048651dbe43739e7327c62e9a83b (diff) | |
download | ofono-eef67018b60b5c7118ce20a17e20203ec0f02671.tar.bz2 |
hfp: Implement +BIND notifications
Diffstat (limited to 'drivers/hfpmodem/handsfree.c')
-rw-r--r-- | drivers/hfpmodem/handsfree.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/hfpmodem/handsfree.c b/drivers/hfpmodem/handsfree.c index 2e47f715..d5162f22 100644 --- a/drivers/hfpmodem/handsfree.c +++ b/drivers/hfpmodem/handsfree.c @@ -206,6 +206,27 @@ static void hfp_cnum_query(struct ofono_handsfree *hf, CALLBACK_WITH_FAILURE(cb, -1, NULL, data); } +static void bind_notify(GAtResult *result, gpointer user_data) +{ + struct ofono_handsfree *hf = user_data; + int hf_indicator; + int active; + GAtResultIter iter; + + g_at_result_iter_init(&iter, result); + + if (!g_at_result_iter_next(&iter, "+BIND:")) + return; + + if (!g_at_result_iter_next_number(&iter, &hf_indicator)) + return; + + if (!g_at_result_iter_next_number(&iter, &active)) + return; + + ofono_handsfree_hf_indicator_active_notify(hf, hf_indicator, active); +} + static gboolean hfp_handsfree_register(gpointer user_data) { struct ofono_handsfree *hf = user_data; @@ -216,6 +237,7 @@ static gboolean hfp_handsfree_register(gpointer user_data) g_at_chat_register(hd->chat, "+BSIR:", bsir_notify, FALSE, hf, NULL); g_at_chat_register(hd->chat, "+BVRA:", bvra_notify, FALSE, hf, NULL); g_at_chat_register(hd->chat, "+CIEV:", ciev_notify, FALSE, hf, NULL); + g_at_chat_register(hd->chat, "+BIND:", bind_notify, FALSE, hf, NULL); if (hd->ag_features & HFP_AG_FEATURE_IN_BAND_RING_TONE) ofono_handsfree_set_inband_ringing(hf, TRUE); |