1 From 7625b67a687b7a365d9d758a86ed05e84b2b3a61 Mon Sep 17 00:00:00 2001
2 From: Thierry Bultel <thierry.bultel@iot.bzh>
3 Date: Mon, 3 Dec 2018 14:29:07 +0100
4 Subject: [PATCH 1/3] build and link with a shared library
6 Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
9 includes/bluealsa/bluealsa.h | 21 ++++++
10 {src/shared => includes/bluealsa}/ctl-client.h | 2 +-
11 {src/shared => includes/bluealsa}/ctl-proto.h | 0
12 {src/shared => includes/bluealsa}/defs.h | 0
13 {src/shared => includes/bluealsa}/ffb.h | 0
14 {src/shared => includes/bluealsa}/log.h | 0
15 {src/shared => includes/bluealsa}/rt.h | 0
16 src/Makefile.am | 11 ++-
17 src/asound/Makefile.am | 15 ++--
18 src/asound/bluealsa-ctl.c | 6 +-
19 src/asound/bluealsa-pcm.c | 10 +--
22 src/bluealsalib/Makefile.am | 50 ++++++++++++++
23 src/bluealsalib/bluealsa.pc.in | 12 ++++
24 src/bluez-a2dp.c | 2 +-
32 src/shared/ctl-client.c | 4 +-
33 src/shared/ffb.c | 2 +-
34 src/shared/log.c | 4 +-
35 src/shared/rt.c | 2 +-
36 src/transport.c | 2 +-
38 test/Makefile.am | 10 ++-
39 test/server-mock.c | 3 -
41 test/test-bluealsalib.c | 96 ++++++++++++++++++++++++++
43 test/test-utils.c | 8 +--
44 utils/Makefile.am | 11 ++-
47 39 files changed, 252 insertions(+), 73 deletions(-)
48 create mode 100644 includes/bluealsa/bluealsa.h
49 rename {src/shared => includes/bluealsa}/ctl-client.h (98%)
50 rename {src/shared => includes/bluealsa}/ctl-proto.h (100%)
51 rename {src/shared => includes/bluealsa}/defs.h (100%)
52 rename {src/shared => includes/bluealsa}/ffb.h (100%)
53 rename {src/shared => includes/bluealsa}/log.h (100%)
54 rename {src/shared => includes/bluealsa}/rt.h (100%)
55 create mode 100644 src/bluealsalib/Makefile.am
56 create mode 100644 src/bluealsalib/bluealsa.pc.in
57 create mode 100644 test/test-bluealsalib.c
59 diff --git a/configure.ac b/configure.ac
60 index 0bb9452..6323d60 100644
63 @@ -152,8 +152,10 @@ AC_CONFIG_FILES([
67 + src/bluealsalib/Makefile
71 + src/bluealsalib/bluealsa.pc])
74 # warn user that alsa-lib thread-safety makes troubles
75 diff --git a/includes/bluealsa/bluealsa.h b/includes/bluealsa/bluealsa.h
77 index 0000000..062856a
79 +++ b/includes/bluealsa/bluealsa.h
82 + * BlueALSA - bluealsa.h
83 + * Copyright (c) 2018 Thierry Bultel
85 + * This file is a part of bluez-alsa.
87 + * This project is licensed under the terms of the MIT license.
94 +#include <bluealsa/ctl-client.h>
95 +#include <bluealsa/defs.h>
97 +typedef int (*transport_update_cb) (struct ba_msg_transport *transports);
99 +extern int bluelsa_register_transport_update_cb(const char * interfance, transport_update_cb cb);
102 diff --git a/src/shared/ctl-client.h b/includes/bluealsa/ctl-client.h
104 rename from src/shared/ctl-client.h
105 rename to includes/bluealsa/ctl-client.h
106 index 3dc93a6..b8af154 100644
107 --- a/src/shared/ctl-client.h
108 +++ b/includes/bluealsa/ctl-client.h
110 #define BLUEALSA_SHARED_CTLCLIENT_H_
113 -#include "shared/ctl-proto.h"
114 +#include <bluealsa/ctl-proto.h>
116 int bluealsa_open(const char *interface);
118 diff --git a/src/shared/ctl-proto.h b/includes/bluealsa/ctl-proto.h
119 similarity index 100%
120 rename from src/shared/ctl-proto.h
121 rename to includes/bluealsa/ctl-proto.h
122 diff --git a/src/shared/defs.h b/includes/bluealsa/defs.h
123 similarity index 100%
124 rename from src/shared/defs.h
125 rename to includes/bluealsa/defs.h
126 diff --git a/src/shared/ffb.h b/includes/bluealsa/ffb.h
127 similarity index 100%
128 rename from src/shared/ffb.h
129 rename to includes/bluealsa/ffb.h
130 diff --git a/src/shared/log.h b/includes/bluealsa/log.h
131 similarity index 100%
132 rename from src/shared/log.h
133 rename to includes/bluealsa/log.h
134 diff --git a/src/shared/rt.h b/includes/bluealsa/rt.h
135 similarity index 100%
136 rename from src/shared/rt.h
137 rename to includes/bluealsa/rt.h
138 diff --git a/src/Makefile.am b/src/Makefile.am
139 index fb1241d..5626ae5 100644
140 --- a/src/Makefile.am
141 +++ b/src/Makefile.am
143 # Copyright (c) 2016-2018 Arkadiusz Bokowy
145 bin_PROGRAMS = bluealsa
147 +SUBDIRS = bluealsalib asound
156 @@ -34,7 +31,8 @@ AM_CFLAGS = \
162 + -I$(top_srcdir)/includes
166 @@ -44,4 +42,5 @@ LDADD = \
172 + bluealsalib/libbluealsa.la
173 diff --git a/src/asound/Makefile.am b/src/asound/Makefile.am
174 index 923d884..24618f1 100644
175 --- a/src/asound/Makefile.am
176 +++ b/src/asound/Makefile.am
177 @@ -5,32 +5,35 @@ EXTRA_DIST = 20-bluealsa.conf
179 asound_module_ctl_LTLIBRARIES = libasound_module_ctl_bluealsa.la
180 asound_module_pcm_LTLIBRARIES = libasound_module_pcm_bluealsa.la
182 asound_module_conf_DATA = 20-bluealsa.conf
184 libasound_module_ctl_bluealsa_la_SOURCES = \
185 - ../shared/ctl-client.c \
189 libasound_module_pcm_bluealsa_la_SOURCES = \
190 - ../shared/ctl-client.c \
195 asound_module_ctldir = @ALSA_PLUGIN_DIR@
196 asound_module_pcmdir = @ALSA_PLUGIN_DIR@
198 asound_module_confdir = @ALSA_CONF_DIR@
201 -I$(top_srcdir)/src \
202 + -I$(top_srcdir)/includes \
207 -AM_LDFLAGS = -module -avoid-version
211 + ../bluealsalib/libbluealsa.la
213 libasound_module_ctl_bluealsa_la_LIBADD = \
216 libasound_module_pcm_bluealsa_la_LIBADD = \
219 diff --git a/src/asound/bluealsa-ctl.c b/src/asound/bluealsa-ctl.c
220 index f4a0181..1b9d124 100644
221 --- a/src/asound/bluealsa-ctl.c
222 +++ b/src/asound/bluealsa-ctl.c
224 #include <alsa/asoundlib.h>
225 #include <alsa/control_external.h>
227 -#include "shared/ctl-client.h"
228 -#include "shared/ctl-proto.h"
229 -#include "shared/log.h"
230 +#include <bluealsa/ctl-client.h>
231 +#include <bluealsa/ctl-proto.h>
232 +#include <bluealsa/log.h>
236 diff --git a/src/asound/bluealsa-pcm.c b/src/asound/bluealsa-pcm.c
237 index 258aebd..42cb61d 100644
238 --- a/src/asound/bluealsa-pcm.c
239 +++ b/src/asound/bluealsa-pcm.c
241 #include <alsa/asoundlib.h>
242 #include <alsa/pcm_external.h>
244 -#include "shared/ctl-client.h"
245 -#include "shared/ctl-proto.h"
246 -#include "shared/defs.h"
247 -#include "shared/log.h"
248 -#include "shared/rt.h"
249 +#include <bluealsa/ctl-client.h>
250 +#include <bluealsa/ctl-proto.h>
251 +#include <bluealsa/defs.h>
252 +#include <bluealsa/log.h>
253 +#include <bluealsa/rt.h>
256 struct bluealsa_pcm {
257 diff --git a/src/at.c b/src/at.c
258 index e3d1703..bda2255 100644
265 -#include "shared/defs.h"
266 -#include "shared/log.h"
267 +#include <bluealsa/defs.h>
268 +#include <bluealsa/log.h>
272 diff --git a/src/bluealsa.h b/src/bluealsa.h
273 index 7968ba9..7eee34f 100644
278 #include "bluez-a2dp.h"
279 #include "transport.h"
280 -#include "shared/ctl-proto.h"
281 +#include <bluealsa/ctl-proto.h>
285 diff --git a/src/bluealsalib/Makefile.am b/src/bluealsalib/Makefile.am
287 index 0000000..11d9e00
289 +++ b/src/bluealsalib/Makefile.am
291 +# BlueALSA - Makefile.am
292 +# Copyright (c) 2018 Thiery Bultel (thierry.bultel@iot.bzh)
294 +bluealsalib_LTLIBRARIES = libbluealsa.la
296 +libbluealsa_la_SOURCES = \
297 + ../shared/ctl-client.c \
302 +EXTRA_DIST=bluealsa.pc.in
304 +pkgconfigdir = $(libdir)/pkgconfig
305 +pkgconfig_DATA = bluealsa.pc
308 + -I$(top_srcdir)/src \
309 + -I$(top_srcdir)/includes \
314 +libbluealsa_la_LIBADD = \
318 +libbluealsa_la_LDFLAGS = \
320 + -version-info 1:0:0
322 +bluealsalibdir = $(libdir)
324 +# install path for published headers
325 +bluealsalibincludedir=$(includedir)/bluealsa
327 +bluealsalib_headers_dir=../../includes/bluealsa
329 +bluealsalib_headers = \
330 + $(bluealsalib_headers_dir)/bluealsa.h \
331 + $(bluealsalib_headers_dir)/ctl-client.h \
332 + $(bluealsalib_headers_dir)/ctl-proto.h \
333 + $(bluealsalib_headers_dir)/defs.h \
334 + $(bluealsalib_headers_dir)/ffb.h \
335 + $(bluealsalib_headers_dir)/log.h \
336 + $(bluealsalib_headers_dir)/rt.h
338 +libbluealsa_la_SOURCES += $(bluealsalib_headers)
340 +bluealsalibinclude_HEADERS = $(bluealsalib_headers)
341 diff --git a/src/bluealsalib/bluealsa.pc.in b/src/bluealsalib/bluealsa.pc.in
343 index 0000000..93c3c4a
345 +++ b/src/bluealsalib/bluealsa.pc.in
348 +exec_prefix=@exec_prefix@
350 +includedir=@includedir@
353 +Description: Bluez-Alsa - Library
356 +Libs: -L${libdir} -lbluealsa
357 +#Libs.private: @ALSA_DEPLIBS@
358 +Cflags: -I${includedir}/bluealsa
359 diff --git a/src/bluez-a2dp.c b/src/bluez-a2dp.c
360 index 5f81e6e..4c7b07b 100644
361 --- a/src/bluez-a2dp.c
362 +++ b/src/bluez-a2dp.c
366 #include "bluez-a2dp.h"
367 -#include "shared/defs.h"
368 +#include <bluealsa/defs.h>
370 static const a2dp_sbc_t a2dp_sbc = {
372 diff --git a/src/bluez.c b/src/bluez.c
373 index 537f0fe..591fdce 100644
378 #include "transport.h"
380 -#include "shared/log.h"
381 +#include <bluealsa/log.h>
385 diff --git a/src/ctl.c b/src/ctl.c
386 index ae2b812..dd3ab45 100644
391 #include "transport.h"
393 -#include "shared/defs.h"
394 -#include "shared/log.h"
395 +#include <bluealsa/defs.h>
396 +#include <bluealsa/log.h>
398 /* Special PCM type for internal usage only. */
399 #define BA_PCM_TYPE_RFCOMM 0x1F
400 diff --git a/src/ctl.h b/src/ctl.h
401 index 0e3c46b..593a9fd 100644
405 #ifndef BLUEALSA_CTL_H_
406 #define BLUEALSA_CTL_H_
408 -#include "shared/ctl-proto.h"
409 +#include <bluealsa/ctl-proto.h>
411 /* Indexes of special file descriptors in the poll array. */
412 #define CTL_IDX_SRV 0
413 diff --git a/src/io.c b/src/io.c
414 index b3d7ac9..f81eeb0 100644
418 #include "bluealsa.h"
419 #include "transport.h"
421 -#include "shared/defs.h"
422 -#include "shared/ffb.h"
423 -#include "shared/log.h"
424 -#include "shared/rt.h"
425 +#include <bluealsa/defs.h>
426 +#include <bluealsa/ffb.h>
427 +#include <bluealsa/log.h>
428 +#include <bluealsa/rt.h>
432 diff --git a/src/main.c b/src/main.c
433 index 35e6702..9cef402 100644
438 #include "transport.h"
440 -#include "shared/defs.h"
441 -#include "shared/log.h"
442 +#include <bluealsa/defs.h>
443 +#include <bluealsa/log.h>
446 static char *get_a2dp_codecs(
447 diff --git a/src/ofono.c b/src/ofono.c
448 index 902d099..bfd4e39 100644
453 #include "ofono-iface.h"
454 #include "transport.h"
455 -#include "shared/log.h"
456 +#include <bluealsa/log.h>
458 #define OFONO_FAKE_DEV_ID 0xffff
460 diff --git a/src/rfcomm.c b/src/rfcomm.c
461 index a86ae61..2d76725 100644
468 +#include <bluealsa/defs.h>
469 #include "bluealsa.h"
472 -#include "shared/defs.h"
473 -#include "shared/log.h"
474 +#include <bluealsa/log.h>
478 diff --git a/src/shared/ctl-client.c b/src/shared/ctl-client.c
479 index 6cf9402..2da9a54 100644
480 --- a/src/shared/ctl-client.c
481 +++ b/src/shared/ctl-client.c
486 -#include "shared/ctl-client.h"
487 +#include <bluealsa/ctl-client.h>
492 #include <sys/types.h>
495 -#include "shared/log.h"
496 +#include <bluealsa/log.h>
500 diff --git a/src/shared/ffb.c b/src/shared/ffb.c
501 index b31d7d1..ab50f4a 100644
502 --- a/src/shared/ffb.c
503 +++ b/src/shared/ffb.c
508 -#include "shared/ffb.h"
509 +#include "../../includes/bluealsa/ffb.h"
513 diff --git a/src/shared/log.c b/src/shared/log.c
514 index 65f0fea..884540c 100644
515 --- a/src/shared/log.c
516 +++ b/src/shared/log.c
521 -#include "shared/log.h"
522 +#include <bluealsa/log.h>
530 -#include "shared/rt.h"
531 +#include <bluealsa/rt.h>
534 /* internal logging identifier */
535 diff --git a/src/shared/rt.c b/src/shared/rt.c
536 index edcbebc..40bd721 100644
537 --- a/src/shared/rt.c
538 +++ b/src/shared/rt.c
543 -#include "shared/rt.h"
544 +#include <bluealsa/rt.h>
548 diff --git a/src/transport.c b/src/transport.c
549 index 7253925..1617dd1 100644
550 --- a/src/transport.c
551 +++ b/src/transport.c
556 -#include "shared/log.h"
557 +#include <bluealsa/log.h>
560 static const char *transport_type_to_string(enum ba_transport_type type) {
561 diff --git a/src/utils.c b/src/utils.c
562 index 70d069e..27459d2 100644
567 #include "a2dp-codecs.h"
569 -#include "shared/log.h"
570 +#include <bluealsa/log.h>
574 diff --git a/test/Makefile.am b/test/Makefile.am
575 index 104dc63..8f7b2eb 100644
576 --- a/test/Makefile.am
577 +++ b/test/Makefile.am
578 @@ -6,7 +6,8 @@ TESTS = \
588 @@ -14,7 +15,8 @@ check_PROGRAMS = \
596 check_LTLIBRARIES = \
598 @@ -25,6 +27,7 @@ aloader_la_LDFLAGS = \
601 -I$(top_srcdir)/src \
602 + -I$(top_srcdir)/includes \
606 @@ -46,4 +49,5 @@ LDADD = \
612 + ../src/bluealsalib/libbluealsa.la
613 diff --git a/test/server-mock.c b/test/server-mock.c
614 index 8c3a90e..c88fa35 100644
615 --- a/test/server-mock.c
616 +++ b/test/server-mock.c
618 #include "../src/rfcomm.c"
619 #include "../src/transport.c"
620 #include "../src/utils.c"
621 -#include "../src/shared/ffb.c"
622 -#include "../src/shared/log.c"
623 -#include "../src/shared/rt.c"
625 static const a2dp_sbc_t cconfig = {
626 .frequency = SBC_SAMPLING_FREQ_44100,
627 diff --git a/test/test-at.c b/test/test-at.c
628 index 8cff264..a847c22 100644
634 #include "../src/at.c"
635 -#include "../src/shared/log.c"
637 START_TEST(test_at_build) {
639 diff --git a/test/test-bluealsalib.c b/test/test-bluealsalib.c
641 index 0000000..d5fa3ff
643 +++ b/test/test-bluealsalib.c
646 + * test-bluealsalib.c
647 + * Copyright (c) 2018 Thierry Bultel
649 + * This file is a part of bluez-alsa.
651 + * This project is licensed under the terms of the MIT license.
655 +// TODO monitor all available interfaces
656 +const char * ba_interface = "hci0";
658 +#include <bluealsa/bluealsa.h>
659 +#include <bluealsa/log.h>
660 +#include <pthread.h>
665 +static void * monitor_thread_entry(void* arg) {
668 + int ba_fd, ba_event_fd;
669 + enum ba_event transport_mask = BA_EVENT_TRANSPORT_ADDED | BA_EVENT_TRANSPORT_CHANGED|BA_EVENT_TRANSPORT_REMOVED;
671 + if ((ba_fd = bluealsa_open(ba_interface)) == -1) {
672 + error("BlueALSA connection failed: %s", strerror(errno));
676 + if ((ba_event_fd = bluealsa_open(ba_interface)) == -1) {
677 + error("BlueALSA connection failed: %s", strerror(errno));
681 + if (bluealsa_subscribe(ba_event_fd, transport_mask) == -1) {
682 + error("BlueALSA subscription failed: %s", strerror(errno));
690 + struct ba_msg_event event;
691 + struct ba_msg_transport *transports;
695 + struct pollfd pfds[] = {{ ba_event_fd, POLLIN, 0 }};
696 + if (poll(pfds, ARRAYSIZE(pfds), -1) == -1 && errno == EINTR)
699 + while ((ret = recv(ba_event_fd, &event, sizeof(event), MSG_DONTWAIT)) == -1 && errno == EINTR)
701 + if (ret != sizeof(event)) {
702 + error("Couldn't read event: %s", strerror(ret == -1 ? errno : EBADMSG));
707 + debug("Fetching available transports");
708 + if ((ret = bluealsa_get_transports(ba_fd, &transports)) == -1) {
709 + error("Couldn't get transports: %s", strerror(errno));
713 + debug("Got %d transports", ret);
715 + for (int ix=0; ix<ret; ix++) {
717 + struct ba_msg_transport * transport = &transports[ix];
718 + ba2str(&transport->addr, addr);
719 + info("Transport %d: type %d, dev %s", ix, transport->type, addr);
729 +int main(int argc, char * argv[]) {
730 + printf("%s... !\n", argv[0]);
733 + if (pthread_create(&monitor, NULL, monitor_thread_entry, NULL) == -1) {
734 + debug("failed to create the monitor thread");
737 + pthread_join(monitor, NULL);
741 diff --git a/test/test-io.c b/test/test-io.c
742 index d913d2f..8ebb1d8 100644
746 #include "../src/rfcomm.c"
747 #include "../src/transport.c"
748 #include "../src/utils.c"
749 -#include "../src/shared/ffb.c"
750 -#include "../src/shared/log.c"
751 -#include "../src/shared/rt.c"
753 static const a2dp_sbc_t config_sbc_44100_stereo = {
754 .frequency = SBC_SAMPLING_FREQ_44100,
755 diff --git a/test/test-utils.c b/test/test-utils.c
756 index b704b42..46475f1 100644
757 --- a/test/test-utils.c
758 +++ b/test/test-utils.c
763 +#include <bluealsa/defs.h>
764 +#include <bluealsa/ffb.h>
765 +#include <bluealsa/rt.h>
767 #include "../src/utils.c"
768 -#include "../src/shared/defs.h"
769 -#include "../src/shared/ffb.c"
770 -#include "../src/shared/log.c"
771 -#include "../src/shared/rt.c"
773 START_TEST(test_dbus_profile_object_path) {
775 diff --git a/utils/Makefile.am b/utils/Makefile.am
776 index 256689a..a6d132c 100644
777 --- a/utils/Makefile.am
778 +++ b/utils/Makefile.am
779 @@ -6,32 +6,31 @@ bin_PROGRAMS =
781 bin_PROGRAMS += bluealsa-aplay
782 bluealsa_aplay_SOURCES = \
783 - ../src/shared/ctl-client.c \
784 - ../src/shared/ffb.c \
785 - ../src/shared/log.c \
787 bluealsa_aplay_CFLAGS = \
788 -I$(top_srcdir)/src \
789 + -I$(top_srcdir)/includes \
793 bluealsa_aplay_LDADD = \
798 + ../src/bluealsalib/libbluealsa.la
802 bin_PROGRAMS += bluealsa-rfcomm
803 bluealsa_rfcomm_SOURCES = \
804 - ../src/shared/ctl-client.c \
805 - ../src/shared/log.c \
807 bluealsa_rfcomm_CFLAGS = \
808 -I$(top_srcdir)/src \
809 + -I$(top_srcdir)/includes \
811 bluealsa_rfcomm_LDADD = \
813 + ../src/bluealsalib/libbluealsa.la \
817 diff --git a/utils/aplay.c b/utils/aplay.c
818 index f792ce6..4b1372e 100644
822 #include <alsa/asoundlib.h>
825 -#include "shared/ctl-client.h"
826 -#include "shared/defs.h"
827 -#include "shared/ffb.h"
828 -#include "shared/log.h"
829 +#include <bluealsa/ctl-client.h>
830 +#include <bluealsa/defs.h>
831 +#include <bluealsa/ffb.h>
832 +#include <bluealsa/log.h>
835 struct ba_msg_transport transport;
836 diff --git a/utils/rfcomm.c b/utils/rfcomm.c
837 index cc31f46..38e3b30 100644
841 #include <readline/readline.h>
842 #include <readline/history.h>
844 -#include "shared/ctl-client.h"
845 -#include "shared/log.h"
846 +#include <bluealsa/ctl-client.h>
847 +#include <bluealsa/log.h>
849 static char *strtrim(char *str) {
850 while (isspace(*str))