Skip to contentSkip to conversation

Input service signals

Bluez-devel Frederic Danis 3 participants 9 messages Jun 15, 2007 – Jun 22, 2007 Bluetooth drivers

lore
Share & tools
lore
#0 lore raw

Hello,

I am using the Input service. It is very helpful.

But Connected/Disconnected signals from Device interface are currently only sent when connection/disconnection are done through the Device interface methods. They are not sent when remote device connects/disconnects.

I wrote a patch that move common code between server.c and device.c into a new file session.c. This allows to send those signals for all connect/disconnect.

Hope this is OK.

Fred

Signature · 7 lines
-----------------------------------------------
It is not by improving the oil lamp that one invents the electric bulb!
-----------------------------------------------
Danis Frederic                   Access Company
Software engineer
Mail : mailto:[email protected]
-----------------------------------------------

? utils/input/Makefile.in
Index: utils/input/Makefile.am
===================================================================
RCS file: /cvsroot/bluez/utils/input/Makefile.am,v retrieving revision 1.17

input/Makefile.am +1 -1
diff -d -u -p -r1.17 Makefile.am
@@ -12,7 +12,7 @@ service_PROGRAMS = bluetoothd-service-in
 
 bluetoothd_service_input_SOURCES = main.c \
 	manager.h manager.c error.h error.c \
-	server.h server.c device.h device.c storage.h storage.c
+	server.h server.c device.h device.c storage.h storage.c session.c session.h
 
 LDADD = $(top_builddir)/common/libhelper.a \
 		@GLIB_LIBS@ @DBUS_LIBS@ @BLUEZ_LIBS@

Index: utils/input/device.c
===================================================================
RCS file: /cvsroot/bluez/utils/input/device.c,v
retrieving revision 1.52

input/device.c +33 -71

278 lines not on this page · raw message

Index: utils/input/manager.c
===================================================================
RCS file: /cvsroot/bluez/utils/input/manager.c,v
retrieving revision 1.25

input/manager.c +10 -3
diff -d -u -p -r1.25 manager.c
@@ -68,7 +68,7 @@ struct pending_req {
 	int		ctrl_sock;
 };
 
-static GSList *device_paths = NULL;	/* Input registered paths */
+GSList *device_paths = NULL;	/* Input registered paths */
 
 static DBusConnection *connection = NULL;
 
@@ -323,6 +323,9 @@ cleanup:
 	close(pr->ctrl_sock);
 	pending_req_free(pr);
 
+	if (hidp.rd_data)
+		g_free(hidp.rd_data);
+
 	return FALSE;
 }
 
@@ -778,7 +781,7 @@ done:
 	dbus_message_unref(reply);
 }
 
-static int path_bdaddr_cmp(const char *path, const bdaddr_t *bdaddr)
+int path_bdaddr_cmp(const char *path, const bdaddr_t *bdaddr)
 {
 	bdaddr_t src, dst;
 
@@ -954,9 +957,13 @@ static void stored_input(char *key, char
 	 * acceptable since the source is different.
 	 */
 	if (input_device_register(connection, src, &dst, &hidp, &path) < 0)
-		return;
+		goto cleanup;
 
 	device_paths = g_slist_append(device_paths, g_strdup(path));
+
+cleanup:
+	if (hidp.rd_data)
+		g_free(hidp.rd_data);
 }
 
 static void register_stored_inputs(void)

Index: utils/input/server.c
===================================================================
RCS file: /cvsroot/bluez/utils/input/server.c,v
retrieving revision 1.13

input/server.c +18 -126

185 lines not on this page · raw message

Index: utils/input/session.c
===================================================================
RCS file: utils/input/session.c

input/session.c new file +197 -0

197 lines not on this page · raw message

Index: utils/input/session.h
===================================================================
RCS file: utils/input/session.h

input/session.h new file +40 -0
diff -N utils/input/session.h
@@ -0,0 +1,40 @@
+/*
+ *
+ *  BlueZ - Bluetooth protocol stack for Linux
+ *
+ *  Copyright (C) 2004-2007  Marcel Holtmann <[email protected]>
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#include <bluetooth/bluetooth.h>
+
+struct session_data {
+	bdaddr_t src;
+	bdaddr_t dst;
+	int ctrl_sk;
+	int intr_sk;
+	DBusConnection *connection;
+	const char *path;
+};
+
+struct session_data *find_session(bdaddr_t *src, bdaddr_t *dst);
+void create_device(struct session_data *session);
+struct session_data* create_session(bdaddr_t *src, bdaddr_t *dst, int ctrl_sk, DBusConnection *connection, const char *path);
+void add_intr_sk(struct session_data *session, int intr_sk);
+void remove_session(struct session_data *session);
+

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/

_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel

maintainer
#1 lore raw

Hi Frederic,

Quoted 10 lines

I am using the Input service. It is very helpful.

But Connected/Disconnected signals from Device interface are currently only sent when connection/disconnection are done through the Device interface methods. They are not sent when remote device connects/disconnects.

I wrote a patch that move common code between server.c and device.c into a new file session.c. This allows to send those signals for all connect/disconnect.

I haven't looked at your patch, but I agree that we should send the signals when the remote device re-connects. I wait for Claudio's or Johan's comments on that patch.

Regards

Marcel

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Bluez-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel

#2 lore raw
In reply to Frederic Danis
Quoted 4 lines · Frederic Danis

But Connected/Disconnected signals from Device interface are currently only sent when connection/disconnection are done through the Device interface methods. They are not sent when remote device connects/disconnects.

I wrote a patch that move common code between server.c and device.c into a new file session.c. This allows to send those signals for all connect/disconnect.

In previous patch, I removed the disconnected signal for fake input. This is corrected in this one.

Hope this is OK.

Regards

Fred

Signature · 7 lines
-----------------------------------------------
It is not by improving the oil lamp that one invents the electric bulb!
-----------------------------------------------
Danis Frederic                   Access Company
Software engineer
Mail : mailto:[email protected]
-----------------------------------------------

? utils/input/Makefile.in
Index: utils/input/Makefile.am
===================================================================
RCS file: /cvsroot/bluez/utils/input/Makefile.am,v retrieving revision 1.17

input/Makefile.am +1 -1
diff -d -u -p -r1.17 Makefile.am
@@ -12,7 +12,7 @@ service_PROGRAMS = bluetoothd-service-in
 
 bluetoothd_service_input_SOURCES = main.c \
 	manager.h manager.c error.h error.c \
-	server.h server.c device.h device.c storage.h storage.c
+	server.h server.c device.h device.c storage.h storage.c session.c session.h
 
 LDADD = $(top_builddir)/common/libhelper.a \
 		@GLIB_LIBS@ @DBUS_LIBS@ @BLUEZ_LIBS@

Index: utils/input/device.c
===================================================================
RCS file: /cvsroot/bluez/utils/input/device.c,v
retrieving revision 1.52

input/device.c +43 -72

313 lines not on this page · raw message

Index: utils/input/manager.c
===================================================================
RCS file: /cvsroot/bluez/utils/input/manager.c,v
retrieving revision 1.25

input/manager.c +10 -3
diff -d -u -p -r1.25 manager.c
@@ -68,7 +68,7 @@ struct pending_req {
 	int		ctrl_sock;
 };
 
-static GSList *device_paths = NULL;	/* Input registered paths */
+GSList *device_paths = NULL;	/* Input registered paths */
 
 static DBusConnection *connection = NULL;
 
@@ -323,6 +323,9 @@ cleanup:
 	close(pr->ctrl_sock);
 	pending_req_free(pr);
 
+	if (hidp.rd_data)
+		g_free(hidp.rd_data);
+
 	return FALSE;
 }
 
