diff --git a/spa/plugins/bluez5/backend-native.c b/spa/plugins/bluez5/backend-native.c index 3f5713812..a6e8b6f9c 100644 --- a/spa/plugins/bluez5/backend-native.c +++ b/spa/plugins/bluez5/backend-native.c @@ -924,7 +924,7 @@ static int register_profile(struct spa_bt_backend *backend, const char *profile, DBusMessage *m; DBusMessageIter it[4]; dbus_bool_t autoconnect; - dbus_uint16_t version, chan; + dbus_uint16_t version, chan, features; char *str; DBusPendingCall *call; @@ -975,6 +975,17 @@ static int register_profile(struct spa_bt_backend *backend, const char *profile, dbus_message_iter_close_container(&it[2], &it[3]); dbus_message_iter_close_container(&it[1], &it[2]); } else if (strcmp(uuid, SPA_BT_UUID_HFP_AG) == 0) { + str = "Features"; + features = SPA_BT_HFP_SDP_AG_FEATURE_NONE; + if (backend->msbc_support_enabled_in_config == true) + features |= SPA_BT_HFP_SDP_AG_FEATURE_WIDEBAND_SPEECH; + dbus_message_iter_open_container(&it[1], DBUS_TYPE_DICT_ENTRY, NULL, &it[2]); + dbus_message_iter_append_basic(&it[2], DBUS_TYPE_STRING, &str); + dbus_message_iter_open_container(&it[2], DBUS_TYPE_VARIANT, "q", &it[3]); + dbus_message_iter_append_basic(&it[3], DBUS_TYPE_UINT16, &features); + dbus_message_iter_close_container(&it[2], &it[3]); + dbus_message_iter_close_container(&it[1], &it[2]); + /* HFP version 1.7 */ str = "Version"; version = 0x0107; diff --git a/spa/plugins/bluez5/defs.h b/spa/plugins/bluez5/defs.h index b2d5ed22d..f740800e0 100644 --- a/spa/plugins/bluez5/defs.h +++ b/spa/plugins/bluez5/defs.h @@ -196,6 +196,17 @@ enum spa_bt_hfp_ag_feature { SPA_BT_HFP_AG_FEATURE_EXTENDED_RES_CODE = (1 << 8), SPA_BT_HFP_AG_FEATURE_CODEC_NEGOTIATION = (1 << 9), SPA_BT_HFP_AG_FEATURE_HF_INDICATORS = (1 << 10), + SPA_BT_HFP_AG_FEATURE_ESCO_S4 = (1 << 11), +}; + +enum spa_bt_hfp_sdp_ag_features { + SPA_BT_HFP_SDP_AG_FEATURE_NONE = (0), + SPA_BT_HFP_SDP_AG_FEATURE_3WAY = (1 << 0), + SPA_BT_HFP_SDP_AG_FEATURE_ECNR = (1 << 1), + SPA_BT_HFP_SDP_AG_FEATURE_VOICE_RECOG = (1 << 2), + SPA_BT_HFP_SDP_AG_FEATURE_IN_BAND_RING_TONE = (1 << 3), + SPA_BT_HFP_SDP_AG_FEATURE_ATTACH_VOICE_TAG = (1 << 4), + SPA_BT_HFP_SDP_AG_FEATURE_WIDEBAND_SPEECH = (1 << 5), }; enum spa_bt_hfp_hf_feature { @@ -209,6 +220,17 @@ enum spa_bt_hfp_hf_feature { SPA_BT_HFP_HF_FEATURE_ENHANCED_CALL_CONTROL = (1 << 6), SPA_BT_HFP_HF_FEATURE_CODEC_NEGOTIATION = (1 << 7), SPA_BT_HFP_HF_FEATURE_HF_INDICATORS = (1 << 8), + SPA_BT_HFP_HF_FEATURE_ESCO_S4 = (1 << 9), +}; + +enum spa_bt_hfp_sdp_hf_features { + SPA_BT_HFP_SDP_HF_FEATURE_NONE = (0), + SPA_BT_HFP_SDP_HF_FEATURE_ECNR = (1 << 0), + SPA_BT_HFP_SDP_HF_FEATURE_3WAY = (1 << 1), + SPA_BT_HFP_SDP_HF_FEATURE_CLIP = (1 << 2), + SPA_BT_HFP_SDP_HF_FEATURE_VOICE_RECOGNITION = (1 << 3), + SPA_BT_HFP_SDP_HF_FEATURE_REMOTE_VOLUME_CONTROL = (1 << 4), + SPA_BT_HFP_SDP_HF_FEATURE_WIDEBAND_SPEECH = (1 << 5), }; static inline const char *spa_bt_profile_name (enum spa_bt_profile profile) {