From b8730eb47d97e84ef578dc2f527f6dd51d52ff12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Danis?= Date: Mon, 8 Aug 2011 16:34:40 +0200 Subject: [PATCH] hfpmodem: fix hf features check audio gateway version and only set right features --- drivers/hfpmodem/slc.c | 7 ++++++- drivers/hfpmodem/slc.h | 5 ++++- plugins/hfp_hf.c | 2 +- plugins/phonesim.c | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/hfpmodem/slc.c b/drivers/hfpmodem/slc.c index f9eca22d..4028479d 100644 --- a/drivers/hfpmodem/slc.c +++ b/drivers/hfpmodem/slc.c @@ -52,7 +52,7 @@ struct slc_establish_data { gpointer userdata; }; -void hfp_slc_info_init(struct hfp_slc_info *info) +void hfp_slc_info_init(struct hfp_slc_info *info, guint16 version) { info->ag_features = 0; info->ag_mpty_features = 0; @@ -60,9 +60,14 @@ void hfp_slc_info_init(struct hfp_slc_info *info) info->hf_features = HFP_HF_FEATURE_3WAY; info->hf_features |= HFP_HF_FEATURE_CLIP; info->hf_features |= HFP_HF_FEATURE_REMOTE_VOLUME_CONTROL; + + if (version < HFP_VERSION_1_5) + goto done; + info->hf_features |= HFP_HF_FEATURE_ENHANCED_CALL_STATUS; info->hf_features |= HFP_HF_FEATURE_ENHANCED_CALL_CONTROL; +done: memset(info->cind_val, 0, sizeof(info->cind_val)); memset(info->cind_pos, 0, sizeof(info->cind_pos)); } diff --git a/drivers/hfpmodem/slc.h b/drivers/hfpmodem/slc.h index f37a59c2..6c2302cf 100644 --- a/drivers/hfpmodem/slc.h +++ b/drivers/hfpmodem/slc.h @@ -27,6 +27,9 @@ #define AG_CHLD_3 0x20 #define AG_CHLD_4 0x40 +#define HFP_VERSION_1_5 0x0105 +#define HFP_VERSION_LATEST 0xFFFF + enum hfp_indicator { HFP_INDICATOR_SERVICE = 0, HFP_INDICATOR_CALL, @@ -49,7 +52,7 @@ struct hfp_slc_info { unsigned int cind_val[HFP_INDICATOR_LAST]; }; -void hfp_slc_info_init(struct hfp_slc_info *info); +void hfp_slc_info_init(struct hfp_slc_info *info, guint16 version); void hfp_slc_info_free(struct hfp_slc_info *info); void hfp_slc_establish(struct hfp_slc_info *info, hfp_slc_cb_t connect_cb, diff --git a/plugins/hfp_hf.c b/plugins/hfp_hf.c index 56251417..9fa420ae 100644 --- a/plugins/hfp_hf.c +++ b/plugins/hfp_hf.c @@ -223,7 +223,7 @@ static int hfp_hf_probe(const char *device, const char *dev_addr, if (data == NULL) goto free; - hfp_slc_info_init(&data->info); + hfp_slc_info_init(&data->info, HFP_VERSION_1_5); data->handsfree_path = g_strdup(device); if (data->handsfree_path == NULL) diff --git a/plugins/phonesim.c b/plugins/phonesim.c index 2b3bcf2f..e81a2b41 100644 --- a/plugins/phonesim.c +++ b/plugins/phonesim.c @@ -880,7 +880,7 @@ static int localhfp_enable(struct ofono_modem *modem) g_at_chat_set_disconnect_function(chat, slc_failed, modem); - hfp_slc_info_init(info); + hfp_slc_info_init(info, HFP_VERSION_LATEST); info->chat = chat; hfp_slc_establish(info, slc_established, slc_failed, modem);