@@ -778,7 +781,7 @@ done:
 	dbus_message_unref(reply);
 }
 
-static int path_bdaddr_cmp(const char *path, const bdaddr_t *bdaddr)
+int path_bdaddr_cmp(const char *path, const bdaddr_t *bdaddr)
 {
 	bdaddr_t src, dst;
 
@@ -954,9 +957,13 @@ static void stored_input(char *key, char
 	 * acceptable since the source is different.
 	 */
 	if (input_device_register(connection, src, &dst, &hidp, &path) < 0)
-		return;
+		goto cleanup;
 
 	device_paths = g_slist_append(device_paths, g_strdup(path));
+
+cleanup:
+	if (hidp.rd_data)
+		g_free(hidp.rd_data);
 }
 
 static void register_stored_inputs(void)

Index: utils/input/server.c
===================================================================
RCS file: /cvsroot/bluez/utils/input/server.c,v
retrieving revision 1.13

input/server.c +18 -126

185 lines not on this page · raw message

Index: utils/input/session.c
===================================================================
RCS file: utils/input/session.c

input/session.c new file +197 -0

197 lines not on this page · raw message

Index: utils/input/session.h
===================================================================
RCS file: utils/input/session.h

input/session.h new file +40 -0
diff -N utils/input/session.h
@@ -0,0 +1,40 @@
+/*
+ *
+ *  BlueZ - Bluetooth protocol stack for Linux
+ *
+ *  Copyright (C) 2004-2007  Marcel Holtmann <[email protected]>
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#include <bluetooth/bluetooth.h>
+
+struct session_data {
+	bdaddr_t src;
+	bdaddr_t dst;
+	int ctrl_sk;
+	int intr_sk;
+	DBusConnection *connection;
+	const char *path;
+};
+
+struct session_data *find_session(bdaddr_t *src, bdaddr_t *dst);
+void create_device(struct session_data *session);
+struct session_data* create_session(bdaddr_t *src, bdaddr_t *dst, int ctrl_sk, DBusConnection *connection, const char *path);
+void add_intr_sk(struct session_data *session, int intr_sk);
+void remove_session(struct session_data *session);
+

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/

_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel

#3 lore raw

SGkgRnJlZGVyaWMsCgpJIGdvdCBhIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIGNhbGxpbmcgRGV2 aWNlLkNvbm5lY3QgKyBEZXZpY2UuRGlzY29ubmVjdAoKVGhlIHBhdGggY29udGVudCBpcyB3cm9u ZyhpdCBjb250YWlucyB0aGUgYnVzIGlkKS4KCihnZGIpIGJhY2t0cmFjZQojMCAgMHgwODA1Mjg1 YiBpbiBkYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWxfdmFsaXN0IChjb25uPTB4ODA1N2FjOCwK cGF0aD0weDgwNTdkYjggIjoxLjM0IiwgaW50ZXJmYWNlPTB4ODA1M2RmNSAib3JnLmJsdWV6Lmlu cHV0LkRldmljZSIsCiAgICBuYW1lPTB4ODA1M2U3OCAiRGlzY29ubmVjdGVkIiwgZmlyc3Q9MCwg dmFyX2FyZ3M9MHhiZmUzOTM0NAoiSFfvv73vv71oXDIyM++/ve+/vVxyXDIwNO+/ve+/vUhcMjM3 XDAwNVxiICIpIGF0IGRidXMtaGVscGVyLmM6NDc4CiMxICAweDA4MDUyOWU3IGluIGRidXNfY29u bmVjdGlvbl9lbWl0X3NpZ25hbCAoY29ubj0weDgwNTdhYzgsCnBhdGg9MHg4MDU3ZGI4ICI6MS4z NCIsIGludGVyZmFjZT0weDgwNTNkZjUgIm9yZy5ibHVlei5pbnB1dC5EZXZpY2UiLAogICAgbmFt ZT0weDgwNTNlNzggIkRpc2Nvbm5lY3RlZCIsIGZpcnN0PTApIGF0IGRidXMtaGVscGVyLmM6NTMx CgpDb3VsZCB5b3UgcGxlYXNlIGZpeCBpdD8KCkJyLApDbGF1ZGlvLgoKT24gNi8xOS8wNywgRnJl ZGVyaWMgRGFuaXMgPGZyZWRlcmljLmRhbmlzQGFjY2Vzcy1jb21wYW55LmNvbT4gd3JvdGU6Cj4g RnJlZGVyaWMgRGFuaXMgd3JvdGU6Cj4gPiBCdXQgQ29ubmVjdGVkL0Rpc2Nvbm5lY3RlZCBzaWdu YWxzIGZyb20gRGV2aWNlIGludGVyZmFjZSBhcmUgY3VycmVudGx5Cj4gPiBvbmx5IHNlbnQgd2hl biBjb25uZWN0aW9uL2Rpc2Nvbm5lY3Rpb24gYXJlIGRvbmUgdGhyb3VnaCB0aGUgRGV2aWNlCj4g PiBpbnRlcmZhY2UgbWV0aG9kcy4gVGhleSBhcmUgbm90IHNlbnQgd2hlbiByZW1vdGUgZGV2aWNl Cj4gPiBjb25uZWN0cy9kaXNjb25uZWN0cy4KPiA+Cj4gPiBJIHdyb3RlIGEgcGF0Y2ggdGhhdCBt b3ZlIGNvbW1vbiBjb2RlIGJldHdlZW4gc2VydmVyLmMgYW5kIGRldmljZS5jIGludG8KPiA+IGEg bmV3IGZpbGUgc2Vzc2lvbi5jLiBUaGlzIGFsbG93cyB0byBzZW5kIHRob3NlIHNpZ25hbHMgZm9y IGFsbAo+ID4gY29ubmVjdC9kaXNjb25uZWN0Lgo+ID4KPgo+IEluIHByZXZpb3VzIHBhdGNoLCBJ IHJlbW92ZWQgdGhlIGRpc2Nvbm5lY3RlZCBzaWduYWwgZm9yIGZha2UgaW5wdXQuIFRoaXMgaXMg Y29ycmVjdGVkIGluIHRoaXMgb25lLgo+Cj4gSG9wZSB0aGlzIGlzIE9LLgo+Cj4gUmVnYXJkcwo+ Cj4gRnJlZAo+Cj4gLS0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQo+IEl0IGlzIG5vdCBieSBpbXByb3ZpbmcgdGhlIG9pbCBsYW1wIHRoYXQgb25lIGlu dmVudHMgdGhlIGVsZWN0cmljIGJ1bGIhCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KPiBEYW5pcyBGcmVkZXJpYyAgICAgICAgICAgICAgICAgICBBY2Nl c3MgQ29tcGFueQo+IFNvZnR3YXJlIGVuZ2luZWVyCj4gTWFpbCA6IG1haWx0bzpmcmVkZXJpYy5k YW5pc0BhY2Nlc3MtY29tcGFueS5jb20KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRoaXMgU0YubmV0IGVtYWlsIGlzIHNw b25zb3JlZCBieSBEQjIgRXhwcmVzcwpEb3dubG9hZCBEQjIgRXhwcmVzcyBDIC0gdGhlIEZSRUUg dmVyc2lvbiBvZiBEQjIgZXhwcmVzcyBhbmQgdGFrZQpjb250cm9sIG9mIHlvdXIgWE1MLiBObyBs aW1pdHMuIEp1c3QgZGF0YS4gQ2xpY2sgdG8gZ2V0IGl0IG5vdy4KaHR0cDovL3NvdXJjZWZvcmdl Lm5ldC9wb3dlcmJhci9kYjIvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkJsdWV6LWRldmVsIG1haWxpbmcgbGlzdApCbHVlei1kZXZlbEBsaXN0cy5zb3Vy Y2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8v Ymx1ZXotZGV2ZWwK

#4 lore raw

Q2xhdWRpbyBUYWthaGFzaSB3cm90ZToKPiBIaSBGcmVkZXJpYywKPiAKPiBJIGdvdCBhIHNlZ21l bnRhdGlvbiBmYXVsdCB3aGVuIGNhbGxpbmcgRGV2aWNlLkNvbm5lY3QgKyBEZXZpY2UuRGlzY29u bmVjdAo+IAo+IFRoZSBwYXRoIGNvbnRlbnQgaXMgd3JvbmcoaXQgY29udGFpbnMgdGhlIGJ1cyBp ZCkuCj4gCj4gKGdkYikgYmFja3RyYWNlCj4gIzAgIDB4MDgwNTI4NWIgaW4gZGJ1c19jb25uZWN0 aW9uX2VtaXRfc2lnbmFsX3ZhbGlzdCAoY29ubj0weDgwNTdhYzgsCj4gcGF0aD0weDgwNTdkYjgg IjoxLjM0IiwgaW50ZXJmYWNlPTB4ODA1M2RmNSAib3JnLmJsdWV6LmlucHV0LkRldmljZSIsCj4g ICAgIG5hbWU9MHg4MDUzZTc4ICJEaXNjb25uZWN0ZWQiLCBmaXJzdD0wLCB2YXJfYXJncz0weGJm ZTM5MzQ0Cj4gIkhX77+977+9aFwyMjPvv73vv71cclwyMDTvv73vv71IXDIzN1wwMDVcYiAiKSBh dCBkYnVzLWhlbHBlci5jOjQ3OAo+ICMxICAweDA4MDUyOWU3IGluIGRidXNfY29ubmVjdGlvbl9l bWl0X3NpZ25hbCAoY29ubj0weDgwNTdhYzgsCj4gcGF0aD0weDgwNTdkYjggIjoxLjM0IiwgaW50 ZXJmYWNlPTB4ODA1M2RmNSAib3JnLmJsdWV6LmlucHV0LkRldmljZSIsCj4gICAgIG5hbWU9MHg4 MDUzZTc4ICJEaXNjb25uZWN0ZWQiLCBmaXJzdD0wKSBhdCBkYnVzLWhlbHBlci5jOjUzMQo+IAo+ IENvdWxkIHlvdSBwbGVhc2UgZml4IGl0PwoKSGVsbG8gQ2xhdWRpbywKCldoZW4gZG8geW91IGdl dCB0aGlzIGNyYXNoID8gdXNpbmcgSElEIGRldmljZSBvciBmYWtlIGlucHV0ID8KClRoYW5rcwoK RnJlZAoKLS0gCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ckl0IGlzIG5vdCBieSBpbXByb3ZpbmcgdGhlIG9pbCBsYW1wIHRoYXQgb25lIGludmVudHMgdGhl IGVsZWN0cmljIGJ1bGIhCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCkRhbmlzIEZyZWRlcmljICAgICAgICAgICAgICAgICAgIEFjY2VzcyBDb21wYW55ClNv ZnR3YXJlIGVuZ2luZWVyCk1haWwgOiBtYWlsdG86ZnJlZGVyaWMuZGFuaXNAYWNjZXNzLWNvbXBh bnkuY29tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tClRoaXMgU0YubmV0IGVtYWlsIGlzIHNwb25zb3JlZCBieSBEQjIgRXhw cmVzcwpEb3dubG9hZCBEQjIgRXhwcmVzcyBDIC0gdGhlIEZSRUUgdmVyc2lvbiBvZiBEQjIgZXhw cmVzcyBhbmQgdGFrZQpjb250cm9sIG9mIHlvdXIgWE1MLiBObyBsaW1pdHMuIEp1c3QgZGF0YS4g Q2xpY2sgdG8gZ2V0IGl0IG5vdy4KaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wb3dlcmJhci9kYjIv Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkJsdWV6LWRl dmVsIG1haWxpbmcgbGlzdApCbHVlei1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKaHR0cHM6 Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vYmx1ZXotZGV2ZWwK

#5 lore raw

SGkgRnJlZGVyaWMsCgpsYXRlc3QgY3ZzICsgeW91ciBwYXRjaCB1c2luZyB0aGUgSElEIGRldmlj ZS4KCkJSLApDbGF1ZGlvLgpPbiA2LzE5LzA3LCBGcmVkZXJpYyBEYW5pcyA8ZnJlZGVyaWMuZGFu aXNAYWNjZXNzLWNvbXBhbnkuY29tPiB3cm90ZToKPiBDbGF1ZGlvIFRha2FoYXNpIHdyb3RlOgo+ ID4gSGkgRnJlZGVyaWMsCj4gPgo+ID4gSSBnb3QgYSBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiBj YWxsaW5nIERldmljZS5Db25uZWN0ICsgRGV2aWNlLkRpc2Nvbm5lY3QKPiA+Cj4gPiBUaGUgcGF0 aCBjb250ZW50IGlzIHdyb25nKGl0IGNvbnRhaW5zIHRoZSBidXMgaWQpLgo+ID4KPiA+IChnZGIp IGJhY2t0cmFjZQo+ID4gIzAgIDB4MDgwNTI4NWIgaW4gZGJ1c19jb25uZWN0aW9uX2VtaXRfc2ln bmFsX3ZhbGlzdCAoY29ubj0weDgwNTdhYzgsCj4gPiBwYXRoPTB4ODA1N2RiOCAiOjEuMzQiLCBp bnRlcmZhY2U9MHg4MDUzZGY1ICJvcmcuYmx1ZXouaW5wdXQuRGV2aWNlIiwKPiA+ICAgICBuYW1l PTB4ODA1M2U3OCAiRGlzY29ubmVjdGVkIiwgZmlyc3Q9MCwgdmFyX2FyZ3M9MHhiZmUzOTM0NAo+ ID4gIkhX77+977+9aFwyMjPvv73vv71cclwyMDTvv73vv71IXDIzN1wwMDVcYiAiKSBhdCBkYnVz LWhlbHBlci5jOjQ3OAo+ID4gIzEgIDB4MDgwNTI5ZTcgaW4gZGJ1c19jb25uZWN0aW9uX2VtaXRf c2lnbmFsIChjb25uPTB4ODA1N2FjOCwKPiA+IHBhdGg9MHg4MDU3ZGI4ICI6MS4zNCIsIGludGVy ZmFjZT0weDgwNTNkZjUgIm9yZy5ibHVlei5pbnB1dC5EZXZpY2UiLAo+ID4gICAgIG5hbWU9MHg4 MDUzZTc4ICJEaXNjb25uZWN0ZWQiLCBmaXJzdD0wKSBhdCBkYnVzLWhlbHBlci5jOjUzMQo+ID4K PiA+IENvdWxkIHlvdSBwbGVhc2UgZml4IGl0Pwo+Cj4gSGVsbG8gQ2xhdWRpbywKPgo+IFdoZW4g ZG8geW91IGdldCB0aGlzIGNyYXNoID8gdXNpbmcgSElEIGRldmljZSBvciBmYWtlIGlucHV0ID8K Pgo+IFRoYW5rcwo+Cj4gRnJlZAo+Cj4gLS0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQo+IEl0IGlzIG5vdCBieSBpbXByb3ZpbmcgdGhlIG9pbCBsYW1w IHRoYXQgb25lIGludmVudHMgdGhlIGVsZWN0cmljIGJ1bGIhCj4gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiBEYW5pcyBGcmVkZXJpYyAgICAgICAgICAg ICAgICAgICBBY2Nlc3MgQ29tcGFueQo+IFNvZnR3YXJlIGVuZ2luZWVyCj4gTWFpbCA6IG1haWx0 bzpmcmVkZXJpYy5kYW5pc0BhY2Nlc3MtY29tcGFueS5jb20KPiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Cj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IFRoaXMg U0YubmV0IGVtYWlsIGlzIHNwb25zb3JlZCBieSBEQjIgRXhwcmVzcwo+IERvd25sb2FkIERCMiBF eHByZXNzIEMgLSB0aGUgRlJFRSB2ZXJzaW9uIG9mIERCMiBleHByZXNzIGFuZCB0YWtlCj4gY29u dHJvbCBvZiB5b3VyIFhNTC4gTm8gbGltaXRzLiBKdXN0IGRhdGEuIENsaWNrIHRvIGdldCBpdCBu b3cuCj4gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wb3dlcmJhci9kYjIvCj4gX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBCbHVlei1kZXZlbCBtYWlsaW5n IGxpc3QKPiBCbHVlei1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKPiBodHRwczovL2xpc3Rz LnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9ibHVlei1kZXZlbAo+CgoKLS0gCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpDbGF1 ZGlvIFRha2FoYXNpCkluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhIC0gSU5kVAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tClRoaXMgU0YubmV0IGVtYWlsIGlzIHNwb25zb3JlZCBieSBEQjIgRXhwcmVzcwpE b3dubG9hZCBEQjIgRXhwcmVzcyBDIC0gdGhlIEZSRUUgdmVyc2lvbiBvZiBEQjIgZXhwcmVzcyBh bmQgdGFrZQpjb250cm9sIG9mIHlvdXIgWE1MLiBObyBsaW1pdHMuIEp1c3QgZGF0YS4gQ2xpY2sg dG8gZ2V0IGl0IG5vdy4KaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wb3dlcmJhci9kYjIvCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkJsdWV6LWRldmVsIG1h aWxpbmcgbGlzdApCbHVlei1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0 cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vYmx1ZXotZGV2ZWwK

#6 lore raw
Quoted 28 lines · Claudio Takahasi

Hi Frederic,

latest cvs + your patch using the HID device.

BR,
Claudio.

Quoted 21 lines · Frederic Danis
Quoted 9 lines · Claudio Takahasi

Hi Frederic,

I got a segmentation fault when calling Device.Connect + Device.Disconnect

The path content is wrong(it contains the bus id).

(gdb) backtrace
#0 0x0805285b in dbus_connection_emit_signal_valist (conn=0x8057ac8, path=0x8057db8 ":1.34", interface=0x8053df5 "org.bluez.input.Device",

Quoted 7 lines
    name=0x8053e78 "Disconnected", first=0, var_args=0xbfe39344
"HW��h\223��\r\204��H\237\005\b ") at dbus-helper.c:478
#1  0x080529e7 in dbus_connection_emit_signal (conn=0x8057ac8,
path=0x8057db8 ":1.34", interface=0x8053df5 "org.bluez.input.Device",
    name=0x8053e78 "Disconnected", first=0) at dbus-helper.c:531

Could you please fix it?

Hello Claudio,

When do you get this crash ? using HID device or fake input ?

Hello Claudio,

Here is a new version of the patch, fixing the crash (I do not understand how I had test it before without this error, sorry ;-[)

BR

Fred

Signature · 7 lines
-----------------------------------------------
It is not by improving the oil lamp that one invents the electric bulb!
-----------------------------------------------
Danis Frederic                   Access Company
Software engineer
Mail : mailto:[email protected]
-----------------------------------------------

? utils/input/Makefile.in
Index: utils/input/Makefile.am
===================================================================
RCS file: /cvsroot/bluez/utils/input/Makefile.am,v retrieving revision 1.17

input/Makefile.am +1 -1
diff -d -u -p -r1.17 Makefile.am
@@ -12,7 +12,7 @@ service_PROGRAMS = bluetoothd-service-in
 
 bluetoothd_service_input_SOURCES = main.c \
 	manager.h manager.c error.h error.c \
-	server.h server.c device.h device.c storage.h storage.c
+	server.h server.c device.h device.c storage.h storage.c session.c session.h
 
 LDADD = $(top_builddir)/common/libhelper.a \
 		@GLIB_LIBS@ @DBUS_LIBS@ @BLUEZ_LIBS@

Index: utils/input/device.c
===================================================================
RCS file: /cvsroot/bluez/utils/input/device.c,v
retrieving revision 1.52

input/device.c +45 -72

315 lines not on this page · raw message

Index: utils/input/manager.c
===================================================================
RCS file: /cvsroot/bluez/utils/input/manager.c,v
retrieving revision 1.25

input/manager.c +10 -3
diff -d -u -p -r1.25 manager.c
@@ -68,7 +68,7 @@ struct pending_req {
 	int		ctrl_sock;
 };
 
-static GSList *device_paths = NULL;	/* Input registered paths */
+GSList *device_paths = NULL;	/* Input registered paths */
 
 static DBusConnection *connection = NULL;
 
@@ -323,6 +323,9 @@ cleanup:
 	close(pr->ctrl_sock);
 	pending_req_free(pr);
 
+	if (hidp.rd_data)
+		g_free(hidp.rd_data);
+
 	return FALSE;
 }
 
