linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH BlueZ 0/1 v3] ELL based mainloop
@ 2019-08-11  7:00 Inga Stotland
  2019-08-11  7:00 ` [PATCH BlueZ 1/1 v3] shared/mainloop: Add ell-based mainloop implementation Inga Stotland
  2019-09-25 18:19 ` [PATCH BlueZ 0/1 v3] ELL based mainloop Stotland, Inga
  0 siblings, 2 replies; 4+ messages in thread
From: Inga Stotland @ 2019-08-11  7:00 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: luiz.dentz, Inga Stotland

+ timeout-ell.c

This patch addresses a need to enable using common mainloop for the
ell-based apps that desire to use common bluetooth fuctionality
(e.g., bt_shell).

Note: A bit awkward callback handling there is due to the discrepancy
in the arg type for signo (signal number).

src/shared/mainloop.h:
typedef void (*mainloop_signal_func) (int signum, void *user_data)

and ell/main.h:

typedef void (*l_main_signal_cb_t) (uint32_t signo, void *user_data)

My guess is that ell derives the unsigned int type from <sys/signalfd.h>,
where ssi_signo is defined as uint32_t. BlueZ is probably following the
standard Linux signal handling, where signal is represented as an int. 

Inga Stotland (1):
  shared/mainloop: Add ell-based mainloop implementation

 Makefile.am               |  11 +++-
 src/shared/mainloop-ell.c | 126 ++++++++++++++++++++++++++++++++++++++
 src/shared/timeout-ell.c  |  72 ++++++++++++++++++++++
 3 files changed, 206 insertions(+), 3 deletions(-)
 create mode 100644 src/shared/mainloop-ell.c
 create mode 100644 src/shared/timeout-ell.c

-- 
2.21.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH BlueZ 1/1 v3] shared/mainloop: Add ell-based mainloop implementation
  2019-08-11  7:00 [PATCH BlueZ 0/1 v3] ELL based mainloop Inga Stotland
@ 2019-08-11  7:00 ` Inga Stotland
  2019-09-25 18:19 ` [PATCH BlueZ 0/1 v3] ELL based mainloop Stotland, Inga
  1 sibling, 0 replies; 4+ messages in thread
From: Inga Stotland @ 2019-08-11  7:00 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: luiz.dentz, Inga Stotland

This adds implementation of wrapper mainloop functions to interact with
ell main APIs, enabling support for the applications that link with ell
library and use mainloop functionality.
---
 Makefile.am               |  11 +++-
 src/shared/mainloop-ell.c | 126 ++++++++++++++++++++++++++++++++++++++
 src/shared/timeout-ell.c  |  72 ++++++++++++++++++++++
 3 files changed, 206 insertions(+), 3 deletions(-)
 create mode 100644 src/shared/mainloop-ell.c
 create mode 100644 src/shared/timeout-ell.c

diff --git a/Makefile.am b/Makefile.am
index 9d25a815b..e3986a718 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -162,6 +162,10 @@ CLEANFILES += $(ell_built_sources)
 
 noinst_LTLIBRARIES += src/libshared-glib.la src/libshared-mainloop.la
 
+if LIBSHARED_ELL
+noinst_LTLIBRARIES += src/libshared-ell.la
+endif
+
 shared_sources = src/shared/io.h src/shared/timeout.h \
 			src/shared/queue.h src/shared/queue.c \
 			src/shared/util.h src/shared/util.c \
@@ -206,10 +210,11 @@ src_libshared_mainloop_la_SOURCES = $(shared_sources) \
 				src/shared/mainloop-notify.c
 
 if LIBSHARED_ELL
-noinst_LTLIBRARIES += src/libshared-ell.la
-
 src_libshared_ell_la_SOURCES = $(shared_sources) \
-				src/shared/io-ell.c
+				src/shared/io-ell.c \
+				src/shared/timeout-ell.c \
+				src/shared/mainloop.h \
+				src/shared/mainloop-ell.c
 endif
 
 attrib_sources = attrib/att.h attrib/att-database.h attrib/att.c \
