<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.6000.17116" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Hi all,</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>To my understanding, before connecting a bluetooth
device it is necessary to perform discovering to get the remote MAC
address.</FONT></DIV>
<DIV><FONT face=Arial size=2>Do you successfully go through this step when
testing Bluetooth in your environment ?</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Device discovering involves the broadcast
receiver, which is started from
QBluetoothLocalDevice::startDiscovery</FONT></DIV>
<DIV><FONT face=Arial size=2>Therefore it seems to me that the patch consisting
in reloading the btAdapterClass must also be applied to the
startDiscovery(), cancelDiscovery() and isDiscovering() methods.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>While trying to go further in my tests, I noticed
that AndroidBroadcastReceiver suffers from the same syndrome.</FONT></DIV>
<DIV><FONT face=Arial size=2>Then I tried to reload jQtBroadcastReceiverClass
from "org/kde/necessitas/mobile/QtBroadcastReceiver", but without success
(class not found).</FONT></DIV>
<DIV><FONT face=Arial size=2>QtBroadcastReceiver is an extension of the
BroadcastReceiver Java class (cf. QtBroadcastReceiver.java)</FONT></DIV>
<DIV><FONT face=Arial size=2>I can successfully load jQtBroadcastReceiverClass
from "android/content/BroadcastReceiver", but of course the program fails later
because the class doesn't contain the expected extensions.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Do you have any explanation why it is possible to
find a class from "android/bluetooth/BluetoothAdapter" or from
"android/content/BroadcastReceiver", but not from
"org/kde/necessitas/mobile/QtBroadcastReceiver" ?</FONT></DIV>
<DIV><FONT face=Arial size=2>More generally, why any FindClass performed
during the connectivity library load work fine but must be repeated at program
run time ? Why some Java classes could become no more accessible ?</FONT></DIV>
<DIV><FONT face=Arial size=2>Is there a change in Qt loading logic that can
explain this ? How to investigate in this direction ?</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>I will be happy if I can make a contribution to
diagnose these problems.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Dominique Rety</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV style="FONT: 10pt arial">----- Original Message -----
<DIV style="BACKGROUND: #e4e4e4; font-color: black"><B>From:</B> <A
title=dominiquerety@hotmail.fr href="mailto:dominiquerety@hotmail.fr">Dominique
Rety</A> </DIV>
<DIV><B>To:</B> <A title=kate.alhola@gmail.com
href="mailto:kate.alhola@gmail.com">Kate Alhola</A> </DIV>
<DIV><B>Cc:</B> <A title=necessitas-devel@kde.org
href="mailto:necessitas-devel@kde.org">necessitas-devel@kde.org</A> </DIV>
<DIV><B>Sent:</B> Friday, January 04, 2013 2:52 PM</DIV>
<DIV><B>Subject:</B> Re: Crash when using Bluetooth</DIV></DIV>
<DIV><BR></DIV>
<DIV>
<DIV><FONT face=Arial size=2>Hi Kate,</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>I continue trying to operate the btchat sample,
which implements functionalities very closed to those we have to use in our
project.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Before receiving your patch, I tried a solution
consisting in moving the initialization code for the connectivity library
(contained in JNI_OnLoad) to a separate function executed just before the
first call to the library.</FONT></DIV>
<DIV><FONT face=Arial size=2>For btchat, I execute this function just before
QBluetoothLocalDevice().name() in the main application context.</FONT></DIV>
<DIV><FONT face=Arial size=2>This solution works (I can get the device name
without JNI ERROR), probably because the initialization code is performed in a
thread context that remains valid.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>I also tried your patches, which solve the get name
JNI ERROR as well. Your solution is probably better if it works without any
constraint on the initialization thread context.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>However, all of this only partly solves
the problem. When I try to connect through the btchat application, I got an
other JNI ERROR when the device discovery logic starts.</FONT></DIV>
<DIV><FONT face=Arial size=2>I have applied your patch to the
QBluetoothLocalDevice::startDiscovery() cancelDiscovery() and isDiscovering()
methods. This enables the code to continue a bit.</FONT></DIV>
<DIV><FONT face=Arial size=2>But then I have similar problems into the
AndroidBroadcastReceiver::initialize() method when calling
env->RegisterNatives(jQtBroadcastReceiverClass).</FONT></DIV>
<DIV><FONT face=Arial size=2>So I tried a similar patch to fix this issue by
first issuing:</FONT></DIV>
<DIV><FONT face=Arial size=2>
JNIThreadHelper env;</FONT></DIV>
<DIV><FONT face=Arial size=2>
jQtBroadcastReceiverClass =
env->FindClass("org/kde/necessitas/mobile/QtBroadcastReceiver");</FONT></DIV>
<DIV><FONT face=Arial size=2>Unfortunately, this call returns a NULL and I get a
FATAL EXCEPTION, java.lang.NoClassDefFoundError:
org/kde/necessitas/mobile/QtBroadcastReceiver.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Note that the</FONT></DIV>
<DIV><FONT face=Arial size=2>
jQtBroadcastReceiverClass =
env->FindClass("org/kde/necessitas/mobile/QtBroadcastReceiver");</FONT></DIV>
<DIV><FONT face=Arial size=2>is performed once <U>with success</U> in the
AndroidBroadcastReceiver::loadJavaClass() method, which is called at
libQtConnectivity library loading time, from JNI_OnLoad.</FONT></DIV>
<DIV><FONT face=Arial size=2>I can't understand why this call is only valid at
library load time.</FONT></DIV>
<DIV><FONT face=Arial size=2>I'm not sure that trying to apply a similar patch
in this situation would be a solution to this issue.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Do you have an idea to progress on this subject
?</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Thank you for your help.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Dominique RETY</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV></DIV>
<BLOCKQUOTE
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
<DIV
style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B>
<A title=kate.alhola@gmail.com href="mailto:kate.alhola@gmail.com">Kate
Alhola</A> </DIV>
<DIV style="FONT: 10pt arial"><B>To:</B> <A title=dominiquerety@hotmail.fr
href="mailto:dominiquerety@hotmail.fr">Dominique Rety</A> </DIV>
<DIV style="FONT: 10pt arial"><B>Cc:</B> <A title=necessitas-devel@kde.org
href="mailto:necessitas-devel@kde.org">necessitas-devel@kde.org</A> </DIV>
<DIV style="FONT: 10pt arial"><B>Sent:</B> Thursday, January 03, 2013 2:59
PM</DIV>
<DIV style="FONT: 10pt arial"><B>Subject:</B> Re: Crash when using
Bluetooth</DIV>
<DIV><BR></DIV>On Wed, Dec 26, 2012 at 7:33 PM, Dominique Rety <SPAN
dir=ltr><<A href="mailto:dominiquerety@hotmail.fr"
target=_blank>dominiquerety@hotmail.fr</A>></SPAN> wrote:<BR>
<DIV class=gmail_quote>
<BLOCKQUOTE class=gmail_quote
style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><U></U>
<DIV dir=auto bgcolor="#ffffff">
<DIV>
<DIV><FONT face=Arial>Hi Kate,</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>Thank you for your answer.</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>I tried some traces and modifications into the lib
QtConnectivity without success. It seems to me that functions into the
library already contain calls to JNIThreadHelper class that should setup the
Java environment by performing jvm->AttachCurrentThread(), but this
doesn't solve the problem.</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>At the same time, I performed some basic bluetooth
tests directly through Java Eclipse
(BluetoothAdapter.getDefaultAdapter.getName), which work fine on Nexus 7
with Android 4.2.</FONT></DIV>
<DIV><FONT face=Arial>However, our project contains some legacy parts that
have already been developed in C, and using Qt would be the very best way to
integrate them. Therefore I will only envision to implement a direct bridge
between Java and C parts as a last resort if I can't find a viable
solution with Qt.</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>Consequently, I am very interested by your patches
even before the next release, which could be helpful for us to take a
decision for our development. Overriding and deploying the default
Necessitas lib QtConnectivity is not a problem for me, at least for test
purpose.</FONT></DIV></DIV></DIV></BLOCKQUOTE>
<DIV><BR>Now patches are on Review board <A
href="https://git.reviewboard.kde.org/r/108113/">https://git.reviewboard.kde.org/r/108113/</A>
. I would be happy if you could try them.<BR><BR>Sorry about delays publishing
them <BR><BR><BR>Kate<BR> </DIV>
<BLOCKQUOTE class=gmail_quote
style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<DIV dir=auto bgcolor="#ffffff">
<DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>Regards,</FONT></DIV>
<DIV><FONT face=Arial>Dominique</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial></FONT> </DIV></DIV>
<BLOCKQUOTE dir=ltr
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV class=im>
<DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
<DIV style="BACKGROUND: #e4e4e4; FONT: 10pt arial"><B>From:</B> <A
title=kate.alhola@gmail.com href="mailto:kate.alhola@gmail.com"
target=_blank>Kate Alhola</A> </DIV>
<DIV style="FONT: 10pt arial"><B>To:</B> <A title=dominiquerety@hotmail.fr
href="mailto:dominiquerety@hotmail.fr" target=_blank>Dominique Rety</A>
</DIV></DIV>
<DIV class=im>
<DIV style="FONT: 10pt arial"><B>Cc:</B> <A title=necessitas-devel@kde.org
href="mailto:necessitas-devel@kde.org%3E"
target=_blank><necessitas-devel@kde.org></A> </DIV>
<DIV style="FONT: 10pt arial"><B>Sent:</B> Wednesday, December 26, 2012
4:36 PM</DIV>
<DIV style="FONT: 10pt arial"><B>Subject:</B> Re: Crash when using
Bluetooth</DIV>
<DIV><BR></DIV></DIV>
<DIV>
<DIV class=h5>
<DIV>On 13.12.2012, at 16.41, Dominique Rety <<A
href="mailto:dominiquerety@hotmail.fr"
target=_blank>dominiquerety@hotmail.fr</A>> wrote:</DIV>
<DIV><BR></DIV>
<BLOCKQUOTE type="cite">
<DIV>
<DIV>
<DIV><FONT face=Arial>Hi,</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>I am currently developing a telecommunication
project involving Blutooth communication between Android devices. For
this purpose, I'm trying to use Necessitas Bluetooth support and I
experiment very similar problems that are described in the "Crash when
using Bluetooth" (Kate Alhola) archive thread.</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV></DIV></DIV></BLOCKQUOTE>
<DIV><BR></DIV>
<DIV>There is several issues in current necessitas libQtConnectivity
version. I have hopefully fixed most of them and i have version of
libQtConnectivity that least works with my own applocation. I try to
deliver patches to necessitas project so that fixes could be included in
next release. </DIV><BR>
<BLOCKQUOTE type="cite">
<DIV>
<DIV>
<DIV><FONT face=Arial>Environment:</FONT></DIV>
<DIV><FONT face=Arial>Java JDK 1.7.0_09<BR>Qt Creator 2.5.83 Based on Qt
4.8.3 running on Linux Suze<BR>Kit = Necessitas Qt 4.8.2 for Android
armv7a<BR>Compiler = Android GCC (arm-4.4.3)<BR>Android target SDK =
android-16<BR>Deploy to Nexus 7 with Android version 4.2.</FONT></DIV>
<DIV><FONT face=Arial><FONT size=+0><FONT
face=Arial></FONT></FONT></FONT> </DIV>
<DIV><FONT face=Arial>I firstly tried to deploy the btchat sample and I
faced the same problem:</FONT></DIV>
<DIV><FONT face=Arial>JNI ERROR (app bug): accessed stale local
reference 0xe680001d (index 7 in a table of size 4)<BR>VM
aborting<BR>Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1), thread
13965 (.example.btchat)</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>Setting traces in different source files of
the connectivity library, I also noticed that the error happens when
trying to use some member functions of QBluetoothLocalDevice (btchat
sample requests for the local device name from the main
function).</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>I tried to bypass this problem by only creating
the QBluetoothLocalDevice without requesting for the device name in the
btchat application. The program then starts correctly.</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>In the btchat application, the "Connect" button
calls the QBluetoothServiceDiscoveryAgent::start function. This function
randomly processes the request because it relies on discoveryState and
deviceAddress members, which seem not to be initialized : either the
discovery process freezes or the program aborts with an error (if
luckily discoveryState and deviceAddress members get consistent values).
I didn't try any further investigation. It seems to me that the
connectivity library is compiled with qbluetoothlocaldevice_p.cpp, which
just contains empty functions for the QBluetoothLocalDevice class,
instead of a customized source for Android.</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV></DIV></DIV></BLOCKQUOTE>
<DIV><BR></DIV>
<DIV>Yes, that's case. The QBluetoothLocalDevice initializes static
handles to java virtual machine that are then referenced by other modules.
I have made fixes to several parts of libQtConnectivity</DIV>
<DIV><BR></DIV><BR>
<BLOCKQUOTE type="cite">
<DIV>
<DIV>
<DIV><FONT face=Arial>Is Bluetooth support for Android in Necessitas
complete ?</FONT></DIV></DIV></DIV></BLOCKQUOTE>
<DIV><BR></DIV>
<DIV>Most of, some functions are still missing but there are some bugs in
current version</DIV><BR>
<BLOCKQUOTE type="cite">
<DIV>
<DIV>
<DIV><FONT face=Arial>Is the btchat sample expected to work
properly with Android ?</FONT></DIV></DIV></DIV></BLOCKQUOTE>
<DIV><BR></DIV>
<DIV>I have not tried that one</DIV><BR>
<BLOCKQUOTE type="cite">
<DIV>
<DIV>
<DIV><FONT face=Arial>Is there any specific configuration issue I could
miss ?</FONT></DIV></DIV></DIV></BLOCKQUOTE>
<DIV><BR></DIV>
<DIV>That's good question, what is origin of the bugs, does it work with
older android</DIV>
<DIV>Versions ? The source reason of bugs is JNI handles alocation that
conflict with</DIV>
<DIV>Current thread structure and some that handles are expired when used.
I have only tested with</DIV>
<DIV>Android 4.x</DIV><BR>
<BLOCKQUOTE type="cite">
<DIV>
<DIV>
<DIV><FONT face=Arial>Is there any corrective or complement software I
could download ?</FONT></DIV></DIV></DIV></BLOCKQUOTE>
<DIV><BR></DIV>
<DIV>I could make my patches avaiable before next release but
overriding default necessitas libQtConnectivity requires some
tricks</DIV><BR>
<BLOCKQUOTE type="cite">
<DIV>
<DIV>
<DIV><FONT face=Arial>How can I progress on this issue ? What is the
best way to get help and advices ?</FONT></DIV></DIV></DIV></BLOCKQUOTE>
<DIV><BR></DIV>This list works fine.
<DIV><BR></DIV>
<DIV>Kate</DIV>
<DIV><BR>
<BLOCKQUOTE type="cite">
<DIV>
<DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>Regards,</FONT></DIV>
<DIV><FONT face=Arial>Dominique RETY</FONT></DIV>
<DIV><FONT face=Arial><A>dominiquerety@hotmail.fr</A></FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV></DIV></DIV></BLOCKQUOTE>
<BLOCKQUOTE type="cite">
<DIV><SPAN>_______________________________________________</SPAN><BR><SPAN>Necessitas-devel
mailing list</SPAN><BR><SPAN><A href="mailto:Necessitas-devel@kde.org"
target=_blank>Necessitas-devel@kde.org</A></SPAN><BR><SPAN><A
href="https://mail.kde.org/mailman/listinfo/necessitas-devel"
target=_blank>https://mail.kde.org/mailman/listinfo/necessitas-devel</A></SPAN><BR></DIV></BLOCKQUOTE></DIV></DIV></DIV></BLOCKQUOTE></DIV></BLOCKQUOTE></DIV><BR></BLOCKQUOTE></BODY></HTML>