From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> This remove the need of forward declaration of struct control and prepare for a complete removal of struct audio_device. --- profiles/audio/avrcp.c | 12 ++++++------ profiles/audio/control.c | 45 +++++++++++++++++++++++++++++---------------- profiles/audio/control.h | 12 ++++++------ profiles/audio/device.h | 3 +-- 4 files changed, 42 insertions(+), 30 deletions(-) diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c index ffc6415..4316f8e 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c @@ -3314,7 +3314,7 @@ static void session_tg_init_control(struct avrcp *session) avrcp_register_notification(session, AVRCP_EVENT_VOLUME_CHANGED); - control_remote_connected(session->dev->control, 0); + control_remote_connected(session->dev, 0); } static void session_ct_init_browsing(struct avrcp *session) @@ -3340,7 +3340,7 @@ static void session_ct_init_control(struct avrcp *session) if (session->version >= 0x0104) session->supported_events = (1 << AVRCP_EVENT_VOLUME_CHANGED); - control_target_connected(session->dev->control, 0); + control_target_connected(session->dev, 0); player = create_ct_player(session, 0); if (player == NULL) @@ -3380,9 +3380,9 @@ static void session_tg_destroy(struct avrcp *session) player->sessions = g_slist_remove(player->sessions, session); if (session->control_id == 0) - control_remote_connected(session->dev->control, -EIO); + control_remote_connected(session->dev, -EIO); else - control_remote_disconnected(session->dev->control, 0); + control_remote_disconnected(session->dev, 0); session_destroy(session); } @@ -3394,9 +3394,9 @@ static void session_ct_destroy(struct avrcp *session) g_slist_free_full(session->players, player_destroy); if (session->control_id == 0) - control_target_connected(session->dev->control, -EIO); + control_target_connected(session->dev, -EIO); else - control_target_disconnected(session->dev->control, 0); + control_target_disconnected(session->dev, 0); session_destroy(session); } diff --git a/profiles/audio/control.c b/profiles/audio/control.c index c33dcad..4c0a978 100644 --- a/profiles/audio/control.c +++ b/profiles/audio/control.c @@ -68,23 +68,31 @@ struct control { unsigned int avctp_id; }; -void control_target_connected(struct control *control, int err) +void control_target_connected(struct audio_device *dev, int err) { + struct control *control = btd_service_get_user_data(dev->control); + btd_service_connecting_complete(control->target, err); } -void control_target_disconnected(struct control *control, int err) +void control_target_disconnected(struct audio_device *dev, int err) { + struct control *control = btd_service_get_user_data(dev->control); + btd_service_disconnecting_complete(control->target, err); } -void control_remote_connected(struct control *control, int err) +void control_remote_connected(struct audio_device *dev, int err) { + struct control *control = btd_service_get_user_data(dev->control); + btd_service_connecting_complete(control->remote, err); } -void control_remote_disconnected(struct control *control, int err) +void control_remote_disconnected(struct audio_device *dev, int err) { + struct control *control = btd_service_get_user_data(dev->control); + btd_service_disconnecting_complete(control->remote, err); } @@ -92,7 +100,7 @@ static void state_changed(struct audio_device *dev, avctp_state_t old_state, avctp_state_t new_state) { DBusConnection *conn = btd_get_dbus_connection(); - struct control *control = dev->control; + struct control *control = btd_service_get_user_data(dev->control); const char *path = device_get_path(dev->btd_dev); switch (new_state) { @@ -121,7 +129,7 @@ static void state_changed(struct audio_device *dev, avctp_state_t old_state, int control_connect(struct audio_device *dev) { - struct control *control = dev->control; + struct control *control = btd_service_get_user_data(dev->control); if (control->session) return -EALREADY; @@ -138,7 +146,7 @@ int control_connect(struct audio_device *dev) int control_disconnect(struct audio_device *dev) { - struct control *control = dev->control; + struct control *control = btd_service_get_user_data(dev->control); if (!control->session) return -ENOTCONN; @@ -152,7 +160,7 @@ static DBusMessage *key_pressed(DBusConnection *conn, DBusMessage *msg, uint8_t op, void *data) { struct audio_device *device = data; - struct control *control = device->control; + struct control *control = btd_service_get_user_data(device->control); int err; if (!control->session) @@ -227,7 +235,8 @@ static gboolean control_property_get_connected( DBusMessageIter *iter, void *data) { struct audio_device *device = data; - dbus_bool_t value = (device->control->session != NULL); + struct control *control = btd_service_get_user_data(device->control); + dbus_bool_t value = (control->session != NULL); dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN, &value); @@ -255,7 +264,7 @@ static const GDBusPropertyTable control_properties[] = { static void path_unregister(void *data) { struct audio_device *dev = data; - struct control *control = dev->control; + struct control *control = btd_service_get_user_data(dev->control); DBG("Unregistered interface %s on path %s", AUDIO_CONTROL_INTERFACE, device_get_path(dev->btd_dev)); @@ -287,7 +296,7 @@ static struct control *control_init(struct audio_device *dev) struct control *control; if (dev->control != NULL) - return dev->control; + return btd_service_get_user_data(dev->control); if (!g_dbus_register_interface(btd_get_dbus_connection(), device_get_path(dev->btd_dev), @@ -307,7 +316,7 @@ static struct control *control_init(struct audio_device *dev) return control; } -struct control *control_init_target(struct audio_device *dev, +struct btd_service *control_init_target(struct audio_device *dev, struct btd_service *service) { struct control *control; @@ -318,10 +327,12 @@ struct control *control_init_target(struct audio_device *dev, control->target = btd_service_ref(service); - return control; + btd_service_set_user_data(service, control); + + return service; } -struct control *control_init_remote(struct audio_device *dev, +struct btd_service *control_init_remote(struct audio_device *dev, struct btd_service *service) { struct control *control; @@ -332,12 +343,14 @@ struct control *control_init_remote(struct audio_device *dev, control->remote = btd_service_ref(service); - return control; + btd_service_set_user_data(service, control); + + return service; } gboolean control_is_active(struct audio_device *dev) { - struct control *control = dev->control; + struct control *control = btd_service_get_user_data(dev->control); if (control && control->session) return TRUE; diff --git a/profiles/audio/control.h b/profiles/audio/control.h index af6893b..9d90c74 100644 --- a/profiles/audio/control.h +++ b/profiles/audio/control.h @@ -26,9 +26,9 @@ struct btd_service; -struct control *control_init_target(struct audio_device *dev, +struct btd_service *control_init_target(struct audio_device *dev, struct btd_service *service); -struct control *control_init_remote(struct audio_device *dev, +struct btd_service *control_init_remote(struct audio_device *dev, struct btd_service *service); void control_unregister(struct audio_device *dev); gboolean control_is_active(struct audio_device *dev); @@ -36,7 +36,7 @@ gboolean control_is_active(struct audio_device *dev); int control_connect(struct audio_device *dev); int control_disconnect(struct audio_device *dev); -void control_target_connected(struct control *control, int err); -void control_target_disconnected(struct control *control, int err); -void control_remote_connected(struct control *control, int err); -void control_remote_disconnected(struct control *control, int err); +void control_target_connected(struct audio_device *dev, int err); +void control_target_disconnected(struct audio_device *dev, int err); +void control_remote_connected(struct audio_device *dev, int err); +void control_remote_disconnected(struct audio_device *dev, int err); diff --git a/profiles/audio/device.h b/profiles/audio/device.h index 9e0147e..87fc067 100644 --- a/profiles/audio/device.h +++ b/profiles/audio/device.h @@ -23,7 +23,6 @@ */ struct audio_device; -struct control; struct dev_priv; struct audio_device { @@ -31,7 +30,7 @@ struct audio_device { struct btd_service *sink; struct btd_service *source; - struct control *control; + struct btd_service *control; struct dev_priv *priv; }; -- 1.8.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html