diff --git a/src/shared/mainloop-ell.c b/src/shared/mainloop-ell.c
new file mode 100644
index 000000000..63e254ac6
--- /dev/null
+++ b/src/shared/mainloop-ell.c
@@ -0,0 +1,126 @@
+/*
+ *
+ *  BlueZ - Bluetooth protocol stack for Linux
+ *
+ *  Copyright (C) 2019  Intel Corporation
+ *
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#define _GNU_SOURCE
+#include <errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include <ell/ell.h>
+
+#include "mainloop.h"
+
+static bool is_initialized;
+static int exit_status;
+static mainloop_signal_func sig_func;
+
+static void l_sig_func(uint32_t signo, void *user_data)
+{
+	if (sig_func)
+		sig_func(signo, user_data);
+}
+
+void mainloop_init(void)
+{
+	is_initialized = l_main_init();
+}
+
+void mainloop_quit(void)
+{
+	l_main_quit();
+}
+
+void mainloop_exit_success(void)
+{
+	exit_status = EXIT_SUCCESS;
+	l_main_quit();
+}
+
+void mainloop_exit_failure(void)
+{
+	exit_status = EXIT_FAILURE;
+	l_main_quit();
+}
+
+int mainloop_run(void)
+{
+	if (!is_initialized)
+		return -EINVAL;
+
+	l_main_run();
+
+	is_initialized = false;
+	sig_func = NULL;
+
+	return exit_status;
+}
+
+int mainloop_run_with_signal(mainloop_signal_func func, void *user_data)
+{
+	if (!is_initialized || !func)
+		return -EINVAL;
+
+	/* Workaround for sign discrepancy in ell and bluez */
+	sig_func = func;
+
+	return l_main_run_with_signal(l_sig_func, user_data);
+}
+
+int mainloop_add_fd(int fd, uint32_t events, mainloop_event_func callback,
+				void *user_data, mainloop_destroy_func destroy)
+{
+	return -ENOSYS;
+}
+
+int mainloop_modify_fd(int fd, uint32_t events)
+{
+	return -ENOSYS;
+}
+
+int mainloop_remove_fd(int fd)
+{
+	return -ENOSYS;
+}
+
+int mainloop_add_timeout(unsigned int msec, mainloop_timeout_func callback,
+				void *user_data, mainloop_destroy_func destroy)
+{
+	return -ENOSYS;
+}
+
+int mainloop_modify_timeout(int fd, unsigned int msec)
+{
+	return -ENOSYS;
+}
+
+int mainloop_remove_timeout(int id)
+{
+	return -ENOSYS;
+}
+
+int mainloop_set_signal(sigset_t *mask, mainloop_signal_func callback,
+				void *user_data, mainloop_destroy_func destroy)
+{
+	return -ENOSYS;
+}
diff --git a/src/shared/timeout-ell.c b/src/shared/timeout-ell.c
new file mode 100644
index 000000000..8419d4617
--- /dev/null
+++ b/src/shared/timeout-ell.c
@@ -0,0 +1,72 @@
+/*
+ *
+ *  BlueZ - Bluetooth protocol stack for Linux
+ *
+ *  Copyright (C) 2019  Intel Corporation. All rights reserved.
+ *
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ */
+
+#include <ell/ell.h>
+
+#include "timeout.h"
+
+struct timeout_data {
+	timeout_func_t func;
+	timeout_destroy_func_t destroy;
+	unsigned int timeout;
+	void *user_data;
+};
+
+static void timeout_callback(struct l_timeout *timeout, void *user_data)
+{
+	struct timeout_data *data = user_data;
+
+	if (data->func)
+		data->func(data->user_data);
+
+	l_timeout_modify(timeout, data->timeout);
+}
+
+static void timeout_destroy(void *user_data)
+{
+	struct timeout_data *data = user_data;
+
+	if (data->destroy)
+		data->destroy(data->user_data);
+
+	l_free(data);
+}
+
+unsigned int timeout_add(unsigned int timeout, timeout_func_t func,
+			void *user_data, timeout_destroy_func_t destroy)
+{
+	struct timeout_data *data;
+	uint32_t id;
+
+	data = l_new(struct timeout_data, 1);
+
+	data->func = func;
+	data->destroy = destroy;
+	data->user_data = user_data;
+	data->timeout = timeout;
+
+	id = L_PTR_TO_UINT(l_timeout_create(timeout, timeout_callback,
+						user_data, timeout_destroy));
+	return id;
+}
+
+void timeout_remove(unsigned int id)
+{
+	l_timeout_remove(L_UINT_TO_PTR(id));
+}
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH BlueZ 0/1 v3] ELL based mainloop
  2019-08-11  7:00 [PATCH BlueZ 0/1 v3] ELL based mainloop Inga Stotland
  2019-08-11  7:00 ` [PATCH BlueZ 1/1 v3] shared/mainloop: Add ell-based mainloop implementation Inga Stotland
@ 2019-09-25 18:19 ` Stotland, Inga
  2019-09-27 14:38   ` Luiz Augusto von Dentz
  1 sibling, 1 reply; 4+ messages in thread
From: Stotland, Inga @ 2019-09-25 18:19 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: luiz.dentz, johan.hedberg

[-- Attachment #1: Type: text/plain, Size: 1233 bytes --]

Ping

On Sun, 2019-08-11 at 00:00 -0700, Inga Stotland wrote:
> + timeout-ell.c
> 
> This patch addresses a need to enable using common mainloop for the
> ell-based apps that desire to use common bluetooth fuctionality
> (e.g., bt_shell).
> 
> Note: A bit awkward callback handling there is due to the discrepancy
> in the arg type for signo (signal number).
> 
> src/shared/mainloop.h:
> typedef void (*mainloop_signal_func) (int signum, void *user_data)
> 
> and ell/main.h:
> 
> typedef void (*l_main_signal_cb_t) (uint32_t signo, void *user_data)
> 
> My guess is that ell derives the unsigned int type from
> <sys/signalfd.h>,
> where ssi_signo is defined as uint32_t. BlueZ is probably following
> the
> standard Linux signal handling, where signal is represented as an
> int. 
> 
> Inga Stotland (1):
>   shared/mainloop: Add ell-based mainloop implementation
> 
>  Makefile.am               |  11 +++-
>  src/shared/mainloop-ell.c | 126
> ++++++++++++++++++++++++++++++++++++++
>  src/shared/timeout-ell.c  |  72 ++++++++++++++++++++++
>  3 files changed, 206 insertions(+), 3 deletions(-)
>  create mode 100644 src/shared/mainloop-ell.c
>  create mode 100644 src/shared/timeout-ell.c
> 

[-- Attachment #2: smime.p7s --]
[-- Type: application/x-pkcs7-signature, Size: 3265 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH BlueZ 0/1 v3] ELL based mainloop
  2019-09-25 18:19 ` [PATCH BlueZ 0/1 v3] ELL based mainloop Stotland, Inga
