diff --git a/platforms/mtk/LEScan/.classpath b/platforms/mtk/LEScan/.classpath
new file mode 100644
index 000000000..611d75366
--- /dev/null
+++ b/platforms/mtk/LEScan/.classpath
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platforms/mtk/LEScan/.project b/platforms/mtk/LEScan/.project
new file mode 100644
index 000000000..1f3749881
--- /dev/null
+++ b/platforms/mtk/LEScan/.project
@@ -0,0 +1,60 @@
+
+
+ LEScan
+
+
+
+
+
+ com.android.ide.eclipse.adt.ResourceManagerBuilder
+
+
+
+
+ com.android.ide.eclipse.adt.PreCompilerBuilder
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ com.android.ide.eclipse.adt.ApkBuilder
+
+
+
+
+
+ com.android.ide.eclipse.adt.AndroidNature
+ org.eclipse.jdt.core.javanature
+
+
+
+ btstack-gen
+ 2
+ BTSTACK_JAVA_LOC/gen
+
+
+ btstack-src
+ 2
+ BTSTACK_JAVA_LOC/src
+
+
+ config
+ 2
+ virtual:/virtual
+
+
+
+
+ BTSTACK_JAVA_LOC
+ file:/Projects/btstack-xcode/btstack/java
+
+
+ MTK_LOC
+ file:/Projects/btstack-xcode/btstack/platforms/mtk
+
+
+
diff --git a/platforms/mtk/LEScan/.settings/org.eclipse.jdt.core.prefs b/platforms/mtk/LEScan/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..b080d2ddc
--- /dev/null
+++ b/platforms/mtk/LEScan/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/platforms/mtk/LEScan/AndroidManifest.xml b/platforms/mtk/LEScan/AndroidManifest.xml
new file mode 100644
index 000000000..9d4c17eb3
--- /dev/null
+++ b/platforms/mtk/LEScan/AndroidManifest.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platforms/mtk/LEScan/bin/AndroidManifest.xml b/platforms/mtk/LEScan/bin/AndroidManifest.xml
new file mode 100644
index 000000000..9d4c17eb3
--- /dev/null
+++ b/platforms/mtk/LEScan/bin/AndroidManifest.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platforms/mtk/LEScan/gen/com/bluekitchen/lescan/BuildConfig.java b/platforms/mtk/LEScan/gen/com/bluekitchen/lescan/BuildConfig.java
new file mode 100644
index 000000000..dd70b2bfd
--- /dev/null
+++ b/platforms/mtk/LEScan/gen/com/bluekitchen/lescan/BuildConfig.java
@@ -0,0 +1,6 @@
+/** Automatically generated file. DO NOT MODIFY */
+package com.bluekitchen.lescan;
+
+public final class BuildConfig {
+ public final static boolean DEBUG = true;
+}
\ No newline at end of file
diff --git a/platforms/mtk/LEScan/gen/com/bluekitchen/lescan/R.java b/platforms/mtk/LEScan/gen/com/bluekitchen/lescan/R.java
new file mode 100644
index 000000000..04c37712f
--- /dev/null
+++ b/platforms/mtk/LEScan/gen/com/bluekitchen/lescan/R.java
@@ -0,0 +1,68 @@
+/* AUTO-GENERATED FILE. DO NOT MODIFY.
+ *
+ * This class was automatically generated by the
+ * aapt tool from the resource data it found. It
+ * should not be modified by hand.
+ */
+
+package com.bluekitchen.lescan;
+
+public final class R {
+ public static final class attr {
+ }
+ public static final class dimen {
+ /** Default screen margins, per the Android Design guidelines.
+
+ Customize dimensions originally defined in res/values/dimens.xml (such as
+ screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+
+ */
+ public static final int activity_horizontal_margin=0x7f040000;
+ public static final int activity_vertical_margin=0x7f040001;
+ }
+ public static final class drawable {
+ public static final int ic_launcher=0x7f020000;
+ }
+ public static final class id {
+ public static final int action_settings=0x7f080000;
+ }
+ public static final class layout {
+ public static final int activity_main=0x7f030000;
+ }
+ public static final class menu {
+ public static final int main=0x7f070000;
+ }
+ public static final class string {
+ public static final int action_settings=0x7f050001;
+ public static final int app_name=0x7f050000;
+ public static final int hello_world=0x7f050002;
+ }
+ public static final class style {
+ /**
+ Base application theme, dependent on API level. This theme is replaced
+ by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+
+
+ Theme customizations available in newer API levels can go in
+ res/values-vXX/styles.xml, while customizations related to
+ backward-compatibility can go here.
+
+
+ Base application theme for API 11+. This theme completely replaces
+ AppBaseTheme from res/values/styles.xml on API 11+ devices.
+
+ API 11 theme customizations can go here.
+
+ Base application theme for API 14+. This theme completely replaces
+ AppBaseTheme from BOTH res/values/styles.xml and
+ res/values-v11/styles.xml on API 14+ devices.
+
+ API 14 theme customizations can go here.
+ */
+ public static final int AppBaseTheme=0x7f060000;
+ /** Application theme.
+ All customizations that are NOT specific to a particular API-level can go here.
+ */
+ public static final int AppTheme=0x7f060001;
+ }
+}
diff --git a/platforms/mtk/LEScan/hs_err_pid91618.log b/platforms/mtk/LEScan/hs_err_pid91618.log
new file mode 100644
index 000000000..b0c3e16a5
--- /dev/null
+++ b/platforms/mtk/LEScan/hs_err_pid91618.log
@@ -0,0 +1,267 @@
+#
+# A fatal error has been detected by the Java Runtime Environment:
+#
+# Internal Error (javaClasses.cpp:129), pid=91618, tid=5891
+# fatal error: Invalid layout of preloaded class
+#
+# JRE version: 7.0_10-b18
+# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.6-b04 mixed mode bsd-amd64 compressed oops)
+# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
+#
+# If you would like to submit a bug report, please visit:
+# http://bugreport.sun.com/bugreport/crash.jsp
+#
+
+--------------- T H R E A D ---------------
+
+Current thread (0x00007fd3d3000000): JavaThread "Unknown thread" [_thread_in_vm, id=5891, stack(0x00000001014bb000,0x00000001015bb000)]
+
+Stack: [0x00000001014bb000,0x00000001015bb000], sp=0x00000001015ba840, free space=1022k
+Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
+V [libjvm.dylib+0x4a3117]
+V [libjvm.dylib+0x1b1ebf]
+V [libjvm.dylib+0x28af5c]
+V [libjvm.dylib+0x28bdbd]
+V [libjvm.dylib+0x44d8b4]
+V [libjvm.dylib+0x489ce3]
+V [libjvm.dylib+0x48a257]
+V [libjvm.dylib+0x25046f]
+V [libjvm.dylib+0x47a15f]
+V [libjvm.dylib+0x2a3418]
+C [java+0x2995] JavaMain+0x134
+C [libsystem_pthread.dylib+0x1899] _pthread_body+0x8a
+C [libsystem_pthread.dylib+0x172a] _pthread_struct_init+0x0
+C [libsystem_pthread.dylib+0x5fc9] thread_start+0xd
+
+
+--------------- P R O C E S S ---------------
+
+Java Threads: ( => current thread )
+
+Other Threads:
+
+=>0x00007fd3d3000000 (exited) JavaThread "Unknown thread" [_thread_in_vm, id=5891, stack(0x00000001014bb000,0x00000001015bb000)]
+
+VM state:not at safepoint (not fully initialized)
+
+VM Mutex/Monitor currently owned by a thread: None
+
+GC Heap History (0 events):
+No events
+
+Deoptimization events (0 events):
+No events
+
+Internal exceptions (0 events):
+No events
+
+Events (10 events):
+Event: 0.014 loading class 0x00007fd3d150dec0 done
+Event: 0.015 loading class 0x00007fd3d150d8a0 done
+Event: 0.015 loading class 0x00007fd3d150d880
+Event: 0.015 loading class 0x00007fd3d1516760
+Event: 0.015 loading class 0x00007fd3d1516760 done
+Event: 0.015 loading class 0x00007fd3d1516790
+Event: 0.015 loading class 0x00007fd3d1516790 done
+Event: 0.015 loading class 0x00007fd3d15167c0
+Event: 0.015 loading class 0x00007fd3d15167c0 done
+Event: 0.016 loading class 0x00007fd3d150d880 done
+
+
+Dynamic libraries:
+0x000000000ba7d000 /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
+0x000000000ba7d000 /System/Library/Frameworks/Security.framework/Versions/A/Security
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
+0x000000000ba7d000 /usr/lib/libz.1.dylib
+0x000000000ba7d000 /usr/lib/libSystem.B.dylib
+0x000000000ba7d000 /usr/lib/libobjc.A.dylib
+0x000000000ba7d000 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
+0x000000000ba7d000 /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
+0x000000000ba7d000 /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
+0x000000000ba7d000 /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
+0x000000000ba7d000 /System/Library/PrivateFrameworks/RemoteViewServices.framework/Versions/A/RemoteViewServices
+0x000000000ba7d000 /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
+0x000000000ba7d000 /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit
+0x000000000ba7d000 /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore
+0x000000000ba7d000 /System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv
+0x000000000ba7d000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
+0x000000000ba7d000 /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore
+0x000000000ba7d000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition
+0x000000000ba7d000 /usr/lib/libauto.dylib
+0x000000000ba7d000 /usr/lib/libicucore.A.dylib
+0x000000000ba7d000 /usr/lib/libxml2.2.dylib
+0x000000000ba7d000 /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI
+0x000000000ba7d000 /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
+0x000000000ba7d000 /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
+0x000000000ba7d000 /usr/lib/liblangid.dylib
+0x000000000ba7d000 /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport
+0x000000000ba7d000 /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
+0x000000000ba7d000 /usr/lib/libDiagnosticMessagesClient.dylib
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
+0x000000000ba7d000 /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis
+0x000000000ba7d000 /System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/GenerationalStorage
+0x000000000ba7d000 /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
+0x000000000ba7d000 /System/Library/PrivateFrameworks/Sharing.framework/Versions/A/Sharing
+0x000000000ba7d000 /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
+0x000000000ba7d000 /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText
+0x000000000ba7d000 /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
+0x000000000ba7d000 /System/Library/PrivateFrameworks/Backup.framework/Versions/A/Backup
+0x000000000ba7d000 /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
+0x000000000ba7d000 /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
+0x000000000ba7d000 /usr/lib/libCRFSuite.dylib
+0x000000000ba7d000 /usr/lib/libc++.1.dylib
+0x000000000ba7d000 /usr/lib/libc++abi.dylib
+0x000000000ba7d000 /usr/lib/system/libcache.dylib
+0x000000000ba7d000 /usr/lib/system/libcommonCrypto.dylib
+0x000000000ba7d000 /usr/lib/system/libcompiler_rt.dylib
+0x000000000ba7d000 /usr/lib/system/libcopyfile.dylib
+0x000000000ba7d000 /usr/lib/system/libcorecrypto.dylib
+0x000000000ba7d000 /usr/lib/system/libdispatch.dylib
+0x000000000ba7d000 /usr/lib/system/libdyld.dylib
+0x000000000ba7d000 /usr/lib/system/libkeymgr.dylib
+0x000000000ba7d000 /usr/lib/system/liblaunch.dylib
+0x000000000ba7d000 /usr/lib/system/libmacho.dylib
+0x000000000ba7d000 /usr/lib/system/libquarantine.dylib
+0x000000000ba7d000 /usr/lib/system/libremovefile.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_asl.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_blocks.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_c.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_configuration.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_dnssd.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_info.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_kernel.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_m.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_malloc.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_network.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_notify.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_platform.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_pthread.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_sandbox.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_stats.dylib
+0x000000000ba7d000 /usr/lib/system/libunc.dylib
+0x000000000ba7d000 /usr/lib/system/libunwind.dylib
+0x000000000ba7d000 /usr/lib/system/libxpc.dylib
+0x000000000ba7d000 /usr/lib/libbsm.0.dylib
+0x000000000ba7d000 /usr/lib/libsqlite3.dylib
+0x000000000ba7d000 /usr/lib/libxar.1.dylib
+0x000000000ba7d000 /usr/lib/libpam.2.dylib
+0x000000000ba7d000 /usr/lib/libOpenScriptingUtil.dylib
+0x000000000ba7d000 /usr/lib/libbz2.1.0.dylib
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
+0x000000000ba7d000 /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS
+0x000000000ba7d000 /usr/lib/system/libkxld.dylib
+0x000000000ba7d000 /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth
+0x000000000ba7d000 /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC
+0x000000000ba7d000 /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
+0x000000000ba7d000 /System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement
+0x000000000ba7d000 /usr/lib/libxslt.1.dylib
+0x000000000ba7d000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/ColorSync
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis
+0x000000000ba7d000 /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface
+0x000000000ba7d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
+0x000000000ba7d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
+0x000000000ba7d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
+0x000000000ba7d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
+0x000000000ba7d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
+0x000000000ba7d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
+0x000000000ba7d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib
+0x000000000ba7d000 /usr/lib/libcups.2.dylib
+0x000000000ba7d000 /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
+0x000000000ba7d000 /System/Library/Frameworks/GSS.framework/Versions/A/GSS
+0x000000000ba7d000 /usr/lib/libresolv.9.dylib
+0x000000000ba7d000 /usr/lib/libiconv.2.dylib
+0x000000000ba7d000 /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal
+0x000000000ba7d000 /System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent
+0x000000000ba7d000 /usr/lib/libheimdal-asn1.dylib
+0x000000000ba7d000 /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory
+0x000000000ba7d000 /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth
+0x000000000ba7d000 /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation
+0x000000000ba7d000 /System/Library/PrivateFrameworks/Bom.framework/Versions/A/Bom
+0x000000000ba7d000 /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
+0x000000000ba7d000 /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/CoreImage.framework/Versions/A/CoreImage
+0x000000000ba7d000 /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/ScalableUserInterface.framework/Versions/A/ScalableUserInterface
+0x000000000ba7d000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
+0x000000000ba7d000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib
+0x000000000ba7d000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
+0x000000000ba7d000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
+0x000000000ba7d000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib
+0x000000000ba7d000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib
+0x000000000ba7d000 /System/Library/PrivateFrameworks/FaceCore.framework/Versions/A/FaceCore
+0x000000000ba7d000 /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport
+0x000000000ba7d000 /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL
+0x000000000ba7d000 /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression
+0x000000000ba7d000 /System/Library/PrivateFrameworks/Ubiquity.framework/Versions/A/Ubiquity
+0x000000000ba7d000 /System/Library/PrivateFrameworks/IconServices.framework/Versions/A/IconServices
+0x000000000ba7d000 /System/Library/PrivateFrameworks/ChunkingLibrary.framework/Versions/A/ChunkingLibrary
+0x000000000ba7d000 /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication
+0x000000000ba7d000 /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication
+0x000000000ba7d000 /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols
+0x0000000100a13000 /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/jre/lib/server/libjvm.dylib
+0x000000000ba7d000 /usr/lib/libstdc++.6.dylib
+0x00000001015bd000 /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/jre/lib/libverify.dylib
+0x00000001015ca000 /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/jre/lib/libjava.dylib
+0x0000000101602000 /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/jre/lib/libzip.dylib
+
+VM Arguments:
+jvm_args: -Dfile.encoding=US-ASCII -Xbootclasspath:/Applications/android/sdk/platforms/android-19/android.jar
+java_command: com.bluekitchen.btstack.BT_UUID
+Launcher Type: SUN_STANDARD
+
+Environment Variables:
+PATH=/usr/bin:/bin:/usr/sbin:/sbin
+SHELL=/bin/bash
+DISPLAY=/tmp/launch-gLQMSN/org.macosforge.xquartz:0
+
+Signal Handlers:
+SIGSEGV: [libjvm.dylib+0x4a363d], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGBUS: [libjvm.dylib+0x4a363d], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGFPE: [libjvm.dylib+0x3b3051], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGPIPE: [libjvm.dylib+0x3b3051], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGXFSZ: [libjvm.dylib+0x3b3051], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGILL: [libjvm.dylib+0x3b3051], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGUSR1: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000002
+SIGUSR2: [libjvm.dylib+0x3b2bea], sa_mask[0]=0x00000004, sa_flags=0x00000042
+SIGHUP: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGINT: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGTERM: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGQUIT: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+
+
+--------------- S Y S T E M ---------------
+
+OS:Bsduname:Darwin 13.3.0 Darwin Kernel Version 13.3.0: Tue Jun 3 21:27:35 PDT 2014; root:xnu-2422.110.17~1/RELEASE_X86_64 x86_64
+rlimit: STACK 8192k, CORE 0k, NPROC 709, NOFILE 10240, AS infinity
+load average:1.53 1.79 1.79
+
+CPU:total 4 (2 cores per cpu, 2 threads per core) family 6 model 42 stepping 7, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, ht, tsc, tscinvbit
+
+Memory: 4k page, physical 977620k(244405k free)
+
+/proc/meminfo:
+
+
+vm_info: Java HotSpot(TM) 64-Bit Server VM (23.6-b04) for bsd-amd64 JRE (1.7.0_10-b18), built on Nov 28 2012 07:52:20 by "java_re" with gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00)
+
+time: Fri Aug 22 14:09:29 2014
+elapsed time: 0 seconds
+
diff --git a/platforms/mtk/LEScan/hs_err_pid91628.log b/platforms/mtk/LEScan/hs_err_pid91628.log
new file mode 100644
index 000000000..b05c7330d
--- /dev/null
+++ b/platforms/mtk/LEScan/hs_err_pid91628.log
@@ -0,0 +1,267 @@
+#
+# A fatal error has been detected by the Java Runtime Environment:
+#
+# Internal Error (javaClasses.cpp:129), pid=91628, tid=5891
+# fatal error: Invalid layout of preloaded class
+#
+# JRE version: 7.0_10-b18
+# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.6-b04 mixed mode bsd-amd64 compressed oops)
+# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
+#
+# If you would like to submit a bug report, please visit:
+# http://bugreport.sun.com/bugreport/crash.jsp
+#
+
+--------------- T H R E A D ---------------
+
+Current thread (0x00007fec4a001000): JavaThread "Unknown thread" [_thread_in_vm, id=5891, stack(0x0000000109ea8000,0x0000000109fa8000)]
+
+Stack: [0x0000000109ea8000,0x0000000109fa8000], sp=0x0000000109fa7840, free space=1022k
+Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
+V [libjvm.dylib+0x4a3117]
+V [libjvm.dylib+0x1b1ebf]
+V [libjvm.dylib+0x28af5c]
+V [libjvm.dylib+0x28bdbd]
+V [libjvm.dylib+0x44d8b4]
+V [libjvm.dylib+0x489ce3]
+V [libjvm.dylib+0x48a257]
+V [libjvm.dylib+0x25046f]
+V [libjvm.dylib+0x47a15f]
+V [libjvm.dylib+0x2a3418]
+C [java+0x2995] JavaMain+0x134
+C [libsystem_pthread.dylib+0x1899] _pthread_body+0x8a
+C [libsystem_pthread.dylib+0x172a] _pthread_struct_init+0x0
+C [libsystem_pthread.dylib+0x5fc9] thread_start+0xd
+
+
+--------------- P R O C E S S ---------------
+
+Java Threads: ( => current thread )
+
+Other Threads:
+
+=>0x00007fec4a001000 (exited) JavaThread "Unknown thread" [_thread_in_vm, id=5891, stack(0x0000000109ea8000,0x0000000109fa8000)]
+
+VM state:not at safepoint (not fully initialized)
+
+VM Mutex/Monitor currently owned by a thread: None
+
+GC Heap History (0 events):
+No events
+
+Deoptimization events (0 events):
+No events
+
+Internal exceptions (0 events):
+No events
+
+Events (10 events):
+Event: 0.016 loading class 0x00007fec48e11f20 done
+Event: 0.016 loading class 0x00007fec48e11900 done
+Event: 0.016 loading class 0x00007fec48e118e0
+Event: 0.016 loading class 0x00007fec48f027f0
+Event: 0.017 loading class 0x00007fec48f027f0 done
+Event: 0.017 loading class 0x00007fec48f02820
+Event: 0.017 loading class 0x00007fec48f02820 done
+Event: 0.017 loading class 0x00007fec48f02850
+Event: 0.017 loading class 0x00007fec48f02850 done
+Event: 0.017 loading class 0x00007fec48e118e0 done
+
+
+Dynamic libraries:
+0x000000000ba7d000 /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
+0x000000000ba7d000 /System/Library/Frameworks/Security.framework/Versions/A/Security
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
+0x000000000ba7d000 /usr/lib/libz.1.dylib
+0x000000000ba7d000 /usr/lib/libSystem.B.dylib
+0x000000000ba7d000 /usr/lib/libobjc.A.dylib
+0x000000000ba7d000 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
+0x000000000ba7d000 /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
+0x000000000ba7d000 /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
+0x000000000ba7d000 /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
+0x000000000ba7d000 /System/Library/PrivateFrameworks/RemoteViewServices.framework/Versions/A/RemoteViewServices
+0x000000000ba7d000 /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
+0x000000000ba7d000 /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit
+0x000000000ba7d000 /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore
+0x000000000ba7d000 /System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv
+0x000000000ba7d000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
+0x000000000ba7d000 /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore
+0x000000000ba7d000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition
+0x000000000ba7d000 /usr/lib/libauto.dylib
+0x000000000ba7d000 /usr/lib/libicucore.A.dylib
+0x000000000ba7d000 /usr/lib/libxml2.2.dylib
+0x000000000ba7d000 /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI
+0x000000000ba7d000 /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
+0x000000000ba7d000 /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
+0x000000000ba7d000 /usr/lib/liblangid.dylib
+0x000000000ba7d000 /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport
+0x000000000ba7d000 /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
+0x000000000ba7d000 /usr/lib/libDiagnosticMessagesClient.dylib
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
+0x000000000ba7d000 /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis
+0x000000000ba7d000 /System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/GenerationalStorage
+0x000000000ba7d000 /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
+0x000000000ba7d000 /System/Library/PrivateFrameworks/Sharing.framework/Versions/A/Sharing
+0x000000000ba7d000 /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
+0x000000000ba7d000 /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText
+0x000000000ba7d000 /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
+0x000000000ba7d000 /System/Library/PrivateFrameworks/Backup.framework/Versions/A/Backup
+0x000000000ba7d000 /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
+0x000000000ba7d000 /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
+0x000000000ba7d000 /usr/lib/libCRFSuite.dylib
+0x000000000ba7d000 /usr/lib/libc++.1.dylib
+0x000000000ba7d000 /usr/lib/libc++abi.dylib
+0x000000000ba7d000 /usr/lib/system/libcache.dylib
+0x000000000ba7d000 /usr/lib/system/libcommonCrypto.dylib
+0x000000000ba7d000 /usr/lib/system/libcompiler_rt.dylib
+0x000000000ba7d000 /usr/lib/system/libcopyfile.dylib
+0x000000000ba7d000 /usr/lib/system/libcorecrypto.dylib
+0x000000000ba7d000 /usr/lib/system/libdispatch.dylib
+0x000000000ba7d000 /usr/lib/system/libdyld.dylib
+0x000000000ba7d000 /usr/lib/system/libkeymgr.dylib
+0x000000000ba7d000 /usr/lib/system/liblaunch.dylib
+0x000000000ba7d000 /usr/lib/system/libmacho.dylib
+0x000000000ba7d000 /usr/lib/system/libquarantine.dylib
+0x000000000ba7d000 /usr/lib/system/libremovefile.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_asl.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_blocks.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_c.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_configuration.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_dnssd.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_info.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_kernel.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_m.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_malloc.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_network.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_notify.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_platform.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_pthread.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_sandbox.dylib
+0x000000000ba7d000 /usr/lib/system/libsystem_stats.dylib
+0x000000000ba7d000 /usr/lib/system/libunc.dylib
+0x000000000ba7d000 /usr/lib/system/libunwind.dylib
+0x000000000ba7d000 /usr/lib/system/libxpc.dylib
+0x000000000ba7d000 /usr/lib/libbsm.0.dylib
+0x000000000ba7d000 /usr/lib/libsqlite3.dylib
+0x000000000ba7d000 /usr/lib/libxar.1.dylib
+0x000000000ba7d000 /usr/lib/libpam.2.dylib
+0x000000000ba7d000 /usr/lib/libOpenScriptingUtil.dylib
+0x000000000ba7d000 /usr/lib/libbz2.1.0.dylib
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
+0x000000000ba7d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
+0x000000000ba7d000 /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS
+0x000000000ba7d000 /usr/lib/system/libkxld.dylib
+0x000000000ba7d000 /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth
+0x000000000ba7d000 /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC
+0x000000000ba7d000 /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
+0x000000000ba7d000 /System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement
+0x000000000ba7d000 /usr/lib/libxslt.1.dylib
+0x000000000ba7d000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/ColorSync
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis
+0x000000000ba7d000 /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface
+0x000000000ba7d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
+0x000000000ba7d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
+0x000000000ba7d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
+0x000000000ba7d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
+0x000000000ba7d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
+0x000000000ba7d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
+0x000000000ba7d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib
+0x000000000ba7d000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib
+0x000000000ba7d000 /usr/lib/libcups.2.dylib
+0x000000000ba7d000 /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
+0x000000000ba7d000 /System/Library/Frameworks/GSS.framework/Versions/A/GSS
+0x000000000ba7d000 /usr/lib/libresolv.9.dylib
+0x000000000ba7d000 /usr/lib/libiconv.2.dylib
+0x000000000ba7d000 /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal
+0x000000000ba7d000 /System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent
+0x000000000ba7d000 /usr/lib/libheimdal-asn1.dylib
+0x000000000ba7d000 /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory
+0x000000000ba7d000 /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth
+0x000000000ba7d000 /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation
+0x000000000ba7d000 /System/Library/PrivateFrameworks/Bom.framework/Versions/A/Bom
+0x000000000ba7d000 /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
+0x000000000ba7d000 /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/CoreImage.framework/Versions/A/CoreImage
+0x000000000ba7d000 /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/ScalableUserInterface.framework/Versions/A/ScalableUserInterface
+0x000000000ba7d000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
+0x000000000ba7d000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib
+0x000000000ba7d000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
+0x000000000ba7d000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
+0x000000000ba7d000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib
+0x000000000ba7d000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib
+0x000000000ba7d000 /System/Library/PrivateFrameworks/FaceCore.framework/Versions/A/FaceCore
+0x000000000ba7d000 /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport
+0x000000000ba7d000 /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL
+0x000000000ba7d000 /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression
+0x000000000ba7d000 /System/Library/PrivateFrameworks/Ubiquity.framework/Versions/A/Ubiquity
+0x000000000ba7d000 /System/Library/PrivateFrameworks/IconServices.framework/Versions/A/IconServices
+0x000000000ba7d000 /System/Library/PrivateFrameworks/ChunkingLibrary.framework/Versions/A/ChunkingLibrary
+0x000000000ba7d000 /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication
+0x000000000ba7d000 /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication
+0x000000000ba7d000 /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols
+0x0000000109400000 /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/jre/lib/server/libjvm.dylib
+0x000000000ba7d000 /usr/lib/libstdc++.6.dylib
+0x0000000108bd6000 /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/jre/lib/libverify.dylib
+0x0000000109faa000 /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/jre/lib/libjava.dylib
+0x0000000108bed000 /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/jre/lib/libzip.dylib
+
+VM Arguments:
+jvm_args: -Dfile.encoding=US-ASCII -Xbootclasspath:/Applications/android/sdk/platforms/android-19/android.jar
+java_command: com.bluekitchen.btstack.BT_UUID
+Launcher Type: SUN_STANDARD
+
+Environment Variables:
+PATH=/usr/bin:/bin:/usr/sbin:/sbin
+SHELL=/bin/bash
+DISPLAY=/tmp/launch-gLQMSN/org.macosforge.xquartz:0
+
+Signal Handlers:
+SIGSEGV: [libjvm.dylib+0x4a363d], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGBUS: [libjvm.dylib+0x4a363d], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGFPE: [libjvm.dylib+0x3b3051], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGPIPE: [libjvm.dylib+0x3b3051], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGXFSZ: [libjvm.dylib+0x3b3051], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGILL: [libjvm.dylib+0x3b3051], sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGUSR1: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000002
+SIGUSR2: [libjvm.dylib+0x3b2bea], sa_mask[0]=0x00000004, sa_flags=0x00000042
+SIGHUP: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGINT: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGTERM: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+SIGQUIT: SIG_DFL, sa_mask[0]=0xfffefeff, sa_flags=0x00000042
+
+
+--------------- S Y S T E M ---------------
+
+OS:Bsduname:Darwin 13.3.0 Darwin Kernel Version 13.3.0: Tue Jun 3 21:27:35 PDT 2014; root:xnu-2422.110.17~1/RELEASE_X86_64 x86_64
+rlimit: STACK 8192k, CORE 0k, NPROC 709, NOFILE 10240, AS infinity
+load average:3.24 2.20 1.93
+
+CPU:total 4 (2 cores per cpu, 2 threads per core) family 6 model 42 stepping 7, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, ht, tsc, tscinvbit
+
+Memory: 4k page, physical 982836k(245709k free)
+
+/proc/meminfo:
+
+
+vm_info: Java HotSpot(TM) 64-Bit Server VM (23.6-b04) for bsd-amd64 JRE (1.7.0_10-b18), built on Nov 28 2012 07:52:20 by "java_re" with gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00)
+
+time: Fri Aug 22 14:12:16 2014
+elapsed time: 0 seconds
+
diff --git a/platforms/mtk/LEScan/ic_launcher-web.png b/platforms/mtk/LEScan/ic_launcher-web.png
new file mode 100644
index 000000000..a18cbb48c
Binary files /dev/null and b/platforms/mtk/LEScan/ic_launcher-web.png differ
diff --git a/platforms/mtk/LEScan/libs/android-support-v4.jar b/platforms/mtk/LEScan/libs/android-support-v4.jar
new file mode 100644
index 000000000..9056828a0
Binary files /dev/null and b/platforms/mtk/LEScan/libs/android-support-v4.jar differ
diff --git a/platforms/mtk/LEScan/proguard-project.txt b/platforms/mtk/LEScan/proguard-project.txt
new file mode 100644
index 000000000..f2fe1559a
--- /dev/null
+++ b/platforms/mtk/LEScan/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/platforms/mtk/LEScan/project.properties b/platforms/mtk/LEScan/project.properties
new file mode 100644
index 000000000..4ab125693
--- /dev/null
+++ b/platforms/mtk/LEScan/project.properties
@@ -0,0 +1,14 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=android-19
diff --git a/platforms/mtk/LEScan/res/drawable-hdpi/ic_launcher.png b/platforms/mtk/LEScan/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 000000000..288b66551
Binary files /dev/null and b/platforms/mtk/LEScan/res/drawable-hdpi/ic_launcher.png differ
diff --git a/platforms/mtk/LEScan/res/drawable-mdpi/ic_launcher.png b/platforms/mtk/LEScan/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 000000000..6ae570b4d
Binary files /dev/null and b/platforms/mtk/LEScan/res/drawable-mdpi/ic_launcher.png differ
diff --git a/platforms/mtk/LEScan/res/drawable-xhdpi/ic_launcher.png b/platforms/mtk/LEScan/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..d4fb7cd9d
Binary files /dev/null and b/platforms/mtk/LEScan/res/drawable-xhdpi/ic_launcher.png differ
diff --git a/platforms/mtk/LEScan/res/drawable-xxhdpi/ic_launcher.png b/platforms/mtk/LEScan/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..85a608158
Binary files /dev/null and b/platforms/mtk/LEScan/res/drawable-xxhdpi/ic_launcher.png differ
diff --git a/platforms/mtk/LEScan/res/layout/activity_main.xml b/platforms/mtk/LEScan/res/layout/activity_main.xml
new file mode 100644
index 000000000..168c9b8ce
--- /dev/null
+++ b/platforms/mtk/LEScan/res/layout/activity_main.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/platforms/mtk/LEScan/res/menu/main.xml b/platforms/mtk/LEScan/res/menu/main.xml
new file mode 100644
index 000000000..c00202823
--- /dev/null
+++ b/platforms/mtk/LEScan/res/menu/main.xml
@@ -0,0 +1,9 @@
+
diff --git a/platforms/mtk/LEScan/res/values-sw600dp/dimens.xml b/platforms/mtk/LEScan/res/values-sw600dp/dimens.xml
new file mode 100644
index 000000000..44f01db75
--- /dev/null
+++ b/platforms/mtk/LEScan/res/values-sw600dp/dimens.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/platforms/mtk/LEScan/res/values-sw720dp-land/dimens.xml b/platforms/mtk/LEScan/res/values-sw720dp-land/dimens.xml
new file mode 100644
index 000000000..61e3fa8fb
--- /dev/null
+++ b/platforms/mtk/LEScan/res/values-sw720dp-land/dimens.xml
@@ -0,0 +1,9 @@
+
+
+
+ 128dp
+
+
diff --git a/platforms/mtk/LEScan/res/values-v11/styles.xml b/platforms/mtk/LEScan/res/values-v11/styles.xml
new file mode 100644
index 000000000..3c02242ad
--- /dev/null
+++ b/platforms/mtk/LEScan/res/values-v11/styles.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
diff --git a/platforms/mtk/LEScan/res/values-v14/styles.xml b/platforms/mtk/LEScan/res/values-v14/styles.xml
new file mode 100644
index 000000000..a91fd0372
--- /dev/null
+++ b/platforms/mtk/LEScan/res/values-v14/styles.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
diff --git a/platforms/mtk/LEScan/res/values/dimens.xml b/platforms/mtk/LEScan/res/values/dimens.xml
new file mode 100644
index 000000000..55c1e5908
--- /dev/null
+++ b/platforms/mtk/LEScan/res/values/dimens.xml
@@ -0,0 +1,7 @@
+
+
+
+ 16dp
+ 16dp
+
+
diff --git a/platforms/mtk/LEScan/res/values/strings.xml b/platforms/mtk/LEScan/res/values/strings.xml
new file mode 100644
index 000000000..64f0f00e6
--- /dev/null
+++ b/platforms/mtk/LEScan/res/values/strings.xml
@@ -0,0 +1,8 @@
+
+
+
+ LE Scan
+ Settings
+ Hello world!
+
+
diff --git a/platforms/mtk/LEScan/res/values/styles.xml b/platforms/mtk/LEScan/res/values/styles.xml
new file mode 100644
index 000000000..6ce89c7ba
--- /dev/null
+++ b/platforms/mtk/LEScan/res/values/styles.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
diff --git a/platforms/mtk/LEScan/src/com/bluekitchen/btstack/SocketConnectionUnix.java b/platforms/mtk/LEScan/src/com/bluekitchen/btstack/SocketConnectionUnix.java
new file mode 100644
index 000000000..8310bfe04
--- /dev/null
+++ b/platforms/mtk/LEScan/src/com/bluekitchen/btstack/SocketConnectionUnix.java
@@ -0,0 +1,103 @@
+package com.bluekitchen.btstack;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import android.net.LocalSocket;
+import android.net.LocalSocketAddress;
+
+public class SocketConnectionUnix extends SocketConnection {
+
+ private LocalSocket socket;
+ private String unixSocketName = "/data/btstack/BTstack";
+ private InputStream in;
+ private OutputStream out;
+ private byte inHeader[] = new byte[6];
+ private byte inPayload[] = new byte[2000];
+
+ public SocketConnectionUnix(){
+ socket = null;
+ }
+
+ /* (non-Javadoc)
+ * @see com.bluekitchen.btstack.SocketConnection#connect()
+ */
+ @Override
+ public boolean connect() {
+ try {
+ socket = new LocalSocket();
+ LocalSocketAddress socketAddress = new LocalSocketAddress(unixSocketName, LocalSocketAddress.Namespace.FILESYSTEM);
+ socket.connect(socketAddress);
+ in = socket.getInputStream();
+ out = socket.getOutputStream();
+ return true;
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.bluekitchen.btstack.SocketConnection#sendPacket(com.bluekitchen.btstack.Packet)
+ */
+ @Override
+ public boolean sendPacket(Packet packet) {
+
+ if (out == null) return false;
+
+ try {
+ System.out.println("Send "); Util.hexdump(packet.getBuffer(), packet.getPayloadLen());
+ out.write(headerForPacket(packet));
+ out.write(packet.getBuffer());
+ out.flush();
+ return true;
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.bluekitchen.btstack.SocketConnection#receivePacket()
+ */
+ @Override
+ public Packet receivePacket() {
+
+ if (in == null) return null;
+
+ int bytes_read = Util.readExactly(in, inHeader, 0, 6);
+ if (bytes_read != 6) return null;
+
+ int packetType = Util.readBt16(inHeader, 0);
+ int channel = Util.readBt16(inHeader, 2);
+ int len = Util.readBt16(inHeader, 4);
+
+ Util.readExactly(in, inPayload, 0, len);
+
+ Packet packet = new Packet(packetType, channel ,inPayload, len);
+ return packet;
+ }
+
+ /* (non-Javadoc)
+ * @see com.bluekitchen.btstack.SocketConnection#disconnect()
+ */
+ @Override
+ public void disconnect() {
+
+ if (socket != null){
+ try {
+ socket.close();
+ } catch (IOException e) {
+ }
+ }
+ }
+
+ private byte[] headerForPacket(Packet packet) {
+ byte header[] = new byte[6];
+ Util.storeBt16(header, 0, packet.getPacketType());
+ Util.storeBt16(header, 2, packet.getChannel());
+ Util.storeBt16(header, 4, packet.getBuffer().length);
+ return header;
+ }
+}
diff --git a/platforms/mtk/LEScan/src/com/bluekitchen/lescan/MainActivity.java b/platforms/mtk/LEScan/src/com/bluekitchen/lescan/MainActivity.java
new file mode 100644
index 000000000..0852ec384
--- /dev/null
+++ b/platforms/mtk/LEScan/src/com/bluekitchen/lescan/MainActivity.java
@@ -0,0 +1,730 @@
+package com.bluekitchen.lescan;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Menu;
+import android.widget.TextView;
+
+import com.bluekitchen.btstack.BD_ADDR;
+import com.bluekitchen.btstack.BT_UUID;
+import com.bluekitchen.btstack.BTstack;
+import com.bluekitchen.btstack.GATTCharacteristic;
+import com.bluekitchen.btstack.GATTService;
+import com.bluekitchen.btstack.Packet;
+import com.bluekitchen.btstack.PacketHandler;
+import com.bluekitchen.btstack.Util;
+import com.bluekitchen.btstack.event.BTstackEventState;
+import com.bluekitchen.btstack.event.GAPLEAdvertisingReport;
+import com.bluekitchen.btstack.event.GATTCharacteristicQueryResult;
+import com.bluekitchen.btstack.event.GATTCharacteristicValueQueryResult;
+import com.bluekitchen.btstack.event.GATTNotification;
+import com.bluekitchen.btstack.event.GATTQueryComplete;
+import com.bluekitchen.btstack.event.GATTServiceQueryResult;
+import com.bluekitchen.btstack.event.HCIEventCommandComplete;
+import com.bluekitchen.btstack.event.HCIEventDisconnectionComplete;
+import com.bluekitchen.btstack.event.HCIEventLEConnectionComplete;
+
+public class MainActivity extends Activity implements PacketHandler {
+
+ private static final String BTSTACK_TAG = "BTstack";
+
+ private enum STATE {
+ w4_btstack_working, w4_scan_result, w4_connected, w4_services_complete, w4_characteristic_complete, w4_characteristic_read
+ , w4_characteristic_write, w4_acc_service_result, w4_acc_enable_characteristic_result, w4_write_acc_enable_result, w4_acc_client_config_characteristic_result, w4_acc_client_config_result,
+ w4_acc_data, w4_connected_acc, w4_disconnect, track_rssi, battery_data
+ };
+
+ private TextView tv;
+ private BTstack btstack;
+ private STATE state;
+ private int testAddrType;
+ private BD_ADDR deviceAddr;
+ private int connectionHandle;
+ private GATTService testService;
+ private GATTCharacteristic testCharacteristic;
+ private int service_count = 0;
+ private int characteristic_count = 0;
+ private int test_run_count = 0;
+ private String onScreenMessage = "";
+
+ BD_ADDR sensor_tag_addr = new BD_ADDR("1C:BA:8C:20:C7:F6");
+ // Accelerometer
+ private byte[] acc_service_uuid = new byte[] {(byte)0xf0, 0, (byte)0xaa, (byte)0x10, 4, (byte)0x51, (byte)0x40, 0, (byte)0xb0, 0, 0, 0, 0, 0, 0, 0};
+ private byte[] acc_chr_client_config_uuid = new byte[] {(byte)0xf0, 0, (byte)0xaa, (byte)0x11, 4, (byte)0x51, (byte)0x40, 0, (byte)0xb0, 0, 0, 0, 0, 0, 0, 0};
+ private byte[] acc_chr_enable_uuid = new byte[] {(byte)0xf0, 0, (byte)0xaa, (byte)0x12, 4, (byte)0x51, (byte)0x40, 0, (byte)0xb0, 0, 0, 0, 0, 0, 0, 0};
+ private byte[] acc_enable = new byte[] {1};
+ private byte acc_notification = 1;
+ private GATTService accService;
+ private GATTCharacteristic enableCharacteristic;
+ private GATTCharacteristic configCharacteristic;
+
+ // Battery
+ private GATTService batteryService;
+ private GATTCharacteristic batteryLevelCharacteristic;
+ //private byte[] battery_service_uuid = new byte[] {0, 0, (byte)0x18, (byte)0x0F, 0, 0, (byte)0x10, 0, (byte)0x80, 0, 0, (byte)0x80, (byte)0x5f, (byte)0x9b, (byte)0x34, (byte)0xfb};
+ private byte[] battery_level_chr_uuid = new byte[] {0, 0, (byte)0x2a, (byte)0x1b, 0, 0, (byte)0x10, 0, (byte)0x80, 0, 0, (byte)0x80, (byte)0x5f, (byte)0x9b, (byte)0x34, (byte)0xfb};
+ GATTCharacteristicValueQueryResult battery;
+ private int batteryLevel = 0;
+ private int counter;
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ tv = new TextView(this);
+ setContentView(tv);
+
+ test();
+ }
+
+ void addMessage(final String message){
+ onScreenMessage = onScreenMessage + "\n" + message;
+ Log.d(BTSTACK_TAG, message);
+ runOnUiThread(new Runnable(){
+ public void run(){
+ tv.setText(onScreenMessage);
+ }
+ });
+ }
+
+
+ void addTempMessage(final String message){
+ Log.d(BTSTACK_TAG, message);
+ runOnUiThread(new Runnable(){
+ public void run(){
+ tv.setText(onScreenMessage +"\n" + message);
+ }
+ });
+ }
+
+ void clearMessages(){
+ onScreenMessage = "";
+ runOnUiThread(new Runnable(){
+ public void run(){
+ tv.setText(onScreenMessage);
+ }
+ });
+ }
+
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.main, menu);
+ return true;
+ }
+
+
+ public void testCharacteristics(Packet packet){
+
+ switch (state){
+ case w4_btstack_working:
+ if (packet instanceof BTstackEventState){
+ BTstackEventState event = (BTstackEventState) packet;
+ if (event.getState() == 2) {
+ addMessage("GAPLEScanStart()");
+ state = STATE.w4_scan_result;
+ btstack.GAPLEScanStart();
+ }
+ }
+ break;
+ case w4_scan_result:
+ if (packet instanceof GAPLEAdvertisingReport){
+ GAPLEAdvertisingReport report = (GAPLEAdvertisingReport) packet;
+ testAddrType = report.getAddressType();
+ deviceAddr = report.getAddress();
+ addMessage(String.format("Adv: type %d, addr %s", testAddrType, deviceAddr));
+ addMessage(String.format("Data: %s", Util.asHexdump(report.getData())));
+ addMessage("GAPLEScanStop()");
+ btstack.GAPLEScanStop();
+ addMessage("GAPLEConnect(...)");
+ state = STATE.w4_connected;
+ btstack.GAPLEConnect(testAddrType, deviceAddr);
+ }
+ break;
+ case w4_connected:
+ if (packet instanceof HCIEventLEConnectionComplete){
+ HCIEventLEConnectionComplete event = (HCIEventLEConnectionComplete) packet;
+ connectionHandle = event.getConnectionHandle();
+ addMessage(String.format("Connection complete, status %d, handle %x", event.getStatus(), connectionHandle));
+ state = STATE.w4_services_complete;
+ addMessage("GATTDiscoverPrimaryServices(...)");
+ btstack.GATTDiscoverPrimaryServices(connectionHandle);
+ }
+ break;
+ case w4_services_complete:
+ if (packet instanceof GATTServiceQueryResult){
+ GATTServiceQueryResult event = (GATTServiceQueryResult) packet;
+ if (testService == null){
+ addMessage(String.format("First service UUID %s", event.getService().getUUID()));
+ testService = event.getService();
+ }
+ Log.d(BTSTACK_TAG, "Service: " + event.getService());
+ service_count++;
+ }
+ if (packet instanceof GATTQueryComplete){
+ addMessage(String.format("Service query complete, total %d services", service_count));
+ state = STATE.w4_characteristic_complete;
+ btstack.GATTDiscoverCharacteristicsForService(connectionHandle, testService);
+ }
+ break;
+
+ case w4_characteristic_complete:
+ if (packet instanceof GATTCharacteristicQueryResult){
+ GATTCharacteristicQueryResult event = (GATTCharacteristicQueryResult) packet;
+ if (testCharacteristic == null){
+ addMessage(String.format("First characteristic UUID %s", event.getCharacteristic().getUUID()));
+ testCharacteristic = event.getCharacteristic();
+ }
+ Log.d(BTSTACK_TAG, "Characteristic: " + event.getCharacteristic());
+ characteristic_count++;
+ }
+ if (packet instanceof GATTQueryComplete){
+ addMessage(String.format("Characteristic query complete, total %d characteristics", characteristic_count));
+ if (characteristic_count > 0){
+ state = STATE.w4_characteristic_read;
+ btstack.GATTReadValueOfCharacteristic(connectionHandle, testCharacteristic);
+ } else {
+ state = STATE.w4_disconnect;
+ btstack.GAPDisconnect(connectionHandle);
+ }
+ }
+ break;
+
+ case w4_characteristic_read:
+ if (packet instanceof GATTCharacteristicValueQueryResult){
+ addMessage("Read complete");
+ Log.d(BTSTACK_TAG, packet.toString());
+ state = STATE.w4_characteristic_write;
+ byte [] data = { 'B', 'T', 's', 't', 'a', 'c', 'k'};
+ btstack.GATTWriteValueOfCharacteristic(connectionHandle, testCharacteristic, data.length, data);
+ }
+ break;
+ case w4_characteristic_write:
+ if (packet instanceof GATTQueryComplete){
+ addMessage("Write complete, disconnect now.");
+ state = STATE.w4_disconnect;
+ // btstack.GAPDisconnect(testHandle);
+ }
+ break;
+ case w4_disconnect:
+ if (packet instanceof HCIEventDisconnectionComplete){
+ addMessage("Disconnected.");
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ public void testAccelerometer(Packet packet){
+ switch (state){
+ case w4_btstack_working:
+ if (packet instanceof BTstackEventState){
+ BTstackEventState event = (BTstackEventState) packet;
+ if (event.getState() == 2) {
+ addMessage("GAPLEScanStart()");
+ state = STATE.w4_scan_result;
+ btstack.GAPLEScanStart();
+ }
+ }
+ break;
+ case w4_scan_result:
+ if (packet instanceof GAPLEAdvertisingReport){
+ GAPLEAdvertisingReport report = (GAPLEAdvertisingReport) packet;
+ testAddrType = report.getAddressType();
+ deviceAddr = report.getAddress();
+ if (deviceAddr.toString().equalsIgnoreCase(sensor_tag_addr.toString())){
+ addMessage(String.format("Adv: type %d, addr %s", testAddrType, deviceAddr));
+ addMessage(String.format("Data: %s", Util.asHexdump(report.getData())));
+ addMessage("GAPLEScanStop()");
+ btstack.GAPLEScanStop();
+ addMessage("GAPLEConnect(...)");
+ state = STATE.w4_connected_acc;
+ btstack.GAPLEConnect(testAddrType, deviceAddr);
+ }
+ }
+ break;
+
+
+
+ case w4_connected_acc:
+ if (packet instanceof HCIEventLEConnectionComplete){
+ HCIEventLEConnectionComplete event = (HCIEventLEConnectionComplete) packet;
+ connectionHandle = event.getConnectionHandle();
+ addMessage(String.format("Connection complete, status %d, handle %x", event.getStatus(), connectionHandle));
+ addMessage("Search for ACC service");
+ state = STATE.w4_acc_service_result;
+ byte [] uuid = new byte[16];
+ Util.flipX(this.acc_service_uuid, uuid);
+ btstack.GATTDiscoverPrimaryServicesByUUID128(connectionHandle, new BT_UUID(uuid));
+ }
+ break;
+
+ case w4_acc_service_result:
+ clearMessages();
+ addMessage(String.format("w4_acc_service_result state"));
+ if (packet instanceof GATTServiceQueryResult){
+ GATTServiceQueryResult event = (GATTServiceQueryResult) packet;
+ addMessage(String.format("ACC service found %s", event.getService().getUUID()));
+ accService = event.getService();
+ break;
+ }
+ if (packet instanceof GATTQueryComplete){
+ if (accService == null) {
+ addMessage("No acc service found");
+ break;
+ }
+ addMessage("ACC Service found, searching for acc enable characteristic");
+ state = STATE.w4_acc_enable_characteristic_result;
+ byte [] uuid = new byte[16];
+ Util.flipX(this.acc_chr_enable_uuid, uuid);
+ btstack.GATTDiscoverCharacteristicsForServiceByUUID128(connectionHandle, accService, new BT_UUID(uuid));
+ }
+ break;
+
+ case w4_acc_enable_characteristic_result:
+ if (packet instanceof GATTCharacteristicQueryResult){
+ GATTCharacteristicQueryResult event = (GATTCharacteristicQueryResult) packet;
+ enableCharacteristic = event.getCharacteristic();
+ addMessage("Enable ACC Characteristic found ");
+ }
+ if (packet instanceof GATTQueryComplete){
+ if (enableCharacteristic == null) {
+ addMessage("No acc enable chr found");
+ break;
+ }
+ addMessage("Write enable acc characteristic");
+ state = STATE.w4_write_acc_enable_result;
+ btstack.GATTWriteValueOfCharacteristic(connectionHandle, enableCharacteristic, 1, this.acc_enable);
+ }
+ break;
+ case w4_write_acc_enable_result:
+ if (packet instanceof GATTQueryComplete){
+ addMessage("Acc enabled,searching for acc client config characteristic");
+ byte [] uuid = new byte[16];
+ Util.flipX(this.acc_chr_client_config_uuid, uuid);
+ btstack.GATTDiscoverCharacteristicsForServiceByUUID128(connectionHandle, accService, new BT_UUID(uuid));
+ state = STATE.w4_acc_client_config_characteristic_result;
+ }
+ break;
+
+ case w4_acc_client_config_characteristic_result:
+ if (packet instanceof GATTCharacteristicQueryResult){
+ GATTCharacteristicQueryResult event = (GATTCharacteristicQueryResult) packet;
+ configCharacteristic = event.getCharacteristic();
+ addMessage("ACC Client Config Characteristic found");
+ }
+ if (packet instanceof GATTQueryComplete){
+ if (configCharacteristic == null) {
+ addMessage("No acc config chr found");
+ break;
+ }
+ addMessage("Write ACC Client Config Characteristic");
+ state = STATE.w4_acc_data;
+ btstack.GATTWriteClientCharacteristicConfiguration(connectionHandle, configCharacteristic, this.acc_notification);
+ }
+ break;
+
+ case w4_acc_data:
+ if (packet instanceof GATTQueryComplete){
+ addMessage("Acc configured for notification");
+ break;
+ }
+
+ if (packet instanceof GATTNotification){
+ addTempMessage("Acc Value");
+ Log.d(BTSTACK_TAG, packet.toString());
+ //state = STATE.w4_btstack_working;
+ //btstack.GAPDisconnect(connectionHandle);
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ public void testConnectDisconnect(Packet packet){
+ if (packet instanceof HCIEventDisconnectionComplete){
+ if (state != STATE.w4_disconnect) {
+ state = STATE.w4_scan_result;
+ btstack.GAPLEScanStart();
+ clearMessages();
+ HCIEventDisconnectionComplete event = (HCIEventDisconnectionComplete) packet;
+ addMessage(String.format("Unexpected disconnect %x. Start scan.", event.getConnectionHandle()));
+ return;
+ }
+ }
+
+ switch (state){
+ case w4_btstack_working:
+ if (packet instanceof BTstackEventState){
+ BTstackEventState event = (BTstackEventState) packet;
+ if (event.getState() == 2) {
+// addMessage("GAPLEScanStart()");
+// state = STATE.w4_scan_result;
+ // btstack.GAPLEScanStart();
+// runOnUiThread(new Runnable(){
+// public void run(){
+ addMessage("BTstack dissconnect.");
+ btstack.disconnect();
+
+// runOnUiThread(new Runnable(){
+// public void run(){
+ try {
+ Thread.sleep(5000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ btstack.connect();
+ addMessage("Power on BTstack.");
+ state = STATE.w4_btstack_working;
+ test_run_count = 0;
+ btstack.BTstackSetPowerMode(1);
+// }
+// });
+ }
+ }
+ break;
+ case w4_scan_result:
+ if (packet instanceof GAPLEAdvertisingReport){
+ BD_ADDR sensor_tag_addr = new BD_ADDR("1C:BA:8C:20:C7:F6");
+ //BD_ADDR pts_dongle = new BD_ADDR("00:1B:DC:07:32:EF");
+
+ GAPLEAdvertisingReport report = (GAPLEAdvertisingReport) packet;
+ BD_ADDR reportAddr = report.getAddress();
+ if (reportAddr.toString().equalsIgnoreCase(sensor_tag_addr.toString())){
+ testAddrType = report.getAddressType();
+ deviceAddr = report.getAddress();
+ addMessage(String.format("Adv: type %d, addr %s", testAddrType, deviceAddr));
+ addMessage(String.format("Data: %s", Util.asHexdump(report.getData())));
+
+ addMessage("GAPLEScanStop()");
+ btstack.GAPLEScanStop();
+ addMessage("GAPLEConnect(...)");
+ state = STATE.w4_connected;
+
+ btstack.GAPLEConnect(testAddrType, deviceAddr);
+ }
+ }
+ break;
+ case w4_connected:
+ if (packet instanceof HCIEventLEConnectionComplete){
+ HCIEventLEConnectionComplete event = (HCIEventLEConnectionComplete) packet;
+
+ connectionHandle = event.getConnectionHandle();
+ addMessage(String.format("Connection complete, status %d, handle %x", event.getStatus(), connectionHandle));
+ state = STATE.w4_services_complete;
+ addMessage("GATTDiscoverPrimaryServices(...)");
+ btstack.GATTDiscoverPrimaryServices(connectionHandle);
+
+ }
+ break;
+ case w4_services_complete:
+ if (packet instanceof GATTServiceQueryResult){
+ GATTServiceQueryResult event = (GATTServiceQueryResult) packet;
+ if (testService == null){
+ addMessage(String.format("First service UUID %s", event.getService().getUUID()));
+ testService = event.getService();
+ }
+ Log.d(BTSTACK_TAG, "Service: " + event.getService());
+ service_count++;
+ }
+ if (packet instanceof GATTQueryComplete){
+ addMessage(String.format("Service query complete, total %d services", service_count));
+ state = STATE.w4_disconnect;
+ test_run_count++;
+ btstack.GAPDisconnect(connectionHandle);
+ }
+ break;
+ case w4_disconnect:
+ Log.d(BTSTACK_TAG, packet.toString());
+ if (packet instanceof HCIEventDisconnectionComplete){
+ clearMessages();
+ addMessage("BTstack dissconnect.");
+ btstack.disconnect();
+ try {
+ Thread.sleep(15000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ btstack.connect();
+ addMessage("Power on BTstack.");
+ state = STATE.w4_btstack_working;
+ test_run_count = 0;
+ btstack.BTstackSetPowerMode(1);
+
+
+ /*if (test_run_count%10 == 0){
+ addMessage("Power off BTstack.");
+ state = STATE.w4_btstack_working;
+ btstack.BTstackSetPowerMode(0);
+ try {
+ Thread.sleep(15000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ addMessage("Power on BTstack.");
+ btstack.BTstackSetPowerMode(1);
+ } else {
+ addMessage("GAPLEScanStart()");
+ state = STATE.w4_scan_result;
+ btstack.GAPLEScanStart();
+ }*/
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ public void trackRSSI(Packet packet){
+ switch (state){
+ case w4_btstack_working:
+ if (packet instanceof BTstackEventState){
+ BTstackEventState event = (BTstackEventState) packet;
+ if (event.getState() == 2) {
+ addMessage("GAPLEScanStart()");
+ state = STATE.w4_scan_result;
+ btstack.GAPLEScanStart();
+ }
+ }
+ break;
+ case w4_scan_result:
+ if (packet instanceof GAPLEAdvertisingReport){
+ clearMessages();
+ GAPLEAdvertisingReport report = (GAPLEAdvertisingReport) packet;
+ testAddrType = report.getAddressType();
+ deviceAddr = report.getAddress();
+ addMessage(String.format("Adv: type %d, addr %s", testAddrType, deviceAddr));
+ addMessage(String.format("Data: %s", Util.asHexdump(report.getData())));
+ addMessage("GAPLEScanStop()");
+ btstack.GAPLEScanStop();
+ addMessage("GAPLEConnect(...)");
+ state = STATE.w4_connected;
+ btstack.GAPLEConnect(testAddrType, deviceAddr);
+ }
+ break;
+ case w4_connected:
+ if (packet instanceof HCIEventLEConnectionComplete){
+ HCIEventLEConnectionComplete event = (HCIEventLEConnectionComplete) packet;
+ if (event.getStatus() != 0) {
+ addMessage(String.format("Connection didn't succeed, status %d, restart scanning.", event.getStatus()));
+ state = STATE.w4_scan_result;
+ btstack.GAPLEScanStart();
+ break;
+ }
+
+ state = STATE.track_rssi;
+ connectionHandle = event.getConnectionHandle();
+ addMessage(String.format("Connection complete, status %d, handle %x. Start RSSI query.", event.getStatus(), connectionHandle));
+ counter = 0;
+ new Thread(new Runnable(){
+ @Override
+ public void run() {
+ try {
+ while(state == STATE.track_rssi){
+ Thread.sleep(1000);
+ btstack.HCIReadRssi(connectionHandle);
+ }
+ } catch (InterruptedException e) {}
+ }
+ }).start();
+ }
+ break;
+ case track_rssi:
+ if (packet instanceof HCIEventDisconnectionComplete){
+ clearMessages();
+ addMessage(String.format("Received dissconnect. Start scannning."));
+ state = STATE.w4_scan_result;
+ btstack.GAPLEScanStart();
+ break;
+ }
+
+ if (!(packet instanceof HCIEventCommandComplete)) break;
+ HCIEventCommandComplete event = (HCIEventCommandComplete) packet;
+ int opcode = event.getCommandOpcode();
+ if (opcode != 0X1405) break;
+ counter = counter + 1;
+ byte data[] = event.getReturnParameters();
+ addTempMessage(String.format("counter %d, status %d, RSSI: %ddBm", counter, Util.readByte(data, 0), data[3]));
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ public void queryBatteryLevel(Packet packet){
+ // Restart scanning on disconnect.
+ if (packet instanceof HCIEventDisconnectionComplete){
+ clearMessages();
+ addMessage(String.format("Received dissconnect. Start scannning."));
+ state = STATE.w4_scan_result;
+ btstack.GAPLEScanStart();
+ return;
+ }
+
+ switch (state){
+ case w4_btstack_working:
+ if (packet instanceof BTstackEventState){
+ BTstackEventState event = (BTstackEventState) packet;
+ if (event.getState() == 2) {
+ addMessage("BTstack working, start scanning.");
+ state = STATE.w4_scan_result;
+ btstack.GAPLEScanStart();
+ }
+ }
+ break;
+ case w4_scan_result:
+ if (packet instanceof GAPLEAdvertisingReport){
+ // Advertisement received. Connect to the found BT address.
+ clearMessages();
+ GAPLEAdvertisingReport report = (GAPLEAdvertisingReport) packet;
+ testAddrType = report.getAddressType();
+ deviceAddr = report.getAddress();
+ addMessage(String.format("Adv: type %d, addr %s\ndata: %s \n Stop scan, initiate connect.", testAddrType, deviceAddr, Util.asHexdump(report.getData())));
+ btstack.GAPLEScanStop();
+ state = STATE.w4_connected;
+ btstack.GAPLEConnect(testAddrType, deviceAddr);
+ }
+ break;
+ case w4_connected:
+ if (packet instanceof HCIEventLEConnectionComplete){
+ HCIEventLEConnectionComplete event = (HCIEventLEConnectionComplete) packet;
+ if (event.getStatus() != 0) {
+ addMessage(String.format("Connection didn't succeed, status %d, restart scanning.", event.getStatus()));
+ state = STATE.w4_scan_result;
+ btstack.GAPLEScanStart();
+ break;
+ }
+
+ // Query battery service.
+ state = STATE.w4_services_complete;
+ connectionHandle = event.getConnectionHandle();
+ addMessage(String.format("Connection complete, status %d, handle %x.\nQuery battery service.", event.getStatus(), connectionHandle));
+
+ //btstack.GATTDiscoverPrimaryServicesByUUID128(connectionHandle, uuid128(this.battery_service_uuid));
+ btstack.GATTDiscoverPrimaryServicesByUUID16(connectionHandle, 0x180f);
+ }
+ break;
+
+ case w4_services_complete:
+ if (packet instanceof GATTServiceQueryResult){
+ // Store battery service. Wait for GATTQueryComplete event to send next GATT command.
+ GATTServiceQueryResult event = (GATTServiceQueryResult) packet;
+ addMessage(String.format("Battery service found %s", event.getService().getUUID()));
+ batteryService = event.getService();
+ break;
+ }
+ if (packet instanceof GATTQueryComplete){
+ // Check if battery service is found.
+ if (batteryService == null) {
+ addMessage("No battery service found, restart scanning.");
+ state = STATE.w4_scan_result;
+ btstack.GAPLEScanStart();
+ break;
+ }
+ addMessage("Battery service is found. Query battery level.");
+ state = STATE.w4_characteristic_complete;
+ btstack.GATTDiscoverCharacteristicsForServiceByUUID128(connectionHandle, batteryService, uuid128(this.battery_level_chr_uuid));
+ }
+ break;
+ case w4_characteristic_complete:
+ if (packet instanceof GATTCharacteristicQueryResult){
+ // Store battery level characteristic. Wait for GATTQueryComplete event to send next GATT command.
+ GATTCharacteristicQueryResult event = (GATTCharacteristicQueryResult) packet;
+ batteryLevelCharacteristic = event.getCharacteristic();
+ addMessage("Battery level characteristic found.");
+ break;
+ }
+
+ if (!(packet instanceof GATTQueryComplete)) break;
+ if (batteryLevelCharacteristic == null) {
+ addMessage("No battery level characteristic found");
+ break;
+ }
+ clearMessages();
+ addMessage("Polling battery.");
+ counter = 0;
+ state = STATE.battery_data;
+ new Thread(new Runnable(){
+ @Override
+ public void run() {
+ try {
+ while(state == STATE.battery_data){
+ Thread.sleep(5000);
+ btstack.GATTReadValueOfCharacteristic(connectionHandle, batteryLevelCharacteristic);
+ }
+ } catch (InterruptedException e) {}
+ }
+ }).start();
+ break;
+
+ case battery_data:
+ clearMessages();
+ if (packet instanceof GATTCharacteristicValueQueryResult){
+ GATTCharacteristicValueQueryResult battery = (GATTCharacteristicValueQueryResult) packet;
+
+ if (battery.getValueLength() < 1) break;
+ this.batteryLevel = battery.getValue()[0];
+ addTempMessage(String.format("Counter %d, battery level: %d", counter, batteryLevel) + "%");
+ counter = counter + 1;
+ break;
+
+ }
+ if (packet instanceof GATTQueryComplete){
+ GATTQueryComplete event = (GATTQueryComplete) packet;
+ addMessage(String.format("Counter %d, battery level: %d", counter, batteryLevel) + "%");
+ if (event.getStatus() != 0){
+ addMessage("Battery data could not be read - status 0x%02x. Restart scanning." + String.valueOf(event.getStatus()));
+ state = STATE.w4_scan_result;
+ btstack.GAPLEScanStart();
+ break;
+ }
+ }
+
+ break;
+ default:
+ break;
+ }
+ }
+
+ private BT_UUID uuid128(byte[] att_uuid) {
+ byte [] uuid = new byte[16];
+ Util.flipX(att_uuid, uuid);
+ return new BT_UUID(uuid);
+ }
+
+ public void handlePacket(Packet packet){
+ // queryBatteryLevel(packet);
+ // trackRSSI(packet);
+ // testCharacteristics(packet);
+ // testAccelerometer(packet);
+ testConnectDisconnect(packet);
+ }
+
+ void test(){
+ counter = 0;
+ addMessage("LE Test Application");
+
+ btstack = new BTstack();
+ btstack.registerPacketHandler(this);
+
+ boolean ok = btstack.connect();
+ if (!ok) {
+ addMessage("Failed to connect to BTstack Server");
+ return;
+ }
+
+ addMessage("BTstackSetPowerMode(1)");
+
+ state = STATE.w4_btstack_working;
+ btstack.BTstackSetPowerMode(1);
+ }
+}