bluetooth: Fix HSP volume handling.
[profile/ivi/pulseaudio-panda.git] / src / modules / bluetooth / module-bluetooth-device.c
1 /***
2   This file is part of PulseAudio.
3
4   Copyright 2008-2009 Joao Paulo Rechi Vita
5
6   PulseAudio is free software; you can redistribute it and/or modify
7   it under the terms of the GNU Lesser General Public License as
8   published by the Free Software Foundation; either version 2.1 of the
9   License, or (at your option) any later version.
10
11   PulseAudio is distributed in the hope that it will be useful, but
12   WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14   General Public License for more details.
15
16   You should have received a copy of the GNU Lesser General Public
17   License along with PulseAudio; if not, write to the Free Software
18   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19   USA.
20 ***/
21
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25
26 #include <string.h>
27 #include <errno.h>
28 #include <linux/sockios.h>
29 #include <arpa/inet.h>
30
31 #include <pulse/i18n.h>
32 #include <pulse/rtclock.h>
33 #include <pulse/sample.h>
34 #include <pulse/timeval.h>
35 #include <pulse/xmalloc.h>
36
37 #include <pulsecore/module.h>
38 #include <pulsecore/modargs.h>
39 #include <pulsecore/core-rtclock.h>
40 #include <pulsecore/core-util.h>
41 #include <pulsecore/core-error.h>
42 #include <pulsecore/shared.h>
43 #include <pulsecore/socket-util.h>
44 #include <pulsecore/thread.h>
45 #include <pulsecore/thread-mq.h>
46 #include <pulsecore/poll.h>
47 #include <pulsecore/rtpoll.h>
48 #include <pulsecore/time-smoother.h>
49 #include <pulsecore/namereg.h>
50 #include <pulsecore/dbus-shared.h>
51 #include <pulsecore/llist.h>
52
53 #include "module-bluetooth-device-symdef.h"
54 #include "ipc.h"
55 #include "sbc.h"
56 #include "a2dp-codecs.h"
57 #include "rtp.h"
58 #include "bluetooth-util.h"
59
60 #define BITPOOL_DEC_LIMIT 32
61 #define BITPOOL_DEC_STEP 5
62
63 PA_MODULE_AUTHOR("Joao Paulo Rechi Vita");
64 PA_MODULE_DESCRIPTION("Bluetooth audio sink and source");
65 PA_MODULE_VERSION(PACKAGE_VERSION);
66 PA_MODULE_LOAD_ONCE(FALSE);
67 PA_MODULE_USAGE(
68         "name=<name for the card/sink/source, to be prefixed> "
69         "card_name=<name for the card> "
70         "card_properties=<properties for the card> "
71         "sink_name=<name for the sink> "
72         "sink_properties=<properties for the sink> "
73         "source_name=<name for the source> "
74         "source_properties=<properties for the source> "
75         "address=<address of the device> "
76         "profile=<a2dp|hsp|hfgw> "
77         "rate=<sample rate> "
78         "channels=<number of channels> "
79         "path=<device object path> "
80         "auto_connect=<automatically connect?> "
81         "sco_sink=<SCO over PCM sink name> "
82         "sco_source=<SCO over PCM source name>");
83
84 /* TODO: not close fd when entering suspend mode in a2dp */
85
86 static const char* const valid_modargs[] = {
87     "name",
88     "card_name",
89     "card_properties",
90     "sink_name",
91     "sink_properties",
92     "source_name",
93     "source_properties",
94     "address",
95     "profile",
96     "rate",
97     "channels",
98     "path",
99     "auto_connect",
100     "sco_sink",
101     "sco_source",
102     NULL
103 };
104
105 struct a2dp_info {
106     sbc_capabilities_t sbc_capabilities;
107     sbc_t sbc;                           /* Codec data */
108     pa_bool_t sbc_initialized;           /* Keep track if the encoder is initialized */
109     size_t codesize, frame_length;       /* SBC Codesize, frame_length. We simply cache those values here */
110
111     void* buffer;                        /* Codec transfer buffer */
112     size_t buffer_size;                  /* Size of the buffer */
113
114     uint16_t seq_num;                    /* Cumulative packet sequence */
115     uint8_t min_bitpool;
116     uint8_t max_bitpool;
117 };
118
119 struct hsp_info {
120     pcm_capabilities_t pcm_capabilities;
121     pa_sink *sco_sink;
122     void (*sco_sink_set_volume)(pa_sink *s);
123     pa_source *sco_source;
124     void (*sco_source_set_volume)(pa_source *s);
125     pa_hook_slot *sink_state_changed_slot;
126     pa_hook_slot *source_state_changed_slot;
127 };
128
129 struct userdata {
130     pa_core *core;
131     pa_module *module;
132
133     char *address;
134     char *path;
135     char *transport;
136     char *accesstype;
137
138     pa_bluetooth_discovery *discovery;
139     pa_bool_t auto_connect;
140
141     pa_dbus_connection *connection;
142
143     pa_card *card;
144     pa_sink *sink;
145     pa_source *source;
146
147     pa_thread_mq thread_mq;
148     pa_rtpoll *rtpoll;
149     pa_rtpoll_item *rtpoll_item;
150     pa_thread *thread;
151
152     uint64_t read_index, write_index;
153     pa_usec_t started_at;
154     pa_smoother *read_smoother;
155
156     pa_memchunk write_memchunk;
157
158     pa_sample_spec sample_spec, requested_sample_spec;
159
160     int service_fd;
161     int stream_fd;
162
163     size_t link_mtu;
164     size_t block_size;
165
166     struct a2dp_info a2dp;
167     struct hsp_info hsp;
168
169     enum profile profile;
170
171     pa_modargs *modargs;
172
173     int stream_write_type;
174     int service_write_type, service_read_type;
175
176     pa_bool_t filter_added;
177 };
178
179 #define FIXED_LATENCY_PLAYBACK_A2DP (25*PA_USEC_PER_MSEC)
180 #define FIXED_LATENCY_RECORD_A2DP (25*PA_USEC_PER_MSEC)
181 #define FIXED_LATENCY_PLAYBACK_HSP (125*PA_USEC_PER_MSEC)
182 #define FIXED_LATENCY_RECORD_HSP (25*PA_USEC_PER_MSEC)
183
184 #define MAX_PLAYBACK_CATCH_UP_USEC (100*PA_USEC_PER_MSEC)
185
186 #define USE_SCO_OVER_PCM(u) (u->profile == PROFILE_HSP && (u->hsp.sco_sink && u->hsp.sco_source))
187
188 static int init_bt(struct userdata *u);
189 static int init_profile(struct userdata *u);
190
191 static int service_send(struct userdata *u, const bt_audio_msg_header_t *msg) {
192     ssize_t r;
193
194     pa_assert(u);
195     pa_assert(msg);
196     pa_assert(msg->length > 0);
197
198     if (u->service_fd < 0) {
199         pa_log_warn("Service not connected");
200         return -1;
201     }
202
203     pa_log_debug("Sending %s -> %s",
204                  pa_strnull(bt_audio_strtype(msg->type)),
205                  pa_strnull(bt_audio_strname(msg->name)));
206
207     if ((r = pa_loop_write(u->service_fd, msg, msg->length, &u->service_write_type)) == (ssize_t) msg->length)
208         return 0;
209
210     if (r < 0)
211         pa_log_error("Error sending data to audio service: %s", pa_cstrerror(errno));
212     else
213         pa_log_error("Short write()");
214
215     return -1;
216 }
217
218 static int service_recv(struct userdata *u, bt_audio_msg_header_t *msg, size_t room) {
219     ssize_t r;
220
221     pa_assert(u);
222     pa_assert(u->service_fd >= 0);
223     pa_assert(msg);
224     pa_assert(room >= sizeof(*msg));
225
226     pa_log_debug("Trying to receive message from audio service...");
227
228     /* First, read the header */
229     if ((r = pa_loop_read(u->service_fd, msg, sizeof(*msg), &u->service_read_type)) != sizeof(*msg))
230         goto read_fail;
231
232     if (msg->length < sizeof(*msg)) {
233         pa_log_error("Invalid message size.");
234         return -1;
235     }
236
237     if (msg->length > room) {
238         pa_log_error("Not enough room.");
239         return -1;
240     }
241
242     /* Secondly, read the payload */
243     if (msg->length > sizeof(*msg)) {
244
245         size_t remains = msg->length - sizeof(*msg);
246
247         if ((r = pa_loop_read(u->service_fd,
248                               (uint8_t*) msg + sizeof(*msg),
249                               remains,
250                               &u->service_read_type)) != (ssize_t) remains)
251             goto read_fail;
252     }
253
254     pa_log_debug("Received %s <- %s",
255                  pa_strnull(bt_audio_strtype(msg->type)),
256                  pa_strnull(bt_audio_strname(msg->name)));
257
258     return 0;
259
260 read_fail:
261
262     if (r < 0)
263         pa_log_error("Error receiving data from audio service: %s", pa_cstrerror(errno));
264     else
265         pa_log_error("Short read()");
266
267     return -1;
268 }
269
270 static ssize_t service_expect(struct userdata*u, bt_audio_msg_header_t *rsp, size_t room, uint8_t expected_name, size_t expected_size) {
271     int r;
272
273     pa_assert(u);
274     pa_assert(u->service_fd >= 0);
275     pa_assert(rsp);
276
277     if ((r = service_recv(u, rsp, room)) < 0)
278         return r;
279
280     if ((rsp->type != BT_INDICATION && rsp->type != BT_RESPONSE) ||
281         rsp->name != expected_name ||
282         (expected_size > 0 && rsp->length != expected_size)) {
283
284         if (rsp->type == BT_ERROR && rsp->length == sizeof(bt_audio_error_t))
285             pa_log_error("Received error condition: %s", pa_cstrerror(((bt_audio_error_t*) rsp)->posix_errno));
286         else
287             pa_log_error("Bogus message %s received while %s was expected",
288                          pa_strnull(bt_audio_strname(rsp->name)),
289                          pa_strnull(bt_audio_strname(expected_name)));
290         return -1;
291     }
292
293     return 0;
294 }
295
296 /* Run from main thread */
297 static int parse_caps(struct userdata *u, uint8_t seid, const struct bt_get_capabilities_rsp *rsp) {
298     uint16_t bytes_left;
299     const codec_capabilities_t *codec;
300
301     pa_assert(u);
302     pa_assert(rsp);
303
304     bytes_left = rsp->h.length - sizeof(*rsp);
305
306     if (bytes_left < sizeof(codec_capabilities_t)) {
307         pa_log_error("Packet too small to store codec information.");
308         return -1;
309     }
310
311     codec = (codec_capabilities_t *) rsp->data; /** ALIGNMENT? **/
312
313     pa_log_debug("Payload size is %lu %lu", (unsigned long) bytes_left, (unsigned long) sizeof(*codec));
314
315     if (((u->profile == PROFILE_A2DP || u->profile == PROFILE_A2DP_SOURCE) && codec->transport != BT_CAPABILITIES_TRANSPORT_A2DP) ||
316         ((u->profile == PROFILE_HSP || u->profile == PROFILE_HFGW) && codec->transport != BT_CAPABILITIES_TRANSPORT_SCO)) {
317         pa_log_error("Got capabilities for wrong codec.");
318         return -1;
319     }
320
321     if (u->profile == PROFILE_HSP || u->profile == PROFILE_HFGW) {
322
323         if (bytes_left <= 0 || codec->length != sizeof(u->hsp.pcm_capabilities))
324             return -1;
325
326         pa_assert(codec->type == BT_HFP_CODEC_PCM);
327
328         if (codec->configured && seid == 0)
329             return codec->seid;
330
331         memcpy(&u->hsp.pcm_capabilities, codec, sizeof(u->hsp.pcm_capabilities));
332
333     } else if (u->profile == PROFILE_A2DP) {
334
335         while (bytes_left > 0) {
336             if ((codec->type == BT_A2DP_SBC_SINK) && !codec->lock)
337                 break;
338
339             bytes_left -= codec->length;
340             codec = (const codec_capabilities_t*) ((const uint8_t*) codec + codec->length);
341         }
342
343         if (bytes_left <= 0 || codec->length != sizeof(u->a2dp.sbc_capabilities))
344             return -1;
345
346         pa_assert(codec->type == BT_A2DP_SBC_SINK);
347
348         if (codec->configured && seid == 0)
349             return codec->seid;
350
351         memcpy(&u->a2dp.sbc_capabilities, codec, sizeof(u->a2dp.sbc_capabilities));
352
353     } else if (u->profile == PROFILE_A2DP_SOURCE) {
354
355         while (bytes_left > 0) {
356             if ((codec->type == BT_A2DP_SBC_SOURCE) && !codec->lock)
357                 break;
358
359             bytes_left -= codec->length;
360             codec = (const codec_capabilities_t*) ((const uint8_t*) codec + codec->length);
361         }
362
363         if (bytes_left <= 0 || codec->length != sizeof(u->a2dp.sbc_capabilities))
364             return -1;
365
366         pa_assert(codec->type == BT_A2DP_SBC_SOURCE);
367
368         if (codec->configured && seid == 0)
369             return codec->seid;
370
371         memcpy(&u->a2dp.sbc_capabilities, codec, sizeof(u->a2dp.sbc_capabilities));
372     }
373
374     return 0;
375 }
376
377 /* Run from main thread */
378 static int get_caps(struct userdata *u, uint8_t seid) {
379     union {
380         struct bt_get_capabilities_req getcaps_req;
381         struct bt_get_capabilities_rsp getcaps_rsp;
382         bt_audio_error_t error;
383         uint8_t buf[BT_SUGGESTED_BUFFER_SIZE];
384     } msg;
385     int ret;
386
387     pa_assert(u);
388
389     memset(&msg, 0, sizeof(msg));
390     msg.getcaps_req.h.type = BT_REQUEST;
391     msg.getcaps_req.h.name = BT_GET_CAPABILITIES;
392     msg.getcaps_req.h.length = sizeof(msg.getcaps_req);
393     msg.getcaps_req.seid = seid;
394
395     pa_strlcpy(msg.getcaps_req.object, u->path, sizeof(msg.getcaps_req.object));
396     if (u->profile == PROFILE_A2DP || u->profile == PROFILE_A2DP_SOURCE)
397         msg.getcaps_req.transport = BT_CAPABILITIES_TRANSPORT_A2DP;
398     else {
399         pa_assert(u->profile == PROFILE_HSP || u->profile == PROFILE_HFGW);
400         msg.getcaps_req.transport = BT_CAPABILITIES_TRANSPORT_SCO;
401     }
402     msg.getcaps_req.flags = u->auto_connect ? BT_FLAG_AUTOCONNECT : 0;
403
404     if (service_send(u, &msg.getcaps_req.h) < 0)
405         return -1;
406
407     if (service_expect(u, &msg.getcaps_rsp.h, sizeof(msg), BT_GET_CAPABILITIES, 0) < 0)
408         return -1;
409
410     ret = parse_caps(u, seid, &msg.getcaps_rsp);
411     if (ret <= 0)
412         return ret;
413
414     return get_caps(u, ret);
415 }
416
417 /* Run from main thread */
418 static uint8_t a2dp_default_bitpool(uint8_t freq, uint8_t mode) {
419
420     switch (freq) {
421         case BT_SBC_SAMPLING_FREQ_16000:
422         case BT_SBC_SAMPLING_FREQ_32000:
423             return 53;
424
425         case BT_SBC_SAMPLING_FREQ_44100:
426
427             switch (mode) {
428                 case BT_A2DP_CHANNEL_MODE_MONO:
429                 case BT_A2DP_CHANNEL_MODE_DUAL_CHANNEL:
430                     return 31;
431
432                 case BT_A2DP_CHANNEL_MODE_STEREO:
433                 case BT_A2DP_CHANNEL_MODE_JOINT_STEREO:
434                     return 53;
435
436                 default:
437                     pa_log_warn("Invalid channel mode %u", mode);
438                     return 53;
439             }
440
441         case BT_SBC_SAMPLING_FREQ_48000:
442
443             switch (mode) {
444                 case BT_A2DP_CHANNEL_MODE_MONO:
445                 case BT_A2DP_CHANNEL_MODE_DUAL_CHANNEL:
446                     return 29;
447
448                 case BT_A2DP_CHANNEL_MODE_STEREO:
449                 case BT_A2DP_CHANNEL_MODE_JOINT_STEREO:
450                     return 51;
451
452                 default:
453                     pa_log_warn("Invalid channel mode %u", mode);
454                     return 51;
455             }
456
457         default:
458             pa_log_warn("Invalid sampling freq %u", freq);
459             return 53;
460     }
461 }
462
463 /* Run from main thread */
464 static int setup_a2dp(struct userdata *u) {
465     sbc_capabilities_t *cap;
466     int i;
467
468     static const struct {
469         uint32_t rate;
470         uint8_t cap;
471     } freq_table[] = {
472         { 16000U, BT_SBC_SAMPLING_FREQ_16000 },
473         { 32000U, BT_SBC_SAMPLING_FREQ_32000 },
474         { 44100U, BT_SBC_SAMPLING_FREQ_44100 },
475         { 48000U, BT_SBC_SAMPLING_FREQ_48000 }
476     };
477
478     pa_assert(u);
479     pa_assert(u->profile == PROFILE_A2DP || u->profile == PROFILE_A2DP_SOURCE);
480
481     cap = &u->a2dp.sbc_capabilities;
482
483     /* Find the lowest freq that is at least as high as the requested
484      * sampling rate */
485     for (i = 0; (unsigned) i < PA_ELEMENTSOF(freq_table); i++)
486         if (freq_table[i].rate >= u->sample_spec.rate && (cap->frequency & freq_table[i].cap)) {
487             u->sample_spec.rate = freq_table[i].rate;
488             cap->frequency = freq_table[i].cap;
489             break;
490         }
491
492     if ((unsigned) i == PA_ELEMENTSOF(freq_table)) {
493         for (--i; i >= 0; i--) {
494             if (cap->frequency & freq_table[i].cap) {
495                 u->sample_spec.rate = freq_table[i].rate;
496                 cap->frequency = freq_table[i].cap;
497                 break;
498             }
499         }
500
501         if (i < 0) {
502             pa_log("Not suitable sample rate");
503             return -1;
504         }
505     }
506
507     pa_assert((unsigned) i < PA_ELEMENTSOF(freq_table));
508
509     if (cap->capability.configured)
510         return 0;
511
512     if (u->sample_spec.channels <= 1) {
513         if (cap->channel_mode & BT_A2DP_CHANNEL_MODE_MONO) {
514             cap->channel_mode = BT_A2DP_CHANNEL_MODE_MONO;
515             u->sample_spec.channels = 1;
516         } else
517             u->sample_spec.channels = 2;
518     }
519
520     if (u->sample_spec.channels >= 2) {
521         u->sample_spec.channels = 2;
522
523         if (cap->channel_mode & BT_A2DP_CHANNEL_MODE_JOINT_STEREO)
524             cap->channel_mode = BT_A2DP_CHANNEL_MODE_JOINT_STEREO;
525         else if (cap->channel_mode & BT_A2DP_CHANNEL_MODE_STEREO)
526             cap->channel_mode = BT_A2DP_CHANNEL_MODE_STEREO;
527         else if (cap->channel_mode & BT_A2DP_CHANNEL_MODE_DUAL_CHANNEL)
528             cap->channel_mode = BT_A2DP_CHANNEL_MODE_DUAL_CHANNEL;
529         else if (cap->channel_mode & BT_A2DP_CHANNEL_MODE_MONO) {
530             cap->channel_mode = BT_A2DP_CHANNEL_MODE_MONO;
531             u->sample_spec.channels = 1;
532         } else {
533             pa_log("No supported channel modes");
534             return -1;
535         }
536     }
537
538     if (cap->block_length & BT_A2DP_BLOCK_LENGTH_16)
539         cap->block_length = BT_A2DP_BLOCK_LENGTH_16;
540     else if (cap->block_length & BT_A2DP_BLOCK_LENGTH_12)
541         cap->block_length = BT_A2DP_BLOCK_LENGTH_12;
542     else if (cap->block_length & BT_A2DP_BLOCK_LENGTH_8)
543         cap->block_length = BT_A2DP_BLOCK_LENGTH_8;
544     else if (cap->block_length & BT_A2DP_BLOCK_LENGTH_4)
545         cap->block_length = BT_A2DP_BLOCK_LENGTH_4;
546     else {
547         pa_log_error("No supported block lengths");
548         return -1;
549     }
550
551     if (cap->subbands & BT_A2DP_SUBBANDS_8)
552         cap->subbands = BT_A2DP_SUBBANDS_8;
553     else if (cap->subbands & BT_A2DP_SUBBANDS_4)
554         cap->subbands = BT_A2DP_SUBBANDS_4;
555     else {
556         pa_log_error("No supported subbands");
557         return -1;
558     }
559
560     if (cap->allocation_method & BT_A2DP_ALLOCATION_LOUDNESS)
561         cap->allocation_method = BT_A2DP_ALLOCATION_LOUDNESS;
562     else if (cap->allocation_method & BT_A2DP_ALLOCATION_SNR)
563         cap->allocation_method = BT_A2DP_ALLOCATION_SNR;
564
565     cap->min_bitpool = (uint8_t) PA_MAX(MIN_BITPOOL, cap->min_bitpool);
566     cap->max_bitpool = (uint8_t) PA_MIN(a2dp_default_bitpool(cap->frequency, cap->channel_mode), cap->max_bitpool);
567
568     return 0;
569 }
570
571 /* Run from main thread */
572 static void setup_sbc(struct a2dp_info *a2dp, enum profile p) {
573     sbc_capabilities_t *active_capabilities;
574
575     pa_assert(a2dp);
576
577     active_capabilities = &a2dp->sbc_capabilities;
578
579     if (a2dp->sbc_initialized)
580         sbc_reinit(&a2dp->sbc, 0);
581     else
582         sbc_init(&a2dp->sbc, 0);
583     a2dp->sbc_initialized = TRUE;
584
585     switch (active_capabilities->frequency) {
586         case BT_SBC_SAMPLING_FREQ_16000:
587             a2dp->sbc.frequency = SBC_FREQ_16000;
588             break;
589         case BT_SBC_SAMPLING_FREQ_32000:
590             a2dp->sbc.frequency = SBC_FREQ_32000;
591             break;
592         case BT_SBC_SAMPLING_FREQ_44100:
593             a2dp->sbc.frequency = SBC_FREQ_44100;
594             break;
595         case BT_SBC_SAMPLING_FREQ_48000:
596             a2dp->sbc.frequency = SBC_FREQ_48000;
597             break;
598         default:
599             pa_assert_not_reached();
600     }
601
602     switch (active_capabilities->channel_mode) {
603         case BT_A2DP_CHANNEL_MODE_MONO:
604             a2dp->sbc.mode = SBC_MODE_MONO;
605             break;
606         case BT_A2DP_CHANNEL_MODE_DUAL_CHANNEL:
607             a2dp->sbc.mode = SBC_MODE_DUAL_CHANNEL;
608             break;
609         case BT_A2DP_CHANNEL_MODE_STEREO:
610             a2dp->sbc.mode = SBC_MODE_STEREO;
611             break;
612         case BT_A2DP_CHANNEL_MODE_JOINT_STEREO:
613             a2dp->sbc.mode = SBC_MODE_JOINT_STEREO;
614             break;
615         default:
616             pa_assert_not_reached();
617     }
618
619     switch (active_capabilities->allocation_method) {
620         case BT_A2DP_ALLOCATION_SNR:
621             a2dp->sbc.allocation = SBC_AM_SNR;
622             break;
623         case BT_A2DP_ALLOCATION_LOUDNESS:
624             a2dp->sbc.allocation = SBC_AM_LOUDNESS;
625             break;
626         default:
627             pa_assert_not_reached();
628     }
629
630     switch (active_capabilities->subbands) {
631         case BT_A2DP_SUBBANDS_4:
632             a2dp->sbc.subbands = SBC_SB_4;
633             break;
634         case BT_A2DP_SUBBANDS_8:
635             a2dp->sbc.subbands = SBC_SB_8;
636             break;
637         default:
638             pa_assert_not_reached();
639     }
640
641     switch (active_capabilities->block_length) {
642         case BT_A2DP_BLOCK_LENGTH_4:
643             a2dp->sbc.blocks = SBC_BLK_4;
644             break;
645         case BT_A2DP_BLOCK_LENGTH_8:
646             a2dp->sbc.blocks = SBC_BLK_8;
647             break;
648         case BT_A2DP_BLOCK_LENGTH_12:
649             a2dp->sbc.blocks = SBC_BLK_12;
650             break;
651         case BT_A2DP_BLOCK_LENGTH_16:
652             a2dp->sbc.blocks = SBC_BLK_16;
653             break;
654         default:
655             pa_assert_not_reached();
656     }
657
658     a2dp->min_bitpool = active_capabilities->min_bitpool;
659     a2dp->max_bitpool = active_capabilities->max_bitpool;
660
661     /* Set minimum bitpool for source to get the maximum possible block_size */
662     a2dp->sbc.bitpool = p == PROFILE_A2DP ? a2dp->max_bitpool : a2dp->min_bitpool;
663     a2dp->codesize = sbc_get_codesize(&a2dp->sbc);
664     a2dp->frame_length = sbc_get_frame_length(&a2dp->sbc);
665 }
666
667 /* Run from main thread */
668 static int set_conf(struct userdata *u) {
669     union {
670         struct bt_open_req open_req;
671         struct bt_open_rsp open_rsp;
672         struct bt_set_configuration_req setconf_req;
673         struct bt_set_configuration_rsp setconf_rsp;
674         bt_audio_error_t error;
675         uint8_t buf[BT_SUGGESTED_BUFFER_SIZE];
676     } msg;
677
678     memset(&msg, 0, sizeof(msg));
679     msg.open_req.h.type = BT_REQUEST;
680     msg.open_req.h.name = BT_OPEN;
681     msg.open_req.h.length = sizeof(msg.open_req);
682
683     pa_strlcpy(msg.open_req.object, u->path, sizeof(msg.open_req.object));
684     msg.open_req.seid = (u->profile == PROFILE_A2DP || u->profile == PROFILE_A2DP_SOURCE) ? u->a2dp.sbc_capabilities.capability.seid : BT_A2DP_SEID_RANGE + 1;
685     msg.open_req.lock = (u->profile == PROFILE_A2DP) ? BT_WRITE_LOCK : BT_READ_LOCK | BT_WRITE_LOCK;
686
687     if (service_send(u, &msg.open_req.h) < 0)
688         return -1;
689
690     if (service_expect(u, &msg.open_rsp.h, sizeof(msg), BT_OPEN, sizeof(msg.open_rsp)) < 0)
691         return -1;
692
693     if (u->profile == PROFILE_A2DP || u->profile == PROFILE_A2DP_SOURCE) {
694         u->sample_spec.format = PA_SAMPLE_S16LE;
695
696         if (setup_a2dp(u) < 0)
697             return -1;
698     } else {
699         pa_assert(u->profile == PROFILE_HSP || u->profile == PROFILE_HFGW);
700
701         u->sample_spec.format = PA_SAMPLE_S16LE;
702         u->sample_spec.channels = 1;
703         u->sample_spec.rate = 8000;
704     }
705
706     memset(&msg, 0, sizeof(msg));
707     msg.setconf_req.h.type = BT_REQUEST;
708     msg.setconf_req.h.name = BT_SET_CONFIGURATION;
709     msg.setconf_req.h.length = sizeof(msg.setconf_req);
710
711     if (u->profile == PROFILE_A2DP || u->profile == PROFILE_A2DP_SOURCE) {
712         memcpy(&msg.setconf_req.codec, &u->a2dp.sbc_capabilities, sizeof(u->a2dp.sbc_capabilities));
713     } else {
714         msg.setconf_req.codec.transport = BT_CAPABILITIES_TRANSPORT_SCO;
715         msg.setconf_req.codec.seid = BT_A2DP_SEID_RANGE + 1;
716         msg.setconf_req.codec.length = sizeof(pcm_capabilities_t);
717     }
718     msg.setconf_req.h.length += msg.setconf_req.codec.length - sizeof(msg.setconf_req.codec);
719
720     if (service_send(u, &msg.setconf_req.h) < 0)
721         return -1;
722
723     if (service_expect(u, &msg.setconf_rsp.h, sizeof(msg), BT_SET_CONFIGURATION, sizeof(msg.setconf_rsp)) < 0)
724         return -1;
725
726     u->link_mtu = msg.setconf_rsp.link_mtu;
727
728     /* setup SBC encoder now we agree on parameters */
729     if (u->profile == PROFILE_A2DP || u->profile == PROFILE_A2DP_SOURCE) {
730         setup_sbc(&u->a2dp, u->profile);
731
732         u->block_size =
733             ((u->link_mtu - sizeof(struct rtp_header) - sizeof(struct rtp_payload))
734             / u->a2dp.frame_length
735             * u->a2dp.codesize);
736
737         pa_log_info("SBC parameters:\n\tallocation=%u\n\tsubbands=%u\n\tblocks=%u\n\tbitpool=%u\n",
738                     u->a2dp.sbc.allocation, u->a2dp.sbc.subbands, u->a2dp.sbc.blocks, u->a2dp.sbc.bitpool);
739     } else
740         u->block_size = u->link_mtu;
741
742     return 0;
743 }
744
745 /* from IO thread */
746 static void a2dp_set_bitpool(struct userdata *u, uint8_t bitpool)
747 {
748     struct a2dp_info *a2dp;
749
750     pa_assert(u);
751
752     a2dp = &u->a2dp;
753
754     if (a2dp->sbc.bitpool == bitpool)
755         return;
756
757     if (bitpool > a2dp->max_bitpool)
758         bitpool = a2dp->max_bitpool;
759     else if (bitpool < a2dp->min_bitpool)
760         bitpool = a2dp->min_bitpool;
761
762     a2dp->sbc.bitpool = bitpool;
763
764     a2dp->codesize = sbc_get_codesize(&a2dp->sbc);
765     a2dp->frame_length = sbc_get_frame_length(&a2dp->sbc);
766
767     pa_log_debug("Bitpool has changed to %u", a2dp->sbc.bitpool);
768
769     u->block_size =
770             (u->link_mtu - sizeof(struct rtp_header) - sizeof(struct rtp_payload))
771             / a2dp->frame_length * a2dp->codesize;
772
773     pa_sink_set_max_request_within_thread(u->sink, u->block_size);
774     pa_sink_set_fixed_latency_within_thread(u->sink,
775             FIXED_LATENCY_PLAYBACK_A2DP + pa_bytes_to_usec(u->block_size, &u->sample_spec));
776 }
777
778 /* from IO thread, except in SCO over PCM */
779
780 static int setup_stream(struct userdata *u) {
781     struct pollfd *pollfd;
782     int one;
783
784     pa_make_fd_nonblock(u->stream_fd);
785     pa_make_socket_low_delay(u->stream_fd);
786
787     one = 1;
788     if (setsockopt(u->stream_fd, SOL_SOCKET, SO_TIMESTAMP, &one, sizeof(one)) < 0)
789         pa_log_warn("Failed to enable SO_TIMESTAMP: %s", pa_cstrerror(errno));
790
791     pa_log_debug("Stream properly set up, we're ready to roll!");
792
793     if (u->profile == PROFILE_A2DP)
794         a2dp_set_bitpool(u, u->a2dp.max_bitpool);
795
796     u->rtpoll_item = pa_rtpoll_item_new(u->rtpoll, PA_RTPOLL_NEVER, 1);
797     pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL);
798     pollfd->fd = u->stream_fd;
799     pollfd->events = pollfd->revents = 0;
800
801     u->read_index = u->write_index = 0;
802     u->started_at = 0;
803
804     if (u->source)
805         u->read_smoother = pa_smoother_new(
806                 PA_USEC_PER_SEC,
807                 PA_USEC_PER_SEC*2,
808                 TRUE,
809                 TRUE,
810                 10,
811                 pa_rtclock_now(),
812                 TRUE);
813
814     return 0;
815 }
816
817 static int start_stream_fd(struct userdata *u) {
818     union {
819         bt_audio_msg_header_t rsp;
820         struct bt_start_stream_req start_req;
821         struct bt_start_stream_rsp start_rsp;
822         struct bt_new_stream_ind streamfd_ind;
823         bt_audio_error_t error;
824         uint8_t buf[BT_SUGGESTED_BUFFER_SIZE];
825     } msg;
826
827     pa_assert(u);
828     pa_assert(u->rtpoll);
829     pa_assert(!u->rtpoll_item);
830     pa_assert(u->stream_fd < 0);
831
832     memset(msg.buf, 0, BT_SUGGESTED_BUFFER_SIZE);
833     msg.start_req.h.type = BT_REQUEST;
834     msg.start_req.h.name = BT_START_STREAM;
835     msg.start_req.h.length = sizeof(msg.start_req);
836
837     if (service_send(u, &msg.start_req.h) < 0)
838         return -1;
839
840     if (service_expect(u, &msg.rsp, sizeof(msg), BT_START_STREAM, sizeof(msg.start_rsp)) < 0)
841         return -1;
842
843     if (service_expect(u, &msg.rsp, sizeof(msg), BT_NEW_STREAM, sizeof(msg.streamfd_ind)) < 0)
844         return -1;
845
846     if ((u->stream_fd = bt_audio_service_get_data_fd(u->service_fd)) < 0) {
847         pa_log("Failed to get stream fd from audio service.");
848         return -1;
849     }
850
851     return setup_stream(u);
852 }
853
854 /* from IO thread */
855 static int stop_stream_fd(struct userdata *u) {
856     union {
857         bt_audio_msg_header_t rsp;
858         struct bt_stop_stream_req start_req;
859         struct bt_stop_stream_rsp start_rsp;
860         bt_audio_error_t error;
861         uint8_t buf[BT_SUGGESTED_BUFFER_SIZE];
862     } msg;
863     int r = 0;
864
865     pa_assert(u);
866     pa_assert(u->rtpoll);
867
868     if (u->rtpoll_item) {
869         pa_rtpoll_item_free(u->rtpoll_item);
870         u->rtpoll_item = NULL;
871     }
872
873     if (u->stream_fd >= 0) {
874         memset(msg.buf, 0, BT_SUGGESTED_BUFFER_SIZE);
875         msg.start_req.h.type = BT_REQUEST;
876         msg.start_req.h.name = BT_STOP_STREAM;
877         msg.start_req.h.length = sizeof(msg.start_req);
878
879         if (service_send(u, &msg.start_req.h) < 0 ||
880             service_expect(u, &msg.rsp, sizeof(msg), BT_STOP_STREAM, sizeof(msg.start_rsp)) < 0)
881             r = -1;
882
883         pa_close(u->stream_fd);
884         u->stream_fd = -1;
885     }
886
887     if (u->read_smoother) {
888         pa_smoother_free(u->read_smoother);
889         u->read_smoother = NULL;
890     }
891
892     return r;
893 }
894
895 static void bt_transport_release(struct userdata *u) {
896     const char *accesstype = "rw";
897     const pa_bluetooth_transport *t;
898
899     /* Ignore if already released */
900     if (!u->accesstype)
901         return;
902
903     pa_log_debug("Releasing transport %s", u->transport);
904
905     t = pa_bluetooth_discovery_get_transport(u->discovery, u->transport);
906     if (t)
907         pa_bluetooth_transport_release(t, accesstype);
908
909     pa_xfree(u->accesstype);
910     u->accesstype = NULL;
911
912     if (u->rtpoll_item) {
913         pa_rtpoll_item_free(u->rtpoll_item);
914         u->rtpoll_item = NULL;
915     }
916
917     if (u->stream_fd >= 0) {
918         pa_close(u->stream_fd);
919         u->stream_fd = -1;
920     }
921
922     if (u->read_smoother) {
923         pa_smoother_free(u->read_smoother);
924         u->read_smoother = NULL;
925     }
926 }
927
928 static int bt_transport_acquire(struct userdata *u, pa_bool_t start) {
929     const char *accesstype = "rw";
930     const pa_bluetooth_transport *t;
931
932     if (u->accesstype) {
933         if (start)
934             goto done;
935         return 0;
936     }
937
938     pa_log_debug("Acquiring transport %s", u->transport);
939
940     t = pa_bluetooth_discovery_get_transport(u->discovery, u->transport);
941     if (!t) {
942         pa_log("Transport %s no longer available", u->transport);
943         pa_xfree(u->transport);
944         u->transport = NULL;
945         return -1;
946     }
947
948     /* FIXME: Handle in/out MTU properly when unix socket is not longer supported */
949     u->stream_fd = pa_bluetooth_transport_acquire(t, accesstype, NULL, &u->link_mtu);
950     if (u->stream_fd < 0)
951         return -1;
952
953     u->accesstype = pa_xstrdup(accesstype);
954     pa_log_info("Transport %s acquired: fd %d", u->transport, u->stream_fd);
955
956     if (!start)
957         return 0;
958
959 done:
960     pa_log_info("Transport %s resuming", u->transport);
961     return setup_stream(u);
962 }
963
964 /* Run from IO thread */
965 static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
966     struct userdata *u = PA_SINK(o)->userdata;
967     pa_bool_t failed = FALSE;
968     int r;
969
970     pa_assert(u->sink == PA_SINK(o));
971
972     switch (code) {
973
974         case PA_SINK_MESSAGE_SET_STATE:
975
976             switch ((pa_sink_state_t) PA_PTR_TO_UINT(data)) {
977
978                 case PA_SINK_SUSPENDED:
979                     pa_assert(PA_SINK_IS_OPENED(u->sink->thread_info.state));
980
981                     /* Stop the device if the source is suspended as well */
982                     if (!u->source || u->source->state == PA_SOURCE_SUSPENDED) {
983                         /* We deliberately ignore whether stopping
984                          * actually worked. Since the stream_fd is
985                          * closed it doesn't really matter */
986                         if (u->transport)
987                             bt_transport_release(u);
988                         else
989                             stop_stream_fd(u);
990                     }
991
992                     break;
993
994                 case PA_SINK_IDLE:
995                 case PA_SINK_RUNNING:
996                     if (u->sink->thread_info.state != PA_SINK_SUSPENDED)
997                         break;
998
999                     /* Resume the device if the source was suspended as well */
1000                     if (!u->source || u->source->state == PA_SOURCE_SUSPENDED) {
1001                         if (u->transport) {
1002                             if (bt_transport_acquire(u, TRUE) < 0)
1003                                 failed = TRUE;
1004                         } else if (start_stream_fd(u) < 0)
1005                             failed = TRUE;
1006                     }
1007                     break;
1008
1009                 case PA_SINK_UNLINKED:
1010                 case PA_SINK_INIT:
1011                 case PA_SINK_INVALID_STATE:
1012                     ;
1013             }
1014             break;
1015
1016         case PA_SINK_MESSAGE_GET_LATENCY: {
1017
1018             if (u->read_smoother) {
1019                 pa_usec_t wi, ri;
1020
1021                 ri = pa_smoother_get(u->read_smoother, pa_rtclock_now());
1022                 wi = pa_bytes_to_usec(u->write_index + u->block_size, &u->sample_spec);
1023
1024                 *((pa_usec_t*) data) = wi > ri ? wi - ri : 0;
1025             } else {
1026                 pa_usec_t ri, wi;
1027
1028                 ri = pa_rtclock_now() - u->started_at;
1029                 wi = pa_bytes_to_usec(u->write_index, &u->sample_spec);
1030
1031                 *((pa_usec_t*) data) = wi > ri ? wi - ri : 0;
1032             }
1033
1034             *((pa_usec_t*) data) += u->sink->thread_info.fixed_latency;
1035             return 0;
1036         }
1037     }
1038
1039     r = pa_sink_process_msg(o, code, data, offset, chunk);
1040
1041     return (r < 0 || !failed) ? r : -1;
1042 }
1043
1044 /* Run from IO thread */
1045 static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
1046     struct userdata *u = PA_SOURCE(o)->userdata;
1047     pa_bool_t failed = FALSE;
1048     int r;
1049
1050     pa_assert(u->source == PA_SOURCE(o));
1051
1052     switch (code) {
1053
1054         case PA_SOURCE_MESSAGE_SET_STATE:
1055
1056             switch ((pa_source_state_t) PA_PTR_TO_UINT(data)) {
1057
1058                 case PA_SOURCE_SUSPENDED:
1059                     pa_assert(PA_SOURCE_IS_OPENED(u->source->thread_info.state));
1060
1061                     /* Stop the device if the sink is suspended as well */
1062                     if (!u->sink || u->sink->state == PA_SINK_SUSPENDED) {
1063                         if (u->transport)
1064                             bt_transport_release(u);
1065                         else
1066                             stop_stream_fd(u);
1067                     }
1068
1069                     if (u->read_smoother)
1070                         pa_smoother_pause(u->read_smoother, pa_rtclock_now());
1071                     break;
1072
1073                 case PA_SOURCE_IDLE:
1074                 case PA_SOURCE_RUNNING:
1075                     if (u->source->thread_info.state != PA_SOURCE_SUSPENDED)
1076                         break;
1077
1078                     /* Resume the device if the sink was suspended as well */
1079                     if (!u->sink || u->sink->thread_info.state == PA_SINK_SUSPENDED) {
1080                         if (u->transport) {
1081                             if (bt_transport_acquire(u, TRUE) < 0)
1082                             failed = TRUE;
1083                         } else if (start_stream_fd(u) < 0)
1084                             failed = TRUE;
1085                     }
1086                     /* We don't resume the smoother here. Instead we
1087                      * wait until the first packet arrives */
1088                     break;
1089
1090                 case PA_SOURCE_UNLINKED:
1091                 case PA_SOURCE_INIT:
1092                 case PA_SOURCE_INVALID_STATE:
1093                     ;
1094             }
1095             break;
1096
1097         case PA_SOURCE_MESSAGE_GET_LATENCY: {
1098             pa_usec_t wi, ri;
1099
1100             if (u->read_smoother) {
1101                 wi = pa_smoother_get(u->read_smoother, pa_rtclock_now());
1102                 ri = pa_bytes_to_usec(u->read_index, &u->sample_spec);
1103
1104                 *((pa_usec_t*) data) = (wi > ri ? wi - ri : 0) + u->source->thread_info.fixed_latency;
1105             } else
1106                 *((pa_usec_t*) data) = 0;
1107
1108             return 0;
1109         }
1110
1111     }
1112
1113     r = pa_source_process_msg(o, code, data, offset, chunk);
1114
1115     return (r < 0 || !failed) ? r : -1;
1116 }
1117
1118 /* Run from IO thread */
1119 static int hsp_process_render(struct userdata *u) {
1120     int ret = 0;
1121
1122     pa_assert(u);
1123     pa_assert(u->profile == PROFILE_HSP || u->profile == PROFILE_HFGW);
1124     pa_assert(u->sink);
1125
1126     /* First, render some data */
1127     if (!u->write_memchunk.memblock)
1128         pa_sink_render_full(u->sink, u->block_size, &u->write_memchunk);
1129
1130     pa_assert(u->write_memchunk.length == u->block_size);
1131
1132     for (;;) {
1133         ssize_t l;
1134         const void *p;
1135
1136         /* Now write that data to the socket. The socket is of type
1137          * SEQPACKET, and we generated the data of the MTU size, so this
1138          * should just work. */
1139
1140         p = (const uint8_t*) pa_memblock_acquire(u->write_memchunk.memblock) + u->write_memchunk.index;
1141         l = pa_write(u->stream_fd, p, u->write_memchunk.length, &u->stream_write_type);
1142         pa_memblock_release(u->write_memchunk.memblock);
1143
1144         pa_assert(l != 0);
1145
1146         if (l < 0) {
1147
1148             if (errno == EINTR)
1149                 /* Retry right away if we got interrupted */
1150                 continue;
1151
1152             else if (errno == EAGAIN)
1153                 /* Hmm, apparently the socket was not writable, give up for now */
1154                 break;
1155
1156             pa_log_error("Failed to write data to SCO socket: %s", pa_cstrerror(errno));
1157             ret = -1;
1158             break;
1159         }
1160
1161         pa_assert((size_t) l <= u->write_memchunk.length);
1162
1163         if ((size_t) l != u->write_memchunk.length) {
1164             pa_log_error("Wrote memory block to socket only partially! %llu written, wanted to write %llu.",
1165                         (unsigned long long) l,
1166                         (unsigned long long) u->write_memchunk.length);
1167             ret = -1;
1168             break;
1169         }
1170
1171         u->write_index += (uint64_t) u->write_memchunk.length;
1172         pa_memblock_unref(u->write_memchunk.memblock);
1173         pa_memchunk_reset(&u->write_memchunk);
1174
1175         ret = 1;
1176         break;
1177     }
1178
1179     return ret;
1180 }
1181
1182 /* Run from IO thread */
1183 static int hsp_process_push(struct userdata *u) {
1184     int ret = 0;
1185     pa_memchunk memchunk;
1186
1187     pa_assert(u);
1188     pa_assert(u->profile == PROFILE_HSP || u->profile == PROFILE_HFGW);
1189     pa_assert(u->source);
1190     pa_assert(u->read_smoother);
1191
1192     memchunk.memblock = pa_memblock_new(u->core->mempool, u->block_size);
1193     memchunk.index = memchunk.length = 0;
1194
1195     for (;;) {
1196         ssize_t l;
1197         void *p;
1198         struct msghdr m;
1199         struct cmsghdr *cm;
1200         uint8_t aux[1024];
1201         struct iovec iov;
1202         pa_bool_t found_tstamp = FALSE;
1203         pa_usec_t tstamp;
1204
1205         memset(&m, 0, sizeof(m));
1206         memset(&aux, 0, sizeof(aux));
1207         memset(&iov, 0, sizeof(iov));
1208
1209         m.msg_iov = &iov;
1210         m.msg_iovlen = 1;
1211         m.msg_control = aux;
1212         m.msg_controllen = sizeof(aux);
1213
1214         p = pa_memblock_acquire(memchunk.memblock);
1215         iov.iov_base = p;
1216         iov.iov_len = pa_memblock_get_length(memchunk.memblock);
1217         l = recvmsg(u->stream_fd, &m, 0);
1218         pa_memblock_release(memchunk.memblock);
1219
1220         if (l <= 0) {
1221
1222             if (l < 0 && errno == EINTR)
1223                 /* Retry right away if we got interrupted */
1224                 continue;
1225
1226             else if (l < 0 && errno == EAGAIN)
1227                 /* Hmm, apparently the socket was not readable, give up for now. */
1228                 break;
1229
1230             pa_log_error("Failed to read data from SCO socket: %s", l < 0 ? pa_cstrerror(errno) : "EOF");
1231             ret = -1;
1232             break;
1233         }
1234
1235         pa_assert((size_t) l <= pa_memblock_get_length(memchunk.memblock));
1236
1237         memchunk.length = (size_t) l;
1238         u->read_index += (uint64_t) l;
1239
1240         for (cm = CMSG_FIRSTHDR(&m); cm; cm = CMSG_NXTHDR(&m, cm))
1241             if (cm->cmsg_level == SOL_SOCKET && cm->cmsg_type == SO_TIMESTAMP) {
1242                 struct timeval *tv = (struct timeval*) CMSG_DATA(cm);
1243                 pa_rtclock_from_wallclock(tv);
1244                 tstamp = pa_timeval_load(tv);
1245                 found_tstamp = TRUE;
1246                 break;
1247             }
1248
1249         if (!found_tstamp) {
1250             pa_log_warn("Couldn't find SO_TIMESTAMP data in auxiliary recvmsg() data!");
1251             tstamp = pa_rtclock_now();
1252         }
1253
1254         pa_smoother_put(u->read_smoother, tstamp, pa_bytes_to_usec(u->read_index, &u->sample_spec));
1255         pa_smoother_resume(u->read_smoother, tstamp, TRUE);
1256
1257         pa_source_post(u->source, &memchunk);
1258
1259         ret = 1;
1260         break;
1261     }
1262
1263     pa_memblock_unref(memchunk.memblock);
1264
1265     return ret;
1266 }
1267
1268 /* Run from IO thread */
1269 static void a2dp_prepare_buffer(struct userdata *u) {
1270     pa_assert(u);
1271
1272     if (u->a2dp.buffer_size >= u->link_mtu)
1273         return;
1274
1275     u->a2dp.buffer_size = 2 * u->link_mtu;
1276     pa_xfree(u->a2dp.buffer);
1277     u->a2dp.buffer = pa_xmalloc(u->a2dp.buffer_size);
1278 }
1279
1280 /* Run from IO thread */
1281 static int a2dp_process_render(struct userdata *u) {
1282     struct a2dp_info *a2dp;
1283     struct rtp_header *header;
1284     struct rtp_payload *payload;
1285     size_t nbytes;
1286     void *d;
1287     const void *p;
1288     size_t to_write, to_encode;
1289     unsigned frame_count;
1290     int ret = 0;
1291
1292     pa_assert(u);
1293     pa_assert(u->profile == PROFILE_A2DP);
1294     pa_assert(u->sink);
1295
1296     /* First, render some data */
1297     if (!u->write_memchunk.memblock)
1298         pa_sink_render_full(u->sink, u->block_size, &u->write_memchunk);
1299
1300     pa_assert(u->write_memchunk.length == u->block_size);
1301
1302     a2dp_prepare_buffer(u);
1303
1304     a2dp = &u->a2dp;
1305     header = a2dp->buffer;
1306     payload = (struct rtp_payload*) ((uint8_t*) a2dp->buffer + sizeof(*header));
1307
1308     frame_count = 0;
1309
1310     /* Try to create a packet of the full MTU */
1311
1312     p = (const uint8_t*) pa_memblock_acquire(u->write_memchunk.memblock) + u->write_memchunk.index;
1313     to_encode = u->write_memchunk.length;
1314
1315     d = (uint8_t*) a2dp->buffer + sizeof(*header) + sizeof(*payload);
1316     to_write = a2dp->buffer_size - sizeof(*header) - sizeof(*payload);
1317
1318     while (PA_LIKELY(to_encode > 0 && to_write > 0)) {
1319         ssize_t written;
1320         ssize_t encoded;
1321
1322         encoded = sbc_encode(&a2dp->sbc,
1323                              p, to_encode,
1324                              d, to_write,
1325                              &written);
1326
1327         if (PA_UNLIKELY(encoded <= 0)) {
1328             pa_log_error("SBC encoding error (%li)", (long) encoded);
1329             pa_memblock_release(u->write_memchunk.memblock);
1330             return -1;
1331         }
1332
1333 /*         pa_log_debug("SBC: encoded: %lu; written: %lu", (unsigned long) encoded, (unsigned long) written); */
1334 /*         pa_log_debug("SBC: codesize: %lu; frame_length: %lu", (unsigned long) a2dp->codesize, (unsigned long) a2dp->frame_length); */
1335
1336         pa_assert_fp((size_t) encoded <= to_encode);
1337         pa_assert_fp((size_t) encoded == a2dp->codesize);
1338
1339         pa_assert_fp((size_t) written <= to_write);
1340         pa_assert_fp((size_t) written == a2dp->frame_length);
1341
1342         p = (const uint8_t*) p + encoded;
1343         to_encode -= encoded;
1344
1345         d = (uint8_t*) d + written;
1346         to_write -= written;
1347
1348         frame_count++;
1349     }
1350
1351     pa_memblock_release(u->write_memchunk.memblock);
1352
1353     pa_assert(to_encode == 0);
1354
1355     PA_ONCE_BEGIN {
1356         pa_log_debug("Using SBC encoder implementation: %s", pa_strnull(sbc_get_implementation_info(&a2dp->sbc)));
1357     } PA_ONCE_END;
1358
1359     /* write it to the fifo */
1360     memset(a2dp->buffer, 0, sizeof(*header) + sizeof(*payload));
1361     header->v = 2;
1362     header->pt = 1;
1363     header->sequence_number = htons(a2dp->seq_num++);
1364     header->timestamp = htonl(u->write_index / pa_frame_size(&u->sample_spec));
1365     header->ssrc = htonl(1);
1366     payload->frame_count = frame_count;
1367
1368     nbytes = (uint8_t*) d - (uint8_t*) a2dp->buffer;
1369
1370     for (;;) {
1371         ssize_t l;
1372
1373         l = pa_write(u->stream_fd, a2dp->buffer, nbytes, &u->stream_write_type);
1374
1375         pa_assert(l != 0);
1376
1377         if (l < 0) {
1378
1379             if (errno == EINTR)
1380                 /* Retry right away if we got interrupted */
1381                 continue;
1382
1383             else if (errno == EAGAIN)
1384                 /* Hmm, apparently the socket was not writable, give up for now */
1385                 break;
1386
1387             pa_log_error("Failed to write data to socket: %s", pa_cstrerror(errno));
1388             ret = -1;
1389             break;
1390         }
1391
1392         pa_assert((size_t) l <= nbytes);
1393
1394         if ((size_t) l != nbytes) {
1395             pa_log_warn("Wrote memory block to socket only partially! %llu written, wanted to write %llu.",
1396                         (unsigned long long) l,
1397                         (unsigned long long) nbytes);
1398             ret = -1;
1399             break;
1400         }
1401
1402         u->write_index += (uint64_t) u->write_memchunk.length;
1403         pa_memblock_unref(u->write_memchunk.memblock);
1404         pa_memchunk_reset(&u->write_memchunk);
1405
1406         ret = 1;
1407
1408         break;
1409     }
1410
1411     return ret;
1412 }
1413
1414 static int a2dp_process_push(struct userdata *u) {
1415     int ret = 0;
1416     pa_memchunk memchunk;
1417
1418     pa_assert(u);
1419     pa_assert(u->profile == PROFILE_A2DP_SOURCE);
1420     pa_assert(u->source);
1421     pa_assert(u->read_smoother);
1422
1423     memchunk.memblock = pa_memblock_new(u->core->mempool, u->block_size);
1424     memchunk.index = memchunk.length = 0;
1425
1426     for (;;) {
1427         pa_bool_t found_tstamp = FALSE;
1428         pa_usec_t tstamp;
1429         struct a2dp_info *a2dp;
1430         struct rtp_header *header;
1431         struct rtp_payload *payload;
1432         const void *p;
1433         void *d;
1434         ssize_t l;
1435         size_t to_write, to_decode;
1436         unsigned frame_count;
1437
1438         a2dp_prepare_buffer(u);
1439
1440         a2dp = &u->a2dp;
1441         header = a2dp->buffer;
1442         payload = (struct rtp_payload*) ((uint8_t*) a2dp->buffer + sizeof(*header));
1443
1444         l = pa_read(u->stream_fd, a2dp->buffer, a2dp->buffer_size, &u->stream_write_type);
1445
1446         if (l <= 0) {
1447
1448             if (l < 0 && errno == EINTR)
1449                 /* Retry right away if we got interrupted */
1450                 continue;
1451
1452             else if (l < 0 && errno == EAGAIN)
1453                 /* Hmm, apparently the socket was not readable, give up for now. */
1454                 break;
1455
1456             pa_log_error("Failed to read data from socket: %s", l < 0 ? pa_cstrerror(errno) : "EOF");
1457             ret = -1;
1458             break;
1459         }
1460
1461         pa_assert((size_t) l <= a2dp->buffer_size);
1462
1463         u->read_index += (uint64_t) l;
1464
1465         /* TODO: get timestamp from rtp */
1466         if (!found_tstamp) {
1467             /* pa_log_warn("Couldn't find SO_TIMESTAMP data in auxiliary recvmsg() data!"); */
1468             tstamp = pa_rtclock_now();
1469         }
1470
1471         pa_smoother_put(u->read_smoother, tstamp, pa_bytes_to_usec(u->read_index, &u->sample_spec));
1472         pa_smoother_resume(u->read_smoother, tstamp, TRUE);
1473
1474         p = (uint8_t*) a2dp->buffer + sizeof(*header) + sizeof(*payload);
1475         to_decode = l - sizeof(*header) - sizeof(*payload);
1476
1477         d = pa_memblock_acquire(memchunk.memblock);
1478         to_write = memchunk.length = pa_memblock_get_length(memchunk.memblock);
1479
1480         while (PA_LIKELY(to_decode > 0)) {
1481             size_t written;
1482             ssize_t decoded;
1483
1484             decoded = sbc_decode(&a2dp->sbc,
1485                                  p, to_decode,
1486                                  d, to_write,
1487                                  &written);
1488
1489             if (PA_UNLIKELY(decoded <= 0)) {
1490                 pa_log_error("SBC decoding error (%li)", (long) decoded);
1491                 pa_memblock_release(memchunk.memblock);
1492                 pa_memblock_unref(memchunk.memblock);
1493                 return -1;
1494             }
1495
1496 /*             pa_log_debug("SBC: decoded: %lu; written: %lu", (unsigned long) decoded, (unsigned long) written); */
1497 /*             pa_log_debug("SBC: frame_length: %lu; codesize: %lu", (unsigned long) a2dp->frame_length, (unsigned long) a2dp->codesize); */
1498
1499             /* Reset frame length, it can be changed due to bitpool change */
1500             a2dp->frame_length = sbc_get_frame_length(&a2dp->sbc);
1501
1502             pa_assert_fp((size_t) decoded <= to_decode);
1503             pa_assert_fp((size_t) decoded == a2dp->frame_length);
1504
1505             pa_assert_fp((size_t) written == a2dp->codesize);
1506
1507             p = (const uint8_t*) p + decoded;
1508             to_decode -= decoded;
1509
1510             d = (uint8_t*) d + written;
1511             to_write -= written;
1512
1513             frame_count++;
1514         }
1515
1516         memchunk.length -= to_write;
1517
1518         pa_memblock_release(memchunk.memblock);
1519
1520         pa_source_post(u->source, &memchunk);
1521
1522         ret = 1;
1523         break;
1524     }
1525
1526     pa_memblock_unref(memchunk.memblock);
1527
1528     return ret;
1529 }
1530
1531 static void a2dp_reduce_bitpool(struct userdata *u)
1532 {
1533     struct a2dp_info *a2dp;
1534     uint8_t bitpool;
1535
1536     pa_assert(u);
1537
1538     a2dp = &u->a2dp;
1539
1540     /* Check if bitpool is already at its limit */
1541     if (a2dp->sbc.bitpool <= BITPOOL_DEC_LIMIT)
1542         return;
1543
1544     bitpool = a2dp->sbc.bitpool - BITPOOL_DEC_STEP;
1545
1546     if (bitpool < BITPOOL_DEC_LIMIT)
1547         bitpool = BITPOOL_DEC_LIMIT;
1548
1549     a2dp_set_bitpool(u, bitpool);
1550 }
1551
1552 static void thread_func(void *userdata) {
1553     struct userdata *u = userdata;
1554     unsigned do_write = 0;
1555     pa_bool_t writable = FALSE;
1556
1557     pa_assert(u);
1558
1559     pa_log_debug("IO Thread starting up");
1560
1561     if (u->core->realtime_scheduling)
1562         pa_make_realtime(u->core->realtime_priority);
1563
1564     pa_thread_mq_install(&u->thread_mq);
1565
1566     if (u->transport) {
1567         if (bt_transport_acquire(u, TRUE) < 0)
1568             goto fail;
1569     } else if (start_stream_fd(u) < 0)
1570         goto fail;
1571
1572     for (;;) {
1573         struct pollfd *pollfd;
1574         int ret;
1575         pa_bool_t disable_timer = TRUE;
1576
1577         pollfd = u->rtpoll_item ? pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL) : NULL;
1578
1579         if (u->source && PA_SOURCE_IS_LINKED(u->source->thread_info.state)) {
1580
1581             /* We should send two blocks to the device before we expect
1582              * a response. */
1583
1584             if (u->write_index == 0 && u->read_index <= 0)
1585                 do_write = 2;
1586
1587             if (pollfd && (pollfd->revents & POLLIN)) {
1588                 int n_read;
1589
1590                 if (u->profile == PROFILE_HSP || u->profile == PROFILE_HFGW)
1591                     n_read = hsp_process_push(u);
1592                 else
1593                     n_read = a2dp_process_push(u);
1594
1595                 if (n_read < 0)
1596                     goto fail;
1597
1598                 /* We just read something, so we are supposed to write something, too */
1599                 do_write += n_read;
1600             }
1601         }
1602
1603         if (u->sink && PA_SINK_IS_LINKED(u->sink->thread_info.state)) {
1604
1605             if (u->sink->thread_info.rewind_requested)
1606                 pa_sink_process_rewind(u->sink, 0);
1607
1608             if (pollfd) {
1609                 if (pollfd->revents & POLLOUT)
1610                     writable = TRUE;
1611
1612                 if ((!u->source || !PA_SOURCE_IS_LINKED(u->source->thread_info.state)) && do_write <= 0 && writable) {
1613                     pa_usec_t time_passed;
1614                     pa_usec_t audio_sent;
1615
1616                     /* Hmm, there is no input stream we could synchronize
1617                      * to. So let's do things by time */
1618
1619                     time_passed = pa_rtclock_now() - u->started_at;
1620                     audio_sent = pa_bytes_to_usec(u->write_index, &u->sample_spec);
1621
1622                     if (audio_sent <= time_passed) {
1623                         pa_usec_t audio_to_send = time_passed - audio_sent;
1624
1625                         /* Never try to catch up for more than 100ms */
1626                         if (u->write_index > 0 && audio_to_send > MAX_PLAYBACK_CATCH_UP_USEC) {
1627                             pa_usec_t skip_usec;
1628                             uint64_t skip_bytes;
1629
1630                             skip_usec = audio_to_send - MAX_PLAYBACK_CATCH_UP_USEC;
1631                             skip_bytes = pa_usec_to_bytes(skip_usec, &u->sample_spec);
1632
1633                             if (skip_bytes > 0) {
1634                                 pa_memchunk tmp;
1635
1636                                 pa_log_warn("Skipping %llu us (= %llu bytes) in audio stream",
1637                                             (unsigned long long) skip_usec,
1638                                             (unsigned long long) skip_bytes);
1639
1640                                 pa_sink_render_full(u->sink, skip_bytes, &tmp);
1641                                 pa_memblock_unref(tmp.memblock);
1642                                 u->write_index += skip_bytes;
1643
1644                                 if (u->profile == PROFILE_A2DP)
1645                                     a2dp_reduce_bitpool(u);
1646                             }
1647                         }
1648
1649                         do_write = 1;
1650                     }
1651                 }
1652
1653                 if (writable && do_write > 0) {
1654                     int n_written;
1655
1656                     if (u->write_index <= 0)
1657                         u->started_at = pa_rtclock_now();
1658
1659                     if (u->profile == PROFILE_A2DP) {
1660                         if ((n_written = a2dp_process_render(u)) < 0)
1661                             goto fail;
1662                     } else {
1663                         if ((n_written = hsp_process_render(u)) < 0)
1664                             goto fail;
1665                     }
1666
1667                     if (n_written == 0)
1668                         pa_log("Broken kernel: we got EAGAIN on write() after POLLOUT!");
1669
1670                     do_write -= n_written;
1671                     writable = FALSE;
1672                 }
1673
1674                 if ((!u->source || !PA_SOURCE_IS_LINKED(u->source->thread_info.state)) && do_write <= 0 && writable) {
1675                     pa_usec_t time_passed, next_write_at, sleep_for;
1676
1677                     /* Hmm, there is no input stream we could synchronize
1678                      * to. So let's estimate when we need to wake up the latest */
1679
1680                     time_passed = pa_rtclock_now() - u->started_at;
1681                     next_write_at = pa_bytes_to_usec(u->write_index, &u->sample_spec);
1682                     sleep_for = time_passed < next_write_at ? next_write_at - time_passed : 0;
1683
1684 /*                 pa_log("Sleeping for %lu; time passed %lu, next write at %lu", (unsigned long) sleep_for, (unsigned long) time_passed, (unsigned long)next_write_at); */
1685
1686                     pa_rtpoll_set_timer_relative(u->rtpoll, sleep_for);
1687                     disable_timer = FALSE;
1688                 }
1689             }
1690         }
1691
1692         if (disable_timer)
1693             pa_rtpoll_set_timer_disabled(u->rtpoll);
1694
1695         /* Hmm, nothing to do. Let's sleep */
1696         if (pollfd)
1697             pollfd->events = (short) (((u->sink && PA_SINK_IS_LINKED(u->sink->thread_info.state) && !writable) ? POLLOUT : 0) |
1698                                       (u->source && PA_SOURCE_IS_LINKED(u->source->thread_info.state) ? POLLIN : 0));
1699
1700         if ((ret = pa_rtpoll_run(u->rtpoll, TRUE)) < 0)
1701             goto fail;
1702
1703         if (ret == 0)
1704             goto finish;
1705
1706         pollfd = u->rtpoll_item ? pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL) : NULL;
1707
1708         if (pollfd && (pollfd->revents & ~(POLLOUT|POLLIN))) {
1709             pa_log_info("FD error: %s%s%s%s",
1710                         pollfd->revents & POLLERR ? "POLLERR " :"",
1711                         pollfd->revents & POLLHUP ? "POLLHUP " :"",
1712                         pollfd->revents & POLLPRI ? "POLLPRI " :"",
1713                         pollfd->revents & POLLNVAL ? "POLLNVAL " :"");
1714             goto fail;
1715         }
1716     }
1717
1718 fail:
1719     /* If this was no regular exit from the loop we have to continue processing messages until we receive PA_MESSAGE_SHUTDOWN */
1720     pa_log_debug("IO thread failed");
1721     pa_asyncmsgq_post(u->thread_mq.outq, PA_MSGOBJECT(u->core), PA_CORE_MESSAGE_UNLOAD_MODULE, u->module, 0, NULL, NULL);
1722     pa_asyncmsgq_wait_for(u->thread_mq.inq, PA_MESSAGE_SHUTDOWN);
1723
1724 finish:
1725     pa_log_debug("IO thread shutting down");
1726 }
1727
1728 /* Run from main thread */
1729 static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *userdata) {
1730     DBusError err;
1731     struct userdata *u;
1732
1733     pa_assert(bus);
1734     pa_assert(m);
1735     pa_assert_se(u = userdata);
1736
1737     dbus_error_init(&err);
1738
1739     pa_log_debug("dbus: interface=%s, path=%s, member=%s\n",
1740                  dbus_message_get_interface(m),
1741                  dbus_message_get_path(m),
1742                  dbus_message_get_member(m));
1743
1744     if (!dbus_message_has_path(m, u->path) && !dbus_message_has_path(m, u->transport))
1745         goto fail;
1746
1747     if (dbus_message_is_signal(m, "org.bluez.Headset", "SpeakerGainChanged") ||
1748         dbus_message_is_signal(m, "org.bluez.Headset", "MicrophoneGainChanged")) {
1749
1750         dbus_uint16_t gain;
1751         pa_cvolume v;
1752
1753         if (!dbus_message_get_args(m, &err, DBUS_TYPE_UINT16, &gain, DBUS_TYPE_INVALID) || gain > 15) {
1754             pa_log("Failed to parse org.bluez.Headset.{Speaker|Microphone}GainChanged: %s", err.message);
1755             goto fail;
1756         }
1757
1758         if (u->profile == PROFILE_HSP) {
1759             if (u->sink && dbus_message_is_signal(m, "org.bluez.Headset", "SpeakerGainChanged")) {
1760
1761                 pa_cvolume_set(&v, u->sample_spec.channels, (pa_volume_t) (gain * PA_VOLUME_NORM / 15));
1762                 pa_sink_volume_changed(u->sink, &v);
1763
1764             } else if (u->source && dbus_message_is_signal(m, "org.bluez.Headset", "MicrophoneGainChanged")) {
1765
1766                 pa_cvolume_set(&v, u->sample_spec.channels, (pa_volume_t) (gain * PA_VOLUME_NORM / 15));
1767                 pa_source_volume_changed(u->source, &v);
1768             }
1769         }
1770     } else if (dbus_message_is_signal(m, "org.bluez.MediaTransport", "PropertyChanged")) {
1771         DBusMessageIter arg_i;
1772         pa_bluetooth_transport *t;
1773         pa_bool_t nrec;
1774
1775         t = (pa_bluetooth_transport *) pa_bluetooth_discovery_get_transport(u->discovery, u->transport);
1776         pa_assert(t);
1777
1778         if (!dbus_message_iter_init(m, &arg_i)) {
1779             pa_log("Failed to parse PropertyChanged: %s", err.message);
1780             goto fail;
1781         }
1782
1783         nrec = t->nrec;
1784
1785         if (pa_bluetooth_transport_parse_property(t, &arg_i) < 0)
1786             goto fail;
1787
1788         if (nrec != t->nrec) {
1789             pa_log_debug("dbus: property 'NREC' changed to value '%s'", t->nrec ? "True" : "False");
1790             pa_proplist_sets(u->source->proplist, "bluetooth.nrec", t->nrec ? "1" : "0");
1791         }
1792     }
1793
1794 fail:
1795     dbus_error_free(&err);
1796
1797     return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
1798 }
1799
1800 /* Run from main thread */
1801 static void sink_set_volume_cb(pa_sink *s) {
1802     DBusMessage *m;
1803     dbus_uint16_t gain;
1804     struct userdata *u;
1805     char *k;
1806
1807     pa_assert(s);
1808     pa_assert(s->core);
1809
1810     k = pa_sprintf_malloc("bluetooth-device@%p", (void*) s);
1811     u = pa_shared_get(s->core, k);
1812     pa_xfree(k);
1813
1814     pa_assert(u);
1815     pa_assert(u->sink == s);
1816     pa_assert(u->profile == PROFILE_HSP);
1817
1818     gain = (pa_cvolume_max(&s->real_volume) * 15) / PA_VOLUME_NORM;
1819
1820     if (gain > 15)
1821         gain = 15;
1822
1823     pa_cvolume_set(&s->real_volume, u->sample_spec.channels, (pa_volume_t) (gain * PA_VOLUME_NORM / 15));
1824
1825     pa_assert_se(m = dbus_message_new_method_call("org.bluez", u->path, "org.bluez.Headset", "SetSpeakerGain"));
1826     pa_assert_se(dbus_message_append_args(m, DBUS_TYPE_UINT16, &gain, DBUS_TYPE_INVALID));
1827     pa_assert_se(dbus_connection_send(pa_dbus_connection_get(u->connection), m, NULL));
1828     dbus_message_unref(m);
1829 }
1830
1831 /* Run from main thread */
1832 static void source_set_volume_cb(pa_source *s) {
1833     DBusMessage *m;
1834     dbus_uint16_t gain;
1835     struct userdata *u;
1836     char *k;
1837
1838     pa_assert(s);
1839     pa_assert(s->core);
1840
1841     k = pa_sprintf_malloc("bluetooth-device@%p", (void*) s);
1842     u = pa_shared_get(s->core, k);
1843     pa_xfree(k);
1844
1845     pa_assert(u);
1846     pa_assert(u->source == s);
1847     pa_assert(u->profile == PROFILE_HSP);
1848
1849     gain = (pa_cvolume_max(&s->volume) * 15) / PA_VOLUME_NORM;
1850
1851     if (gain > 15)
1852         gain = 15;
1853
1854     pa_cvolume_set(&s->volume, u->sample_spec.channels, (pa_volume_t) (gain * PA_VOLUME_NORM / 15));
1855
1856     pa_assert_se(m = dbus_message_new_method_call("org.bluez", u->path, "org.bluez.Headset", "SetMicrophoneGain"));
1857     pa_assert_se(dbus_message_append_args(m, DBUS_TYPE_UINT16, &gain, DBUS_TYPE_INVALID));
1858     pa_assert_se(dbus_connection_send(pa_dbus_connection_get(u->connection), m, NULL));
1859     dbus_message_unref(m);
1860 }
1861
1862 /* Run from main thread */
1863 static char *get_name(const char *type, pa_modargs *ma, const char *device_id, pa_bool_t *namereg_fail) {
1864     char *t;
1865     const char *n;
1866
1867     pa_assert(type);
1868     pa_assert(ma);
1869     pa_assert(device_id);
1870     pa_assert(namereg_fail);
1871
1872     t = pa_sprintf_malloc("%s_name", type);
1873     n = pa_modargs_get_value(ma, t, NULL);
1874     pa_xfree(t);
1875
1876     if (n) {
1877         *namereg_fail = TRUE;
1878         return pa_xstrdup(n);
1879     }
1880
1881     if ((n = pa_modargs_get_value(ma, "name", NULL)))
1882         *namereg_fail = TRUE;
1883     else {
1884         n = device_id;
1885         *namereg_fail = FALSE;
1886     }
1887
1888     return pa_sprintf_malloc("bluez_%s.%s", type, n);
1889 }
1890
1891 static int sco_over_pcm_state_update(struct userdata *u) {
1892     pa_assert(u);
1893     pa_assert(USE_SCO_OVER_PCM(u));
1894
1895     if (PA_SINK_IS_OPENED(pa_sink_get_state(u->hsp.sco_sink)) ||
1896         PA_SOURCE_IS_OPENED(pa_source_get_state(u->hsp.sco_source))) {
1897
1898         if (u->service_fd >= 0 && u->stream_fd >= 0)
1899             return 0;
1900
1901         init_bt(u);
1902
1903         pa_log_debug("Resuming SCO over PCM");
1904         if (init_profile(u) < 0) {
1905             pa_log("Can't resume SCO over PCM");
1906             return -1;
1907         }
1908
1909         if (u->transport)
1910             return bt_transport_acquire(u, TRUE);
1911         else
1912             return start_stream_fd(u);
1913
1914     } else {
1915         if (u->service_fd < 0 && u->stream_fd < 0)
1916             return 0;
1917
1918         pa_log_debug("Closing SCO over PCM");
1919
1920         if (u->transport)
1921             bt_transport_release(u);
1922         else if (u->stream_fd >= 0)
1923             stop_stream_fd(u);
1924
1925         if (u->service_fd >= 0) {
1926             pa_close(u->service_fd);
1927             u->service_fd = -1;
1928         }
1929
1930         return 0;
1931     }
1932 }
1933
1934 static pa_hook_result_t sink_state_changed_cb(pa_core *c, pa_sink *s, struct userdata *u) {
1935     pa_assert(c);
1936     pa_sink_assert_ref(s);
1937     pa_assert(u);
1938
1939     if (s != u->hsp.sco_sink)
1940         return PA_HOOK_OK;
1941
1942     sco_over_pcm_state_update(u);
1943
1944     return PA_HOOK_OK;
1945 }
1946
1947 static pa_hook_result_t source_state_changed_cb(pa_core *c, pa_source *s, struct userdata *u) {
1948     pa_assert(c);
1949     pa_source_assert_ref(s);
1950     pa_assert(u);
1951
1952     if (s != u->hsp.sco_source)
1953         return PA_HOOK_OK;
1954
1955     sco_over_pcm_state_update(u);
1956
1957     return PA_HOOK_OK;
1958 }
1959
1960 /* Run from main thread */
1961 static int add_sink(struct userdata *u) {
1962     char *k;
1963
1964     if (USE_SCO_OVER_PCM(u)) {
1965         pa_proplist *p;
1966
1967         u->sink = u->hsp.sco_sink;
1968         p = pa_proplist_new();
1969         pa_proplist_sets(p, "bluetooth.protocol", "sco");
1970         pa_proplist_update(u->sink->proplist, PA_UPDATE_MERGE, p);
1971         pa_proplist_free(p);
1972
1973         if (!u->hsp.sink_state_changed_slot)
1974             u->hsp.sink_state_changed_slot = pa_hook_connect(&u->core->hooks[PA_CORE_HOOK_SINK_STATE_CHANGED], PA_HOOK_NORMAL, (pa_hook_cb_t) sink_state_changed_cb, u);
1975
1976     } else {
1977         pa_sink_new_data data;
1978         pa_bool_t b;
1979
1980         pa_sink_new_data_init(&data);
1981         data.driver = __FILE__;
1982         data.module = u->module;
1983         pa_sink_new_data_set_sample_spec(&data, &u->sample_spec);
1984         pa_proplist_sets(data.proplist, "bluetooth.protocol", u->profile == PROFILE_A2DP ? "a2dp" : "sco");
1985         if (u->profile == PROFILE_HSP)
1986             pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "phone");
1987         data.card = u->card;
1988         data.name = get_name("sink", u->modargs, u->address, &b);
1989         data.namereg_fail = b;
1990
1991         if (pa_modargs_get_proplist(u->modargs, "sink_properties", data.proplist, PA_UPDATE_REPLACE) < 0) {
1992             pa_log("Invalid properties");
1993             pa_sink_new_data_done(&data);
1994             return -1;
1995         }
1996
1997         u->sink = pa_sink_new(u->core, &data, PA_SINK_HARDWARE|PA_SINK_LATENCY | (u->profile == PROFILE_HSP ? PA_SINK_HW_VOLUME_CTRL : 0));
1998         pa_sink_new_data_done(&data);
1999
2000         if (!u->sink) {
2001             pa_log_error("Failed to create sink");
2002             return -1;
2003         }
2004
2005         u->sink->userdata = u;
2006         u->sink->parent.process_msg = sink_process_msg;
2007
2008         pa_sink_set_max_request(u->sink, u->block_size);
2009         pa_sink_set_fixed_latency(u->sink,
2010                                   (u->profile == PROFILE_A2DP ? FIXED_LATENCY_PLAYBACK_A2DP : FIXED_LATENCY_PLAYBACK_HSP) +
2011                                   pa_bytes_to_usec(u->block_size, &u->sample_spec));
2012     }
2013
2014     if (u->profile == PROFILE_HSP) {
2015         u->sink->set_volume = sink_set_volume_cb;
2016         u->sink->n_volume_steps = 16;
2017
2018         k = pa_sprintf_malloc("bluetooth-device@%p", (void*) u->sink);
2019         pa_shared_set(u->core, k, u);
2020         pa_xfree(k);
2021     }
2022
2023     return 0;
2024 }
2025
2026 /* Run from main thread */
2027 static int add_source(struct userdata *u) {
2028     char *k;
2029
2030     if (USE_SCO_OVER_PCM(u)) {
2031         u->source = u->hsp.sco_source;
2032         pa_proplist_sets(u->source->proplist, "bluetooth.protocol", "hsp");
2033
2034         if (!u->hsp.source_state_changed_slot)
2035             u->hsp.source_state_changed_slot = pa_hook_connect(&u->core->hooks[PA_CORE_HOOK_SOURCE_STATE_CHANGED], PA_HOOK_NORMAL, (pa_hook_cb_t) source_state_changed_cb, u);
2036
2037     } else {
2038         pa_source_new_data data;
2039         pa_bool_t b;
2040
2041         pa_source_new_data_init(&data);
2042         data.driver = __FILE__;
2043         data.module = u->module;
2044         pa_source_new_data_set_sample_spec(&data, &u->sample_spec);
2045         pa_proplist_sets(data.proplist, "bluetooth.protocol", u->profile == PROFILE_A2DP_SOURCE ? "a2dp_source" : "hsp");
2046         if ((u->profile == PROFILE_HSP) || (u->profile == PROFILE_HFGW))
2047             pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "phone");
2048
2049         data.card = u->card;
2050         data.name = get_name("source", u->modargs, u->address, &b);
2051         data.namereg_fail = b;
2052
2053         if (pa_modargs_get_proplist(u->modargs, "source_properties", data.proplist, PA_UPDATE_REPLACE) < 0) {
2054             pa_log("Invalid properties");
2055             pa_source_new_data_done(&data);
2056             return -1;
2057         }
2058
2059         u->source = pa_source_new(u->core, &data, PA_SOURCE_HARDWARE|PA_SOURCE_LATENCY | (u->profile == PROFILE_HSP ? PA_SOURCE_HW_VOLUME_CTRL : 0));
2060         pa_source_new_data_done(&data);
2061
2062         if (!u->source) {
2063             pa_log_error("Failed to create source");
2064             return -1;
2065         }
2066
2067         u->source->userdata = u;
2068         u->source->parent.process_msg = source_process_msg;
2069
2070         pa_source_set_fixed_latency(u->source,
2071                                     (u->profile == PROFILE_A2DP_SOURCE ? FIXED_LATENCY_RECORD_A2DP : FIXED_LATENCY_RECORD_HSP) +
2072                                     pa_bytes_to_usec(u->block_size, &u->sample_spec));
2073     }
2074
2075     if ((u->profile == PROFILE_HSP) || (u->profile == PROFILE_HFGW)) {
2076         if (u->transport) {
2077             const pa_bluetooth_transport *t;
2078             t = pa_bluetooth_discovery_get_transport(u->discovery, u->transport);
2079             pa_assert(t);
2080             pa_proplist_sets(u->source->proplist, "bluetooth.nrec", t->nrec ? "1" : "0");
2081         } else
2082             pa_proplist_sets(u->source->proplist, "bluetooth.nrec", (u->hsp.pcm_capabilities.flags & BT_PCM_FLAG_NREC) ? "1" : "0");
2083     }
2084
2085     if (u->profile == PROFILE_HSP) {
2086         u->source->set_volume = source_set_volume_cb;
2087         u->source->n_volume_steps = 16;
2088
2089         k = pa_sprintf_malloc("bluetooth-device@%p", (void*) u->source);
2090         pa_shared_set(u->core, k, u);
2091         pa_xfree(k);
2092     }
2093
2094     return 0;
2095 }
2096
2097 /* Run from main thread */
2098 static void shutdown_bt(struct userdata *u) {
2099     pa_assert(u);
2100
2101     if (u->stream_fd >= 0) {
2102         pa_close(u->stream_fd);
2103         u->stream_fd = -1;
2104
2105         u->stream_write_type = 0;
2106     }
2107
2108     if (u->service_fd >= 0) {
2109         pa_close(u->service_fd);
2110         u->service_fd = -1;
2111         u->service_write_type = 0;
2112         u->service_read_type = 0;
2113     }
2114
2115     if (u->write_memchunk.memblock) {
2116         pa_memblock_unref(u->write_memchunk.memblock);
2117         pa_memchunk_reset(&u->write_memchunk);
2118     }
2119 }
2120
2121 static int bt_transport_config_a2dp(struct userdata *u) {
2122     const pa_bluetooth_transport *t;
2123     struct a2dp_info *a2dp = &u->a2dp;
2124     a2dp_sbc_t *config;
2125
2126     t = pa_bluetooth_discovery_get_transport(u->discovery, u->transport);
2127     pa_assert(t);
2128
2129     config = (a2dp_sbc_t *) t->config;
2130
2131     if (a2dp->sbc_initialized)
2132         sbc_reinit(&a2dp->sbc, 0);
2133     else
2134         sbc_init(&a2dp->sbc, 0);
2135     a2dp->sbc_initialized = TRUE;
2136
2137     switch (config->frequency) {
2138         case BT_SBC_SAMPLING_FREQ_16000:
2139             a2dp->sbc.frequency = SBC_FREQ_16000;
2140             break;
2141         case BT_SBC_SAMPLING_FREQ_32000:
2142             a2dp->sbc.frequency = SBC_FREQ_32000;
2143             break;
2144         case BT_SBC_SAMPLING_FREQ_44100:
2145             a2dp->sbc.frequency = SBC_FREQ_44100;
2146             break;
2147         case BT_SBC_SAMPLING_FREQ_48000:
2148             a2dp->sbc.frequency = SBC_FREQ_48000;
2149             break;
2150         default:
2151             pa_assert_not_reached();
2152     }
2153
2154     switch (config->channel_mode) {
2155         case BT_A2DP_CHANNEL_MODE_MONO:
2156             a2dp->sbc.mode = SBC_MODE_MONO;
2157             break;
2158         case BT_A2DP_CHANNEL_MODE_DUAL_CHANNEL:
2159             a2dp->sbc.mode = SBC_MODE_DUAL_CHANNEL;
2160             break;
2161         case BT_A2DP_CHANNEL_MODE_STEREO:
2162             a2dp->sbc.mode = SBC_MODE_STEREO;
2163             break;
2164         case BT_A2DP_CHANNEL_MODE_JOINT_STEREO:
2165             a2dp->sbc.mode = SBC_MODE_JOINT_STEREO;
2166             break;
2167         default:
2168             pa_assert_not_reached();
2169     }
2170
2171     switch (config->allocation_method) {
2172         case BT_A2DP_ALLOCATION_SNR:
2173             a2dp->sbc.allocation = SBC_AM_SNR;
2174             break;
2175         case BT_A2DP_ALLOCATION_LOUDNESS:
2176             a2dp->sbc.allocation = SBC_AM_LOUDNESS;
2177             break;
2178         default:
2179             pa_assert_not_reached();
2180     }
2181
2182     switch (config->subbands) {
2183         case BT_A2DP_SUBBANDS_4:
2184             a2dp->sbc.subbands = SBC_SB_4;
2185             break;
2186         case BT_A2DP_SUBBANDS_8:
2187             a2dp->sbc.subbands = SBC_SB_8;
2188             break;
2189         default:
2190             pa_assert_not_reached();
2191     }
2192
2193     switch (config->block_length) {
2194         case BT_A2DP_BLOCK_LENGTH_4:
2195             a2dp->sbc.blocks = SBC_BLK_4;
2196             break;
2197         case BT_A2DP_BLOCK_LENGTH_8:
2198             a2dp->sbc.blocks = SBC_BLK_8;
2199             break;
2200         case BT_A2DP_BLOCK_LENGTH_12:
2201             a2dp->sbc.blocks = SBC_BLK_12;
2202             break;
2203         case BT_A2DP_BLOCK_LENGTH_16:
2204             a2dp->sbc.blocks = SBC_BLK_16;
2205             break;
2206         default:
2207             pa_assert_not_reached();
2208     }
2209
2210     a2dp->min_bitpool = config->min_bitpool;
2211     a2dp->max_bitpool = config->max_bitpool;
2212
2213     /* Set minimum bitpool for source to get the maximum possible block_size */
2214     a2dp->sbc.bitpool = u->profile == PROFILE_A2DP ? a2dp->max_bitpool : a2dp->min_bitpool;
2215     a2dp->codesize = sbc_get_codesize(&a2dp->sbc);
2216     a2dp->frame_length = sbc_get_frame_length(&a2dp->sbc);
2217
2218     u->block_size =
2219         ((u->link_mtu - sizeof(struct rtp_header) - sizeof(struct rtp_payload))
2220         / a2dp->frame_length
2221         * a2dp->codesize);
2222
2223     pa_log_info("SBC parameters:\n\tallocation=%u\n\tsubbands=%u\n\tblocks=%u\n\tbitpool=%u\n",
2224                 a2dp->sbc.allocation, a2dp->sbc.subbands, a2dp->sbc.blocks, a2dp->sbc.bitpool);
2225
2226     return 0;
2227 }
2228
2229 static int bt_transport_config(struct userdata *u) {
2230     if (u->profile == PROFILE_HSP || u->profile == PROFILE_HFGW) {
2231         u->block_size = u->link_mtu;
2232         return 0;
2233     }
2234
2235     return bt_transport_config_a2dp(u);
2236 }
2237
2238 /* Run from main thread */
2239 static int bt_transport_open(struct userdata *u) {
2240     if (bt_transport_acquire(u, FALSE) < 0)
2241         return -1;
2242
2243     return bt_transport_config(u);
2244 }
2245
2246 /* Run from main thread */
2247 static int init_bt(struct userdata *u) {
2248     pa_assert(u);
2249
2250     shutdown_bt(u);
2251
2252     u->stream_write_type = 0;
2253     u->service_write_type = 0;
2254     u->service_read_type = 0;
2255
2256     if ((u->service_fd = bt_audio_service_open()) < 0) {
2257         pa_log_warn("Bluetooth audio service not available");
2258         return -1;
2259     }
2260
2261     pa_log_debug("Connected to the bluetooth audio service");
2262
2263     return 0;
2264 }
2265
2266 /* Run from main thread */
2267 static int setup_bt(struct userdata *u) {
2268     const pa_bluetooth_device *d;
2269     const pa_bluetooth_transport *t;
2270
2271     pa_assert(u);
2272
2273     if (!(d = pa_bluetooth_discovery_get_by_path(u->discovery, u->path))) {
2274         pa_log_error("Failed to get device object.");
2275         return -1;
2276     }
2277
2278     /* release transport if exist */
2279     if (u->transport) {
2280         bt_transport_release(u);
2281         pa_xfree(u->transport);
2282         u->transport = NULL;
2283     }
2284
2285     /* check if profile has a transport */
2286     t = pa_bluetooth_device_get_transport(d, u->profile);
2287     if (t) {
2288         u->transport = pa_xstrdup(t->path);
2289         return bt_transport_open(u);
2290     }
2291
2292     if (get_caps(u, 0) < 0)
2293         return -1;
2294
2295     pa_log_debug("Got device capabilities");
2296
2297     if (set_conf(u) < 0)
2298         return -1;
2299
2300     pa_log_debug("Connection to the device configured");
2301
2302     if (USE_SCO_OVER_PCM(u)) {
2303         pa_log_debug("Configured to use SCO over PCM");
2304         return 0;
2305     }
2306
2307     pa_log_debug("Got the stream socket");
2308
2309     return 0;
2310 }
2311
2312 /* Run from main thread */
2313 static int init_profile(struct userdata *u) {
2314     int r = 0;
2315     pa_assert(u);
2316     pa_assert(u->profile != PROFILE_OFF);
2317
2318     if (setup_bt(u) < 0)
2319         return -1;
2320
2321     if (u->profile == PROFILE_A2DP ||
2322         u->profile == PROFILE_HSP ||
2323         u->profile == PROFILE_HFGW)
2324         if (add_sink(u) < 0)
2325             r = -1;
2326
2327     if (u->profile == PROFILE_HSP ||
2328         u->profile == PROFILE_A2DP_SOURCE ||
2329         u->profile == PROFILE_HFGW)
2330         if (add_source(u) < 0)
2331             r = -1;
2332
2333     return r;
2334 }
2335
2336 /* Run from main thread */
2337 static void stop_thread(struct userdata *u) {
2338     char *k;
2339
2340     pa_assert(u);
2341
2342     if (u->thread) {
2343         pa_asyncmsgq_send(u->thread_mq.inq, NULL, PA_MESSAGE_SHUTDOWN, NULL, 0, NULL);
2344         pa_thread_free(u->thread);
2345         u->thread = NULL;
2346     }
2347
2348     if (u->rtpoll_item) {
2349         pa_rtpoll_item_free(u->rtpoll_item);
2350         u->rtpoll_item = NULL;
2351     }
2352
2353     if (u->hsp.sink_state_changed_slot) {
2354         pa_hook_slot_free(u->hsp.sink_state_changed_slot);
2355         u->hsp.sink_state_changed_slot = NULL;
2356     }
2357
2358     if (u->hsp.source_state_changed_slot) {
2359         pa_hook_slot_free(u->hsp.source_state_changed_slot);
2360         u->hsp.source_state_changed_slot = NULL;
2361     }
2362
2363     if (u->sink) {
2364         if (u->profile == PROFILE_HSP) {
2365             k = pa_sprintf_malloc("bluetooth-device@%p", (void*) u->sink);
2366             pa_shared_remove(u->core, k);
2367             pa_xfree(k);
2368         }
2369
2370         pa_sink_unref(u->sink);
2371         u->sink = NULL;
2372     }
2373
2374     if (u->source) {
2375         if (u->profile == PROFILE_HSP) {
2376             k = pa_sprintf_malloc("bluetooth-device@%p", (void*) u->source);
2377             pa_shared_remove(u->core, k);
2378             pa_xfree(k);
2379         }
2380
2381         pa_source_unref(u->source);
2382         u->source = NULL;
2383     }
2384
2385     if (u->rtpoll) {
2386         pa_thread_mq_done(&u->thread_mq);
2387
2388         pa_rtpoll_free(u->rtpoll);
2389         u->rtpoll = NULL;
2390     }
2391
2392     if (u->read_smoother) {
2393         pa_smoother_free(u->read_smoother);
2394         u->read_smoother = NULL;
2395     }
2396 }
2397
2398 /* Run from main thread */
2399 static int start_thread(struct userdata *u) {
2400     pa_assert(u);
2401     pa_assert(!u->thread);
2402     pa_assert(!u->rtpoll);
2403     pa_assert(!u->rtpoll_item);
2404
2405     u->rtpoll = pa_rtpoll_new();
2406     pa_thread_mq_init(&u->thread_mq, u->core->mainloop, u->rtpoll);
2407
2408     if (USE_SCO_OVER_PCM(u)) {
2409         if (sco_over_pcm_state_update(u) < 0) {
2410             char *k;
2411
2412             if (u->sink) {
2413                 k = pa_sprintf_malloc("bluetooth-device@%p", (void*) u->sink);
2414                 pa_shared_remove(u->core, k);
2415                 pa_xfree(k);
2416                 u->sink = NULL;
2417             }
2418             if (u->source) {
2419                 k = pa_sprintf_malloc("bluetooth-device@%p", (void*) u->source);
2420                 pa_shared_remove(u->core, k);
2421                 pa_xfree(k);
2422                 u->source = NULL;
2423             }
2424             return -1;
2425         }
2426
2427         pa_sink_ref(u->sink);
2428         pa_source_ref(u->source);
2429         /* FIXME: monitor stream_fd error */
2430         return 0;
2431     }
2432
2433     if (!(u->thread = pa_thread_new("bluetooth", thread_func, u))) {
2434         pa_log_error("Failed to create IO thread");
2435         stop_thread(u);
2436         return -1;
2437     }
2438
2439     if (u->sink) {
2440         pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
2441         pa_sink_set_rtpoll(u->sink, u->rtpoll);
2442         pa_sink_put(u->sink);
2443
2444         if (u->sink->set_volume)
2445             u->sink->set_volume(u->sink);
2446     }
2447
2448     if (u->source) {
2449         pa_source_set_asyncmsgq(u->source, u->thread_mq.inq);
2450         pa_source_set_rtpoll(u->source, u->rtpoll);
2451         pa_source_put(u->source);
2452
2453         if (u->source->set_volume)
2454             u->source->set_volume(u->source);
2455     }
2456
2457     return 0;
2458 }
2459
2460 static void save_sco_volume_callbacks(struct userdata *u) {
2461     pa_assert(u);
2462     pa_assert(USE_SCO_OVER_PCM(u));
2463
2464     u->hsp.sco_sink_set_volume = u->hsp.sco_sink->set_volume;
2465     u->hsp.sco_source_set_volume = u->hsp.sco_source->set_volume;
2466 }
2467
2468 static void restore_sco_volume_callbacks(struct userdata *u) {
2469     pa_assert(u);
2470     pa_assert(USE_SCO_OVER_PCM(u));
2471
2472     u->hsp.sco_sink->set_volume = u->hsp.sco_sink_set_volume;
2473     u->hsp.sco_source->set_volume = u->hsp.sco_source_set_volume;
2474 }
2475
2476 /* Run from main thread */
2477 static int card_set_profile(pa_card *c, pa_card_profile *new_profile) {
2478     struct userdata *u;
2479     enum profile *d;
2480     pa_queue *inputs = NULL, *outputs = NULL;
2481     const pa_bluetooth_device *device;
2482
2483     pa_assert(c);
2484     pa_assert(new_profile);
2485     pa_assert_se(u = c->userdata);
2486
2487     d = PA_CARD_PROFILE_DATA(new_profile);
2488
2489     if (!(device = pa_bluetooth_discovery_get_by_path(u->discovery, u->path))) {
2490         pa_log_error("Failed to get device object.");
2491         return -PA_ERR_IO;
2492     }
2493
2494     /* The state signal is sent by bluez, so it is racy to check
2495        strictly for CONNECTED, we should also accept STREAMING state
2496        as being good enough. However, if the profile is used
2497        concurrently (which is unlikely), ipc will fail later on, and
2498        module will be unloaded. */
2499     if (device->headset_state < PA_BT_AUDIO_STATE_CONNECTED && *d == PROFILE_HSP) {
2500         pa_log_warn("HSP is not connected, refused to switch profile");
2501         return -PA_ERR_IO;
2502     }
2503     else if (device->audio_sink_state < PA_BT_AUDIO_STATE_CONNECTED && *d == PROFILE_A2DP) {
2504         pa_log_warn("A2DP is not connected, refused to switch profile");
2505         return -PA_ERR_IO;
2506     }
2507     else if (device->hfgw_state <= PA_BT_AUDIO_STATE_CONNECTED && *d == PROFILE_HFGW) {
2508         pa_log_warn("HandsfreeGateway is not connected, refused to switch profile");
2509         return -PA_ERR_IO;
2510     }
2511
2512     if (u->sink) {
2513         inputs = pa_sink_move_all_start(u->sink, NULL);
2514
2515         if (!USE_SCO_OVER_PCM(u))
2516             pa_sink_unlink(u->sink);
2517     }
2518
2519     if (u->source) {
2520         outputs = pa_source_move_all_start(u->source, NULL);
2521
2522         if (!USE_SCO_OVER_PCM(u))
2523             pa_source_unlink(u->source);
2524     }
2525
2526     stop_thread(u);
2527     shutdown_bt(u);
2528
2529     if (USE_SCO_OVER_PCM(u))
2530         restore_sco_volume_callbacks(u);
2531
2532     u->profile = *d;
2533     u->sample_spec = u->requested_sample_spec;
2534
2535     if (USE_SCO_OVER_PCM(u))
2536         save_sco_volume_callbacks(u);
2537
2538     init_bt(u);
2539
2540     if (u->profile != PROFILE_OFF)
2541         init_profile(u);
2542
2543     if (u->sink || u->source)
2544         start_thread(u);
2545
2546     if (inputs) {
2547         if (u->sink)
2548             pa_sink_move_all_finish(u->sink, inputs, FALSE);
2549         else
2550             pa_sink_move_all_fail(inputs);
2551     }
2552
2553     if (outputs) {
2554         if (u->source)
2555             pa_source_move_all_finish(u->source, outputs, FALSE);
2556         else
2557             pa_source_move_all_fail(outputs);
2558     }
2559
2560     return 0;
2561 }
2562
2563 /* Run from main thread */
2564 static int add_card(struct userdata *u, const pa_bluetooth_device *device) {
2565     pa_card_new_data data;
2566     pa_bool_t b;
2567     pa_card_profile *p;
2568     enum profile *d;
2569     const char *ff;
2570     char *n;
2571     const char *default_profile;
2572
2573     pa_assert(u);
2574     pa_assert(device);
2575
2576     pa_card_new_data_init(&data);
2577     data.driver = __FILE__;
2578     data.module = u->module;
2579
2580     n = pa_bluetooth_cleanup_name(device->name);
2581     pa_proplist_sets(data.proplist, PA_PROP_DEVICE_DESCRIPTION, n);
2582     pa_xfree(n);
2583     pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, device->address);
2584     pa_proplist_sets(data.proplist, PA_PROP_DEVICE_API, "bluez");
2585     pa_proplist_sets(data.proplist, PA_PROP_DEVICE_CLASS, "sound");
2586     pa_proplist_sets(data.proplist, PA_PROP_DEVICE_BUS, "bluetooth");
2587     if ((ff = pa_bluetooth_get_form_factor(device->class)))
2588         pa_proplist_sets(data.proplist, PA_PROP_DEVICE_FORM_FACTOR, ff);
2589     pa_proplist_sets(data.proplist, "bluez.path", device->path);
2590     pa_proplist_setf(data.proplist, "bluez.class", "0x%06x", (unsigned) device->class);
2591     pa_proplist_sets(data.proplist, "bluez.name", device->name);
2592     data.name = get_name("card", u->modargs, device->address, &b);
2593     data.namereg_fail = b;
2594
2595     if (pa_modargs_get_proplist(u->modargs, "card_properties", data.proplist, PA_UPDATE_REPLACE) < 0) {
2596         pa_log("Invalid properties");
2597         pa_card_new_data_done(&data);
2598         return -1;
2599     }
2600
2601     data.profiles = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
2602
2603     /* we base hsp/a2dp availability on UUIDs.
2604        Ideally, it would be based on "Connected" state, but
2605        we can't afford to wait for this information when
2606        we are loaded with profile="hsp", for instance */
2607     if (pa_bluetooth_uuid_has(device->uuids, A2DP_SINK_UUID)) {
2608         p = pa_card_profile_new("a2dp", _("High Fidelity Playback (A2DP)"), sizeof(enum profile));
2609         p->priority = 10;
2610         p->n_sinks = 1;
2611         p->n_sources = 0;
2612         p->max_sink_channels = 2;
2613         p->max_source_channels = 0;
2614
2615         d = PA_CARD_PROFILE_DATA(p);
2616         *d = PROFILE_A2DP;
2617
2618         pa_hashmap_put(data.profiles, p->name, p);
2619     }
2620
2621     if (pa_bluetooth_uuid_has(device->uuids, A2DP_SOURCE_UUID)) {
2622         p = pa_card_profile_new("a2dp_source", _("High Fidelity Capture (A2DP)"), sizeof(enum profile));
2623         p->priority = 10;
2624         p->n_sinks = 0;
2625         p->n_sources = 1;
2626         p->max_sink_channels = 0;
2627         p->max_source_channels = 2;
2628
2629         d = PA_CARD_PROFILE_DATA(p);
2630         *d = PROFILE_A2DP_SOURCE;
2631
2632         pa_hashmap_put(data.profiles, p->name, p);
2633     }
2634
2635     if (pa_bluetooth_uuid_has(device->uuids, HSP_HS_UUID) ||
2636         pa_bluetooth_uuid_has(device->uuids, HFP_HS_UUID)) {
2637         p = pa_card_profile_new("hsp", _("Telephony Duplex (HSP/HFP)"), sizeof(enum profile));
2638         p->priority = 20;
2639         p->n_sinks = 1;
2640         p->n_sources = 1;
2641         p->max_sink_channels = 1;
2642         p->max_source_channels = 1;
2643
2644         d = PA_CARD_PROFILE_DATA(p);
2645         *d = PROFILE_HSP;
2646
2647         pa_hashmap_put(data.profiles, p->name, p);
2648     }
2649
2650     if (pa_bluetooth_uuid_has(device->uuids, HFP_AG_UUID)) {
2651         p = pa_card_profile_new("hfgw", _("Handsfree Gateway"), sizeof(enum profile));
2652         p->priority = 20;
2653         p->n_sinks = 1;
2654         p->n_sources = 1;
2655         p->max_sink_channels = 1;
2656         p->max_source_channels = 1;
2657
2658         d = PA_CARD_PROFILE_DATA(p);
2659         *d = PROFILE_HFGW;
2660
2661         pa_hashmap_put(data.profiles, p->name, p);
2662     }
2663
2664     pa_assert(!pa_hashmap_isempty(data.profiles));
2665
2666     p = pa_card_profile_new("off", _("Off"), sizeof(enum profile));
2667     d = PA_CARD_PROFILE_DATA(p);
2668     *d = PROFILE_OFF;
2669     pa_hashmap_put(data.profiles, p->name, p);
2670
2671     if ((default_profile = pa_modargs_get_value(u->modargs, "profile", NULL))) {
2672         if (pa_hashmap_get(data.profiles, default_profile))
2673             pa_card_new_data_set_profile(&data, default_profile);
2674         else
2675             pa_log_warn("Profile '%s' not valid or not supported by device.", default_profile);
2676     }
2677
2678     u->card = pa_card_new(u->core, &data);
2679     pa_card_new_data_done(&data);
2680
2681     if (!u->card) {
2682         pa_log("Failed to allocate card.");
2683         return -1;
2684     }
2685
2686     u->card->userdata = u;
2687     u->card->set_profile = card_set_profile;
2688
2689     d = PA_CARD_PROFILE_DATA(u->card->active_profile);
2690
2691     if ((device->headset_state < PA_BT_AUDIO_STATE_CONNECTED && *d == PROFILE_HSP) ||
2692         (device->audio_sink_state < PA_BT_AUDIO_STATE_CONNECTED && *d == PROFILE_A2DP) ||
2693         (device->hfgw_state < PA_BT_AUDIO_STATE_CONNECTED && *d == PROFILE_HFGW)) {
2694         pa_log_warn("Default profile not connected, selecting off profile");
2695         u->card->active_profile = pa_hashmap_get(u->card->profiles, "off");
2696         u->card->save_profile = FALSE;
2697     }
2698
2699     d = PA_CARD_PROFILE_DATA(u->card->active_profile);
2700     u->profile = *d;
2701
2702     if (USE_SCO_OVER_PCM(u))
2703         save_sco_volume_callbacks(u);
2704
2705     return 0;
2706 }
2707
2708 /* Run from main thread */
2709 static const pa_bluetooth_device* find_device(struct userdata *u, const char *address, const char *path) {
2710     const pa_bluetooth_device *d = NULL;
2711
2712     pa_assert(u);
2713
2714     if (!address && !path) {
2715         pa_log_error("Failed to get device address/path from module arguments.");
2716         return NULL;
2717     }
2718
2719     if (path) {
2720         if (!(d = pa_bluetooth_discovery_get_by_path(u->discovery, path))) {
2721             pa_log_error("%s is not a valid BlueZ audio device.", path);
2722             return NULL;
2723         }
2724
2725         if (address && !(pa_streq(d->address, address))) {
2726             pa_log_error("Passed path %s address %s != %s don't match.", path, d->address, address);
2727             return NULL;
2728         }
2729
2730     } else {
2731         if (!(d = pa_bluetooth_discovery_get_by_address(u->discovery, address))) {
2732             pa_log_error("%s is not known.", address);
2733             return NULL;
2734         }
2735     }
2736
2737     if (d) {
2738         u->address = pa_xstrdup(d->address);
2739         u->path = pa_xstrdup(d->path);
2740     }
2741
2742     return d;
2743 }
2744
2745 /* Run from main thread */
2746 static int setup_dbus(struct userdata *u) {
2747     DBusError err;
2748
2749     dbus_error_init(&err);
2750
2751     u->connection = pa_dbus_bus_get(u->core, DBUS_BUS_SYSTEM, &err);
2752
2753     if (dbus_error_is_set(&err) || !u->connection) {
2754         pa_log("Failed to get D-Bus connection: %s", err.message);
2755         dbus_error_free(&err);
2756         return -1;
2757     }
2758
2759     return 0;
2760 }
2761
2762 int pa__init(pa_module* m) {
2763     pa_modargs *ma;
2764     uint32_t channels;
2765     struct userdata *u;
2766     const char *address, *path;
2767     DBusError err;
2768     char *mike, *speaker, *transport;
2769     const pa_bluetooth_device *device;
2770
2771     pa_assert(m);
2772
2773     dbus_error_init(&err);
2774
2775     if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
2776         pa_log_error("Failed to parse module arguments");
2777         goto fail;
2778     }
2779
2780     m->userdata = u = pa_xnew0(struct userdata, 1);
2781     u->module = m;
2782     u->core = m->core;
2783     u->service_fd = -1;
2784     u->stream_fd = -1;
2785     u->sample_spec = m->core->default_sample_spec;
2786     u->modargs = ma;
2787
2788     if (pa_modargs_get_value(ma, "sco_sink", NULL) &&
2789         !(u->hsp.sco_sink = pa_namereg_get(m->core, pa_modargs_get_value(ma, "sco_sink", NULL), PA_NAMEREG_SINK))) {
2790         pa_log("SCO sink not found");
2791         goto fail;
2792     }
2793
2794     if (pa_modargs_get_value(ma, "sco_source", NULL) &&
2795         !(u->hsp.sco_source = pa_namereg_get(m->core, pa_modargs_get_value(ma, "sco_source", NULL), PA_NAMEREG_SOURCE))) {
2796         pa_log("SCO source not found");
2797         goto fail;
2798     }
2799
2800     if (pa_modargs_get_value_u32(ma, "rate", &u->sample_spec.rate) < 0 ||
2801         u->sample_spec.rate <= 0 || u->sample_spec.rate > PA_RATE_MAX) {
2802         pa_log_error("Failed to get rate from module arguments");
2803         goto fail;
2804     }
2805
2806     u->auto_connect = TRUE;
2807     if (pa_modargs_get_value_boolean(ma, "auto_connect", &u->auto_connect)) {
2808         pa_log("Failed to parse auto_connect= argument");
2809         goto fail;
2810     }
2811
2812     channels = u->sample_spec.channels;
2813     if (pa_modargs_get_value_u32(ma, "channels", &channels) < 0 ||
2814         channels <= 0 || channels > PA_CHANNELS_MAX) {
2815         pa_log_error("Failed to get channels from module arguments");
2816         goto fail;
2817     }
2818     u->sample_spec.channels = (uint8_t) channels;
2819     u->requested_sample_spec = u->sample_spec;
2820
2821     address = pa_modargs_get_value(ma, "address", NULL);
2822     path = pa_modargs_get_value(ma, "path", NULL);
2823
2824     if (setup_dbus(u) < 0)
2825         goto fail;
2826
2827     if (!(u->discovery = pa_bluetooth_discovery_get(m->core)))
2828         goto fail;
2829
2830     if (!(device = find_device(u, address, path)))
2831         goto fail;
2832
2833     /* Add the card structure. This will also initialize the default profile */
2834     if (add_card(u, device) < 0)
2835         goto fail;
2836
2837     if (!dbus_connection_add_filter(pa_dbus_connection_get(u->connection), filter_cb, u, NULL)) {
2838         pa_log_error("Failed to add filter function");
2839         goto fail;
2840     }
2841     u->filter_added = TRUE;
2842
2843     speaker = pa_sprintf_malloc("type='signal',sender='org.bluez',interface='org.bluez.Headset',member='SpeakerGainChanged',path='%s'", u->path);
2844     mike = pa_sprintf_malloc("type='signal',sender='org.bluez',interface='org.bluez.Headset',member='MicrophoneGainChanged',path='%s'", u->path);
2845     transport = pa_sprintf_malloc("type='signal',sender='org.bluez',interface='org.bluez.MediaTransport',member='PropertyChanged'");
2846
2847     if (pa_dbus_add_matches(
2848                 pa_dbus_connection_get(u->connection), &err,
2849                 speaker,
2850                 mike,
2851                 transport,
2852                 NULL) < 0) {
2853
2854         pa_xfree(speaker);
2855         pa_xfree(mike);
2856         pa_xfree(transport);
2857
2858         pa_log("Failed to add D-Bus matches: %s", err.message);
2859         goto fail;
2860     }
2861
2862     pa_xfree(speaker);
2863     pa_xfree(mike);
2864     pa_xfree(transport);
2865
2866     /* Connect to the BT service */
2867     init_bt(u);
2868
2869     if (u->profile != PROFILE_OFF)
2870         if (init_profile(u) < 0)
2871             goto fail;
2872
2873     if (u->sink || u->source)
2874         if (start_thread(u) < 0)
2875             goto fail;
2876
2877     return 0;
2878
2879 fail:
2880
2881     pa__done(m);
2882
2883     dbus_error_free(&err);
2884
2885     return -1;
2886 }
2887
2888 int pa__get_n_used(pa_module *m) {
2889     struct userdata *u;
2890
2891     pa_assert(m);
2892     pa_assert_se(u = m->userdata);
2893
2894     return
2895         (u->sink ? pa_sink_linked_by(u->sink) : 0) +
2896         (u->source ? pa_source_linked_by(u->source) : 0);
2897 }
2898
2899 void pa__done(pa_module *m) {
2900     struct userdata *u;
2901
2902     pa_assert(m);
2903
2904     if (!(u = m->userdata))
2905         return;
2906
2907     if (u->sink && !USE_SCO_OVER_PCM(u))
2908         pa_sink_unlink(u->sink);
2909
2910     if (u->source && !USE_SCO_OVER_PCM(u))
2911         pa_source_unlink(u->source);
2912
2913     stop_thread(u);
2914
2915     if (USE_SCO_OVER_PCM(u))
2916         restore_sco_volume_callbacks(u);
2917
2918     if (u->connection) {
2919
2920         if (u->path) {
2921             char *speaker, *mike;
2922             speaker = pa_sprintf_malloc("type='signal',sender='org.bluez',interface='org.bluez.Headset',member='SpeakerGainChanged',path='%s'", u->path);
2923             mike = pa_sprintf_malloc("type='signal',sender='org.bluez',interface='org.bluez.Headset',member='MicrophoneGainChanged',path='%s'", u->path);
2924
2925             pa_dbus_remove_matches(pa_dbus_connection_get(u->connection), speaker, mike, NULL);
2926
2927             pa_xfree(speaker);
2928             pa_xfree(mike);
2929         }
2930
2931         if (u->filter_added)
2932             dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u);
2933
2934         pa_dbus_connection_unref(u->connection);
2935     }
2936
2937     if (u->card)
2938         pa_card_free(u->card);
2939
2940     if (u->read_smoother)
2941         pa_smoother_free(u->read_smoother);
2942
2943     shutdown_bt(u);
2944
2945     if (u->a2dp.buffer)
2946         pa_xfree(u->a2dp.buffer);
2947
2948     sbc_finish(&u->a2dp.sbc);
2949
2950     if (u->modargs)
2951         pa_modargs_free(u->modargs);
2952
2953     pa_xfree(u->address);
2954     pa_xfree(u->path);
2955
2956     if (u->transport) {
2957         bt_transport_release(u);
2958         pa_xfree(u->transport);
2959     }
2960
2961     if (u->discovery)
2962         pa_bluetooth_discovery_unref(u->discovery);
2963
2964     pa_xfree(u);
2965 }