From 4f47f8ab1c25fb08b37bafe97a88def3e749098c Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Tue, 22 Jan 2008 18:01:19 +0000 Subject: Initialize HFP supported features properly --- audio/headset.c | 13 +++++++------ audio/headset.h | 2 +- audio/manager.c | 15 ++++++++------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/audio/headset.c b/audio/headset.c index 2b343d0d..d2dc7416 100644 --- a/audio/headset.c +++ b/audio/headset.c @@ -74,8 +74,9 @@ #define AG_FEATURE_ENHANCES_CALL_STATUS 0x0040 #define AG_FEATURE_ENHANCES_CALL_CONTROL 0x0080 #define AG_FEATURE_EXTENDED_ERROR_RESULT_CODES 0x0100 -/*Audio Gateway features.Default is In-band Ringtone*/ -static unsigned int ag_features; + +static uint32_t ag_features = 0; + static gboolean sco_hci = TRUE; static char *str_state[] = { @@ -84,7 +85,7 @@ static char *str_state[] = { "HEADSET_STATE_CONNECTED", "HEADSET_STATE_PLAY_IN_PROGRESS", "HEADSET_STATE_PLAYING", - }; +}; struct pending_connect { DBusMessage *msg; @@ -1674,7 +1675,7 @@ register_iface: return hs; } -int headset_config_init(GKeyFile *config) +uint32_t headset_config_init(GKeyFile *config) { GError *err = NULL; gboolean value; @@ -1682,7 +1683,7 @@ int headset_config_init(GKeyFile *config) /* Use the default values if there is no config file */ if (config == NULL) - return 0; + return ag_features; str = g_key_file_get_string(config, "General", "SCORouting", &err); @@ -1781,7 +1782,7 @@ int headset_config_init(GKeyFile *config) } else if (value) ag_features |= AG_FEATURE_EXTENDED_ERROR_RESULT_CODES; - return 0; + return ag_features; } void headset_free(struct device *dev) diff --git a/audio/headset.h b/audio/headset.h index a70ad973..67155f73 100644 --- a/audio/headset.h +++ b/audio/headset.h @@ -47,7 +47,7 @@ struct headset *headset_init(struct device *dev, sdp_record_t *record, void headset_free(struct device *dev); -int headset_config_init(GKeyFile *config); +uint32_t headset_config_init(GKeyFile *config); void headset_update(struct device *dev, sdp_record_t *record, uint16_t svc); diff --git a/audio/manager.c b/audio/manager.c index dd580f8c..931af069 100644 --- a/audio/manager.c +++ b/audio/manager.c @@ -1226,7 +1226,7 @@ static int hsp_ag_record(sdp_buf_t *buf, uint8_t ch) return ret; } -static int hfp_ag_record(sdp_buf_t *buf, uint8_t ch) +static int hfp_ag_record(sdp_buf_t *buf, uint8_t ch, uint32_t feat) { sdp_list_t *svclass_id, *pfseq, *apseq, *root; uuid_t root_uuid, svclass_uuid, ga_svclass_uuid; @@ -1234,9 +1234,9 @@ static int hfp_ag_record(sdp_buf_t *buf, uint8_t ch) sdp_profile_desc_t profile; sdp_list_t *aproto, *proto[2]; sdp_record_t record; - uint16_t u16 = 0x0009; sdp_data_t *channel, *features; uint8_t netid = 0x01; + uint16_t sdpfeat; sdp_data_t *network = sdp_data_alloc(SDP_UINT8, &netid); int ret; @@ -1267,7 +1267,8 @@ static int hfp_ag_record(sdp_buf_t *buf, uint8_t ch) proto[1] = sdp_list_append(proto[1], channel); apseq = sdp_list_append(apseq, proto[1]); - features = sdp_data_alloc(SDP_UINT16, &u16); + sdpfeat = (uint16_t) feat & 0xF; + features = sdp_data_alloc(SDP_UINT16, &sdpfeat); sdp_attr_add(&record, SDP_ATTR_SUPPORTED_FEATURES, features); aproto = sdp_list_append(0, apseq); @@ -1541,6 +1542,7 @@ static int headset_server_init(DBusConnection *conn, GKeyFile *config) sdp_buf_t buf; gboolean no_hfp = FALSE; GError *err = NULL; + uint32_t features; if (!(enabled.headset || enabled.gateway)) return 0; @@ -1585,7 +1587,9 @@ static int headset_server_init(DBusConnection *conn, GKeyFile *config) if (!hf_server) return -1; - if (hfp_ag_record(&buf, chan) < 0) { + features = headset_config_init(config); + + if (hfp_ag_record(&buf, chan, features) < 0) { error("Unable to allocate new service record"); return -1; } @@ -1685,9 +1689,6 @@ int audio_init(DBusConnection *conn, GKeyFile *config) } if (enabled.headset) { - if (headset_config_init(config) < 0) - goto failed; - if (headset_server_init(conn, config) < 0) goto failed; } -- cgit