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