@@ -778,7 +781,7 @@ done:
 	dbus_message_unref(reply);
 }
 
-static int path_bdaddr_cmp(const char *path, const bdaddr_t *bdaddr)
+int path_bdaddr_cmp(const char *path, const bdaddr_t *bdaddr)
 {
 	bdaddr_t src, dst;
 
@@ -954,9 +957,13 @@ static void stored_input(char *key, char
 	 * acceptable since the source is different.
 	 */
 	if (input_device_register(connection, src, &dst, &hidp, &path) < 0)
-		return;
+		goto cleanup;
 
 	device_paths = g_slist_append(device_paths, g_strdup(path));
+
+cleanup:
+	if (hidp.rd_data)
+		g_free(hidp.rd_data);
 }
 
 static void register_stored_inputs(void)

Index: utils/input/server.c
===================================================================
RCS file: /cvsroot/bluez/utils/input/server.c,v
retrieving revision 1.13

input/server.c +18 -126

185 lines not on this page · raw message

Index: utils/input/session.c
===================================================================
RCS file: utils/input/session.c

input/session.c new file +198 -0

198 lines not on this page · raw message

Index: utils/input/session.h
===================================================================
RCS file: utils/input/session.h

input/session.h new file +40 -0
diff -N utils/input/session.h
@@ -0,0 +1,40 @@
+/*
+ *
+ *  BlueZ - Bluetooth protocol stack for Linux
+ *
+ *  Copyright (C) 2004-2007  Marcel Holtmann <[email protected]>
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#include <bluetooth/bluetooth.h>
+
+struct session_data {
+	bdaddr_t src;
+	bdaddr_t dst;
+	int ctrl_sk;
+	int intr_sk;
+	DBusConnection *connection;
+	const char *path;
+};
+
+struct session_data *find_session(bdaddr_t *src, bdaddr_t *dst);
+void create_device(struct session_data *session);
+struct session_data* create_session(bdaddr_t *src, bdaddr_t *dst, int ctrl_sk, DBusConnection *connection, const char *path);
+void add_intr_sk(struct session_data *session, int intr_sk);
+void remove_session(struct session_data *session);
+

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/

_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel

#7 lore raw

T24gNi8yMC8wNywgRnJlZGVyaWMgRGFuaXMgPGZyZWRlcmljLmRhbmlzQGFjY2Vzcy1jb21wYW55 LmNvbT4gd3JvdGU6Cj4gQ2xhdWRpbyBUYWthaGFzaSB3cm90ZToKPiA+IEhpIEZyZWRlcmljLAo+ ID4KPiA+IGxhdGVzdCBjdnMgKyB5b3VyIHBhdGNoIHVzaW5nIHRoZSBISUQgZGV2aWNlLgo+ID4K PiA+IEJSLAo+ID4gQ2xhdWRpby4KPiA+IE9uIDYvMTkvMDcsIEZyZWRlcmljIERhbmlzIDxmcmVk ZXJpYy5kYW5pc0BhY2Nlc3MtY29tcGFueS5jb20+IHdyb3RlOgo+ID4+IENsYXVkaW8gVGFrYWhh c2kgd3JvdGU6Cj4gPj4+IEhpIEZyZWRlcmljLAo+ID4+Pgo+ID4+PiBJIGdvdCBhIHNlZ21lbnRh dGlvbiBmYXVsdCB3aGVuIGNhbGxpbmcgRGV2aWNlLkNvbm5lY3QgKyBEZXZpY2UuRGlzY29ubmVj dAo+ID4+Pgo+ID4+PiBUaGUgcGF0aCBjb250ZW50IGlzIHdyb25nKGl0IGNvbnRhaW5zIHRoZSBi dXMgaWQpLgo+ID4+Pgo+ID4+PiAoZ2RiKSBiYWNrdHJhY2UKPiA+Pj4gIzAgIDB4MDgwNTI4NWIg aW4gZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsX3ZhbGlzdCAoY29ubj0weDgwNTdhYzgsCj4g Pj4+IHBhdGg9MHg4MDU3ZGI4ICI6MS4zNCIsIGludGVyZmFjZT0weDgwNTNkZjUgIm9yZy5ibHVl ei5pbnB1dC5EZXZpY2UiLAo+ID4+PiAgICAgbmFtZT0weDgwNTNlNzggIkRpc2Nvbm5lY3RlZCIs IGZpcnN0PTAsIHZhcl9hcmdzPTB4YmZlMzkzNDQKPiA+Pj4gIkhX77+977+9aFwyMjPvv73vv71c clwyMDTvv73vv71IXDIzN1wwMDVcYiAiKSBhdCBkYnVzLWhlbHBlci5jOjQ3OAo+ID4+PiAjMSAg MHgwODA1MjllNyBpbiBkYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwgKGNvbm49MHg4MDU3YWM4 LAo+ID4+PiBwYXRoPTB4ODA1N2RiOCAiOjEuMzQiLCBpbnRlcmZhY2U9MHg4MDUzZGY1ICJvcmcu Ymx1ZXouaW5wdXQuRGV2aWNlIiwKPiA+Pj4gICAgIG5hbWU9MHg4MDUzZTc4ICJEaXNjb25uZWN0 ZWQiLCBmaXJzdD0wKSBhdCBkYnVzLWhlbHBlci5jOjUzMQo+ID4+Pgo+ID4+PiBDb3VsZCB5b3Ug cGxlYXNlIGZpeCBpdD8KPiA+PiBIZWxsbyBDbGF1ZGlvLAo+ID4+Cj4gPj4gV2hlbiBkbyB5b3Ug Z2V0IHRoaXMgY3Jhc2ggPyB1c2luZyBISUQgZGV2aWNlIG9yIGZha2UgaW5wdXQgPwo+ID4+Cj4K PiBIZWxsbyBDbGF1ZGlvLAo+Cj4gSGVyZSBpcyBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBwYXRjaCwg Zml4aW5nIHRoZSBjcmFzaCAoSSBkbyBub3QgdW5kZXJzdGFuZCBob3cgSSBoYWQgdGVzdCBpdCBi ZWZvcmUgd2l0aG91dCB0aGlzIGVycm9yLCBzb3JyeSA7LVspCj4KPiBCUgo+Cj4gRnJlZAo+Cj4g LS0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IEl0 IGlzIG5vdCBieSBpbXByb3ZpbmcgdGhlIG9pbCBsYW1wIHRoYXQgb25lIGludmVudHMgdGhlIGVs ZWN0cmljIGJ1bGIhCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KPiBEYW5pcyBGcmVkZXJpYyAgICAgICAgICAgICAgICAgICBBY2Nlc3MgQ29tcGFueQo+ IFNvZnR3YXJlIGVuZ2luZWVyCj4gTWFpbCA6IG1haWx0bzpmcmVkZXJpYy5kYW5pc0BhY2Nlc3Mt Y29tcGFueS5jb20KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQoKSGkgRnJlZGVyaWMsCgpHZW5lcmFsbHkgSSB0ZXN0IHVzaW5nIGRidXMtc2VuZCwgeW91 IGNhbiBmaW5kIHNvbWUgZXhhbXBsZXMgaGVyZToKaHR0cDovL3dpa2kuYmx1ZXoub3JnL3dpa2kv SE9XVE8vSW5wdXREZXZpY2VzCgpUbyByZXByb2R1Y2UgdGhlIHJlcG9ydGVkIGJ1ZyBJIHdhcyBj YWxsaW5nOgoxLiBDcmVhdGVEZXZpY2UKMi4gQ29ubmVjdAozLiBEaXNjb25uZWN0CgoKWW91ciBs YXN0IHBhdGNoIGlzIHdvcmtpbmcgZmluZS4gIFdlIGNvdWxkIHRyeSByZW1vdmUgdGhlICJzdHJ1 Y3QKc2Vzc2lvbiIgYW5kIHB1dCBldmVyeXRoaW5nIGluc2lkZSB0aGUgInN0cnVjdCBkZXZpY2Ui IHNpbmNlIGZvciBlYWNoCmlucHV0IGRldmljZSByZWdpc3RlcmVkIHRoZXJlIGlzIGEgRC1CdXMg ZGF0YSBhc3NpZ25lZChJdCBpcyBhcHBsaWVkCnRvIGRldmljZSBhbmQgaG9zdCBpbml0aWF0ZWQg Y29ubmVjdGlvbnMpLiBTbyB0aGUgInN0cnVjdCBzZXNzaW9uIgpjb250YWlucyBkdXBsaWNhdGVk IGRhdGEuCgpJIHdpbGwgdHJ5IGNoYW5nZSB0aGUgY29kZSBhbmQgcHJvcG9zZSBhbm90aGVyIGFw cHJvYWNoIHVzaW5nIHlvdXIKY29kZSBhcyBiYXNlbGluZS4KCkJSLApDbGF1ZGlvLgotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tClRoaXMgU0YubmV0IGVtYWlsIGlzIHNwb25zb3JlZCBieSBEQjIgRXhwcmVzcwpE b3dubG9hZCBEQjIgRXhwcmVzcyBDIC0gdGhlIEZSRUUgdmVyc2lvbiBvZiBEQjIgZXhwcmVzcyBh bmQgdGFrZQpjb250cm9sIG9mIHlvdXIgWE1MLiBObyBsaW1pdHMuIEp1c3QgZGF0YS4gQ2xpY2sg dG8gZ2V0IGl0IG5vdy4KaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wb3dlcmJhci9kYjIvCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkJsdWV6LWRldmVsIG1h aWxpbmcgbGlzdApCbHVlei1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0 cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vYmx1ZXotZGV2ZWwK

#8 lore raw

T24gNi8yMS8wNywgQ2xhdWRpbyBUYWthaGFzaSA8Y2t0YWthaGFzaUBnbWFpbC5jb20+IHdyb3Rl Ogo+IE9uIDYvMjAvMDcsIEZyZWRlcmljIERhbmlzIDxmcmVkZXJpYy5kYW5pc0BhY2Nlc3MtY29t cGFueS5jb20+IHdyb3RlOgo+ID4gQ2xhdWRpbyBUYWthaGFzaSB3cm90ZToKPiA+ID4gSGkgRnJl ZGVyaWMsCj4gPiA+Cj4gPiA+IGxhdGVzdCBjdnMgKyB5b3VyIHBhdGNoIHVzaW5nIHRoZSBISUQg ZGV2aWNlLgo+ID4gPgo+ID4gPiBCUiwKPiA+ID4gQ2xhdWRpby4KPiA+ID4gT24gNi8xOS8wNywg RnJlZGVyaWMgRGFuaXMgPGZyZWRlcmljLmRhbmlzQGFjY2Vzcy1jb21wYW55LmNvbT4gd3JvdGU6 Cj4gPiA+PiBDbGF1ZGlvIFRha2FoYXNpIHdyb3RlOgo+ID4gPj4+IEhpIEZyZWRlcmljLAo+ID4g Pj4+Cj4gPiA+Pj4gSSBnb3QgYSBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiBjYWxsaW5nIERldmlj ZS5Db25uZWN0ICsgRGV2aWNlLkRpc2Nvbm5lY3QKPiA+ID4+Pgo+ID4gPj4+IFRoZSBwYXRoIGNv bnRlbnQgaXMgd3JvbmcoaXQgY29udGFpbnMgdGhlIGJ1cyBpZCkuCj4gPiA+Pj4KPiA+ID4+PiAo Z2RiKSBiYWNrdHJhY2UKPiA+ID4+PiAjMCAgMHgwODA1Mjg1YiBpbiBkYnVzX2Nvbm5lY3Rpb25f ZW1pdF9zaWduYWxfdmFsaXN0IChjb25uPTB4ODA1N2FjOCwKPiA+ID4+PiBwYXRoPTB4ODA1N2Ri OCAiOjEuMzQiLCBpbnRlcmZhY2U9MHg4MDUzZGY1ICJvcmcuYmx1ZXouaW5wdXQuRGV2aWNlIiwK PiA+ID4+PiAgICAgbmFtZT0weDgwNTNlNzggIkRpc2Nvbm5lY3RlZCIsIGZpcnN0PTAsIHZhcl9h cmdzPTB4YmZlMzkzNDQKPiA+ID4+PiAiSFfvv73vv71oXDIyM++/ve+/vVxyXDIwNO+/ve+/vUhc MjM3XDAwNVxiICIpIGF0IGRidXMtaGVscGVyLmM6NDc4Cj4gPiA+Pj4gIzEgIDB4MDgwNTI5ZTcg aW4gZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsIChjb25uPTB4ODA1N2FjOCwKPiA+ID4+PiBw YXRoPTB4ODA1N2RiOCAiOjEuMzQiLCBpbnRlcmZhY2U9MHg4MDUzZGY1ICJvcmcuYmx1ZXouaW5w dXQuRGV2aWNlIiwKPiA+ID4+PiAgICAgbmFtZT0weDgwNTNlNzggIkRpc2Nvbm5lY3RlZCIsIGZp cnN0PTApIGF0IGRidXMtaGVscGVyLmM6NTMxCj4gPiA+Pj4KPiA+ID4+PiBDb3VsZCB5b3UgcGxl YXNlIGZpeCBpdD8KPiA+ID4+IEhlbGxvIENsYXVkaW8sCj4gPiA+Pgo+ID4gPj4gV2hlbiBkbyB5 b3UgZ2V0IHRoaXMgY3Jhc2ggPyB1c2luZyBISUQgZGV2aWNlIG9yIGZha2UgaW5wdXQgPwo+ID4g Pj4KPiA+Cj4gPiBIZWxsbyBDbGF1ZGlvLAo+ID4KPiA+IEhlcmUgaXMgYSBuZXcgdmVyc2lvbiBv ZiB0aGUgcGF0Y2gsIGZpeGluZyB0aGUgY3Jhc2ggKEkgZG8gbm90IHVuZGVyc3RhbmQgaG93IEkg aGFkIHRlc3QgaXQgYmVmb3JlIHdpdGhvdXQgdGhpcyBlcnJvciwgc29ycnkgOy1bKQo+ID4KPiA+ IEJSCj4gPgo+ID4gRnJlZAo+ID4KPiA+IC0tCj4gPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gSXQgaXMgbm90IGJ5IGltcHJvdmluZyB0aGUgb2ls IGxhbXAgdGhhdCBvbmUgaW52ZW50cyB0aGUgZWxlY3RyaWMgYnVsYiEKPiA+IC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiBEYW5pcyBGcmVkZXJpYyAg ICAgICAgICAgICAgICAgICBBY2Nlc3MgQ29tcGFueQo+ID4gU29mdHdhcmUgZW5naW5lZXIKPiA+ IE1haWwgOiBtYWlsdG86ZnJlZGVyaWMuZGFuaXNAYWNjZXNzLWNvbXBhbnkuY29tCj4gPiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Cj4gSGkgRnJlZGVy aWMsCj4KPiBHZW5lcmFsbHkgSSB0ZXN0IHVzaW5nIGRidXMtc2VuZCwgeW91IGNhbiBmaW5kIHNv bWUgZXhhbXBsZXMgaGVyZToKPiBodHRwOi8vd2lraS5ibHVlei5vcmcvd2lraS9IT1dUTy9JbnB1 dERldmljZXMKPgo+IFRvIHJlcHJvZHVjZSB0aGUgcmVwb3J0ZWQgYnVnIEkgd2FzIGNhbGxpbmc6 Cj4gMS4gQ3JlYXRlRGV2aWNlCj4gMi4gQ29ubmVjdAo+IDMuIERpc2Nvbm5lY3QKPgo+Cj4gWW91 ciBsYXN0IHBhdGNoIGlzIHdvcmtpbmcgZmluZS4gIFdlIGNvdWxkIHRyeSByZW1vdmUgdGhlICJz dHJ1Y3QKPiBzZXNzaW9uIiBhbmQgcHV0IGV2ZXJ5dGhpbmcgaW5zaWRlIHRoZSAic3RydWN0IGRl dmljZSIgc2luY2UgZm9yIGVhY2gKPiBpbnB1dCBkZXZpY2UgcmVnaXN0ZXJlZCB0aGVyZSBpcyBh IEQtQnVzIGRhdGEgYXNzaWduZWQoSXQgaXMgYXBwbGllZAo+IHRvIGRldmljZSBhbmQgaG9zdCBp bml0aWF0ZWQgY29ubmVjdGlvbnMpLiBTbyB0aGUgInN0cnVjdCBzZXNzaW9uIgo+IGNvbnRhaW5z IGR1cGxpY2F0ZWQgZGF0YS4KPgo+IEkgd2lsbCB0cnkgY2hhbmdlIHRoZSBjb2RlIGFuZCBwcm9w b3NlIGFub3RoZXIgYXBwcm9hY2ggdXNpbmcgeW91cgo+IGNvZGUgYXMgYmFzZWxpbmUuCj4KPiBC UiwKPiBDbGF1ZGlvLgo+CgpIaSBGcmVkZXJpYywKClRoZSBzaWduYWxzIGFyZSBub3cgc2VudCBw cm9wZXJseS4KClBsZWFzZSB0ZXN0IGlmIGl0IGlzIHdvcmtpbmcuCgpUaGVyZSBpcyBqdXN0IG9u ZSBzY2VuYXJpbyB0aGF0IEkgYW0gZml4aW5nOiBEaXNjb25uZWN0IHNpZ25hbCBpcyBub3QKc2Vu dCBpZiBSZW1vdmVEZXZpY2UgaXMgY2FsbGVkKGFuZCB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCku CgpCUiwKQ2xhdWRpby4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGlzIFNGLm5ldCBlbWFpbCBpcyBzcG9u c29yZWQgYnkgREIyIEV4cHJlc3MKRG93bmxvYWQgREIyIEV4cHJlc3MgQyAtIHRoZSBGUkVFIHZl cnNpb24gb2YgREIyIGV4cHJlc3MgYW5kIHRha2UKY29udHJvbCBvZiB5b3VyIFhNTC4gTm8gbGlt aXRzLiBKdXN0IGRhdGEuIENsaWNrIHRvIGdldCBpdCBub3cuCmh0dHA6Ly9zb3VyY2Vmb3JnZS5u ZXQvcG93ZXJiYXIvZGIyLwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpCbHVlei1kZXZlbCBtYWlsaW5nIGxpc3QKQmx1ZXotZGV2ZWxAbGlzdHMuc291cmNl Zm9yZ2UubmV0Cmh0dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL2Js dWV6LWRldmVsCg==