mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-11-17 17:24:32 +08:00
Initialize HFP supported features properly
This commit is contained in:
parent
af43115ad9
commit
4f47f8ab1c
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user