2022-06-10 07:30:40

by Frédéric Danis

[permalink] [raw]
Subject: [PATCH BlueZ v2 0/3] test-runner: Add support for audio daemons

Those patches add DBus session and an audio card so it should be possible
to start an audio daemon like PipeWire in the VM.

Frédéric Danis (3):
test-runner: Add DBus session support
test-runner: Add audio card support
test-runner: Add udevd and trigger events

doc/test-runner.txt | 5 ++
tools/test-runner.c | 197 +++++++++++++++++++++++++++++++++++++++++---
2 files changed, 189 insertions(+), 13 deletions(-)

Since v1:
- Fix checkpatch errors

--
2.25.1


2022-06-10 07:30:43

by Frédéric Danis

[permalink] [raw]
Subject: [PATCH BlueZ v2 2/3] test-runner: Add audio card support

With this commit audio daemons can detect an audio card with output and
input, allowing to test interaction between BlueZ and the audio daemon.
---
doc/test-runner.txt | 5 +++++
tools/test-runner.c | 23 ++++++++++++++++++++++-
2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/doc/test-runner.txt b/doc/test-runner.txt
index 683c622a2..019c23188 100644
--- a/doc/test-runner.txt
+++ b/doc/test-runner.txt
@@ -54,6 +54,11 @@ For Bluetooth functionality:

CONFIG_UHID=y

+For Audio functionality:
+ CONFIG_SYSVIPC=y
+ CONFIG_SOUND=y
+ CONFIG_SND=y
+ CONFIG_SND_INTEL8X0=y

These options should be installed as .config in the kernel source directory
followed by this command.
diff --git a/tools/test-runner.c b/tools/test-runner.c
index 9fc8e7b33..bbbca5b5d 100644
--- a/tools/test-runner.c
+++ b/tools/test-runner.c
@@ -54,6 +54,7 @@ static bool start_monitor = false;
static int num_devs = 0;
static const char *qemu_binary = NULL;
static const char *kernel_image = NULL;
+static bool audio_support;

static const char *qemu_table[] = {
"qemu-system-x86_64",
@@ -261,6 +262,7 @@ static void start_qemu(void)
run_auto, testargs);

argv = alloca(sizeof(qemu_argv) +
+ (audio_support ? 4 : 0) +
(sizeof(char *) * (4 + (num_devs * 4))));
memcpy(argv, qemu_argv, sizeof(qemu_argv));

@@ -268,6 +270,20 @@ static void start_qemu(void)

argv[0] = (char *) qemu_binary;

+ if (audio_support) {
+ char *xdg_runtime_dir, *audiodev;
+
+ xdg_runtime_dir = getenv("XDG_RUNTIME_DIR");
+ audiodev = alloca(40 + strlen(xdg_runtime_dir));
+ sprintf(audiodev, "id=audio,driver=pa,server=%s/pulse/native",
+ xdg_runtime_dir);
+
+ argv[pos++] = "-audiodev";
+ argv[pos++] = audiodev;
+ argv[pos++] = "-device";
+ argv[pos++] = "AC97,audiodev=audio";
+ }
+
argv[pos++] = "-kernel";
argv[pos++] = (char *) kernel_image;
argv[pos++] = "-append";
@@ -990,6 +1006,7 @@ static void usage(void)
"\t-u, --unix [path] Provide serial device\n"
"\t-q, --qemu <path> QEMU binary\n"
"\t-k, --kernel <image> Kernel image (bzImage)\n"
+ "\t-A, --audio Add audio support\n"
"\t-h, --help Show help options\n");
}

