static void set_volume(uint8_t volume, struct audio_device *dev, void *user_data) { struct media_player *mp = user_data; GSList *l; if (mp->volume == volume) return; mp->volume = volume; for (l = mp->adapter->endpoints; l; l = l->next) { struct media_endpoint *endpoint = l->data; struct media_transport *transport; /* Volume is A2DP only */ if (endpoint->sep == NULL) continue; transport = find_device_transport(endpoint, dev); if (transport == NULL) continue; media_transport_update_volume(transport, volume); } }
static gboolean set_configuration(struct media_endpoint *endpoint, uint8_t *configuration, size_t size, media_endpoint_cb_t cb, void *user_data, GDestroyNotify destroy) { struct a2dp_config_data *data = user_data; struct btd_device *device = a2dp_setup_get_device(data->setup); DBusConnection *conn = btd_get_dbus_connection(); DBusMessage *msg; const char *path; DBusMessageIter iter; struct media_transport *transport; transport = find_device_transport(endpoint, device); if (transport != NULL) return FALSE; transport = media_transport_create(device, configuration, size, endpoint); if (transport == NULL) return FALSE; msg = dbus_message_new_method_call(endpoint->sender, endpoint->path, MEDIA_ENDPOINT_INTERFACE, "SetConfiguration"); if (msg == NULL) { error("Couldn't allocate D-Bus message"); media_transport_destroy(transport); return FALSE; } endpoint->transports = g_slist_append(endpoint->transports, transport); dbus_message_iter_init_append(msg, &iter); path = media_transport_get_path(transport); dbus_message_iter_append_basic(&iter, DBUS_TYPE_OBJECT_PATH, &path); g_dbus_get_properties(conn, path, "org.bluez.MediaTransport1", &iter); return media_endpoint_async_call(msg, endpoint, cb, user_data, destroy); }