Initialize HFP supported features properly

This commit is contained in:
Johan Hedberg 2008-01-22 18:01:19 +00:00
parent af43115ad9
commit 4f47f8ab1c
3 changed files with 16 additions and 14 deletions

View File

@ -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)

View File

@ -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);

View File

@ -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;
}