Lines Matching refs:card

70     int (*acquire)(struct hf_audio_card *card);
158 static DBusMessage *card_send(struct hf_audio_card *card, const char *method, DBusError *err)
160 pa_bluetooth_transport *t = card->transport;
164 r = dbus_connection_send_with_reply_and_block(pa_dbus_connection_get(card->backend->connection), m, -1, err);
170 static int card_connect(struct hf_audio_card *card) {
174 if (card->connecting)
177 card->connecting = true;
180 r = card_send(card, "Connect", &err);
184 card->connecting = false;
191 if (card->connecting)
197 static int card_acquire(struct hf_audio_card *card) {
205 r = card_send(card, "Acquire", &err);
215 card->acquire = card_connect;
216 return card_connect(card);
225 pa_bluetooth_transport_reconfigure(card->transport, pa_bluetooth_get_hf_codec("CVSD"), sco_transport_write, NULL);
228 pa_bluetooth_transport_reconfigure(card->transport, pa_bluetooth_get_hf_codec("mSBC"), sco_transport_write, NULL);
238 card->fd = fd;
249 static pa_hook_result_t device_unlink_cb(pa_bluetooth_discovery *y, const pa_bluetooth_device *d, struct hf_audio_card *card) {
251 pa_assert(card);
253 if (d != card->transport->device)
256 hf_audio_agent_card_removed(card->backend, card->path);
262 struct hf_audio_card *card = pa_xnew0(struct hf_audio_card, 1);
264 card->path = pa_xstrdup(path);
265 card->backend = backend;
266 card->fd = -1;
267 card->acquire = card_acquire;
269 card->device_unlink_slot = pa_hook_connect(pa_bluetooth_discovery_hook(backend->discovery, PA_BLUETOOTH_HOOK_DEVICE_UNLINK),
270 PA_HOOK_NORMAL, (pa_hook_cb_t) device_unlink_cb, card);
272 return card;
275 static void hf_audio_card_free(struct hf_audio_card *card) {
276 pa_assert(card);
278 if (card->device_unlink_slot)
279 pa_hook_slot_free(card->device_unlink_slot);
281 if (card->transport)
282 pa_bluetooth_transport_free(card->transport);
284 pa_xfree(card->path);
285 pa_xfree(card->remote_address);
286 pa_xfree(card->local_address);
287 pa_xfree(card);
320 struct hf_audio_card *card = t->userdata;
323 pa_assert(card);
325 if (!optional && card->fd < 0) {
326 err = card->acquire(card);
346 err = socket_accept(card->fd);
348 pa_log_error("Deferred setup failed on fd %d: %s", card->fd, pa_cstrerror(-err));
352 return card->fd;
356 struct hf_audio_card *card = t->userdata;
358 pa_assert(card);
360 if (card->fd < 0) {
366 shutdown(card->fd, SHUT_RDWR);
367 close(card->fd);
368 card->fd = -1;
374 struct hf_audio_card *card;
382 pa_log_debug("New HF card found: %s", path);
384 card = hf_audio_card_new(backend, path);
403 pa_xfree(card->remote_address);
404 card->remote_address = pa_xstrdup(value);
406 pa_xfree(card->local_address);
407 card->local_address = pa_xstrdup(value);
418 d = pa_bluetooth_discovery_get_device_by_address(backend->discovery, card->remote_address, card->local_address);
424 card->transport = pa_bluetooth_transport_new(d, backend->ofono_bus_id, path, p, NULL, 0);
425 card->transport->acquire = hf_audio_agent_transport_acquire;
426 card->transport->release = hf_audio_agent_transport_release;
427 card->transport->userdata = card;
428 pa_bluetooth_transport_reconfigure(card->transport, pa_bluetooth_get_hf_codec("CVSD"), sco_transport_write, NULL);
430 pa_bluetooth_transport_put(card->transport);
431 pa_hashmap_put(backend->cards, card->path, card);
436 hf_audio_card_free(card);
440 struct hf_audio_card *card;
445 pa_log_debug("HF card removed: %s", path);
447 card = pa_hashmap_remove(backend->cards, path);
448 if (!card)
451 hf_audio_card_free(card);
681 struct hf_audio_card *card;
701 card = pa_hashmap_get(backend->cards, path);
703 if (!card || (codec != HFP_AUDIO_CODEC_CVSD && codec != HFP_AUDIO_CODEC_MSBC) || card->fd >= 0) {
711 pa_log_debug("New audio connection on card %s (fd=%d, codec=%d)", path, fd, codec);
713 card->connecting = false;
714 card->fd = fd;
716 pa_bluetooth_transport_reconfigure(card->transport, pa_bluetooth_get_hf_codec("CVSD"), sco_transport_write, NULL);
719 pa_bluetooth_transport_reconfigure(card->transport, pa_bluetooth_get_hf_codec("mSBC"), sco_transport_write, NULL);
722 pa_bluetooth_transport_set_state(card->transport, PA_BLUETOOTH_TRANSPORT_STATE_PLAYING);