static void sep_setconf_cfm(struct avdtp *session, struct avdtp_local_sep *sep, struct avdtp_stream *stream, struct avdtp_error *err, void *user_data) { struct a2dp_endpoint *endpoint = user_data; struct a2dp_setup *setup; int ret; DBG(""); setup = find_setup(endpoint->id); if (!setup) { error("Unable to find stream setup for endpoint %u", endpoint->id); return; } if (err) goto failed; ret = avdtp_open(session, stream); if (ret < 0) { error("avdtp_open: %s", strerror(-ret)); goto failed; } return; failed: setup_remove(setup); }
static void send_command(void) { avdtp_state_t state = avdtp_sep_get_state(local_sep); switch (command) { case CMD_GET_CONF: avdtp_get_configuration(avdtp, avdtp_stream); break; case CMD_OPEN: if (state == AVDTP_STATE_CONFIGURED) avdtp_open(avdtp, avdtp_stream); break; case CMD_START: if (state == AVDTP_STATE_OPEN) avdtp_start(avdtp, avdtp_stream); break; case CMD_SUSPEND: if (state == AVDTP_STATE_STREAMING) avdtp_suspend(avdtp , avdtp_stream); break; case CMD_CLOSE: if (state == AVDTP_STATE_STREAMING) avdtp_close(avdtp, avdtp_stream, FALSE); break; case CMD_ABORT: avdtp_abort(avdtp , avdtp_stream); break; case CMD_DELAY: avdtp_delay_report(avdtp , avdtp_stream , 250); break; default: break; } }
static void set_configuration_cfm(struct avdtp *session, struct avdtp_local_sep *lsep, struct avdtp_stream *stream, struct avdtp_error *err, void *user_data) { printf("%s\n", __func__); if (preconf) avdtp_open(avdtp, avdtp_stream); }
static void setconf_cfm(struct avdtp *session, struct avdtp_local_sep *sep, struct avdtp_stream *stream, struct avdtp_error *err, void *user_data) { struct a2dp_sep *a2dp_sep = user_data; struct a2dp_setup *setup; struct audio_device *dev; int ret; if (a2dp_sep->type == AVDTP_SEP_TYPE_SINK) DBG("Sink %p: Set_Configuration_Cfm", sep); else DBG("Source %p: Set_Configuration_Cfm", sep); setup = find_setup_by_session(session); if (err) { if (setup) { setup->err = err; finalize_config(setup); } return; } avdtp_stream_add_cb(session, stream, stream_state_changed, a2dp_sep); a2dp_sep->stream = stream; if (!setup) return; dev = a2dp_get_dev(session); /* Notify D-Bus interface of the new stream */ if (a2dp_sep->type == AVDTP_SEP_TYPE_SOURCE) sink_new_stream(dev, session, setup->stream); else source_new_stream(dev, session, setup->stream); ret = avdtp_open(session, stream); if (ret < 0) { error("Error on avdtp_open %s (%d)", strerror(-ret), -ret); setup->stream = NULL; finalize_config_errno(setup, ret); } }