summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2008-01-22 18:01:19 +0000
committerJohan Hedberg <johan.hedberg@nokia.com>2008-01-22 18:01:19 +0000
commit4f47f8ab1c25fb08b37bafe97a88def3e749098c (patch)
treed6d52a21c5b5a2cf35f1a1c130b8886f07a14a44
parentaf43115ad952518c6124c9f2e2c48f87b164e97f (diff)
Initialize HFP supported features properly
-rw-r--r--audio/headset.c13
-rw-r--r--audio/headset.h2
-rw-r--r--audio/manager.c15
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;
}