@@ -1004,6 +1021,7 @@ static const struct option main_options[] = {
{ "monitor", no_argument, NULL, 'm' },
{ "qemu", required_argument, NULL, 'q' },
{ "kernel", required_argument, NULL, 'k' },
+ { "audio", no_argument, NULL, 'A' },
{ "version", no_argument, NULL, 'v' },
{ "help", no_argument, NULL, 'h' },
{ }
@@ -1023,7 +1041,7 @@ int main(int argc, char *argv[])
for (;;) {
int opt;

- opt = getopt_long(argc, argv, "aubdslmq:k:vh", main_options,
+ opt = getopt_long(argc, argv, "aubdslmq:k:Avh", main_options,
NULL);
if (opt < 0)
break;
@@ -1057,6 +1075,9 @@ int main(int argc, char *argv[])
case 'k':
kernel_image = optarg;
break;
+ case 'A':
+ audio_support = true;
+ break;
case 'v':
printf("%s\n", VERSION);
return EXIT_SUCCESS;
--
2.25.1

2022-06-10 16:03:24

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [PATCH BlueZ v2 2/3] test-runner: Add audio card support

Hi Frédéric,

On Fri, Jun 10, 2022 at 12:30 AM Frédéric Danis
<[email protected]> wrote:
>
> With this commit audio daemons can detect an audio card with output and
> input, allowing to test interaction between BlueZ and the audio daemon.
> ---
> doc/test-runner.txt | 5 +++++
> tools/test-runner.c | 23 ++++++++++++++++++++++-
> 2 files changed, 27 insertions(+), 1 deletion(-)
>
> diff --git a/doc/test-runner.txt b/doc/test-runner.txt
> index 683c622a2..019c23188 100644
> --- a/doc/test-runner.txt
> +++ b/doc/test-runner.txt
> @@ -54,6 +54,11 @@ For Bluetooth functionality:
>
> CONFIG_UHID=y
>
> +For Audio functionality:
> + CONFIG_SYSVIPC=y
> + CONFIG_SOUND=y
> + CONFIG_SND=y
> + CONFIG_SND_INTEL8X0=y

Lets have this as a separate patch.

> These options should be installed as .config in the kernel source directory
> followed by this command.
> diff --git a/tools/test-runner.c b/tools/test-runner.c
> index 9fc8e7b33..bbbca5b5d 100644
> --- a/tools/test-runner.c
> +++ b/tools/test-runner.c
> @@ -54,6 +54,7 @@ static bool start_monitor = false;
> static int num_devs = 0;
> static const char *qemu_binary = NULL;
> static const char *kernel_image = NULL;
> +static bool audio_support;
>
> static const char *qemu_table[] = {
> "qemu-system-x86_64",
> @@ -261,6 +262,7 @@ static void start_qemu(void)
> run_auto, testargs);
>
> argv = alloca(sizeof(qemu_argv) +
> + (audio_support ? 4 : 0) +
> (sizeof(char *) * (4 + (num_devs * 4))));
> memcpy(argv, qemu_argv, sizeof(qemu_argv));
>
> @@ -268,6 +270,20 @@ static void start_qemu(void)
>
> argv[0] = (char *) qemu_binary;
>
> + if (audio_support) {
> + char *xdg_runtime_dir, *audiodev;
> +
> + xdg_runtime_dir = getenv("XDG_RUNTIME_DIR");
> + audiodev = alloca(40 + strlen(xdg_runtime_dir));
> + sprintf(audiodev, "id=audio,driver=pa,server=%s/pulse/native",
> + xdg_runtime_dir);
> +
> + argv[pos++] = "-audiodev";
> + argv[pos++] = audiodev;
> + argv[pos++] = "-device";
> + argv[pos++] = "AC97,audiodev=audio";
> + }
> +
> argv[pos++] = "-kernel";
> argv[pos++] = (char *) kernel_image;
> argv[pos++] = "-append";
> @@ -990,6 +1006,7 @@ static void usage(void)
> "\t-u, --unix [path] Provide serial device\n"
> "\t-q, --qemu <path> QEMU binary\n"
> "\t-k, --kernel <image> Kernel image (bzImage)\n"
> + "\t-A, --audio Add audio support\n"
> "\t-h, --help Show help options\n");
> }
>
> @@ -1004,6 +1021,7 @@ static const struct option main_options[] = {
> { "monitor", no_argument, NULL, 'm' },
> { "qemu", required_argument, NULL, 'q' },
> { "kernel", required_argument, NULL, 'k' },
> + { "audio", no_argument, NULL, 'A' },
> { "version", no_argument, NULL, 'v' },
> { "help", no_argument, NULL, 'h' },
> { }
> @@ -1023,7 +1041,7 @@ int main(int argc, char *argv[])
> for (;;) {
> int opt;
>
> - opt = getopt_long(argc, argv, "aubdslmq:k:vh", main_options,
> + opt = getopt_long(argc, argv, "aubdslmq:k:Avh", main_options,
> NULL);
> if (opt < 0)
> break;
> @@ -1057,6 +1075,9 @@ int main(int argc, char *argv[])
> case 'k':
> kernel_image = optarg;
> break;
> + case 'A':
> + audio_support = true;
> + break;
> case 'v':
> printf("%s\n", VERSION);
> return EXIT_SUCCESS;
> --
> 2.25.1
>


--
Luiz Augusto von Dentz