* [PATCH v2 1/5] monitor: Allow to modify epoll even events are the same
@ 2014-03-05 9:22 Lukasz Rymanowski
2014-03-05 9:22 ` [PATCH v2 2/5] monitor: Use miliseconds instead of seconds in the timeout Lukasz Rymanowski
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: Lukasz Rymanowski @ 2014-03-05 9:22 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Lukasz Rymanowski
This is epsecially needed when we want to modify timer.
---
monitor/mainloop.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/monitor/mainloop.c b/monitor/mainloop.c
index 8c94bfe..7f97e65 100644
--- a/monitor/mainloop.c
+++ b/monitor/mainloop.c
@@ -222,9 +222,6 @@ int mainloop_modify_fd(int fd, uint32_t events)
if (!data)
return -ENXIO;
- if (data->events == events)
- return 0;
-
memset(&ev, 0, sizeof(ev));
ev.events = events;
ev.data.ptr = data;
--
1.8.4
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v2 2/5] monitor: Use miliseconds instead of seconds in the timeout 2014-03-05 9:22 [PATCH v2 1/5] monitor: Allow to modify epoll even events are the same Lukasz Rymanowski @ 2014-03-05 9:22 ` Lukasz Rymanowski 2014-03-05 13:39 ` Anderson Lizardo 2014-03-05 9:22 ` [PATCH v2 3/5] shared: Add header for timeout abstraction Lukasz Rymanowski ` (3 subsequent siblings) 4 siblings, 1 reply; 7+ messages in thread From: Lukasz Rymanowski @ 2014-03-05 9:22 UTC (permalink / raw) To: linux-bluetooth; +Cc: Lukasz Rymanowski --- monitor/mainloop.c | 19 ++++++++++--------- monitor/mainloop.h | 4 ++-- tools/3dsp.c | 2 +- tools/btinfo.c | 2 +- tools/ibeacon.c | 2 +- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/monitor/mainloop.c b/monitor/mainloop.c index 7f97e65..8d4b391 100644 --- a/monitor/mainloop.c +++ b/monitor/mainloop.c @@ -287,20 +287,21 @@ static void timeout_callback(int fd, uint32_t events, void *user_data) data->callback(data->fd, data->user_data); } -static inline int timeout_set(int fd, unsigned int seconds) +static inline int timeout_set(int fd, unsigned int msec) { struct itimerspec itimer; + unsigned int sec = msec / 1000; memset(&itimer, 0, sizeof(itimer)); itimer.it_interval.tv_sec = 0; itimer.it_interval.tv_nsec = 0; - itimer.it_value.tv_sec = seconds; - itimer.it_value.tv_nsec = 0; + itimer.it_value.tv_sec = sec; + itimer.it_value.tv_nsec = (msec - (sec * 1000)) * 1000; return timerfd_settime(fd, 0, &itimer, NULL); } -int mainloop_add_timeout(unsigned int seconds, mainloop_timeout_func callback, +int mainloop_add_timeout(unsigned int msec, mainloop_timeout_func callback, void *user_data, mainloop_destroy_func destroy) { struct timeout_data *data; @@ -323,8 +324,8 @@ int mainloop_add_timeout(unsigned int seconds, mainloop_timeout_func callback, return -EIO; } - if (seconds > 0) { - if (timeout_set(data->fd, seconds) < 0) { + if (msec > 0) { + if (timeout_set(data->fd, msec) < 0) { close(data->fd); free(data); return -EIO; @@ -341,10 +342,10 @@ int mainloop_add_timeout(unsigned int seconds, mainloop_timeout_func callback, return data->fd; } -int mainloop_modify_timeout(int id, unsigned int seconds) +int mainloop_modify_timeout(int id, unsigned int msec) { - if (seconds > 0) { - if (timeout_set(id, seconds) < 0) + if (msec > 0) { + if (timeout_set(id, msec) < 0) return -EIO; } diff --git a/monitor/mainloop.h b/monitor/mainloop.h index d36f5aa..dafec8b 100644 --- a/monitor/mainloop.h +++ b/monitor/mainloop.h @@ -40,9 +40,9 @@ int mainloop_add_fd(int fd, uint32_t events, mainloop_event_func callback, int mainloop_modify_fd(int fd, uint32_t events); int mainloop_remove_fd(int fd); -int mainloop_add_timeout(unsigned int seconds, mainloop_timeout_func callback, +int mainloop_add_timeout(unsigned int msec, mainloop_timeout_func callback, void *user_data, mainloop_destroy_func destroy); -int mainloop_modify_timeout(int fd, unsigned int seconds); +int mainloop_modify_timeout(int fd, unsigned int msec); int mainloop_remove_timeout(int id); int mainloop_set_signal(sigset_t *mask, mainloop_signal_func callback, diff --git a/tools/3dsp.c b/tools/3dsp.c index d1b17f2..fc5c8e6 100644 --- a/tools/3dsp.c +++ b/tools/3dsp.c @@ -66,7 +66,7 @@ static void shutdown_device(void) bt_hci_flush(hci_dev); if (reset_on_shutdown) { - id = mainloop_add_timeout(5, shutdown_timeout, NULL, NULL); + id = mainloop_add_timeout(5000, shutdown_timeout, NULL, NULL); bt_hci_send(hci_dev, BT_HCI_CMD_RESET, NULL, 0, shutdown_complete, UINT_TO_PTR(id), NULL); diff --git a/tools/btinfo.c b/tools/btinfo.c index 7951808..6693132 100644 --- a/tools/btinfo.c +++ b/tools/btinfo.c @@ -109,7 +109,7 @@ static void shutdown_device(void) bt_hci_flush(hci_dev); if (reset_on_shutdown) { - id = mainloop_add_timeout(5, shutdown_timeout, NULL, NULL); + id = mainloop_add_timeout(5000, shutdown_timeout, NULL, NULL); bt_hci_send(hci_dev, BT_HCI_CMD_RESET, NULL, 0, shutdown_complete, UINT_TO_PTR(id), NULL); diff --git a/tools/ibeacon.c b/tools/ibeacon.c index 2071c6b..093fba1 100644 --- a/tools/ibeacon.c +++ b/tools/ibeacon.c @@ -65,7 +65,7 @@ static void shutdown_device(void) bt_hci_flush(hci_dev); - id = mainloop_add_timeout(5, shutdown_timeout, NULL, NULL); + id = mainloop_add_timeout(5000, shutdown_timeout, NULL, NULL); bt_hci_send(hci_dev, BT_HCI_CMD_LE_SET_ADV_ENABLE, &enable, 1, NULL, NULL, NULL); -- 1.8.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/5] monitor: Use miliseconds instead of seconds in the timeout 2014-03-05 9:22 ` [PATCH v2 2/5] monitor: Use miliseconds instead of seconds in the timeout Lukasz Rymanowski @ 2014-03-05 13:39 ` Anderson Lizardo 0 siblings, 0 replies; 7+ messages in thread From: Anderson Lizardo @ 2014-03-05 13:39 UTC (permalink / raw) To: Lukasz Rymanowski; +Cc: BlueZ development Hi Lukasz, On Wed, Mar 5, 2014 at 5:22 AM, Lukasz Rymanowski <lukasz.rymanowski@tieto.com> wrote: > -static inline int timeout_set(int fd, unsigned int seconds) > +static inline int timeout_set(int fd, unsigned int msec) > { > struct itimerspec itimer; > + unsigned int sec = msec / 1000; > > memset(&itimer, 0, sizeof(itimer)); > itimer.it_interval.tv_sec = 0; > itimer.it_interval.tv_nsec = 0; > - itimer.it_value.tv_sec = seconds; > - itimer.it_value.tv_nsec = 0; > + itimer.it_value.tv_sec = sec; > + itimer.it_value.tv_nsec = (msec - (sec * 1000)) * 1000; Would you not be multiplying by 1000000 (i.e. 10^6) instead? Also, why not use: itimer.it_value.tv_nsec = (msec % 1000) * 1000000; > > return timerfd_settime(fd, 0, &itimer, NULL); > } Best Regards, -- Anderson Lizardo http://www.indt.org/?lang=en INdT - Manaus - Brazil ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 3/5] shared: Add header for timeout abstraction 2014-03-05 9:22 [PATCH v2 1/5] monitor: Allow to modify epoll even events are the same Lukasz Rymanowski 2014-03-05 9:22 ` [PATCH v2 2/5] monitor: Use miliseconds instead of seconds in the timeout Lukasz Rymanowski @ 2014-03-05 9:22 ` Lukasz Rymanowski 2014-03-05 9:22 ` [PATCH v2 4/5] shared: Add timeout handling with Glib support Lukasz Rymanowski ` (2 subsequent siblings) 4 siblings, 0 replies; 7+ messages in thread From: Lukasz Rymanowski @ 2014-03-05 9:22 UTC (permalink / raw) To: linux-bluetooth; +Cc: Lukasz Rymanowski --- src/shared/timeout.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/shared/timeout.h diff --git a/src/shared/timeout.h b/src/shared/timeout.h new file mode 100644 index 0000000..c13616f --- /dev/null +++ b/src/shared/timeout.h @@ -0,0 +1,27 @@ +/* + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2014 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 <stdbool.h> + +typedef bool (*timeout_func_t)(void *user_data); +typedef void (*timeout_destroy_func_t)(void *user_data); + +int timeout_add(unsigned int msec, timeout_func_t func, void *user_data, + timeout_destroy_func_t destroy); +void timeout_remove(unsigned int id); -- 1.8.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 4/5] shared: Add timeout handling with Glib support 2014-03-05 9:22 [PATCH v2 1/5] monitor: Allow to modify epoll even events are the same Lukasz Rymanowski 2014-03-05 9:22 ` [PATCH v2 2/5] monitor: Use miliseconds instead of seconds in the timeout Lukasz Rymanowski 2014-03-05 9:22 ` [PATCH v2 3/5] shared: Add header for timeout abstraction Lukasz Rymanowski @ 2014-03-05 9:22 ` Lukasz Rymanowski 2014-03-05 9:22 ` [PATCH v2 5/5] shared: Add timeout handling with mainloop support Lukasz Rymanowski 2014-03-05 13:24 ` [PATCH v2 1/5] monitor: Allow to modify epoll even events are the same Szymon Janc 4 siblings, 0 replies; 7+ messages in thread From: Lukasz Rymanowski @ 2014-03-05 9:22 UTC (permalink / raw) To: linux-bluetooth; +Cc: Lukasz Rymanowski --- src/shared/timeout-glib.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/shared/timeout-glib.c diff --git a/src/shared/timeout-glib.c b/src/shared/timeout-glib.c new file mode 100644 index 0000000..c045efc --- /dev/null +++ b/src/shared/timeout-glib.c @@ -0,0 +1,73 @@ +/* + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2014 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 "timeout.h" + +#include <glib.h> + +struct timeout_data { + timeout_func_t func; + timeout_destroy_func_t destroy; + void *user_data; +}; + +static gboolean timeout_callback(gpointer user_data) +{ + struct timeout_data *data = user_data; + + if (data->func(data->user_data)) + return TRUE; + + return FALSE; +} + +static void timeout_destroy(gpointer user_data) +{ + struct timeout_data *data = user_data; + + if (data->destroy) + data->destroy(data->user_data); + + g_free(data); +} + +int timeout_add(unsigned int ms, timeout_func_t func, void *user_data, + timeout_destroy_func_t destroy) +{ + guint id; + struct timeout_data *data = g_malloc0(sizeof(*data)); + + data->func = func; + data->destroy = destroy; + data->user_data = user_data; + + id = g_timeout_add_full(G_PRIORITY_DEFAULT, ms, timeout_callback, data, + timeout_destroy); + if (!id) + g_free(data); + + return id; +} + +void timeout_remove(unsigned int id) +{ + GSource *source = g_main_context_find_source_by_id(NULL, id); + if (source) + g_source_destroy(source); +} -- 1.8.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 5/5] shared: Add timeout handling with mainloop support 2014-03-05 9:22 [PATCH v2 1/5] monitor: Allow to modify epoll even events are the same Lukasz Rymanowski ` (2 preceding siblings ...) 2014-03-05 9:22 ` [PATCH v2 4/5] shared: Add timeout handling with Glib support Lukasz Rymanowski @ 2014-03-05 9:22 ` Lukasz Rymanowski 2014-03-05 13:24 ` [PATCH v2 1/5] monitor: Allow to modify epoll even events are the same Szymon Janc 4 siblings, 0 replies; 7+ messages in thread From: Lukasz Rymanowski @ 2014-03-05 9:22 UTC (permalink / raw) To: linux-bluetooth; +Cc: Lukasz Rymanowski --- src/shared/timeout-mainloop.c | 78 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/shared/timeout-mainloop.c diff --git a/src/shared/timeout-mainloop.c b/src/shared/timeout-mainloop.c new file mode 100644 index 0000000..bdc527a --- /dev/null +++ b/src/shared/timeout-mainloop.c @@ -0,0 +1,78 @@ +/* + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2014 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 <stdlib.h> + +#include "timeout.h" + +#include "monitor/mainloop.h" + +struct timeout_data { + int id; + timeout_func_t func; + timeout_destroy_func_t destroy; + unsigned int timeout; + void *user_data; +}; + +static void timeout_callback(int id, void *user_data) +{ + struct timeout_data *data = user_data; + + if (data->func(data->user_data) && + !mainloop_modify_timeout(data->id, data->timeout)) + return; + + mainloop_remove_timeout(data->id); +} + +static void timeout_destroy(void *user_data) +{ + struct timeout_data *data = user_data; + + if (data->destroy) + data->destroy(data->user_data); + + free(data); +} + +int timeout_add(unsigned int t, timeout_func_t func, void *user_data, + timeout_destroy_func_t destroy) +{ + struct timeout_data *data = malloc(sizeof(*data)); + + data->func = func; + data->user_data = user_data; + data->timeout = t; + + data->id = mainloop_add_timeout(t, timeout_callback, data, + timeout_destroy); + if (!data->id) { + free(data); + return 0; + } + + return data->id; +} + +void timeout_remove(unsigned int id) +{ + if (id) + mainloop_remove_timeout(id); +} -- 1.8.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/5] monitor: Allow to modify epoll even events are the same 2014-03-05 9:22 [PATCH v2 1/5] monitor: Allow to modify epoll even events are the same Lukasz Rymanowski ` (3 preceding siblings ...) 2014-03-05 9:22 ` [PATCH v2 5/5] shared: Add timeout handling with mainloop support Lukasz Rymanowski @ 2014-03-05 13:24 ` Szymon Janc 4 siblings, 0 replies; 7+ messages in thread From: Szymon Janc @ 2014-03-05 13:24 UTC (permalink / raw) To: Lukasz Rymanowski; +Cc: linux-bluetooth Hi Łukasz, On Wednesday 05 of March 2014 10:22:37 Lukasz Rymanowski wrote: > This is epsecially needed when we want to modify timer. > --- > monitor/mainloop.c | 3 --- > 1 file changed, 3 deletions(-) > > diff --git a/monitor/mainloop.c b/monitor/mainloop.c > index 8c94bfe..7f97e65 100644 > --- a/monitor/mainloop.c > +++ b/monitor/mainloop.c > @@ -222,9 +222,6 @@ int mainloop_modify_fd(int fd, uint32_t events) > if (!data) > return -ENXIO; > > - if (data->events == events) > - return 0; > - > memset(&ev, 0, sizeof(ev)); > ev.events = events; > ev.data.ptr = data; > All patches applied. Thanks. -- Best regards, Szymon Janc ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2014-03-05 13:39 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-03-05 9:22 [PATCH v2 1/5] monitor: Allow to modify epoll even events are the same Lukasz Rymanowski 2014-03-05 9:22 ` [PATCH v2 2/5] monitor: Use miliseconds instead of seconds in the timeout Lukasz Rymanowski 2014-03-05 13:39 ` Anderson Lizardo 2014-03-05 9:22 ` [PATCH v2 3/5] shared: Add header for timeout abstraction Lukasz Rymanowski 2014-03-05 9:22 ` [PATCH v2 4/5] shared: Add timeout handling with Glib support Lukasz Rymanowski 2014-03-05 9:22 ` [PATCH v2 5/5] shared: Add timeout handling with mainloop support Lukasz Rymanowski 2014-03-05 13:24 ` [PATCH v2 1/5] monitor: Allow to modify epoll even events are the same Szymon Janc
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox