control: Add profile .connect and .disconnect

Add the connection and disconnection hooks to the avrcp btd_profile.
This commit is contained in:
Luiz Augusto von Dentz 2012-11-21 14:10:18 +02:00 committed by Johan Hedberg
parent c8ad2db516
commit b19465d1ef

View File

@ -318,6 +318,62 @@ static int a2dp_sink_disconnect(struct btd_device *dev,
return 0;
}
static int avrcp_control_connect(struct btd_device *dev,
struct btd_profile *profile,
btd_profile_cb cb)
{
const gchar *path = device_get_path(dev);
struct audio_device *audio_dev;
struct profile_req *req;
int err;
DBG("path %s", path);
audio_dev = get_audio_dev(dev);
if (!audio_dev) {
DBG("unable to get a device object");
return -1;
}
req = new_profile_request(dev, profile, cb);
err = control_connect(audio_dev, profile_cb, req);
if (err < 0) {
g_free(req);
return err;
}
return 0;
}
static int avrcp_control_disconnect(struct btd_device *dev,
struct btd_profile *profile,
btd_profile_cb cb)
{
const gchar *path = device_get_path(dev);
struct audio_device *audio_dev;
struct profile_req *req;
int err;
DBG("path %s", path);
audio_dev = get_audio_dev(dev);
if (!audio_dev) {
DBG("unable to get a device object");
return -1;
}
req = new_profile_request(dev, profile, cb);
err = control_disconnect(audio_dev, profile_cb, req);
if (err < 0) {
g_free(req);
return err;
}
return 0;
}
static struct audio_adapter *audio_adapter_ref(struct audio_adapter *adp)
{
adp->ref++;
@ -506,6 +562,10 @@ static struct btd_profile avrcp_profile = {
.device_probe = avrcp_probe,
.device_remove = audio_remove,
.auto_connect = true,
.connect = avrcp_control_connect,
.disconnect = avrcp_control_disconnect,
.adapter_probe = avrcp_server_probe,
.adapter_remove = avrcp_server_remove,
};