1 From 032917320d339e44a3981c347887b220e98e369e 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-pcm.c | 4 +-
44 test/test-utils.c | 8 +--
45 utils/Makefile.am | 11 ++-
48 40 files changed, 254 insertions(+), 75 deletions(-)
49 create mode 100644 includes/bluealsa/bluealsa.h
50 rename {src/shared => includes/bluealsa}/ctl-client.h (98%)
51 rename {src/shared => includes/bluealsa}/ctl-proto.h (100%)
52 rename {src/shared => includes/bluealsa}/defs.h (100%)
53 rename {src/shared => includes/bluealsa}/ffb.h (100%)
54 rename {src/shared => includes/bluealsa}/log.h (100%)
55 rename {src/shared => includes/bluealsa}/rt.h (100%)
56 create mode 100644 src/bluealsalib/Makefile.am
57 create mode 100644 src/bluealsalib/bluealsa.pc.in
58 create mode 100644 test/test-bluealsalib.c
60 diff --git a/configure.ac b/configure.ac
61 index 734fb59..fc52531 100644
64 @@ -158,8 +158,10 @@ AC_CONFIG_FILES([
68 + src/bluealsalib/Makefile
72 + src/bluealsalib/bluealsa.pc])
75 # warn user that alsa-lib thread-safety makes troubles
76 diff --git a/includes/bluealsa/bluealsa.h b/includes/bluealsa/bluealsa.h
78 index 0000000..062856a
80 +++ b/includes/bluealsa/bluealsa.h
83 + * BlueALSA - bluealsa.h
84 + * Copyright (c) 2018 Thierry Bultel
86 + * This file is a part of bluez-alsa.
88 + * This project is licensed under the terms of the MIT license.
95 +#include <bluealsa/ctl-client.h>
96 +#include <bluealsa/defs.h>
98 +typedef int (*transport_update_cb) (struct ba_msg_transport *transports);
100 +extern int bluelsa_register_transport_update_cb(const char * interfance, transport_update_cb cb);
103 diff --git a/src/shared/ctl-client.h b/includes/bluealsa/ctl-client.h
105 rename from src/shared/ctl-client.h
106 rename to includes/bluealsa/ctl-client.h
107 index 18f724d..36b537c 100644
108 --- a/src/shared/ctl-client.h
109 +++ b/includes/bluealsa/ctl-client.h
111 #define BLUEALSA_SHARED_CTLCLIENT_H_
114 -#include "shared/ctl-proto.h"
115 +#include <bluealsa/ctl-proto.h>
117 int bluealsa_open(const char *interface);
119 diff --git a/src/shared/ctl-proto.h b/includes/bluealsa/ctl-proto.h
120 similarity index 100%
121 rename from src/shared/ctl-proto.h
122 rename to includes/bluealsa/ctl-proto.h
123 diff --git a/src/shared/defs.h b/includes/bluealsa/defs.h
124 similarity index 100%
125 rename from src/shared/defs.h
126 rename to includes/bluealsa/defs.h
127 diff --git a/src/shared/ffb.h b/includes/bluealsa/ffb.h
128 similarity index 100%
129 rename from src/shared/ffb.h
130 rename to includes/bluealsa/ffb.h
131 diff --git a/src/shared/log.h b/includes/bluealsa/log.h
132 similarity index 100%
133 rename from src/shared/log.h
134 rename to includes/bluealsa/log.h
135 diff --git a/src/shared/rt.h b/includes/bluealsa/rt.h
136 similarity index 100%
137 rename from src/shared/rt.h
138 rename to includes/bluealsa/rt.h
139 diff --git a/src/Makefile.am b/src/Makefile.am
140 index fb1241d..5626ae5 100644
141 --- a/src/Makefile.am
142 +++ b/src/Makefile.am
144 # Copyright (c) 2016-2018 Arkadiusz Bokowy
146 bin_PROGRAMS = bluealsa
148 +SUBDIRS = bluealsalib asound
157 @@ -34,7 +31,8 @@ AM_CFLAGS = \
163 + -I$(top_srcdir)/includes
167 @@ -44,4 +42,5 @@ LDADD = \
173 + bluealsalib/libbluealsa.la
174 diff --git a/src/asound/Makefile.am b/src/asound/Makefile.am
175 index 923d884..24618f1 100644
176 --- a/src/asound/Makefile.am
177 +++ b/src/asound/Makefile.am
178 @@ -5,32 +5,35 @@ EXTRA_DIST = 20-bluealsa.conf
180 asound_module_ctl_LTLIBRARIES = libasound_module_ctl_bluealsa.la
181 asound_module_pcm_LTLIBRARIES = libasound_module_pcm_bluealsa.la
183 asound_module_conf_DATA = 20-bluealsa.conf
185 libasound_module_ctl_bluealsa_la_SOURCES = \
186 - ../shared/ctl-client.c \
190 libasound_module_pcm_bluealsa_la_SOURCES = \
191 - ../shared/ctl-client.c \
196 asound_module_ctldir = @ALSA_PLUGIN_DIR@
197 asound_module_pcmdir = @ALSA_PLUGIN_DIR@
199 asound_module_confdir = @ALSA_CONF_DIR@
202 -I$(top_srcdir)/src \
203 + -I$(top_srcdir)/includes \
208 -AM_LDFLAGS = -module -avoid-version
212 + ../bluealsalib/libbluealsa.la
214 libasound_module_ctl_bluealsa_la_LIBADD = \
217 libasound_module_pcm_bluealsa_la_LIBADD = \
220 diff --git a/src/asound/bluealsa-ctl.c b/src/asound/bluealsa-ctl.c
221 index 76cbe6a..3c931ca 100644
222 --- a/src/asound/bluealsa-ctl.c
223 +++ b/src/asound/bluealsa-ctl.c
225 #include <alsa/asoundlib.h>
226 #include <alsa/control_external.h>
228 -#include "shared/ctl-client.h"
229 -#include "shared/ctl-proto.h"
230 -#include "shared/log.h"
231 +#include <bluealsa/ctl-client.h>
232 +#include <bluealsa/ctl-proto.h>
233 +#include <bluealsa/log.h>
237 diff --git a/src/asound/bluealsa-pcm.c b/src/asound/bluealsa-pcm.c
238 index 46788f5..2136964 100644
239 --- a/src/asound/bluealsa-pcm.c
240 +++ b/src/asound/bluealsa-pcm.c
242 #include <alsa/asoundlib.h>
243 #include <alsa/pcm_external.h>
245 -#include "shared/ctl-client.h"
246 -#include "shared/ctl-proto.h"
247 -#include "shared/defs.h"
248 -#include "shared/log.h"
249 -#include "shared/rt.h"
250 +#include <bluealsa/ctl-client.h>
251 +#include <bluealsa/ctl-proto.h>
252 +#include <bluealsa/defs.h>
253 +#include <bluealsa/log.h>
254 +#include <bluealsa/rt.h>
257 struct bluealsa_pcm {
258 diff --git a/src/at.c b/src/at.c
259 index e3d1703..bda2255 100644
266 -#include "shared/defs.h"
267 -#include "shared/log.h"
268 +#include <bluealsa/defs.h>
269 +#include <bluealsa/log.h>
273 diff --git a/src/bluealsa.h b/src/bluealsa.h
274 index 3249439..b73241e 100644
279 #include "bluez-a2dp.h"
280 #include "transport.h"
281 -#include "shared/ctl-proto.h"
282 +#include <bluealsa/ctl-proto.h>
284 /* Maximal number of clients connected to the controller. */
285 #define BLUEALSA_MAX_CLIENTS 7
286 diff --git a/src/bluealsalib/Makefile.am b/src/bluealsalib/Makefile.am
288 index 0000000..11d9e00
290 +++ b/src/bluealsalib/Makefile.am
292 +# BlueALSA - Makefile.am
293 +# Copyright (c) 2018 Thiery Bultel (thierry.bultel@iot.bzh)
295 +bluealsalib_LTLIBRARIES = libbluealsa.la
297 +libbluealsa_la_SOURCES = \
298 + ../shared/ctl-client.c \
303 +EXTRA_DIST=bluealsa.pc.in
305 +pkgconfigdir = $(libdir)/pkgconfig
306 +pkgconfig_DATA = bluealsa.pc
309 + -I$(top_srcdir)/src \
310 + -I$(top_srcdir)/includes \
315 +libbluealsa_la_LIBADD = \
319 +libbluealsa_la_LDFLAGS = \
321 + -version-info 1:0:0
323 +bluealsalibdir = $(libdir)
325 +# install path for published headers
326 +bluealsalibincludedir=$(includedir)/bluealsa
328 +bluealsalib_headers_dir=../../includes/bluealsa
330 +bluealsalib_headers = \
331 + $(bluealsalib_headers_dir)/bluealsa.h \
332 + $(bluealsalib_headers_dir)/ctl-client.h \
333 + $(bluealsalib_headers_dir)/ctl-proto.h \
334 + $(bluealsalib_headers_dir)/defs.h \
335 + $(bluealsalib_headers_dir)/ffb.h \
336 + $(bluealsalib_headers_dir)/log.h \
337 + $(bluealsalib_headers_dir)/rt.h
339 +libbluealsa_la_SOURCES += $(bluealsalib_headers)
341 +bluealsalibinclude_HEADERS = $(bluealsalib_headers)
342 diff --git a/src/bluealsalib/bluealsa.pc.in b/src/bluealsalib/bluealsa.pc.in
344 index 0000000..93c3c4a
346 +++ b/src/bluealsalib/bluealsa.pc.in
349 +exec_prefix=@exec_prefix@
351 +includedir=@includedir@
354 +Description: Bluez-Alsa - Library
357 +Libs: -L${libdir} -lbluealsa
358 +#Libs.private: @ALSA_DEPLIBS@
359 +Cflags: -I${includedir}/bluealsa
360 diff --git a/src/bluez-a2dp.c b/src/bluez-a2dp.c
361 index 5f81e6e..4c7b07b 100644
362 --- a/src/bluez-a2dp.c
363 +++ b/src/bluez-a2dp.c
367 #include "bluez-a2dp.h"
368 -#include "shared/defs.h"
369 +#include <bluealsa/defs.h>
371 static const a2dp_sbc_t a2dp_sbc = {
373 diff --git a/src/bluez.c b/src/bluez.c
374 index 35f1b36..1478d6f 100644
379 #include "transport.h"
381 -#include "shared/log.h"
382 +#include <bluealsa/log.h>
386 diff --git a/src/ctl.c b/src/ctl.c
387 index b35afc7..82666b9 100644
392 #include "transport.h"
394 -#include "shared/defs.h"
395 -#include "shared/log.h"
396 +#include <bluealsa/defs.h>
397 +#include <bluealsa/log.h>
401 diff --git a/src/ctl.h b/src/ctl.h
402 index 5fd92ed..7f185a4 100644
406 #ifndef BLUEALSA_CTL_H_
407 #define BLUEALSA_CTL_H_
409 -#include "shared/ctl-proto.h"
410 +#include <bluealsa/ctl-proto.h>
412 int bluealsa_ctl_thread_init(void);
413 void bluealsa_ctl_free(void);
414 diff --git a/src/io.c b/src/io.c
415 index 5b098c4..e567bdb 100644
419 #include "bluealsa.h"
420 #include "transport.h"
422 -#include "shared/defs.h"
423 -#include "shared/ffb.h"
424 -#include "shared/log.h"
425 -#include "shared/rt.h"
426 +#include <bluealsa/defs.h>
427 +#include <bluealsa/ffb.h>
428 +#include <bluealsa/log.h>
429 +#include <bluealsa/rt.h>
433 diff --git a/src/main.c b/src/main.c
434 index 35e6702..9cef402 100644
439 #include "transport.h"
441 -#include "shared/defs.h"
442 -#include "shared/log.h"
443 +#include <bluealsa/defs.h>
444 +#include <bluealsa/log.h>
447 static char *get_a2dp_codecs(
448 diff --git a/src/ofono.c b/src/ofono.c
449 index 4331e03..63c8685 100644
454 #include "ofono-iface.h"
455 #include "transport.h"
456 -#include "shared/log.h"
457 +#include <bluealsa/log.h>
459 #define OFONO_FAKE_DEV_ID 0xffff
461 diff --git a/src/rfcomm.c b/src/rfcomm.c
462 index f2a904a..b1edf84 100644
469 +#include <bluealsa/defs.h>
470 #include "bluealsa.h"
473 -#include "shared/defs.h"
474 -#include "shared/log.h"
475 +#include <bluealsa/log.h>
479 diff --git a/src/shared/ctl-client.c b/src/shared/ctl-client.c
480 index 121689d..01ceecb 100644
481 --- a/src/shared/ctl-client.c
482 +++ b/src/shared/ctl-client.c
487 -#include "shared/ctl-client.h"
488 +#include <bluealsa/ctl-client.h>
493 #include <sys/types.h>
496 -#include "shared/log.h"
497 +#include <bluealsa/log.h>
501 diff --git a/src/shared/ffb.c b/src/shared/ffb.c
502 index b31d7d1..ab50f4a 100644
503 --- a/src/shared/ffb.c
504 +++ b/src/shared/ffb.c
509 -#include "shared/ffb.h"
510 +#include "../../includes/bluealsa/ffb.h"
514 diff --git a/src/shared/log.c b/src/shared/log.c
515 index 65f0fea..884540c 100644
516 --- a/src/shared/log.c
517 +++ b/src/shared/log.c
522 -#include "shared/log.h"
523 +#include <bluealsa/log.h>
531 -#include "shared/rt.h"
532 +#include <bluealsa/rt.h>
535 /* internal logging identifier */
536 diff --git a/src/shared/rt.c b/src/shared/rt.c
537 index edcbebc..40bd721 100644
538 --- a/src/shared/rt.c
539 +++ b/src/shared/rt.c
544 -#include "shared/rt.h"
545 +#include <bluealsa/rt.h>
549 diff --git a/src/transport.c b/src/transport.c
550 index aca8038..823316b 100644
551 --- a/src/transport.c
552 +++ b/src/transport.c
557 -#include "shared/log.h"
558 +#include <bluealsa/log.h>
561 static const char *transport_type_to_string(enum ba_transport_type type) {
562 diff --git a/src/utils.c b/src/utils.c
563 index 70d069e..27459d2 100644
568 #include "a2dp-codecs.h"
570 -#include "shared/log.h"
571 +#include <bluealsa/log.h>
575 diff --git a/test/Makefile.am b/test/Makefile.am
576 index 27a646a..3d67809 100644
577 --- a/test/Makefile.am
578 +++ b/test/Makefile.am
589 @@ -15,10 +16,12 @@ check_PROGRAMS = \
598 -I$(top_srcdir)/src \
599 + -I$(top_srcdir)/includes \
603 @@ -40,4 +43,5 @@ LDADD = \
609 + ../src/bluealsalib/libbluealsa.la
610 diff --git a/test/server-mock.c b/test/server-mock.c
611 index a27b59d..418e3a0 100644
612 --- a/test/server-mock.c
613 +++ b/test/server-mock.c
615 #include "../src/rfcomm.c"
616 #include "../src/transport.c"
617 #include "../src/utils.c"
618 -#include "../src/shared/ffb.c"
619 -#include "../src/shared/log.c"
620 -#include "../src/shared/rt.c"
622 static const a2dp_sbc_t cconfig = {
623 .frequency = SBC_SAMPLING_FREQ_44100,
624 diff --git a/test/test-at.c b/test/test-at.c
625 index 177cceb..8d5e2f3 100644
631 #include "../src/at.c"
632 -#include "../src/shared/log.c"
634 START_TEST(test_at_build) {
636 diff --git a/test/test-bluealsalib.c b/test/test-bluealsalib.c
638 index 0000000..d5fa3ff
640 +++ b/test/test-bluealsalib.c
643 + * test-bluealsalib.c
644 + * Copyright (c) 2018 Thierry Bultel
646 + * This file is a part of bluez-alsa.
648 + * This project is licensed under the terms of the MIT license.
652 +// TODO monitor all available interfaces
653 +const char * ba_interface = "hci0";
655 +#include <bluealsa/bluealsa.h>
656 +#include <bluealsa/log.h>
657 +#include <pthread.h>
662 +static void * monitor_thread_entry(void* arg) {
665 + int ba_fd, ba_event_fd;
666 + enum ba_event transport_mask = BA_EVENT_TRANSPORT_ADDED | BA_EVENT_TRANSPORT_CHANGED|BA_EVENT_TRANSPORT_REMOVED;
668 + if ((ba_fd = bluealsa_open(ba_interface)) == -1) {
669 + error("BlueALSA connection failed: %s", strerror(errno));
673 + if ((ba_event_fd = bluealsa_open(ba_interface)) == -1) {
674 + error("BlueALSA connection failed: %s", strerror(errno));
678 + if (bluealsa_subscribe(ba_event_fd, transport_mask) == -1) {
679 + error("BlueALSA subscription failed: %s", strerror(errno));
687 + struct ba_msg_event event;
688 + struct ba_msg_transport *transports;
692 + struct pollfd pfds[] = {{ ba_event_fd, POLLIN, 0 }};
693 + if (poll(pfds, ARRAYSIZE(pfds), -1) == -1 && errno == EINTR)
696 + while ((ret = recv(ba_event_fd, &event, sizeof(event), MSG_DONTWAIT)) == -1 && errno == EINTR)
698 + if (ret != sizeof(event)) {
699 + error("Couldn't read event: %s", strerror(ret == -1 ? errno : EBADMSG));
704 + debug("Fetching available transports");
705 + if ((ret = bluealsa_get_transports(ba_fd, &transports)) == -1) {
706 + error("Couldn't get transports: %s", strerror(errno));
710 + debug("Got %d transports", ret);
712 + for (int ix=0; ix<ret; ix++) {
714 + struct ba_msg_transport * transport = &transports[ix];
715 + ba2str(&transport->addr, addr);
716 + info("Transport %d: type %d, dev %s", ix, transport->type, addr);
726 +int main(int argc, char * argv[]) {
727 + printf("%s... !\n", argv[0]);
730 + if (pthread_create(&monitor, NULL, monitor_thread_entry, NULL) == -1) {
731 + debug("failed to create the monitor thread");
734 + pthread_join(monitor, NULL);
738 diff --git a/test/test-io.c b/test/test-io.c
739 index d913d2f..8ebb1d8 100644
743 #include "../src/rfcomm.c"
744 #include "../src/transport.c"
745 #include "../src/utils.c"
746 -#include "../src/shared/ffb.c"
747 -#include "../src/shared/log.c"
748 -#include "../src/shared/rt.c"
750 static const a2dp_sbc_t config_sbc_44100_stereo = {
751 .frequency = SBC_SAMPLING_FREQ_44100,
752 diff --git a/test/test-pcm.c b/test/test-pcm.c
753 index 1a4d02d..43e30e1 100644
754 --- a/test/test-pcm.c
755 +++ b/test/test-pcm.c
758 #include <alsa/asoundlib.h>
760 +#include <bluealsa/log.h>
762 #include "inc/server.inc"
763 #include "inc/sine.inc"
764 -#include "../src/shared/ffb.c"
765 -#include "../src/shared/log.c"
767 #define buffer_test_frames 1024
768 #define dumprv(fn) fprintf(stderr, #fn " = %d\n", (int)fn)
769 diff --git a/test/test-utils.c b/test/test-utils.c
770 index 767ca4e..98b5b42 100644
771 --- a/test/test-utils.c
772 +++ b/test/test-utils.c
777 +#include <bluealsa/defs.h>
778 +#include <bluealsa/ffb.h>
779 +#include <bluealsa/rt.h>
781 #include "../src/utils.c"
782 -#include "../src/shared/defs.h"
783 -#include "../src/shared/ffb.c"
784 -#include "../src/shared/log.c"
785 -#include "../src/shared/rt.c"
787 START_TEST(test_dbus_profile_object_path) {
789 diff --git a/utils/Makefile.am b/utils/Makefile.am
790 index 256689a..a6d132c 100644
791 --- a/utils/Makefile.am
792 +++ b/utils/Makefile.am
793 @@ -6,32 +6,31 @@ bin_PROGRAMS =
795 bin_PROGRAMS += bluealsa-aplay
796 bluealsa_aplay_SOURCES = \
797 - ../src/shared/ctl-client.c \
798 - ../src/shared/ffb.c \
799 - ../src/shared/log.c \
801 bluealsa_aplay_CFLAGS = \
802 -I$(top_srcdir)/src \
803 + -I$(top_srcdir)/includes \
807 bluealsa_aplay_LDADD = \
812 + ../src/bluealsalib/libbluealsa.la
816 bin_PROGRAMS += bluealsa-rfcomm
817 bluealsa_rfcomm_SOURCES = \
818 - ../src/shared/ctl-client.c \
819 - ../src/shared/log.c \
821 bluealsa_rfcomm_CFLAGS = \
822 -I$(top_srcdir)/src \
823 + -I$(top_srcdir)/includes \
825 bluealsa_rfcomm_LDADD = \
827 + ../src/bluealsalib/libbluealsa.la \
831 diff --git a/utils/aplay.c b/utils/aplay.c
832 index 7b71860..5211e7f 100644
836 #include <alsa/asoundlib.h>
839 -#include "shared/ctl-client.h"
840 -#include "shared/defs.h"
841 -#include "shared/ffb.h"
842 -#include "shared/log.h"
843 +#include <bluealsa/ctl-client.h>
844 +#include <bluealsa/defs.h>
845 +#include <bluealsa/ffb.h>
846 +#include <bluealsa/log.h>
849 struct ba_msg_transport transport;
850 diff --git a/utils/rfcomm.c b/utils/rfcomm.c
851 index 6794fc4..f5f045c 100644
855 #include <readline/readline.h>
856 #include <readline/history.h>
858 -#include "shared/ctl-client.h"
859 -#include "shared/log.h"
860 +#include <bluealsa/ctl-client.h>
861 +#include <bluealsa/log.h>
863 static char *strtrim(char *str) {
864 while (isspace(*str))