@ 2019-09-27 14:38   ` Luiz Augusto von Dentz
  0 siblings, 0 replies; 4+ messages in thread
From: Luiz Augusto von Dentz @ 2019-09-27 14:38 UTC (permalink / raw)
  To: Stotland, Inga; +Cc: linux-bluetooth, johan.hedberg

Hi Inga,

On Wed, Sep 25, 2019 at 9:19 PM Stotland, Inga <inga.stotland@intel.com> wrote:
>
> Ping
>
> On Sun, 2019-08-11 at 00:00 -0700, Inga Stotland wrote:
> > + timeout-ell.c
> >
> > This patch addresses a need to enable using common mainloop for the
> > ell-based apps that desire to use common bluetooth fuctionality
> > (e.g., bt_shell).
> >
> > Note: A bit awkward callback handling there is due to the discrepancy
> > in the arg type for signo (signal number).
> >
> > src/shared/mainloop.h:
> > typedef void (*mainloop_signal_func) (int signum, void *user_data)
> >
> > and ell/main.h:
> >
> > typedef void (*l_main_signal_cb_t) (uint32_t signo, void *user_data)
> >
> > My guess is that ell derives the unsigned int type from
> > <sys/signalfd.h>,
> > where ssi_signo is defined as uint32_t. BlueZ is probably following
> > the
> > standard Linux signal handling, where signal is represented as an
> > int.
> >
> > Inga Stotland (1):
> >   shared/mainloop: Add ell-based mainloop implementation
> >
> >  Makefile.am               |  11 +++-
> >  src/shared/mainloop-ell.c | 126
> > ++++++++++++++++++++++++++++++++++++++
> >  src/shared/timeout-ell.c  |  72 ++++++++++++++++++++++
> >  3 files changed, 206 insertions(+), 3 deletions(-)
> >  create mode 100644 src/shared/mainloop-ell.c
> >  create mode 100644 src/shared/timeout-ell.c
> >

Applied, thanks.

-- 
Luiz Augusto von Dentz

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-09-27 14:39 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-11  7:00 [PATCH BlueZ 0/1 v3] ELL based mainloop Inga Stotland
2019-08-11  7:00 ` [PATCH BlueZ 1/1 v3] shared/mainloop: Add ell-based mainloop implementation Inga Stotland
2019-09-25 18:19 ` [PATCH BlueZ 0/1 v3] ELL based mainloop Stotland, Inga
2019-09-27 14:38   ` Luiz Augusto von Dentz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).