From 7625b67a687b7a365d9d758a86ed05e84b2b3a61 Mon Sep 17 00:00:00 2001 From: Thierry Bultel Date: Mon, 3 Dec 2018 14:29:07 +0100 Subject: [PATCH 1/3] build and link with a shared library Signed-off-by: Thierry Bultel --- configure.ac | 4 +- includes/bluealsa/bluealsa.h | 21 ++++++ {src/shared => includes/bluealsa}/ctl-client.h | 2 +- {src/shared => includes/bluealsa}/ctl-proto.h | 0 {src/shared => includes/bluealsa}/defs.h | 0 {src/shared => includes/bluealsa}/ffb.h | 0 {src/shared => includes/bluealsa}/log.h | 0 {src/shared => includes/bluealsa}/rt.h | 0 src/Makefile.am | 11 ++- src/asound/Makefile.am | 15 ++-- src/asound/bluealsa-ctl.c | 6 +- src/asound/bluealsa-pcm.c | 10 +-- src/at.c | 4 +- src/bluealsa.h | 2 +- src/bluealsalib/Makefile.am | 50 ++++++++++++++ src/bluealsalib/bluealsa.pc.in | 12 ++++ src/bluez-a2dp.c | 2 +- src/bluez.c | 2 +- src/ctl.c | 4 +- src/ctl.h | 2 +- src/io.c | 8 +-- src/main.c | 4 +- src/ofono.c | 2 +- src/rfcomm.c | 4 +- src/shared/ctl-client.c | 4 +- src/shared/ffb.c | 2 +- src/shared/log.c | 4 +- src/shared/rt.c | 2 +- src/transport.c | 2 +- src/utils.c | 2 +- test/Makefile.am | 10 ++- test/server-mock.c | 3 - test/test-at.c | 1 - test/test-bluealsalib.c | 96 ++++++++++++++++++++++++++ test/test-io.c | 3 - test/test-utils.c | 8 +-- utils/Makefile.am | 11 ++- utils/aplay.c | 8 +-- utils/rfcomm.c | 4 +- 39 files changed, 252 insertions(+), 73 deletions(-) create mode 100644 includes/bluealsa/bluealsa.h rename {src/shared => includes/bluealsa}/ctl-client.h (98%) rename {src/shared => includes/bluealsa}/ctl-proto.h (100%) rename {src/shared => includes/bluealsa}/defs.h (100%) rename {src/shared => includes/bluealsa}/ffb.h (100%) rename {src/shared => includes/bluealsa}/log.h (100%) rename {src/shared => includes/bluealsa}/rt.h (100%) create mode 100644 src/bluealsalib/Makefile.am create mode 100644 src/bluealsalib/bluealsa.pc.in create mode 100644 test/test-bluealsalib.c diff --git a/configure.ac b/configure.ac index 0bb9452..6323d60 100644 --- a/configure.ac +++ b/configure.ac @@ -152,8 +152,10 @@ AC_CONFIG_FILES([ Makefile src/Makefile src/asound/Makefile + src/bluealsalib/Makefile utils/Makefile - test/Makefile]) + test/Makefile + src/bluealsalib/bluealsa.pc]) AC_OUTPUT # warn user that alsa-lib thread-safety makes troubles diff --git a/includes/bluealsa/bluealsa.h b/includes/bluealsa/bluealsa.h new file mode 100644 index 0000000..062856a --- /dev/null +++ b/includes/bluealsa/bluealsa.h @@ -0,0 +1,21 @@ +/* + * BlueALSA - bluealsa.h + * Copyright (c) 2018 Thierry Bultel + * + * This file is a part of bluez-alsa. + * + * This project is licensed under the terms of the MIT license. + * + */ + +#ifndef BLUEALSA_H +#define BLUEALSA_H + +#include +#include + +typedef int (*transport_update_cb) (struct ba_msg_transport *transports); + +extern int bluelsa_register_transport_update_cb(const char * interfance, transport_update_cb cb); + +#endif diff --git a/src/shared/ctl-client.h b/includes/bluealsa/ctl-client.h similarity index 98% rename from src/shared/ctl-client.h rename to includes/bluealsa/ctl-client.h index 3dc93a6..b8af154 100644 --- a/src/shared/ctl-client.h +++ b/includes/bluealsa/ctl-client.h @@ -12,7 +12,7 @@ #define BLUEALSA_SHARED_CTLCLIENT_H_ #include -#include "shared/ctl-proto.h" +#include int bluealsa_open(const char *interface); diff --git a/src/shared/ctl-proto.h b/includes/bluealsa/ctl-proto.h similarity index 100% rename from src/shared/ctl-proto.h rename to includes/bluealsa/ctl-proto.h diff --git a/src/shared/defs.h b/includes/bluealsa/defs.h similarity index 100% rename from src/shared/defs.h rename to includes/bluealsa/defs.h diff --git a/src/shared/ffb.h b/includes/bluealsa/ffb.h similarity index 100% rename from src/shared/ffb.h rename to includes/bluealsa/ffb.h diff --git a/src/shared/log.h b/includes/bluealsa/log.h similarity index 100% rename from src/shared/log.h rename to includes/bluealsa/log.h diff --git a/src/shared/rt.h b/includes/bluealsa/rt.h similarity index 100% rename from src/shared/rt.h rename to includes/bluealsa/rt.h diff --git a/src/Makefile.am b/src/Makefile.am index fb1241d..5626ae5 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,12 +2,9 @@ # Copyright (c) 2016-2018 Arkadiusz Bokowy bin_PROGRAMS = bluealsa -SUBDIRS = asound +SUBDIRS = bluealsalib asound bluealsa_SOURCES = \ - shared/ffb.c \ - shared/log.c \ - shared/rt.c \ at.c \ bluealsa.c \ bluez.c \ @@ -34,7 +31,8 @@ AM_CFLAGS = \ @APTX_CFLAGS@ \ @LDAC_CFLAGS@ \ @LDAC_ABR_CFLAGS@ \ - @SBC_CFLAGS@ + @SBC_CFLAGS@ \ + -I$(top_srcdir)/includes LDADD = \ @BLUEZ_LIBS@ \ @@ -44,4 +42,5 @@ LDADD = \ @APTX_LIBS@ \ @LDAC_LIBS@ \ @LDAC_ABR_LIBS@ \ - @SBC_LIBS@ + @SBC_LIBS@ \ + bluealsalib/libbluealsa.la diff --git a/src/asound/Makefile.am b/src/asound/Makefile.am index 923d884..24618f1 100644 --- a/src/asound/Makefile.am +++ b/src/asound/Makefile.am @@ -5,32 +5,35 @@ EXTRA_DIST = 20-bluealsa.conf asound_module_ctl_LTLIBRARIES = libasound_module_ctl_bluealsa.la asound_module_pcm_LTLIBRARIES = libasound_module_pcm_bluealsa.la + asound_module_conf_DATA = 20-bluealsa.conf libasound_module_ctl_bluealsa_la_SOURCES = \ - ../shared/ctl-client.c \ - ../shared/log.c \ bluealsa-ctl.c + libasound_module_pcm_bluealsa_la_SOURCES = \ - ../shared/ctl-client.c \ - ../shared/log.c \ - ../shared/rt.c \ bluealsa-pcm.c asound_module_ctldir = @ALSA_PLUGIN_DIR@ asound_module_pcmdir = @ALSA_PLUGIN_DIR@ + asound_module_confdir = @ALSA_CONF_DIR@ AM_CFLAGS = \ -I$(top_srcdir)/src \ + -I$(top_srcdir)/includes \ @ALSA_CFLAGS@ \ @BLUEZ_CFLAGS@ \ @GLIB2_CFLAGS@ -AM_LDFLAGS = -module -avoid-version +AM_LDFLAGS = \ + -module \ + -avoid-version \ + ../bluealsalib/libbluealsa.la libasound_module_ctl_bluealsa_la_LIBADD = \ @ALSA_LIBS@ + libasound_module_pcm_bluealsa_la_LIBADD = \ @ALSA_LIBS@ \ @BLUEZ_LIBS@ diff --git a/src/asound/bluealsa-ctl.c b/src/asound/bluealsa-ctl.c index f4a0181..1b9d124 100644 --- a/src/asound/bluealsa-ctl.c +++ b/src/asound/bluealsa-ctl.c @@ -19,9 +19,9 @@ #include #include -#include "shared/ctl-client.h" -#include "shared/ctl-proto.h" -#include "shared/log.h" +#include +#include +#include enum ctl_elem_type { diff --git a/src/asound/bluealsa-pcm.c b/src/asound/bluealsa-pcm.c index 258aebd..42cb61d 100644 --- a/src/asound/bluealsa-pcm.c +++ b/src/asound/bluealsa-pcm.c @@ -23,11 +23,11 @@ #include #include -#include "shared/ctl-client.h" -#include "shared/ctl-proto.h" -#include "shared/defs.h" -#include "shared/log.h" -#include "shared/rt.h" +#include +#include +#include +#include +#include struct bluealsa_pcm { diff --git a/src/at.c b/src/at.c index e3d1703..bda2255 100644 --- a/src/at.c +++ b/src/at.c @@ -16,8 +16,8 @@ #include #include -#include "shared/defs.h" -#include "shared/log.h" +#include +#include /** diff --git a/src/bluealsa.h b/src/bluealsa.h index 7968ba9..7eee34f 100644 --- a/src/bluealsa.h +++ b/src/bluealsa.h @@ -27,7 +27,7 @@ #include "bluez.h" #include "bluez-a2dp.h" #include "transport.h" -#include "shared/ctl-proto.h" +#include struct ba_config { diff --git a/src/bluealsalib/Makefile.am b/src/bluealsalib/Makefile.am new file mode 100644 index 0000000..11d9e00 --- /dev/null +++ b/src/bluealsalib/Makefile.am @@ -0,0 +1,50 @@ +# BlueALSA - Makefile.am +# Copyright (c) 2018 Thiery Bultel (thierry.bultel@iot.bzh) + +bluealsalib_LTLIBRARIES = libbluealsa.la + +libbluealsa_la_SOURCES = \ + ../shared/ctl-client.c \ + ../shared/ffb.c \ + ../shared/log.c \ + ../shared/rt.c + +EXTRA_DIST=bluealsa.pc.in + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = bluealsa.pc + +AM_CFLAGS = \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/includes \ + @ALSA_CFLAGS@ \ + @BLUEZ_CFLAGS@ \ + @GLIB2_CFLAGS@ + +libbluealsa_la_LIBADD = \ + @ALSA_LIBS@ \ + @BLUEZ_LIBS@ + +libbluealsa_la_LDFLAGS = \ + $(AM_LDFLAGS) \ + -version-info 1:0:0 + +bluealsalibdir = $(libdir) + +# install path for published headers +bluealsalibincludedir=$(includedir)/bluealsa + +bluealsalib_headers_dir=../../includes/bluealsa + +bluealsalib_headers = \ + $(bluealsalib_headers_dir)/bluealsa.h \ + $(bluealsalib_headers_dir)/ctl-client.h \ + $(bluealsalib_headers_dir)/ctl-proto.h \ + $(bluealsalib_headers_dir)/defs.h \ + $(bluealsalib_headers_dir)/ffb.h \ + $(bluealsalib_headers_dir)/log.h \ + $(bluealsalib_headers_dir)/rt.h + +libbluealsa_la_SOURCES += $(bluealsalib_headers) + +bluealsalibinclude_HEADERS = $(bluealsalib_headers) diff --git a/src/bluealsalib/bluealsa.pc.in b/src/bluealsalib/bluealsa.pc.in new file mode 100644 index 0000000..93c3c4a --- /dev/null +++ b/src/bluealsalib/bluealsa.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: alsa +Description: Bluez-Alsa - Library +Version: @VERSION@ +Requires: +Libs: -L${libdir} -lbluealsa +#Libs.private: @ALSA_DEPLIBS@ +Cflags: -I${includedir}/bluealsa diff --git a/src/bluez-a2dp.c b/src/bluez-a2dp.c index 5f81e6e..4c7b07b 100644 --- a/src/bluez-a2dp.c +++ b/src/bluez-a2dp.c @@ -13,7 +13,7 @@ #endif #include "bluez-a2dp.h" -#include "shared/defs.h" +#include static const a2dp_sbc_t a2dp_sbc = { .frequency = diff --git a/src/bluez.c b/src/bluez.c index 537f0fe..591fdce 100644 --- a/src/bluez.c +++ b/src/bluez.c @@ -24,7 +24,7 @@ #include "ctl.h" #include "transport.h" #include "utils.h" -#include "shared/log.h" +#include /** diff --git a/src/ctl.c b/src/ctl.c index ae2b812..dd3ab45 100644 --- a/src/ctl.c +++ b/src/ctl.c @@ -32,8 +32,8 @@ #include "hfp.h" #include "transport.h" #include "utils.h" -#include "shared/defs.h" -#include "shared/log.h" +#include +#include /* Special PCM type for internal usage only. */ #define BA_PCM_TYPE_RFCOMM 0x1F diff --git a/src/ctl.h b/src/ctl.h index 0e3c46b..593a9fd 100644 --- a/src/ctl.h +++ b/src/ctl.h @@ -11,7 +11,7 @@ #ifndef BLUEALSA_CTL_H_ #define BLUEALSA_CTL_H_ -#include "shared/ctl-proto.h" +#include /* Indexes of special file descriptors in the poll array. */ #define CTL_IDX_SRV 0 diff --git a/src/io.c b/src/io.c index b3d7ac9..f81eeb0 100644 --- a/src/io.c +++ b/src/io.c @@ -44,10 +44,10 @@ #include "bluealsa.h" #include "transport.h" #include "utils.h" -#include "shared/defs.h" -#include "shared/ffb.h" -#include "shared/log.h" -#include "shared/rt.h" +#include +#include +#include +#include /** diff --git a/src/main.c b/src/main.c index 35e6702..9cef402 100644 --- a/src/main.c +++ b/src/main.c @@ -37,8 +37,8 @@ #endif #include "transport.h" #include "utils.h" -#include "shared/defs.h" -#include "shared/log.h" +#include +#include static char *get_a2dp_codecs( diff --git a/src/ofono.c b/src/ofono.c index 902d099..bfd4e39 100644 --- a/src/ofono.c +++ b/src/ofono.c @@ -27,7 +27,7 @@ #include "ctl.h" #include "ofono-iface.h" #include "transport.h" -#include "shared/log.h" +#include #define OFONO_FAKE_DEV_ID 0xffff diff --git a/src/rfcomm.c b/src/rfcomm.c index a86ae61..2d76725 100644 --- a/src/rfcomm.c +++ b/src/rfcomm.c @@ -17,11 +17,11 @@ #include #include +#include #include "bluealsa.h" #include "ctl.h" #include "utils.h" -#include "shared/defs.h" -#include "shared/log.h" +#include /** diff --git a/src/shared/ctl-client.c b/src/shared/ctl-client.c index 6cf9402..2da9a54 100644 --- a/src/shared/ctl-client.c +++ b/src/shared/ctl-client.c @@ -8,7 +8,7 @@ * */ -#include "shared/ctl-client.h" +#include #include #include @@ -19,7 +19,7 @@ #include #include -#include "shared/log.h" +#include /** diff --git a/src/shared/ffb.c b/src/shared/ffb.c index b31d7d1..ab50f4a 100644 --- a/src/shared/ffb.c +++ b/src/shared/ffb.c @@ -8,7 +8,7 @@ * */ -#include "shared/ffb.h" +#include "../../includes/bluealsa/ffb.h" /** diff --git a/src/shared/log.c b/src/shared/log.c index 65f0fea..884540c 100644 --- a/src/shared/log.c +++ b/src/shared/log.c @@ -8,7 +8,7 @@ * */ -#include "shared/log.h" +#include #include #include @@ -17,7 +17,7 @@ #include #include -#include "shared/rt.h" +#include /* internal logging identifier */ diff --git a/src/shared/rt.c b/src/shared/rt.c index edcbebc..40bd721 100644 --- a/src/shared/rt.c +++ b/src/shared/rt.c @@ -8,7 +8,7 @@ * */ -#include "shared/rt.h" +#include #include diff --git a/src/transport.c b/src/transport.c index 7253925..1617dd1 100644 --- a/src/transport.c +++ b/src/transport.c @@ -34,7 +34,7 @@ #include "io.h" #include "rfcomm.h" #include "utils.h" -#include "shared/log.h" +#include static const char *transport_type_to_string(enum ba_transport_type type) { diff --git a/src/utils.c b/src/utils.c index 70d069e..27459d2 100644 --- a/src/utils.c +++ b/src/utils.c @@ -24,7 +24,7 @@ #include "a2dp-codecs.h" #include "bluez.h" -#include "shared/log.h" +#include /** diff --git a/test/Makefile.am b/test/Makefile.am index 104dc63..8f7b2eb 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -6,7 +6,8 @@ TESTS = \ test-ctl \ test-io \ test-pcm \ - test-utils + test-utils \ + test-bluealsalib check_PROGRAMS = \ server-mock \ @@ -14,7 +15,8 @@ check_PROGRAMS = \ test-ctl \ test-io \ test-pcm \ - test-utils + test-utils \ + test-bluealsalib check_LTLIBRARIES = \ aloader.la @@ -25,6 +27,7 @@ aloader_la_LDFLAGS = \ AM_CFLAGS = \ -I$(top_srcdir)/src \ + -I$(top_srcdir)/includes \ @AAC_CFLAGS@ \ @ALSA_CFLAGS@ \ @APTX_CFLAGS@ \ @@ -46,4 +49,5 @@ LDADD = \ @GLIB2_LIBS@ \ @LDAC_ABR_LIBS@ \ @LDAC_LIBS@ \ - @SBC_LIBS@ + @SBC_LIBS@ \ + ../src/bluealsalib/libbluealsa.la diff --git a/test/server-mock.c b/test/server-mock.c index 8c3a90e..c88fa35 100644 --- a/test/server-mock.c +++ b/test/server-mock.c @@ -31,9 +31,6 @@ #include "../src/rfcomm.c" #include "../src/transport.c" #include "../src/utils.c" -#include "../src/shared/ffb.c" -#include "../src/shared/log.c" -#include "../src/shared/rt.c" static const a2dp_sbc_t cconfig = { .frequency = SBC_SAMPLING_FREQ_44100, diff --git a/test/test-at.c b/test/test-at.c index 8cff264..a847c22 100644 --- a/test/test-at.c +++ b/test/test-at.c @@ -11,7 +11,6 @@ #include #include "../src/at.c" -#include "../src/shared/log.c" START_TEST(test_at_build) { diff --git a/test/test-bluealsalib.c b/test/test-bluealsalib.c new file mode 100644 index 0000000..d5fa3ff --- /dev/null +++ b/test/test-bluealsalib.c @@ -0,0 +1,96 @@ +/* + * test-bluealsalib.c + * Copyright (c) 2018 Thierry Bultel + * + * This file is a part of bluez-alsa. + * + * This project is licensed under the terms of the MIT license. + * + */ + +// TODO monitor all available interfaces +const char * ba_interface = "hci0"; + +#include +#include +#include +#include +#include + + +static void * monitor_thread_entry(void* arg) { + debug("..."); + + int ba_fd, ba_event_fd; + enum ba_event transport_mask = BA_EVENT_TRANSPORT_ADDED | BA_EVENT_TRANSPORT_CHANGED|BA_EVENT_TRANSPORT_REMOVED; + + if ((ba_fd = bluealsa_open(ba_interface)) == -1) { + error("BlueALSA connection failed: %s", strerror(errno)); + goto fail; + } + + if ((ba_event_fd = bluealsa_open(ba_interface)) == -1) { + error("BlueALSA connection failed: %s", strerror(errno)); + goto fail; + } + + if (bluealsa_subscribe(ba_event_fd, transport_mask) == -1) { + error("BlueALSA subscription failed: %s", strerror(errno)); + goto fail; + } + +goto init; + + while (true) { + + struct ba_msg_event event; + struct ba_msg_transport *transports; + ssize_t ret; + size_t i; + + struct pollfd pfds[] = {{ ba_event_fd, POLLIN, 0 }}; + if (poll(pfds, ARRAYSIZE(pfds), -1) == -1 && errno == EINTR) + continue; + + while ((ret = recv(ba_event_fd, &event, sizeof(event), MSG_DONTWAIT)) == -1 && errno == EINTR) + continue; + if (ret != sizeof(event)) { + error("Couldn't read event: %s", strerror(ret == -1 ? errno : EBADMSG)); + goto fail; + } + +init: + debug("Fetching available transports"); + if ((ret = bluealsa_get_transports(ba_fd, &transports)) == -1) { + error("Couldn't get transports: %s", strerror(errno)); + goto fail; + } + + debug("Got %d transports", ret); + + for (int ix=0; ixaddr, addr); + info("Transport %d: type %d, dev %s", ix, transport->type, addr); + } + + } + +fail: + info("exit"); + return NULL; +} + +int main(int argc, char * argv[]) { + printf("%s... !\n", argv[0]); + + pthread_t monitor; + if (pthread_create(&monitor, NULL, monitor_thread_entry, NULL) == -1) { + debug("failed to create the monitor thread"); + goto fail; + } + pthread_join(monitor, NULL); +fail: + return 0; +} diff --git a/test/test-io.c b/test/test-io.c index d913d2f..8ebb1d8 100644 --- a/test/test-io.c +++ b/test/test-io.c @@ -21,9 +21,6 @@ #include "../src/rfcomm.c" #include "../src/transport.c" #include "../src/utils.c" -#include "../src/shared/ffb.c" -#include "../src/shared/log.c" -#include "../src/shared/rt.c" static const a2dp_sbc_t config_sbc_44100_stereo = { .frequency = SBC_SAMPLING_FREQ_44100, diff --git a/test/test-utils.c b/test/test-utils.c index b704b42..46475f1 100644 --- a/test/test-utils.c +++ b/test/test-utils.c @@ -10,11 +10,11 @@ #include +#include +#include +#include + #include "../src/utils.c" -#include "../src/shared/defs.h" -#include "../src/shared/ffb.c" -#include "../src/shared/log.c" -#include "../src/shared/rt.c" START_TEST(test_dbus_profile_object_path) { diff --git a/utils/Makefile.am b/utils/Makefile.am index 256689a..a6d132c 100644 --- a/utils/Makefile.am +++ b/utils/Makefile.am @@ -6,32 +6,31 @@ bin_PROGRAMS = if ENABLE_APLAY bin_PROGRAMS += bluealsa-aplay bluealsa_aplay_SOURCES = \ - ../src/shared/ctl-client.c \ - ../src/shared/ffb.c \ - ../src/shared/log.c \ aplay.c bluealsa_aplay_CFLAGS = \ -I$(top_srcdir)/src \ + -I$(top_srcdir)/includes \ @ALSA_CFLAGS@ \ @BLUEZ_CFLAGS@ \ @GIO2_CFLAGS@ bluealsa_aplay_LDADD = \ @ALSA_LIBS@ \ @BLUEZ_LIBS@ \ - @GIO2_LIBS@ + @GIO2_LIBS@ \ + ../src/bluealsalib/libbluealsa.la endif if ENABLE_RFCOMM bin_PROGRAMS += bluealsa-rfcomm bluealsa_rfcomm_SOURCES = \ - ../src/shared/ctl-client.c \ - ../src/shared/log.c \ rfcomm.c bluealsa_rfcomm_CFLAGS = \ -I$(top_srcdir)/src \ + -I$(top_srcdir)/includes \ @BLUEZ_CFLAGS@ bluealsa_rfcomm_LDADD = \ @BLUEZ_LIBS@ \ + ../src/bluealsalib/libbluealsa.la \ -lreadline endif diff --git a/utils/aplay.c b/utils/aplay.c index f792ce6..4b1372e 100644 --- a/utils/aplay.c +++ b/utils/aplay.c @@ -25,10 +25,10 @@ #include #include -#include "shared/ctl-client.h" -#include "shared/defs.h" -#include "shared/ffb.h" -#include "shared/log.h" +#include +#include +#include +#include struct pcm_worker { struct ba_msg_transport transport; diff --git a/utils/rfcomm.c b/utils/rfcomm.c index cc31f46..38e3b30 100644 --- a/utils/rfcomm.c +++ b/utils/rfcomm.c @@ -24,8 +24,8 @@ #include #include -#include "shared/ctl-client.h" -#include "shared/log.h" +#include +#include static char *strtrim(char *str) { while (isspace(*str)) -- 2.16.4