Commit 12ab67e26ca39ac90080ee97a8016e0ebf92e380

Authored by Penley
1 parent 91657def

lights lib and basic control

Showing 68 changed files with 4756 additions and 1 deletions

Too many changes to show.

To preserve performance only 68 of 68+ files are displayed.

... ... @@ -9,7 +9,6 @@ import-summary.txt
9 9 /build
10 10 /captures
11 11 /freeline
12   -freeline_core
13 12 freeline.py
14 13 *.hprof
15 14 freeline_project_description.json
\ No newline at end of file
... ...
  1 +apply plugin: 'com.android.library'
  2 +
  3 +android {
  4 + compileSdkVersion 25
  5 + buildToolsVersion "25.0.1"
  6 + defaultConfig {
  7 + minSdkVersion 18
  8 + targetSdkVersion 21
  9 + versionCode 1
  10 + versionName "1.9"
  11 + }
  12 + buildTypes {
  13 + release {
  14 + minifyEnabled false
  15 + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  16 + }
  17 + }
  18 + compileOptions {
  19 + sourceCompatibility JavaVersion.VERSION_1_7
  20 + targetCompatibility JavaVersion.VERSION_1_7
  21 + }
  22 + productFlavors {
  23 + }
  24 +}
  25 +
  26 +dependencies {
  27 + compile 'com.android.support:support-v13:25.1.0'
  28 +// compile 'com.android.support:support-annotations:25.1.0'
  29 +}
... ...
No preview for this file type
No preview for this file type
  1 +E:/workspace/BluetoothLight/BluetoothLightLib//obj/local/arm64-v8a/objs/TelinkCrypto/TelinkCrypto.o: \
  2 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/TelinkCrypto.c \
  3 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/stdio.h \
  4 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/cdefs.h \
  5 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/cdefs_elf.h \
  6 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/android/api-level.h \
  7 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/types.h \
  8 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/stdint.h \
  9 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/machine/wchar_limits.h \
  10 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/types.h \
  11 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm/types.h \
  12 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/types.h \
  13 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/int-ll64.h \
  14 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm/bitsperlong.h \
  15 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/bitsperlong.h \
  16 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/posix_types.h \
  17 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/stddef.h \
  18 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/compiler.h \
  19 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm/posix_types.h \
  20 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/posix_types.h \
  21 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/sysmacros.h \
  22 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/stdlib.h \
  23 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/string.h \
  24 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/malloc.h \
  25 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/alloca.h \
  26 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/strings.h \
  27 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/memory.h \
  28 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/assert.h \
  29 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/jni.h \
  30 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/unistd.h \
  31 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/select.h \
  32 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/time.h \
  33 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/time.h \
  34 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/signal.h \
  35 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/errno.h \
  36 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/errno.h \
  37 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm/errno.h \
  38 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/errno.h \
  39 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/errno-base.h \
  40 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/limits.h \
  41 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/limits.h \
  42 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/limits.h \
  43 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/syslimits.h \
  44 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/signal.h \
  45 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm/signal.h \
  46 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/signal.h \
  47 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/signal-defs.h \
  48 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm/siginfo.h \
  49 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/siginfo.h \
  50 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/sysconf.h \
  51 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/pathconf.h \
  52 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/stat.h \
  53 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/stat.h \
  54 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/endian.h \
  55 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/endian.h \
  56 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/machine/endian.h \
  57 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/fcntl.h \
  58 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/fadvise.h \
  59 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/fcntl.h \
  60 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm/fcntl.h \
  61 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/fcntl.h \
  62 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/android/log.h \
  63 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/android/native_window_jni.h \
  64 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/android/native_window.h \
  65 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/android/rect.h \
  66 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.c \
  67 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.h
  68 +
  69 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/stdio.h:
  70 +
  71 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/cdefs.h:
  72 +
  73 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/cdefs_elf.h:
  74 +
  75 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/android/api-level.h:
  76 +
  77 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/types.h:
  78 +
  79 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/stdint.h:
  80 +
  81 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/machine/wchar_limits.h:
  82 +
  83 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/types.h:
  84 +
  85 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm/types.h:
  86 +
  87 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/types.h:
  88 +
  89 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/int-ll64.h:
  90 +
  91 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm/bitsperlong.h:
  92 +
  93 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/bitsperlong.h:
  94 +
  95 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/posix_types.h:
  96 +
  97 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/stddef.h:
  98 +
  99 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/compiler.h:
  100 +
  101 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm/posix_types.h:
  102 +
  103 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/posix_types.h:
  104 +
  105 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/sysmacros.h:
  106 +
  107 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/stdlib.h:
  108 +
  109 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/string.h:
  110 +
  111 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/malloc.h:
  112 +
  113 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/alloca.h:
  114 +
  115 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/strings.h:
  116 +
  117 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/memory.h:
  118 +
  119 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/assert.h:
  120 +
  121 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/jni.h:
  122 +
  123 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/unistd.h:
  124 +
  125 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/select.h:
  126 +
  127 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/time.h:
  128 +
  129 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/time.h:
  130 +
  131 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/signal.h:
  132 +
  133 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/errno.h:
  134 +
  135 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/errno.h:
  136 +
  137 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm/errno.h:
  138 +
  139 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/errno.h:
  140 +
  141 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/errno-base.h:
  142 +
  143 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/limits.h:
  144 +
  145 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/limits.h:
  146 +
  147 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/limits.h:
  148 +
  149 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/syslimits.h:
  150 +
  151 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/signal.h:
  152 +
  153 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm/signal.h:
  154 +
  155 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/signal.h:
  156 +
  157 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/signal-defs.h:
  158 +
  159 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm/siginfo.h:
  160 +
  161 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/siginfo.h:
  162 +
  163 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/sysconf.h:
  164 +
  165 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/pathconf.h:
  166 +
  167 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/stat.h:
  168 +
  169 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/stat.h:
  170 +
  171 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/endian.h:
  172 +
  173 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/sys/endian.h:
  174 +
  175 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/machine/endian.h:
  176 +
  177 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/fcntl.h:
  178 +
  179 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/fadvise.h:
  180 +
  181 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/linux/fcntl.h:
  182 +
  183 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm/fcntl.h:
  184 +
  185 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/asm-generic/fcntl.h:
  186 +
  187 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/android/log.h:
  188 +
  189 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/android/native_window_jni.h:
  190 +
  191 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/android/native_window.h:
  192 +
  193 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm64/usr/include/android/rect.h:
  194 +
  195 +E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.c:
  196 +
  197 +E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.h:
... ...
  1 +E:/workspace/BluetoothLight/BluetoothLightLib//obj/local/armeabi-v7a/objs/TelinkCrypto/TelinkCrypto.o: \
  2 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/TelinkCrypto.c \
  3 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/stdio.h \
  4 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/cdefs.h \
  5 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/cdefs_elf.h \
  6 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/api-level.h \
  7 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/types.h \
  8 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/stdint.h \
  9 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/machine/wchar_limits.h \
  10 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/types.h \
  11 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/types.h \
  12 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/types.h \
  13 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/int-ll64.h \
  14 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/bitsperlong.h \
  15 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/bitsperlong.h \
  16 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/posix_types.h \
  17 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/stddef.h \
  18 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/compiler.h \
  19 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/posix_types.h \
  20 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/posix_types.h \
  21 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/sysmacros.h \
  22 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/stdlib.h \
  23 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/string.h \
  24 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/malloc.h \
  25 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/alloca.h \
  26 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/strings.h \
  27 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/memory.h \
  28 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/assert.h \
  29 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/jni.h \
  30 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/unistd.h \
  31 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/select.h \
  32 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/time.h \
  33 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/time.h \
  34 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/signal.h \
  35 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/errno.h \
  36 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/errno.h \
  37 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/errno.h \
  38 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/errno.h \
  39 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/errno-base.h \
  40 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/limits.h \
  41 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/limits.h \
  42 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/limits.h \
  43 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/syslimits.h \
  44 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/signal.h \
  45 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/signal.h \
  46 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/signal-defs.h \
  47 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/siginfo.h \
  48 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/siginfo.h \
  49 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/sysconf.h \
  50 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/pathconf.h \
  51 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/stat.h \
  52 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/stat.h \
  53 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/endian.h \
  54 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/endian.h \
  55 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/machine/endian.h \
  56 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/fcntl.h \
  57 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/fadvise.h \
  58 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/fcntl.h \
  59 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/fcntl.h \
  60 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/fcntl.h \
  61 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/log.h \
  62 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/native_window_jni.h \
  63 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/native_window.h \
  64 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/rect.h \
  65 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.c \
  66 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.h
  67 +
  68 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/stdio.h:
  69 +
  70 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/cdefs.h:
  71 +
  72 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/cdefs_elf.h:
  73 +
  74 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/api-level.h:
  75 +
  76 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/types.h:
  77 +
  78 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/stdint.h:
  79 +
  80 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/machine/wchar_limits.h:
  81 +
  82 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/types.h:
  83 +
  84 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/types.h:
  85 +
  86 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/types.h:
  87 +
  88 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/int-ll64.h:
  89 +
  90 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/bitsperlong.h:
  91 +
  92 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/bitsperlong.h:
  93 +
  94 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/posix_types.h:
  95 +
  96 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/stddef.h:
  97 +
  98 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/compiler.h:
  99 +
  100 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/posix_types.h:
  101 +
  102 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/posix_types.h:
  103 +
  104 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/sysmacros.h:
  105 +
  106 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/stdlib.h:
  107 +
  108 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/string.h:
  109 +
  110 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/malloc.h:
  111 +
  112 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/alloca.h:
  113 +
  114 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/strings.h:
  115 +
  116 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/memory.h:
  117 +
  118 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/assert.h:
  119 +
  120 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/jni.h:
  121 +
  122 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/unistd.h:
  123 +
  124 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/select.h:
  125 +
  126 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/time.h:
  127 +
  128 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/time.h:
  129 +
  130 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/signal.h:
  131 +
  132 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/errno.h:
  133 +
  134 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/errno.h:
  135 +
  136 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/errno.h:
  137 +
  138 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/errno.h:
  139 +
  140 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/errno-base.h:
  141 +
  142 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/limits.h:
  143 +
  144 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/limits.h:
  145 +
  146 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/limits.h:
  147 +
  148 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/syslimits.h:
  149 +
  150 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/signal.h:
  151 +
  152 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/signal.h:
  153 +
  154 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/signal-defs.h:
  155 +
  156 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/siginfo.h:
  157 +
  158 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/siginfo.h:
  159 +
  160 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/sysconf.h:
  161 +
  162 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/pathconf.h:
  163 +
  164 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/stat.h:
  165 +
  166 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/stat.h:
  167 +
  168 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/endian.h:
  169 +
  170 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/endian.h:
  171 +
  172 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/machine/endian.h:
  173 +
  174 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/fcntl.h:
  175 +
  176 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/fadvise.h:
  177 +
  178 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/fcntl.h:
  179 +
  180 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/fcntl.h:
  181 +
  182 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/fcntl.h:
  183 +
  184 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/log.h:
  185 +
  186 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/native_window_jni.h:
  187 +
  188 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/native_window.h:
  189 +
  190 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/rect.h:
  191 +
  192 +E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.c:
  193 +
  194 +E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.h:
... ...
  1 +E:/workspace/BluetoothLight/BluetoothLightLib//obj/local/armeabi/objs/TelinkCrypto/TelinkCrypto.o: \
  2 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/TelinkCrypto.c \
  3 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/stdio.h \
  4 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/cdefs.h \
  5 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/cdefs_elf.h \
  6 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/api-level.h \
  7 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/types.h \
  8 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/stdint.h \
  9 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/machine/wchar_limits.h \
  10 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/types.h \
  11 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/types.h \
  12 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/types.h \
  13 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/int-ll64.h \
  14 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/bitsperlong.h \
  15 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/bitsperlong.h \
  16 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/posix_types.h \
  17 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/stddef.h \
  18 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/compiler.h \
  19 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/posix_types.h \
  20 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/posix_types.h \
  21 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/sysmacros.h \
  22 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/stdlib.h \
  23 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/string.h \
  24 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/malloc.h \
  25 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/alloca.h \
  26 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/strings.h \
  27 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/memory.h \
  28 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/assert.h \
  29 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/jni.h \
  30 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/unistd.h \
  31 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/select.h \
  32 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/time.h \
  33 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/time.h \
  34 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/signal.h \
  35 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/errno.h \
  36 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/errno.h \
  37 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/errno.h \
  38 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/errno.h \
  39 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/errno-base.h \
  40 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/limits.h \
  41 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/limits.h \
  42 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/limits.h \
  43 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/syslimits.h \
  44 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/signal.h \
  45 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/signal.h \
  46 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/signal-defs.h \
  47 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/siginfo.h \
  48 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/siginfo.h \
  49 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/sysconf.h \
  50 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/pathconf.h \
  51 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/stat.h \
  52 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/stat.h \
  53 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/endian.h \
  54 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/endian.h \
  55 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/machine/endian.h \
  56 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/fcntl.h \
  57 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/fadvise.h \
  58 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/fcntl.h \
  59 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/fcntl.h \
  60 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/fcntl.h \
  61 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/log.h \
  62 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/native_window_jni.h \
  63 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/native_window.h \
  64 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/rect.h \
  65 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.c \
  66 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.h
  67 +
  68 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/stdio.h:
  69 +
  70 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/cdefs.h:
  71 +
  72 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/cdefs_elf.h:
  73 +
  74 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/api-level.h:
  75 +
  76 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/types.h:
  77 +
  78 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/stdint.h:
  79 +
  80 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/machine/wchar_limits.h:
  81 +
  82 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/types.h:
  83 +
  84 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/types.h:
  85 +
  86 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/types.h:
  87 +
  88 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/int-ll64.h:
  89 +
  90 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/bitsperlong.h:
  91 +
  92 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/bitsperlong.h:
  93 +
  94 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/posix_types.h:
  95 +
  96 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/stddef.h:
  97 +
  98 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/compiler.h:
  99 +
  100 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/posix_types.h:
  101 +
  102 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/posix_types.h:
  103 +
  104 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/sysmacros.h:
  105 +
  106 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/stdlib.h:
  107 +
  108 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/string.h:
  109 +
  110 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/malloc.h:
  111 +
  112 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/alloca.h:
  113 +
  114 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/strings.h:
  115 +
  116 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/memory.h:
  117 +
  118 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/assert.h:
  119 +
  120 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/jni.h:
  121 +
  122 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/unistd.h:
  123 +
  124 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/select.h:
  125 +
  126 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/time.h:
  127 +
  128 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/time.h:
  129 +
  130 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/signal.h:
  131 +
  132 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/errno.h:
  133 +
  134 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/errno.h:
  135 +
  136 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/errno.h:
  137 +
  138 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/errno.h:
  139 +
  140 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/errno-base.h:
  141 +
  142 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/limits.h:
  143 +
  144 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/limits.h:
  145 +
  146 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/limits.h:
  147 +
  148 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/syslimits.h:
  149 +
  150 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/signal.h:
  151 +
  152 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/signal.h:
  153 +
  154 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/signal-defs.h:
  155 +
  156 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/siginfo.h:
  157 +
  158 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/siginfo.h:
  159 +
  160 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/sysconf.h:
  161 +
  162 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/pathconf.h:
  163 +
  164 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/stat.h:
  165 +
  166 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/stat.h:
  167 +
  168 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/endian.h:
  169 +
  170 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/sys/endian.h:
  171 +
  172 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/machine/endian.h:
  173 +
  174 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/fcntl.h:
  175 +
  176 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/fadvise.h:
  177 +
  178 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/linux/fcntl.h:
  179 +
  180 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm/fcntl.h:
  181 +
  182 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/asm-generic/fcntl.h:
  183 +
  184 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/log.h:
  185 +
  186 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/native_window_jni.h:
  187 +
  188 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/native_window.h:
  189 +
  190 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-arm/usr/include/android/rect.h:
  191 +
  192 +E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.c:
  193 +
  194 +E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.h:
... ...
  1 +E:/workspace/BluetoothLight/BluetoothLightLib//obj/local/mips/objs/TelinkCrypto/TelinkCrypto.o: \
  2 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/TelinkCrypto.c \
  3 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/stdio.h \
  4 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/cdefs.h \
  5 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/cdefs_elf.h \
  6 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/android/api-level.h \
  7 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/types.h \
  8 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/stdint.h \
  9 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/machine/wchar_limits.h \
  10 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/types.h \
  11 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/types.h \
  12 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm-generic/int-ll64.h \
  13 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/bitsperlong.h \
  14 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm-generic/bitsperlong.h \
  15 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/posix_types.h \
  16 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/stddef.h \
  17 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/compiler.h \
  18 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/posix_types.h \
  19 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/sgidefs.h \
  20 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm-generic/posix_types.h \
  21 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/sysmacros.h \
  22 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/stdlib.h \
  23 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/string.h \
  24 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/malloc.h \
  25 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/alloca.h \
  26 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/strings.h \
  27 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/memory.h \
  28 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/assert.h \
  29 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/jni.h \
  30 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/unistd.h \
  31 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/select.h \
  32 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/time.h \
  33 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/time.h \
  34 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/signal.h \
  35 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/errno.h \
  36 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/errno.h \
  37 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/errno.h \
  38 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm-generic/errno-base.h \
  39 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/limits.h \
  40 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/limits.h \
  41 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/limits.h \
  42 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/syslimits.h \
  43 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/signal.h \
  44 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/signal.h \
  45 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm-generic/signal-defs.h \
  46 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/siginfo.h \
  47 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm-generic/siginfo.h \
  48 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/sysconf.h \
  49 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/pathconf.h \
  50 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/stat.h \
  51 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/stat.h \
  52 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/endian.h \
  53 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/endian.h \
  54 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/machine/endian.h \
  55 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/fcntl.h \
  56 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/fadvise.h \
  57 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/fcntl.h \
  58 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/fcntl.h \
  59 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm-generic/fcntl.h \
  60 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/android/log.h \
  61 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/android/native_window_jni.h \
  62 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/android/native_window.h \
  63 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/android/rect.h \
  64 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.c \
  65 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.h
  66 +
  67 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/stdio.h:
  68 +
  69 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/cdefs.h:
  70 +
  71 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/cdefs_elf.h:
  72 +
  73 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/android/api-level.h:
  74 +
  75 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/types.h:
  76 +
  77 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/stdint.h:
  78 +
  79 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/machine/wchar_limits.h:
  80 +
  81 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/types.h:
  82 +
  83 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/types.h:
  84 +
  85 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm-generic/int-ll64.h:
  86 +
  87 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/bitsperlong.h:
  88 +
  89 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm-generic/bitsperlong.h:
  90 +
  91 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/posix_types.h:
  92 +
  93 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/stddef.h:
  94 +
  95 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/compiler.h:
  96 +
  97 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/posix_types.h:
  98 +
  99 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/sgidefs.h:
  100 +
  101 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm-generic/posix_types.h:
  102 +
  103 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/sysmacros.h:
  104 +
  105 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/stdlib.h:
  106 +
  107 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/string.h:
  108 +
  109 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/malloc.h:
  110 +
  111 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/alloca.h:
  112 +
  113 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/strings.h:
  114 +
  115 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/memory.h:
  116 +
  117 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/assert.h:
  118 +
  119 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/jni.h:
  120 +
  121 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/unistd.h:
  122 +
  123 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/select.h:
  124 +
  125 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/time.h:
  126 +
  127 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/time.h:
  128 +
  129 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/signal.h:
  130 +
  131 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/errno.h:
  132 +
  133 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/errno.h:
  134 +
  135 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/errno.h:
  136 +
  137 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm-generic/errno-base.h:
  138 +
  139 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/limits.h:
  140 +
  141 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/limits.h:
  142 +
  143 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/limits.h:
  144 +
  145 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/syslimits.h:
  146 +
  147 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/signal.h:
  148 +
  149 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/signal.h:
  150 +
  151 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm-generic/signal-defs.h:
  152 +
  153 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/siginfo.h:
  154 +
  155 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm-generic/siginfo.h:
  156 +
  157 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/sysconf.h:
  158 +
  159 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/pathconf.h:
  160 +
  161 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/stat.h:
  162 +
  163 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/stat.h:
  164 +
  165 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/endian.h:
  166 +
  167 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/sys/endian.h:
  168 +
  169 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/machine/endian.h:
  170 +
  171 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/fcntl.h:
  172 +
  173 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/fadvise.h:
  174 +
  175 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/linux/fcntl.h:
  176 +
  177 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm/fcntl.h:
  178 +
  179 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/asm-generic/fcntl.h:
  180 +
  181 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/android/log.h:
  182 +
  183 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/android/native_window_jni.h:
  184 +
  185 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/android/native_window.h:
  186 +
  187 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips/usr/include/android/rect.h:
  188 +
  189 +E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.c:
  190 +
  191 +E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.h:
... ...
  1 +E:/workspace/BluetoothLight/BluetoothLightLib//obj/local/mips64/objs/TelinkCrypto/TelinkCrypto.o: \
  2 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/TelinkCrypto.c \
  3 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/stdio.h \
  4 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/cdefs.h \
  5 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/cdefs_elf.h \
  6 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/android/api-level.h \
  7 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/types.h \
  8 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/stdint.h \
  9 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/machine/wchar_limits.h \
  10 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/types.h \
  11 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/types.h \
  12 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm-generic/int-l64.h \
  13 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/bitsperlong.h \
  14 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm-generic/bitsperlong.h \
  15 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/posix_types.h \
  16 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/stddef.h \
  17 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/compiler.h \
  18 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/posix_types.h \
  19 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/sgidefs.h \
  20 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm-generic/posix_types.h \
  21 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/sysmacros.h \
  22 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/stdlib.h \
  23 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/string.h \
  24 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/malloc.h \
  25 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/alloca.h \
  26 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/strings.h \
  27 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/memory.h \
  28 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/assert.h \
  29 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/jni.h \
  30 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/unistd.h \
  31 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/select.h \
  32 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/time.h \
  33 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/time.h \
  34 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/signal.h \
  35 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/errno.h \
  36 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/errno.h \
  37 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/errno.h \
  38 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm-generic/errno-base.h \
  39 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/limits.h \
  40 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/limits.h \
  41 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/limits.h \
  42 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/syslimits.h \
  43 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/signal.h \
  44 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/signal.h \
  45 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm-generic/signal-defs.h \
  46 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/siginfo.h \
  47 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm-generic/siginfo.h \
  48 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/sysconf.h \
  49 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/pathconf.h \
  50 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/stat.h \
  51 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/stat.h \
  52 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/endian.h \
  53 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/endian.h \
  54 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/machine/endian.h \
  55 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/fcntl.h \
  56 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/fadvise.h \
  57 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/fcntl.h \
  58 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/fcntl.h \
  59 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm-generic/fcntl.h \
  60 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/android/log.h \
  61 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/android/native_window_jni.h \
  62 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/android/native_window.h \
  63 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/android/rect.h \
  64 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.c \
  65 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.h
  66 +
  67 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/stdio.h:
  68 +
  69 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/cdefs.h:
  70 +
  71 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/cdefs_elf.h:
  72 +
  73 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/android/api-level.h:
  74 +
  75 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/types.h:
  76 +
  77 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/stdint.h:
  78 +
  79 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/machine/wchar_limits.h:
  80 +
  81 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/types.h:
  82 +
  83 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/types.h:
  84 +
  85 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm-generic/int-l64.h:
  86 +
  87 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/bitsperlong.h:
  88 +
  89 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm-generic/bitsperlong.h:
  90 +
  91 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/posix_types.h:
  92 +
  93 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/stddef.h:
  94 +
  95 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/compiler.h:
  96 +
  97 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/posix_types.h:
  98 +
  99 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/sgidefs.h:
  100 +
  101 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm-generic/posix_types.h:
  102 +
  103 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/sysmacros.h:
  104 +
  105 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/stdlib.h:
  106 +
  107 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/string.h:
  108 +
  109 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/malloc.h:
  110 +
  111 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/alloca.h:
  112 +
  113 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/strings.h:
  114 +
  115 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/memory.h:
  116 +
  117 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/assert.h:
  118 +
  119 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/jni.h:
  120 +
  121 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/unistd.h:
  122 +
  123 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/select.h:
  124 +
  125 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/time.h:
  126 +
  127 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/time.h:
  128 +
  129 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/signal.h:
  130 +
  131 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/errno.h:
  132 +
  133 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/errno.h:
  134 +
  135 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/errno.h:
  136 +
  137 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm-generic/errno-base.h:
  138 +
  139 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/limits.h:
  140 +
  141 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/limits.h:
  142 +
  143 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/limits.h:
  144 +
  145 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/syslimits.h:
  146 +
  147 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/signal.h:
  148 +
  149 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/signal.h:
  150 +
  151 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm-generic/signal-defs.h:
  152 +
  153 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/siginfo.h:
  154 +
  155 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm-generic/siginfo.h:
  156 +
  157 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/sysconf.h:
  158 +
  159 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/pathconf.h:
  160 +
  161 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/stat.h:
  162 +
  163 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/stat.h:
  164 +
  165 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/endian.h:
  166 +
  167 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/sys/endian.h:
  168 +
  169 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/machine/endian.h:
  170 +
  171 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/fcntl.h:
  172 +
  173 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/fadvise.h:
  174 +
  175 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/linux/fcntl.h:
  176 +
  177 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm/fcntl.h:
  178 +
  179 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/asm-generic/fcntl.h:
  180 +
  181 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/android/log.h:
  182 +
  183 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/android/native_window_jni.h:
  184 +
  185 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/android/native_window.h:
  186 +
  187 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-mips64/usr/include/android/rect.h:
  188 +
  189 +E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.c:
  190 +
  191 +E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.h:
... ...
  1 +E:/workspace/BluetoothLight/BluetoothLightLib//obj/local/x86/objs/TelinkCrypto/TelinkCrypto.o: \
  2 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/TelinkCrypto.c \
  3 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/stdio.h \
  4 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/cdefs.h \
  5 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/cdefs_elf.h \
  6 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/android/api-level.h \
  7 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/types.h \
  8 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/stdint.h \
  9 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/machine/wchar_limits.h \
  10 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/types.h \
  11 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/types.h \
  12 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/types.h \
  13 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/int-ll64.h \
  14 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/bitsperlong.h \
  15 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/bitsperlong.h \
  16 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/posix_types.h \
  17 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/stddef.h \
  18 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/compiler.h \
  19 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/posix_types.h \
  20 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/posix_types_32.h \
  21 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/posix_types.h \
  22 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/sysmacros.h \
  23 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/stdlib.h \
  24 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/string.h \
  25 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/malloc.h \
  26 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/alloca.h \
  27 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/strings.h \
  28 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/memory.h \
  29 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/assert.h \
  30 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/jni.h \
  31 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/unistd.h \
  32 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/select.h \
  33 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/time.h \
  34 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/time.h \
  35 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/signal.h \
  36 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/errno.h \
  37 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/errno.h \
  38 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/errno.h \
  39 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/errno.h \
  40 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/errno-base.h \
  41 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/limits.h \
  42 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/limits.h \
  43 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/limits.h \
  44 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/syslimits.h \
  45 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/signal.h \
  46 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/signal.h \
  47 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/signal-defs.h \
  48 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/siginfo.h \
  49 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/siginfo.h \
  50 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/sysconf.h \
  51 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/pathconf.h \
  52 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/stat.h \
  53 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/stat.h \
  54 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/endian.h \
  55 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/endian.h \
  56 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/machine/endian.h \
  57 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/fcntl.h \
  58 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/fadvise.h \
  59 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/fcntl.h \
  60 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/fcntl.h \
  61 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/fcntl.h \
  62 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/android/log.h \
  63 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/android/native_window_jni.h \
  64 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/android/native_window.h \
  65 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/android/rect.h \
  66 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.c \
  67 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.h
  68 +
  69 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/stdio.h:
  70 +
  71 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/cdefs.h:
  72 +
  73 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/cdefs_elf.h:
  74 +
  75 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/android/api-level.h:
  76 +
  77 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/types.h:
  78 +
  79 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/stdint.h:
  80 +
  81 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/machine/wchar_limits.h:
  82 +
  83 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/types.h:
  84 +
  85 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/types.h:
  86 +
  87 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/types.h:
  88 +
  89 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/int-ll64.h:
  90 +
  91 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/bitsperlong.h:
  92 +
  93 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/bitsperlong.h:
  94 +
  95 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/posix_types.h:
  96 +
  97 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/stddef.h:
  98 +
  99 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/compiler.h:
  100 +
  101 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/posix_types.h:
  102 +
  103 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/posix_types_32.h:
  104 +
  105 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/posix_types.h:
  106 +
  107 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/sysmacros.h:
  108 +
  109 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/stdlib.h:
  110 +
  111 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/string.h:
  112 +
  113 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/malloc.h:
  114 +
  115 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/alloca.h:
  116 +
  117 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/strings.h:
  118 +
  119 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/memory.h:
  120 +
  121 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/assert.h:
  122 +
  123 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/jni.h:
  124 +
  125 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/unistd.h:
  126 +
  127 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/select.h:
  128 +
  129 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/time.h:
  130 +
  131 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/time.h:
  132 +
  133 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/signal.h:
  134 +
  135 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/errno.h:
  136 +
  137 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/errno.h:
  138 +
  139 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/errno.h:
  140 +
  141 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/errno.h:
  142 +
  143 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/errno-base.h:
  144 +
  145 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/limits.h:
  146 +
  147 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/limits.h:
  148 +
  149 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/limits.h:
  150 +
  151 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/syslimits.h:
  152 +
  153 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/signal.h:
  154 +
  155 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/signal.h:
  156 +
  157 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/signal-defs.h:
  158 +
  159 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/siginfo.h:
  160 +
  161 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/siginfo.h:
  162 +
  163 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/sysconf.h:
  164 +
  165 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/pathconf.h:
  166 +
  167 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/stat.h:
  168 +
  169 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/stat.h:
  170 +
  171 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/endian.h:
  172 +
  173 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/sys/endian.h:
  174 +
  175 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/machine/endian.h:
  176 +
  177 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/fcntl.h:
  178 +
  179 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/fadvise.h:
  180 +
  181 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/linux/fcntl.h:
  182 +
  183 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm/fcntl.h:
  184 +
  185 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/asm-generic/fcntl.h:
  186 +
  187 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/android/log.h:
  188 +
  189 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/android/native_window_jni.h:
  190 +
  191 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/android/native_window.h:
  192 +
  193 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86/usr/include/android/rect.h:
  194 +
  195 +E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.c:
  196 +
  197 +E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.h:
... ...
  1 +E:/workspace/BluetoothLight/BluetoothLightLib//obj/local/x86_64/objs/TelinkCrypto/TelinkCrypto.o: \
  2 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/TelinkCrypto.c \
  3 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/stdio.h \
  4 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/cdefs.h \
  5 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/cdefs_elf.h \
  6 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/android/api-level.h \
  7 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/types.h \
  8 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/stdint.h \
  9 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/machine/wchar_limits.h \
  10 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/types.h \
  11 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/types.h \
  12 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/types.h \
  13 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/int-ll64.h \
  14 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/bitsperlong.h \
  15 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/bitsperlong.h \
  16 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/posix_types.h \
  17 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/stddef.h \
  18 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/compiler.h \
  19 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/posix_types.h \
  20 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/posix_types_64.h \
  21 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/posix_types.h \
  22 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/sysmacros.h \
  23 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/stdlib.h \
  24 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/string.h \
  25 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/malloc.h \
  26 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/alloca.h \
  27 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/strings.h \
  28 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/memory.h \
  29 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/assert.h \
  30 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/jni.h \
  31 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/unistd.h \
  32 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/select.h \
  33 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/time.h \
  34 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/time.h \
  35 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/signal.h \
  36 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/errno.h \
  37 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/errno.h \
  38 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/errno.h \
  39 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/errno.h \
  40 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/errno-base.h \
  41 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/limits.h \
  42 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/limits.h \
  43 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/limits.h \
  44 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/syslimits.h \
  45 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/signal.h \
  46 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/signal.h \
  47 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/signal-defs.h \
  48 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/siginfo.h \
  49 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/siginfo.h \
  50 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/sysconf.h \
  51 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/pathconf.h \
  52 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/stat.h \
  53 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/stat.h \
  54 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/endian.h \
  55 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/endian.h \
  56 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/machine/endian.h \
  57 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/fcntl.h \
  58 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/fadvise.h \
  59 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/fcntl.h \
  60 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/fcntl.h \
  61 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/fcntl.h \
  62 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/android/log.h \
  63 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/android/native_window_jni.h \
  64 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/android/native_window.h \
  65 + D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/android/rect.h \
  66 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.c \
  67 + E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.h
  68 +
  69 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/stdio.h:
  70 +
  71 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/cdefs.h:
  72 +
  73 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/cdefs_elf.h:
  74 +
  75 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/android/api-level.h:
  76 +
  77 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/types.h:
  78 +
  79 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/stdint.h:
  80 +
  81 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/machine/wchar_limits.h:
  82 +
  83 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/types.h:
  84 +
  85 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/types.h:
  86 +
  87 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/types.h:
  88 +
  89 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/int-ll64.h:
  90 +
  91 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/bitsperlong.h:
  92 +
  93 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/bitsperlong.h:
  94 +
  95 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/posix_types.h:
  96 +
  97 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/stddef.h:
  98 +
  99 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/compiler.h:
  100 +
  101 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/posix_types.h:
  102 +
  103 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/posix_types_64.h:
  104 +
  105 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/posix_types.h:
  106 +
  107 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/sysmacros.h:
  108 +
  109 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/stdlib.h:
  110 +
  111 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/string.h:
  112 +
  113 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/malloc.h:
  114 +
  115 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/alloca.h:
  116 +
  117 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/strings.h:
  118 +
  119 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/memory.h:
  120 +
  121 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/assert.h:
  122 +
  123 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/jni.h:
  124 +
  125 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/unistd.h:
  126 +
  127 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/select.h:
  128 +
  129 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/time.h:
  130 +
  131 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/time.h:
  132 +
  133 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/signal.h:
  134 +
  135 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/errno.h:
  136 +
  137 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/errno.h:
  138 +
  139 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/errno.h:
  140 +
  141 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/errno.h:
  142 +
  143 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/errno-base.h:
  144 +
  145 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/limits.h:
  146 +
  147 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/limits.h:
  148 +
  149 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/limits.h:
  150 +
  151 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/syslimits.h:
  152 +
  153 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/signal.h:
  154 +
  155 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/signal.h:
  156 +
  157 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/signal-defs.h:
  158 +
  159 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/siginfo.h:
  160 +
  161 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/siginfo.h:
  162 +
  163 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/sysconf.h:
  164 +
  165 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/pathconf.h:
  166 +
  167 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/stat.h:
  168 +
  169 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/stat.h:
  170 +
  171 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/endian.h:
  172 +
  173 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/sys/endian.h:
  174 +
  175 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/machine/endian.h:
  176 +
  177 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/fcntl.h:
  178 +
  179 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/fadvise.h:
  180 +
  181 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/linux/fcntl.h:
  182 +
  183 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm/fcntl.h:
  184 +
  185 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/asm-generic/fcntl.h:
  186 +
  187 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/android/log.h:
  188 +
  189 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/android/native_window_jni.h:
  190 +
  191 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/android/native_window.h:
  192 +
  193 +D:/develop/AndroidNDK/r10/platforms/android-L/arch-x86_64/usr/include/android/rect.h:
  194 +
  195 +E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.c:
  196 +
  197 +E:/workspace/BluetoothLight/BluetoothLightLib//jni/aes_att.h:
... ...
  1 +# Add project specific ProGuard rules here.
  2 +# By default, the flags in this file are appended to flags specified
  3 +# in D:\develop\AndroidSDK/tools/proguard/proguard-android.txt
  4 +# You can edit the include path and order by changing the proguardFiles
  5 +# directive in build.gradle.
  6 +#
  7 +# For more details, see
  8 +# http://developer.android.com/guide/developing/tools/proguard.html
  9 +
  10 +# Add any project specific keep options here:
  11 +
  12 +# If your project uses WebView with JS, uncomment the following
  13 +# and specify the fully qualified class name to the JavaScript interface
  14 +# class:
  15 +#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
  16 +# public *;
  17 +#}
... ...
  1 +package com.telink;
  2 +
  3 +import android.app.Application;
  4 +import android.test.ApplicationTestCase;
  5 +
  6 +/**
  7 + * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
  8 + */
  9 +public class ApplicationTest extends ApplicationTestCase<Application> {
  10 + public ApplicationTest() {
  11 + super(Application.class);
  12 + }
  13 +}
\ No newline at end of file
... ...
  1 +package com.telink;
  2 +
  3 +import com.telink.util.MeshUtils;
  4 +
  5 +import java.util.ArrayList;
  6 +import java.util.List;
  7 +
  8 +public class Test {
  9 +
  10 +
  11 + public static void main(String[] args) {
  12 +
  13 +// test1();
  14 +// test2();
  15 +// test3();
  16 +// test4();
  17 +// test5();
  18 + test6();
  19 +
  20 +// test11();
  21 +// test12();
  22 +// test13();
  23 +// test14();
  24 +// test15();
  25 + }
  26 +
  27 +
  28 + private static void test1() {
  29 + int groupAddr;
  30 + for (int i = 0; i < 10; i++) {
  31 + groupAddr = MeshUtils.allocGroupAddress(null);
  32 + System.out.println(groupAddr + ":" + Integer.toHexString(groupAddr));
  33 + }
  34 + }
  35 +
  36 + private static void test2() {
  37 +
  38 + List<Integer> allocAddress = new ArrayList<>();
  39 + allocAddress.add(MeshUtils.GROUP_ADDRESS_MAX);
  40 +
  41 + int groupAddr;
  42 +
  43 + for (int i = 0; i < 10; i++) {
  44 + groupAddr = MeshUtils.allocGroupAddress(allocAddress);
  45 + if (groupAddr != -1) {
  46 + allocAddress.add(groupAddr);
  47 + }
  48 + System.out.println(groupAddr + ":" + Integer.toHexString(groupAddr));
  49 + }
  50 + }
  51 +
  52 + private static void test3() {
  53 +
  54 + List<Integer> allocAddress = new ArrayList<>();
  55 + allocAddress.add(MeshUtils.GROUP_ADDRESS_MAX);
  56 + allocAddress.add(MeshUtils.GROUP_ADDRESS_MIN);
  57 +
  58 +
  59 + int groupAddr;
  60 + for (int i = 0; i < 10; i++) {
  61 + groupAddr = MeshUtils.allocGroupAddress(allocAddress);
  62 + if (groupAddr != -1) {
  63 + allocAddress.add(groupAddr);
  64 + }
  65 + System.out.println(groupAddr + ":" + Integer.toHexString(groupAddr));
  66 + }
  67 + }
  68 +
  69 + private static void test4() {
  70 +
  71 + List<Integer> allocAddress = new ArrayList<>();
  72 + allocAddress.add(MeshUtils.GROUP_ADDRESS_MIN);
  73 +
  74 + int groupAddr;
  75 + for (int i = 0; i < 10; i++) {
  76 + groupAddr = MeshUtils.allocGroupAddress(allocAddress);
  77 + if (groupAddr != -1) {
  78 + allocAddress.add(groupAddr);
  79 + }
  80 + System.out.println(groupAddr + ":" + Integer.toHexString(groupAddr));
  81 + }
  82 + }
  83 +
  84 + private static void test5() {
  85 +
  86 + List<Integer> allocAddress = new ArrayList<>();
  87 +
  88 + int addr = MeshUtils.GROUP_ADDRESS_MIN;
  89 +
  90 + for (int i = 0; i < 100; i++) {
  91 + allocAddress.add(addr);
  92 + addr++;
  93 + }
  94 +
  95 + int groupAddr;
  96 + for (int i = 0; i < 10; i++) {
  97 + groupAddr = MeshUtils.allocGroupAddress(allocAddress);
  98 + if (groupAddr != -1) {
  99 + allocAddress.add(groupAddr);
  100 + }
  101 + System.out.println(groupAddr + ":" + Integer.toHexString(groupAddr));
  102 + }
  103 + }
  104 +
  105 + private static void test6() {
  106 +
  107 + List<Integer> allocAddress = new ArrayList<>();
  108 +
  109 + int addr = MeshUtils.GROUP_ADDRESS_MAX;
  110 +
  111 + for (int i = 0; i < 100; i++) {
  112 + System.out.println(addr);
  113 + allocAddress.add(addr);
  114 + addr -= 5;
  115 + }
  116 +
  117 + allocAddress.add(MeshUtils.GROUP_ADDRESS_MIN);
  118 + allocAddress.add(MeshUtils.GROUP_ADDRESS_MIN + 5);
  119 + allocAddress.add(MeshUtils.GROUP_ADDRESS_MIN + 6);
  120 + allocAddress.add(MeshUtils.GROUP_ADDRESS_MIN + 7);
  121 + allocAddress.add(MeshUtils.GROUP_ADDRESS_MIN + 8);
  122 + allocAddress.add(MeshUtils.GROUP_ADDRESS_MIN + 9);
  123 +
  124 + System.out.println("----------------");
  125 +
  126 + int groupAddr;
  127 + for (int i = 0; i < 10; i++) {
  128 + groupAddr = MeshUtils.allocGroupAddress(allocAddress);
  129 + if (groupAddr != -1) {
  130 + allocAddress.add(groupAddr);
  131 + }
  132 + System.out.println(groupAddr + ":" + Integer.toHexString(groupAddr));
  133 + }
  134 + }
  135 +
  136 + private static void test11() {
  137 + int deviceAddr;
  138 + for (int i = 0; i < 10; i++) {
  139 + deviceAddr = MeshUtils.allocDeviceAddress(null);
  140 + System.out.println(deviceAddr + ":" + Integer.toHexString(deviceAddr));
  141 + }
  142 + }
  143 +
  144 + private static void test12() {
  145 +
  146 + List<Integer> allocAddress = new ArrayList<>();
  147 + allocAddress.add(MeshUtils.DEVICE_ADDRESS_MAX);
  148 +
  149 + int groupAddr;
  150 +
  151 + for (int i = 0; i < 10; i++) {
  152 + groupAddr = MeshUtils.allocDeviceAddress(allocAddress);
  153 + if (groupAddr != -1) {
  154 + allocAddress.add(groupAddr);
  155 + }
  156 + System.out.println(groupAddr + ":" + Integer.toHexString(groupAddr));
  157 + }
  158 + }
  159 +
  160 + private static void test13() {
  161 +
  162 + List<Integer> allocAddress = new ArrayList<>();
  163 +
  164 + allocAddress.add(MeshUtils.DEVICE_ADDRESS_MAX);
  165 + allocAddress.add(MeshUtils.DEVICE_ADDRESS_MIN);
  166 +
  167 + int groupAddr;
  168 +
  169 + for (int i = 0; i < 10; i++) {
  170 + groupAddr = MeshUtils.allocDeviceAddress(allocAddress);
  171 + if (groupAddr != -1) {
  172 + allocAddress.add(groupAddr);
  173 + }
  174 + System.out.println(groupAddr + ":" + Integer.toHexString(groupAddr));
  175 + }
  176 + }
  177 +
  178 + private static void test14() {
  179 +
  180 + List<Integer> allocAddress = new ArrayList<>();
  181 + allocAddress.add(MeshUtils.DEVICE_ADDRESS_MIN);
  182 +
  183 + int groupAddr;
  184 + for (int i = 0; i < 10; i++) {
  185 + groupAddr = MeshUtils.allocDeviceAddress(allocAddress);
  186 + if (groupAddr != -1) {
  187 + allocAddress.add(groupAddr);
  188 + }
  189 + System.out.println(groupAddr + ":" + Integer.toHexString(groupAddr));
  190 + }
  191 + }
  192 +
  193 +
  194 + private static void test15() {
  195 +
  196 + List<Integer> allocAddress = new ArrayList<>();
  197 +
  198 + int addr = MeshUtils.DEVICE_ADDRESS_MIN;
  199 +
  200 + for (int i = 0; i < 250; i++) {
  201 + allocAddress.add(addr++);
  202 + }
  203 +
  204 + int groupAddr;
  205 + for (int i = 0; i < 10; i++) {
  206 + groupAddr = MeshUtils.allocDeviceAddress(allocAddress);
  207 + if (groupAddr != -1) {
  208 + allocAddress.add(groupAddr);
  209 + }
  210 + System.out.println(groupAddr + ":" + Integer.toHexString(groupAddr));
  211 + }
  212 + }
  213 +}
... ...
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.telink">
  3 +
  4 + <uses-permission android:name="android.permission.BLUETOOTH" />
  5 + <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
  6 + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  7 + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  8 +
  9 + <application
  10 + android:allowBackup="true"
  11 + android:label="@string/app_name"
  12 + android:supportsRtl="true" />
  13 +</manifest>
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink;
  6 +
  7 +import android.app.Application;
  8 +import android.content.BroadcastReceiver;
  9 +import android.content.ComponentName;
  10 +import android.content.Context;
  11 +import android.content.Intent;
  12 +import android.content.IntentFilter;
  13 +import android.content.ServiceConnection;
  14 +import android.os.IBinder;
  15 +import android.support.v4.content.LocalBroadcastManager;
  16 +
  17 +import com.telink.bluetooth.TelinkLog;
  18 +import com.telink.bluetooth.event.DeviceEvent;
  19 +import com.telink.bluetooth.event.LeScanEvent;
  20 +import com.telink.bluetooth.event.MeshEvent;
  21 +import com.telink.bluetooth.event.NotificationEvent;
  22 +import com.telink.bluetooth.event.ServiceEvent;
  23 +import com.telink.bluetooth.light.DeviceInfo;
  24 +import com.telink.bluetooth.light.GetAlarmNotificationParser;
  25 +import com.telink.bluetooth.light.GetGroupNotificationParser;
  26 +import com.telink.bluetooth.light.GetSceneNotificationParser;
  27 +import com.telink.bluetooth.light.GetTimeNotificationParser;
  28 +import com.telink.bluetooth.light.LightAdapter;
  29 +import com.telink.bluetooth.light.LightService;
  30 +import com.telink.bluetooth.light.NotificationInfo;
  31 +import com.telink.bluetooth.light.NotificationParser;
  32 +import com.telink.bluetooth.light.OnlineStatusNotificationParser;
  33 +import com.telink.util.Event;
  34 +import com.telink.util.EventBus;
  35 +import com.telink.util.EventListener;
  36 +import com.telink.util.Strings;
  37 +
  38 +public class TelinkApplication extends Application {
  39 +
  40 + private static TelinkApplication mThis;
  41 +
  42 + protected final EventBus<String> mEventBus = new EventBus<>();
  43 + protected Context mContext;
  44 + protected boolean serviceStarted;
  45 + protected boolean serviceConnected;
  46 + protected final ServiceConnection mServiceConnection = new ServiceConnection() {
  47 +
  48 + @Override
  49 + public void onServiceConnected(ComponentName name, IBinder service) {
  50 + TelinkApplication.this.onServiceConnected(name, service);
  51 + }
  52 +
  53 + @Override
  54 + public void onServiceDisconnected(ComponentName name) {
  55 + TelinkApplication.this.onServiceDisconnected(name);
  56 + }
  57 + };
  58 +
  59 + protected DeviceInfo mCurrentConnect;
  60 + private BroadcastReceiver mLightReceiver;
  61 +
  62 + public static TelinkApplication getInstance() {
  63 + if (mThis == null)
  64 + mThis = new TelinkApplication();
  65 + return mThis;
  66 + }
  67 +
  68 + /**
  69 + * 当前连接的设备
  70 + *
  71 + * @return
  72 + */
  73 + public DeviceInfo getConnectDevice() {
  74 + return mCurrentConnect;
  75 + }
  76 +
  77 + @Override
  78 + public void onCreate() {
  79 + mThis = this;
  80 + this.mContext = this;
  81 + super.onCreate();
  82 + TelinkLog.d("TelinkApplication Created.");
  83 + }
  84 +
  85 + public void doInit() {
  86 + this.doInit(this);
  87 + }
  88 +
  89 + public void doInit(Context context) {
  90 + this.doInit(context, null);
  91 + }
  92 +
  93 + /**
  94 + * 执行初始化,APP启动时调用
  95 + *
  96 + * @param context 上下文
  97 + * @param clazz 要启动的LightService
  98 + */
  99 + public void doInit(Context context, Class<? extends LightService> clazz) {
  100 + this.mContext = context;
  101 + LocalBroadcastManager.getInstance(this.mContext).registerReceiver(makeLightReceiver(), makeLightFilter());
  102 + if (clazz != null)
  103 + this.startLightService(clazz);
  104 + this.registerNotificationParser(OnlineStatusNotificationParser.create());
  105 + this.registerNotificationParser(GetGroupNotificationParser.create());
  106 + this.registerNotificationParser(GetAlarmNotificationParser.create());
  107 + this.registerNotificationParser(GetSceneNotificationParser.create());
  108 + this.registerNotificationParser(GetTimeNotificationParser.create());
  109 + }
  110 +
  111 + /**
  112 + * 销毁,当退出APP时调用此方法
  113 + */
  114 + public void doDestroy() {
  115 + this.stopLightService();
  116 + if (this.mLightReceiver != null)
  117 + LocalBroadcastManager.getInstance(this.mContext).unregisterReceiver(this.mLightReceiver);
  118 + this.removeEventListeners();
  119 + this.mCurrentConnect = null;
  120 + this.serviceStarted = false;
  121 + this.serviceConnected = false;
  122 + }
  123 +
  124 + protected BroadcastReceiver makeLightReceiver() {
  125 + if (this.mLightReceiver == null)
  126 + this.mLightReceiver = new BroadcastReceiver() {
  127 +
  128 + @Override
  129 + public void onReceive(Context context, Intent intent) {
  130 +
  131 + switch (intent.getAction()) {
  132 + case LightService.ACTION_NOTIFICATION:
  133 + onNotify(intent);
  134 + break;
  135 + case LightService.ACTION_STATUS_CHANGED:
  136 + onStatusChanged(intent);
  137 + break;
  138 + case LightService.ACTION_UPDATE_MESH_COMPLETED:
  139 + onUpdateMeshCompleted(intent);
  140 + break;
  141 + case LightService.ACTION_OFFLINE:
  142 + onMeshOffline(intent);
  143 + break;
  144 + case LightService.ACTION_LE_SCAN:
  145 + onLeScan(intent);
  146 + break;
  147 + case LightService.ACTION_LE_SCAN_TIMEOUT:
  148 + onLeScanTimeout(intent);
  149 + break;
  150 + case LightService.ACTION_SCAN_COMPLETED:
  151 + onLeScanCompleted(intent);
  152 + break;
  153 + case LightService.ACTION_ERROR:
  154 + onError(intent);
  155 + break;
  156 + }
  157 + }
  158 + };
  159 +
  160 + return this.mLightReceiver;
  161 + }
  162 +
  163 + protected IntentFilter makeLightFilter() {
  164 + final IntentFilter filter = new IntentFilter();
  165 + filter.addAction(LightService.ACTION_LE_SCAN);
  166 + filter.addAction(LightService.ACTION_SCAN_COMPLETED);
  167 + filter.addAction(LightService.ACTION_LE_SCAN_TIMEOUT);
  168 + filter.addAction(LightService.ACTION_NOTIFICATION);
  169 + filter.addAction(LightService.ACTION_STATUS_CHANGED);
  170 + filter.addAction(LightService.ACTION_UPDATE_MESH_COMPLETED);
  171 + filter.addAction(LightService.ACTION_OFFLINE);
  172 + filter.addAction(LightService.ACTION_ERROR);
  173 + return filter;
  174 + }
  175 +
  176 + /********************************************************************************
  177 + * Event API
  178 + *******************************************************************************/
  179 +
  180 + /**
  181 + * 添加一个事件监听器
  182 + *
  183 + * @param eventType 事件类型
  184 + * @param listener 事件监听器
  185 + */
  186 + public void addEventListener(String eventType, EventListener<String> listener) {
  187 + this.mEventBus.addEventListener(eventType, listener);
  188 + }
  189 +
  190 + /**
  191 + * 移除事件监听器
  192 + *
  193 + * @param listener
  194 + */
  195 + public void removeEventListener(EventListener<String> listener) {
  196 + this.mEventBus.removeEventListener(listener);
  197 + }
  198 +
  199 + /**
  200 + * 从事件监听器中移除指定的事件
  201 + *
  202 + * @param eventType
  203 + * @param listener
  204 + */
  205 + public void removeEventListener(String eventType, EventListener<String> listener) {
  206 + this.mEventBus.removeEventListener(eventType, listener);
  207 + }
  208 +
  209 + /**
  210 + * 移除所有的事件监听器
  211 + */
  212 + public void removeEventListeners() {
  213 + this.mEventBus.removeEventListeners();
  214 + }
  215 +
  216 + /**
  217 + * 分发事件
  218 + *
  219 + * @param event
  220 + */
  221 + public void dispatchEvent(Event<String> event) {
  222 + this.mEventBus.dispatchEvent(event);
  223 + }
  224 +
  225 + /********************************************************************************
  226 + * Service API
  227 + *******************************************************************************/
  228 +
  229 + /**
  230 + * 启动LightService
  231 + *
  232 + * @param clazz
  233 + */
  234 + public void startLightService(Class<? extends LightService> clazz) {
  235 +
  236 + if (this.serviceStarted || this.serviceConnected)
  237 + return;
  238 +
  239 + this.serviceStarted = true;
  240 +
  241 + Intent service = new Intent(this.mContext, clazz);
  242 + this.bindService(service, this.mServiceConnection,
  243 + Context.BIND_AUTO_CREATE);
  244 + }
  245 +
  246 + /**
  247 + * 停止LightService
  248 + */
  249 + public void stopLightService() {
  250 +
  251 + if (!this.serviceStarted)
  252 + return;
  253 +
  254 + this.serviceStarted = false;
  255 +
  256 + if (this.serviceConnected) {
  257 + this.unbindService(this.mServiceConnection);
  258 + }
  259 + }
  260 +
  261 + protected void onServiceConnected(ComponentName name, IBinder service) {
  262 +
  263 + TelinkLog.d("service connected --> " + name.getShortClassName());
  264 +
  265 + this.serviceConnected = true;
  266 + this.dispatchEvent(ServiceEvent.newInstance(this, ServiceEvent.SERVICE_CONNECTED, service));
  267 + }
  268 +
  269 + protected void onServiceDisconnected(ComponentName name) {
  270 +
  271 + TelinkLog.d("service disconnected --> " + name.getShortClassName());
  272 +
  273 + this.serviceConnected = false;
  274 + this.dispatchEvent(ServiceEvent.newInstance(this, ServiceEvent.SERVICE_DISCONNECTED, null));
  275 + }
  276 +
  277 + /********************************************************************************
  278 + * Broadcast Receiver API
  279 + *******************************************************************************/
  280 +
  281 + protected void onLeScan(Intent intent) {
  282 + DeviceInfo deviceInfo = intent.getParcelableExtra(LightService.EXTRA_DEVICE);
  283 + this.dispatchEvent(LeScanEvent.newInstance(this, LeScanEvent.LE_SCAN, deviceInfo));
  284 + }
  285 +
  286 + protected void onLeScanCompleted(Intent intent) {
  287 + this.dispatchEvent(LeScanEvent.newInstance(this, LeScanEvent.LE_SCAN_COMPLETED, null));
  288 + }
  289 +
  290 + protected void onLeScanTimeout(Intent intent) {
  291 + this.dispatchEvent(LeScanEvent.newInstance(this, LeScanEvent.LE_SCAN_TIMEOUT, null));
  292 + }
  293 +
  294 + protected void onStatusChanged(Intent intent) {
  295 +
  296 + DeviceInfo deviceInfo = intent.getParcelableExtra(LightService.EXTRA_DEVICE);
  297 +
  298 + if (deviceInfo.status == LightAdapter.STATUS_LOGIN) {
  299 + mCurrentConnect = deviceInfo;
  300 + this.dispatchEvent(DeviceEvent.newInstance(this, DeviceEvent.CURRENT_CONNECT_CHANGED, deviceInfo));
  301 + }
  302 +
  303 + this.dispatchEvent(DeviceEvent.newInstance(this, DeviceEvent.STATUS_CHANGED, deviceInfo));
  304 + }
  305 +
  306 + protected void onUpdateMeshCompleted(Intent intent) {
  307 + this.dispatchEvent(MeshEvent.newInstance(this, MeshEvent.UPDATE_COMPLETED, -1));
  308 + }
  309 +
  310 + protected void onMeshOffline(Intent intent) {
  311 + this.dispatchEvent(MeshEvent.newInstance(this, MeshEvent.OFFLINE, -1));
  312 + }
  313 +
  314 + protected void onError(Intent intent) {
  315 + int errorCode = intent.getIntExtra(LightService.EXTRA_ERROR_CODE, -1);
  316 + this.dispatchEvent(MeshEvent.newInstance(this, MeshEvent.ERROR, errorCode));
  317 + }
  318 +
  319 + protected void onNotify(Intent intent) {
  320 + NotificationInfo notifyInfo = intent.getParcelableExtra(LightService.EXTRA_NOTIFY);
  321 + this.onNotify(notifyInfo);
  322 + }
  323 +
  324 + protected void onNotify(NotificationInfo notifyInfo) {
  325 +
  326 + int opcode = notifyInfo.opcode;
  327 + String eventType = NotificationEvent.getEventType((byte) opcode);
  328 +
  329 + if (Strings.isEmpty(eventType))
  330 + return;
  331 +
  332 + NotificationEvent event = NotificationEvent.newInstance(this, eventType, notifyInfo);
  333 + event.setThreadMode(Event.ThreadMode.Background);
  334 + this.dispatchEvent(event);
  335 + }
  336 +
  337 + /********************************************************************************
  338 + * Notification Parser API
  339 + *******************************************************************************/
  340 +
  341 + /**
  342 + * 注册通知解析器
  343 + *
  344 + * @param parser
  345 + * @see NotificationParser
  346 + */
  347 + protected void registerNotificationParser(NotificationParser parser) {
  348 + NotificationParser.register(parser);
  349 + }
  350 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth;
  6 +
  7 +import com.telink.util.Arrays;
  8 +
  9 +import java.util.UUID;
  10 +
  11 +public class Command {
  12 +
  13 + public UUID serviceUUID;
  14 + public UUID characteristicUUID;
  15 + public CommandType type;
  16 + public byte[] data;
  17 + public Object tag;
  18 + public int delay;
  19 +
  20 + public Command() {
  21 + this(null, null, CommandType.WRITE);
  22 + }
  23 +
  24 + public Command(UUID serviceUUID, UUID characteristicUUID, CommandType type) {
  25 + this(serviceUUID, characteristicUUID, type, null);
  26 + }
  27 +
  28 + public Command(UUID serviceUUID, UUID characteristicUUID, CommandType type,
  29 + byte[] data) {
  30 + this(serviceUUID, characteristicUUID, type, data, null);
  31 + }
  32 +
  33 + public Command(UUID serviceUUID, UUID characteristicUUID, CommandType type,
  34 + byte[] data, Object tag) {
  35 +
  36 + this.serviceUUID = serviceUUID;
  37 + this.characteristicUUID = characteristicUUID;
  38 + this.type = type;
  39 + this.data = data;
  40 + this.tag = tag;
  41 + }
  42 +
  43 + public static Command newInstance() {
  44 + return new Command();
  45 + }
  46 +
  47 + public void clear() {
  48 + this.serviceUUID = null;
  49 + this.characteristicUUID = null;
  50 + this.data = null;
  51 + }
  52 +
  53 + @Override
  54 + public String toString() {
  55 + String d = "";
  56 +
  57 + if (data != null)
  58 + d = Arrays.bytesToHexString(this.data, ",");
  59 +
  60 + return "{ tag : " + this.tag + ", type : " + this.type
  61 + + " characteristicUUID :" + characteristicUUID.toString() + " data: " + d + " delay :" + delay + "}";
  62 + }
  63 +
  64 + public enum CommandType {
  65 + READ, WRITE, WRITE_NO_RESPONSE, ENABLE_NOTIFY, DISABLE_NOTIFY
  66 + }
  67 +
  68 + public interface Callback {
  69 +
  70 + void success(Peripheral peripheral, Command command, Object obj);
  71 +
  72 + void error(Peripheral peripheral, Command command, String errorMsg);
  73 +
  74 + boolean timeout(Peripheral peripheral, Command command);
  75 + }
  76 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth;
  6 +
  7 +import android.bluetooth.BluetoothAdapter;
  8 +import android.bluetooth.BluetoothDevice;
  9 +import android.bluetooth.BluetoothManager;
  10 +import android.bluetooth.le.BluetoothLeScanner;
  11 +import android.bluetooth.le.ScanCallback;
  12 +import android.bluetooth.le.ScanResult;
  13 +import android.content.Context;
  14 +import android.os.Build;
  15 +
  16 +import java.util.UUID;
  17 +
  18 +/**
  19 + * 蓝牙扫描接口
  20 + */
  21 +public final class LeBluetooth {
  22 +
  23 + public static final int SCAN_FAILED_FEATURE_UNSUPPORTED = 4;
  24 +
  25 + private static LeBluetooth mThis;
  26 + private volatile boolean mStarted = false;
  27 + private volatile boolean mScanning = false;
  28 +
  29 + /********************************************************************************
  30 + * Bluetooth API
  31 + *******************************************************************************/
  32 +
  33 + private BluetoothAdapter.LeScanCallback mLeScanCallback;
  34 + private BluetoothLeScanner mScanner;
  35 + private ScanCallback mScanCallback;
  36 + private LeScanCallback mCallback;
  37 + private BluetoothAdapter mAdapter;
  38 +
  39 + /********************************************************************************
  40 + * Construct
  41 + *******************************************************************************/
  42 +
  43 + private LeBluetooth() {
  44 + }
  45 +
  46 + /********************************************************************************
  47 + * Singleton
  48 + *******************************************************************************/
  49 +
  50 + public static LeBluetooth getInstance() {
  51 +
  52 + synchronized (LeBluetooth.class) {
  53 + if (LeBluetooth.mThis == null) {
  54 + LeBluetooth.mThis = new LeBluetooth();
  55 + }
  56 + }
  57 +
  58 + return LeBluetooth.mThis;
  59 + }
  60 +
  61 + /********************************************************************************
  62 + * Public API
  63 + *******************************************************************************/
  64 +
  65 + /**
  66 + * 是否正在扫描
  67 + *
  68 + * @return
  69 + */
  70 + public boolean isScanning() {
  71 + synchronized (this) {
  72 + return this.mScanning;
  73 + }
  74 + }
  75 +
  76 + /**
  77 + * 设置回调函数
  78 + *
  79 + * @param callback
  80 + */
  81 + public void setLeScanCallback(LeScanCallback callback) {
  82 + this.mCallback = callback;
  83 +
  84 + if (mCallback == null) return;
  85 +
  86 + if (this.isSupportLollipop()) {
  87 + this.mScanCallback = new ScanCallback() {
  88 +
  89 + @Override
  90 + public void onScanResult(int callbackType, ScanResult result) {
  91 + if (isSupportLollipop()) {
  92 + byte[] scanRecord = null;
  93 +
  94 + if (result.getScanRecord() != null)
  95 + scanRecord = result.getScanRecord().getBytes();
  96 + if (mCallback != null)
  97 + mCallback.onLeScan(result.getDevice(), result.getRssi(), scanRecord);
  98 + }
  99 + }
  100 +
  101 + @Override
  102 + public void onScanFailed(int errorCode) {
  103 + if (errorCode != ScanCallback.SCAN_FAILED_ALREADY_STARTED)
  104 + if (mCallback != null)
  105 + mCallback.onScanFail(LeBluetooth.SCAN_FAILED_FEATURE_UNSUPPORTED);
  106 + }
  107 + };
  108 + } else {
  109 + this.mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
  110 +
  111 + @Override
  112 + public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
  113 + if (mCallback != null)
  114 + mCallback.onLeScan(device, rssi, scanRecord);
  115 + }
  116 + };
  117 + }
  118 + }
  119 +
  120 + /**
  121 + * 开始扫描
  122 + *
  123 + * @param serviceUUIDs
  124 + * @return
  125 + */
  126 + synchronized public boolean startScan(final UUID[] serviceUUIDs) {
  127 +
  128 + synchronized (this) {
  129 + if (this.mScanning || this.mStarted)
  130 + return true;
  131 + }
  132 +
  133 + if (!this.isEnabled())
  134 + return false;
  135 +
  136 + synchronized (this) {
  137 + this.mStarted = true;
  138 + this.scan(serviceUUIDs);
  139 + }
  140 +
  141 + return true;
  142 + }
  143 +
  144 + private void scan(final UUID[] serviceUUIDs) {
  145 + if (isSupportLollipop()) {
  146 + mScanner = mAdapter.getBluetoothLeScanner();
  147 + if (mScanner == null) {
  148 + synchronized (this) {
  149 + mScanning = false;
  150 + }
  151 + if (mCallback != null)
  152 + mCallback.onScanFail(SCAN_FAILED_FEATURE_UNSUPPORTED);
  153 + } else {
  154 + mScanner.startScan(mScanCallback);
  155 + synchronized (this) {
  156 + mScanning = true;
  157 + }
  158 + mCallback.onStartedScan();
  159 + }
  160 +
  161 + } else {
  162 + if (!mAdapter.startLeScan(serviceUUIDs,
  163 + mLeScanCallback)) {
  164 + synchronized (this) {
  165 + mScanning = false;
  166 + }
  167 + if (mCallback != null)
  168 + mCallback.onScanFail(SCAN_FAILED_FEATURE_UNSUPPORTED);
  169 + } else {
  170 + synchronized (this) {
  171 + mScanning = true;
  172 + }
  173 + mCallback.onStartedScan();
  174 + }
  175 + }
  176 + }
  177 +
  178 + public boolean isSupportLollipop() {
  179 + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
  180 + }
  181 +
  182 + /**
  183 + * 停止扫描
  184 + */
  185 + synchronized public void stopScan() {
  186 +
  187 + synchronized (this) {
  188 + if (!mScanning)
  189 + return;
  190 + }
  191 +
  192 + try {
  193 + if (isSupportLollipop()) {
  194 + if (mScanner != null)
  195 + mScanner.stopScan(mScanCallback);
  196 + } else {
  197 + if (mAdapter != null)
  198 + mAdapter.stopLeScan(mLeScanCallback);
  199 + }
  200 + } catch (Exception e) {
  201 + TelinkLog.d("蓝牙停止异常");
  202 + }
  203 +
  204 + synchronized (this) {
  205 + mStarted = false;
  206 + mScanning = false;
  207 + }
  208 +
  209 + if (mCallback != null)
  210 + mCallback.onStoppedScan();
  211 + }
  212 +
  213 + /**
  214 + * 蓝牙是否打开
  215 + *
  216 + * @return
  217 + */
  218 + public boolean isEnabled() {
  219 + return this.mAdapter != null
  220 + && this.mAdapter.isEnabled();
  221 + }
  222 +
  223 + /**
  224 + * 是否支持BLE
  225 + *
  226 + * @param context
  227 + * @return
  228 + */
  229 + public boolean isSupport(Context context) {
  230 + return this.getAdapter(context) != null;
  231 + }
  232 +
  233 + public boolean enable(Context context) {
  234 + BluetoothAdapter mAdapter = getAdapter(context);
  235 + if (mAdapter == null)
  236 + return false;
  237 + if (mAdapter.isEnabled())
  238 + return true;
  239 + return mAdapter.enable();
  240 + }
  241 +
  242 + public BluetoothAdapter getAdapter(Context context) {
  243 + synchronized (this) {
  244 + if (mAdapter == null) {
  245 + BluetoothManager manager = (BluetoothManager) context
  246 + .getSystemService(Context.BLUETOOTH_SERVICE);
  247 + this.mAdapter = manager.getAdapter();
  248 + }
  249 + }
  250 +
  251 + return this.mAdapter;
  252 + }
  253 +
  254 + public interface LeScanCallback {
  255 + void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord);
  256 +
  257 + void onScanFail(int errorCode);
  258 +
  259 + void onStartedScan();
  260 +
  261 + void onStoppedScan();
  262 + }
  263 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth;
  6 +
  7 +import android.bluetooth.BluetoothDevice;
  8 +import android.bluetooth.BluetoothGatt;
  9 +import android.bluetooth.BluetoothGattCallback;
  10 +import android.bluetooth.BluetoothGattCharacteristic;
  11 +import android.bluetooth.BluetoothGattDescriptor;
  12 +import android.bluetooth.BluetoothGattService;
  13 +import android.content.Context;
  14 +import android.os.Build;
  15 +import android.os.Handler;
  16 +import android.os.Looper;
  17 +
  18 +import com.telink.util.Arrays;
  19 +
  20 +import java.util.List;
  21 +import java.util.Map;
  22 +import java.util.Queue;
  23 +import java.util.UUID;
  24 +import java.util.concurrent.ConcurrentHashMap;
  25 +import java.util.concurrent.ConcurrentLinkedQueue;
  26 +
  27 +public class Peripheral extends BluetoothGattCallback {
  28 +
  29 + public static final int CONNECTION_PRIORITY_BALANCED = 0;
  30 + public static final int CONNECTION_PRIORITY_HIGH = 1;
  31 + public static final int CONNECTION_PRIORITY_LOW_POWER = 2;
  32 +
  33 + private static final int CONN_STATE_IDLE = 1;
  34 + private static final int CONN_STATE_CONNECTING = 2;
  35 + private static final int CONN_STATE_CONNECTED = 4;
  36 + private static final int CONN_STATE_DISCONNECTING = 8;
  37 + private static final int CONN_STATE_CLOSED = 16;
  38 +
  39 + private static final int RSSI_UPDATE_TIME_INTERVAL = 2000;
  40 +
  41 + protected final Queue<CommandContext> mInputCommandQueue = new ConcurrentLinkedQueue<>();
  42 + protected final Queue<CommandContext> mOutputCommandQueue = new ConcurrentLinkedQueue<>();
  43 + protected final Map<String, CommandContext> mNotificationCallbacks = new ConcurrentHashMap<>();
  44 +
  45 + protected final Handler mTimeoutHandler = new Handler(Looper.getMainLooper());
  46 + protected final Handler mRssiUpdateHandler = new Handler(Looper.getMainLooper());
  47 + protected final Handler mDelayHandler = new Handler(Looper.getMainLooper());
  48 + protected final Runnable mRssiUpdateRunnable = new RssiUpdateRunnable();
  49 + protected final Runnable mCommandTimeoutRunnable = new CommandTimeoutRunnable();
  50 + protected final Runnable mCommandDelayRunnable = new CommandDelayRunnable();
  51 +
  52 + private final Object mStateLock = new Object();
  53 + private final Object mProcessLock = new Object();
  54 +
  55 + protected BluetoothDevice device;
  56 + protected BluetoothGatt gatt;
  57 + protected int rssi;
  58 + protected byte[] scanRecord;
  59 + protected String name;
  60 + protected String mac;
  61 + protected byte[] macBytes;
  62 + protected int type;
  63 + protected List<BluetoothGattService> mServices;
  64 +
  65 + protected Boolean processing = false;
  66 +
  67 + protected boolean monitorRssi;
  68 + protected int updateIntervalMill = 5 * 1000;
  69 + protected int commandTimeoutMill = 10 * 1000;
  70 + protected long lastTime;
  71 + private int mConnState = CONN_STATE_IDLE;
  72 +
  73 + public Peripheral(BluetoothDevice device, byte[] scanRecord, int rssi) {
  74 +
  75 + this.device = device;
  76 + this.scanRecord = scanRecord;
  77 + this.rssi = rssi;
  78 +
  79 + this.name = device.getName();
  80 + this.mac = device.getAddress();
  81 + this.type = device.getType();
  82 + }
  83 +
  84 + /********************************************************************************
  85 + * Public API
  86 + *******************************************************************************/
  87 +
  88 + public BluetoothDevice getDevice() {
  89 + return this.device;
  90 + }
  91 +
  92 + public String getDeviceName() {
  93 + return this.name;
  94 + }
  95 +
  96 + public String getMacAddress() {
  97 + return this.mac;
  98 + }
  99 +
  100 + public List<BluetoothGattService> getServices() {
  101 + return mServices;
  102 + }
  103 +
  104 + public byte[] getMacBytes() {
  105 +
  106 + if (this.macBytes == null) {
  107 + String[] strArray = this.getMacAddress().split(":");
  108 + int length = strArray.length;
  109 + this.macBytes = new byte[length];
  110 +
  111 + for (int i = 0; i < length; i++) {
  112 + this.macBytes[i] = (byte) (Integer.parseInt(strArray[i], 16) & 0xFF);
  113 + }
  114 +
  115 + Arrays.reverse(this.macBytes, 0, length - 1);
  116 + }
  117 +
  118 + return this.macBytes;
  119 + }
  120 +
  121 + public int getType() {
  122 + return this.type;
  123 + }
  124 +
  125 + public int getRssi() {
  126 + return this.rssi;
  127 + }
  128 +
  129 + public boolean isConnected() {
  130 + synchronized (this.mStateLock) {
  131 + return this.mConnState == CONN_STATE_CONNECTED;
  132 + }
  133 + }
  134 +
  135 + public void connect(Context context) {
  136 +
  137 + synchronized (this.mStateLock) {
  138 + this.lastTime = 0;
  139 + if (this.mConnState == CONN_STATE_IDLE) {
  140 + TelinkLog.d("connect " + this.getDeviceName() + " -- "
  141 + + this.getMacAddress());
  142 + this.mConnState = CONN_STATE_CONNECTING;
  143 + this.gatt = this.device.connectGatt(context, false, this);
  144 + if (this.gatt == null) {
  145 + this.disconnect();
  146 + this.mConnState = CONN_STATE_IDLE;
  147 + this.onDisconnect();
  148 + }
  149 + }
  150 + }
  151 + }
  152 +
  153 + public void disconnect() {
  154 +
  155 + synchronized (this.mStateLock) {
  156 + if (this.mConnState != CONN_STATE_CONNECTING && this.mConnState != CONN_STATE_CONNECTED)
  157 + return;
  158 + }
  159 +
  160 + TelinkLog.d("disconnect " + this.getDeviceName() + " -- "
  161 + + this.getMacAddress());
  162 +
  163 + this.clear();
  164 +
  165 + synchronized (this.mStateLock) {
  166 + if (this.gatt != null) {
  167 + int connState = this.mConnState;
  168 + if (connState == CONN_STATE_CONNECTED) {
  169 + this.gatt.disconnect();
  170 + this.mConnState = CONN_STATE_DISCONNECTING;
  171 + } else {
  172 + this.gatt.disconnect();
  173 + this.gatt.close();
  174 + this.mConnState = CONN_STATE_CLOSED;
  175 + }
  176 + } else {
  177 + this.mConnState = CONN_STATE_IDLE;
  178 + }
  179 + }
  180 + }
  181 +
  182 + private void clear() {
  183 + this.processing = false;
  184 + this.stopMonitoringRssi();
  185 + this.cancelCommandTimeoutTask();
  186 + this.mInputCommandQueue.clear();
  187 + this.mOutputCommandQueue.clear();
  188 + this.mNotificationCallbacks.clear();
  189 + this.mDelayHandler.removeCallbacksAndMessages(null);
  190 + }
  191 +
  192 + public boolean sendCommand(Command.Callback callback, Command command) {
  193 +
  194 + synchronized (this.mStateLock) {
  195 + if (this.mConnState != CONN_STATE_CONNECTED)
  196 + return false;
  197 + }
  198 +
  199 + CommandContext commandContext = new CommandContext(callback, command);
  200 + this.postCommand(commandContext);
  201 +
  202 + return true;
  203 + }
  204 +
  205 + public final void startMonitoringRssi(int interval) {
  206 +
  207 + this.monitorRssi = true;
  208 +
  209 + if (interval <= 0)
  210 + this.updateIntervalMill = RSSI_UPDATE_TIME_INTERVAL;
  211 + else
  212 + this.updateIntervalMill = interval;
  213 + }
  214 +
  215 + public final void stopMonitoringRssi() {
  216 + this.monitorRssi = false;
  217 + this.mRssiUpdateHandler.removeCallbacks(this.mRssiUpdateRunnable);
  218 + this.mRssiUpdateHandler.removeCallbacksAndMessages(null);
  219 + }
  220 +
  221 + public final boolean requestConnectionPriority(int connectionPriority) {
  222 + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && this.gatt.requestConnectionPriority(connectionPriority);
  223 + }
  224 +
  225 + /********************************************************************************
  226 + * Protected API
  227 + *******************************************************************************/
  228 +
  229 + protected void onConnect() {
  230 + //this.requestConnectionPriority(CONNECTION_PRIORITY_BALANCED);
  231 + this.enableMonitorRssi(this.monitorRssi);
  232 + }
  233 +
  234 + protected void onDisconnect() {
  235 + this.enableMonitorRssi(false);
  236 + }
  237 +
  238 + protected void onServicesDiscovered(List<BluetoothGattService> services) {
  239 + }
  240 +
  241 + protected void onNotify(byte[] data, UUID serviceUUID,
  242 + UUID characteristicUUID, Object tag) {
  243 + }
  244 +
  245 + protected void onRssiChanged() {
  246 + }
  247 +
  248 + protected void enableMonitorRssi(boolean enable) {
  249 +
  250 + if (enable) {
  251 + this.mRssiUpdateHandler.removeCallbacks(this.mRssiUpdateRunnable);
  252 + this.mRssiUpdateHandler.postDelayed(this.mRssiUpdateRunnable, this.updateIntervalMill);
  253 + } else {
  254 + this.mRssiUpdateHandler.removeCallbacks(this.mRssiUpdateRunnable);
  255 + this.mRssiUpdateHandler.removeCallbacksAndMessages(null);
  256 + }
  257 + }
  258 +
  259 + /********************************************************************************
  260 + * Command Handler API
  261 + *******************************************************************************/
  262 +
  263 + private void postCommand(CommandContext commandContext) {
  264 + TelinkLog.d("postCommand");
  265 + if (commandContext.command.delay < 0) {
  266 + synchronized (this.mOutputCommandQueue) {
  267 + this.mOutputCommandQueue.add(commandContext);
  268 + this.processCommand(commandContext);
  269 + }
  270 + return;
  271 + }
  272 +
  273 + this.mInputCommandQueue.add(commandContext);
  274 + synchronized (this.mProcessLock) {
  275 + if (!this.processing) {
  276 + this.processCommand();
  277 + }
  278 + }
  279 + }
  280 +
  281 + private void processCommand() {
  282 + TelinkLog.d("processing : " + this.processing);
  283 +
  284 + CommandContext commandContext;
  285 + Command.CommandType commandType;
  286 +
  287 + synchronized (mInputCommandQueue) {
  288 + if (this.mInputCommandQueue.isEmpty())
  289 + return;
  290 + commandContext = this.mInputCommandQueue.poll();
  291 + }
  292 +
  293 + if (commandContext == null)
  294 + return;
  295 +
  296 + commandType = commandContext.command.type;
  297 +
  298 + if (commandType != Command.CommandType.ENABLE_NOTIFY && commandType != Command.CommandType.DISABLE_NOTIFY) {
  299 + synchronized (mOutputCommandQueue) {
  300 + this.mOutputCommandQueue.add(commandContext);
  301 + }
  302 +
  303 + synchronized (this.mProcessLock) {
  304 + if (!this.processing)
  305 + this.processing = true;
  306 + }
  307 + }
  308 +
  309 + int delay = commandContext.command.delay;
  310 + if (delay > 0) {
  311 + long currentTime = System.currentTimeMillis();
  312 + if (lastTime == 0 || (currentTime - lastTime) >= delay)
  313 + this.processCommand(commandContext);
  314 + else
  315 + this.mDelayHandler.postDelayed(this.mCommandDelayRunnable, delay);
  316 + } else {
  317 + this.processCommand(commandContext);
  318 + }
  319 + }
  320 +
  321 + synchronized private void processCommand(CommandContext commandContext) {
  322 +
  323 + Command command = commandContext.command;
  324 + Command.CommandType commandType = command.type;
  325 +
  326 + TelinkLog.d("processCommand : " + command.toString());
  327 +
  328 + switch (commandType) {
  329 + case READ:
  330 + this.postCommandTimeoutTask();
  331 + this.readCharacteristic(commandContext, command.serviceUUID,
  332 + command.characteristicUUID);
  333 + break;
  334 + case WRITE:
  335 + this.postCommandTimeoutTask();
  336 + this.writeCharacteristic(commandContext, command.serviceUUID,
  337 + command.characteristicUUID,
  338 + BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT,
  339 + command.data);
  340 + break;
  341 + case WRITE_NO_RESPONSE:
  342 + this.postCommandTimeoutTask();
  343 + this.writeCharacteristic(commandContext, command.serviceUUID,
  344 + command.characteristicUUID,
  345 + BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE,
  346 + command.data);
  347 + break;
  348 + case ENABLE_NOTIFY:
  349 + this.enableNotification(commandContext, command.serviceUUID,
  350 + command.characteristicUUID);
  351 + break;
  352 + case DISABLE_NOTIFY:
  353 + this.disableNotification(commandContext, command.serviceUUID,
  354 + command.characteristicUUID);
  355 + break;
  356 + }
  357 + }
  358 +
  359 + private void commandCompleted() {
  360 +
  361 + TelinkLog.d("commandCompleted");
  362 +
  363 + synchronized (this.mProcessLock) {
  364 + if (this.processing)
  365 + this.processing = false;
  366 + }
  367 +
  368 + this.processCommand();
  369 + }
  370 +
  371 + private void commandSuccess(CommandContext commandContext, Object data) {
  372 + TelinkLog.d("commandSuccess");
  373 + this.lastTime = System.currentTimeMillis();
  374 + if (commandContext != null) {
  375 +
  376 + Command command = commandContext.command;
  377 + Command.Callback callback = commandContext.callback;
  378 + commandContext.clear();
  379 +
  380 + if (callback != null) {
  381 + callback.success(this, command,
  382 + data);
  383 + }
  384 + }
  385 + }
  386 +
  387 + private void commandSuccess(Object data) {
  388 + CommandContext commandContext;
  389 + commandContext = this.mOutputCommandQueue.poll();
  390 + this.commandSuccess(commandContext, data);
  391 + }
  392 +
  393 + private void commandError(CommandContext commandContext, String errorMsg) {
  394 + TelinkLog.d("commandError");
  395 + this.lastTime = System.currentTimeMillis();
  396 + if (commandContext != null) {
  397 +
  398 + Command command = commandContext.command;
  399 + Command.Callback callback = commandContext.callback;
  400 + commandContext.clear();
  401 +
  402 + if (callback != null) {
  403 + callback.error(this, command,
  404 + errorMsg);
  405 + }
  406 + }
  407 + }
  408 +
  409 + private void commandError(String errorMsg) {
  410 + CommandContext commandContext;
  411 + commandContext = this.mOutputCommandQueue.poll();
  412 + this.commandError(commandContext, errorMsg);
  413 + }
  414 +
  415 + private boolean commandTimeout(CommandContext commandContext) {
  416 + TelinkLog.d("commandTimeout");
  417 + this.lastTime = System.currentTimeMillis();
  418 + if (commandContext != null) {
  419 + Command command = commandContext.command;
  420 + Command.Callback callback = commandContext.callback;
  421 + commandContext.clear();
  422 +
  423 + if (callback != null) {
  424 + return callback.timeout(this, command);
  425 + }
  426 + }
  427 +
  428 + return false;
  429 + }
  430 +
  431 + private void postCommandTimeoutTask() {
  432 +
  433 + if (this.commandTimeoutMill <= 0)
  434 + return;
  435 +
  436 + this.mTimeoutHandler.removeCallbacksAndMessages(null);
  437 + this.mTimeoutHandler.postDelayed(this.mCommandTimeoutRunnable, this.commandTimeoutMill);
  438 + }
  439 +
  440 + private void cancelCommandTimeoutTask() {
  441 + this.mTimeoutHandler.removeCallbacksAndMessages(null);
  442 + }
  443 +
  444 + /********************************************************************************
  445 + * Private API
  446 + *******************************************************************************/
  447 +
  448 + private void readCharacteristic(CommandContext commandContext,
  449 + UUID serviceUUID, UUID characteristicUUID) {
  450 +
  451 + boolean success = true;
  452 + String errorMsg = "";
  453 +
  454 + BluetoothGattService service = this.gatt.getService(serviceUUID);
  455 +
  456 + if (service != null) {
  457 +
  458 + BluetoothGattCharacteristic characteristic = service
  459 + .getCharacteristic(characteristicUUID);
  460 +
  461 + if (characteristic != null) {
  462 +
  463 + if (!this.gatt.readCharacteristic(characteristic)) {
  464 + success = false;
  465 + errorMsg = "read characteristic error";
  466 + }
  467 +
  468 + } else {
  469 + success = false;
  470 + errorMsg = "read characteristic error";
  471 + }
  472 + } else {
  473 + success = false;
  474 + errorMsg = "service is not offered by the remote device";
  475 + }
  476 +
  477 + if (!success) {
  478 + this.commandError(errorMsg);
  479 + this.commandCompleted();
  480 + }
  481 + }
  482 +
  483 + private void writeCharacteristic(CommandContext commandContext,
  484 + UUID serviceUUID, UUID characteristicUUID, int writeType,
  485 + byte[] data) {
  486 +
  487 + boolean success = true;
  488 + String errorMsg = "";
  489 +
  490 + BluetoothGattService service = this.gatt.getService(serviceUUID);
  491 +
  492 + if (service != null) {
  493 + BluetoothGattCharacteristic characteristic = this
  494 + .findWritableCharacteristic(service, characteristicUUID,
  495 + writeType);
  496 + if (characteristic != null) {
  497 +
  498 + characteristic.setValue(data);
  499 + characteristic.setWriteType(writeType);
  500 +
  501 + if (!this.gatt.writeCharacteristic(characteristic)) {
  502 + success = false;
  503 + errorMsg = "write characteristic error";
  504 + }
  505 +
  506 + } else {
  507 + success = false;
  508 + errorMsg = "no characteristic";
  509 + }
  510 + } else {
  511 + success = false;
  512 + errorMsg = "service is not offered by the remote device";
  513 + }
  514 +
  515 + if (!success) {
  516 + this.commandError(errorMsg);
  517 + this.commandCompleted();
  518 + }
  519 + }
  520 +
  521 + private void enableNotification(CommandContext commandContext,
  522 + UUID serviceUUID, UUID characteristicUUID) {
  523 +
  524 + boolean success = true;
  525 + String errorMsg = "";
  526 +
  527 + BluetoothGattService service = this.gatt.getService(serviceUUID);
  528 +
  529 + if (service != null) {
  530 +
  531 + BluetoothGattCharacteristic characteristic = this
  532 + .findNotifyCharacteristic(service, characteristicUUID);
  533 +
  534 + if (characteristic != null) {
  535 +
  536 + if (!this.gatt.setCharacteristicNotification(characteristic,
  537 + true)) {
  538 + success = false;
  539 + errorMsg = "enable notification error";
  540 + } else {
  541 + String key = this.generateHashKey(serviceUUID,
  542 + characteristic);
  543 + this.mNotificationCallbacks.put(key, commandContext);
  544 + }
  545 +
  546 + } else {
  547 + success = false;
  548 + errorMsg = "no characteristic";
  549 + }
  550 +
  551 + } else {
  552 + success = false;
  553 + errorMsg = "service is not offered by the remote device";
  554 + }
  555 +
  556 + if (!success) {
  557 + this.commandError(commandContext, errorMsg);
  558 + }
  559 +
  560 + this.commandCompleted();
  561 + }
  562 +
  563 + private void disableNotification(CommandContext commandContext,
  564 + UUID serviceUUID, UUID characteristicUUID) {
  565 +
  566 + boolean success = true;
  567 + String errorMsg = "";
  568 +
  569 + BluetoothGattService service = this.gatt.getService(serviceUUID);
  570 +
  571 + if (service != null) {
  572 +
  573 + BluetoothGattCharacteristic characteristic = this
  574 + .findNotifyCharacteristic(service, characteristicUUID);
  575 +
  576 + if (characteristic != null) {
  577 +
  578 + String key = this.generateHashKey(serviceUUID, characteristic);
  579 + this.mNotificationCallbacks.remove(key);
  580 +
  581 + if (!this.gatt.setCharacteristicNotification(characteristic,
  582 + false)) {
  583 + success = false;
  584 + errorMsg = "disable notification error";
  585 + }
  586 +
  587 + } else {
  588 + success = false;
  589 + errorMsg = "no characteristic";
  590 + }
  591 +
  592 + } else {
  593 + success = false;
  594 + errorMsg = "service is not offered by the remote device";
  595 + }
  596 +
  597 + if (!success) {
  598 + this.commandError(commandContext, errorMsg);
  599 + }
  600 +
  601 + this.commandCompleted();
  602 + }
  603 +
  604 + private BluetoothGattCharacteristic findWritableCharacteristic(
  605 + BluetoothGattService service, UUID characteristicUUID, int writeType) {
  606 +
  607 + BluetoothGattCharacteristic characteristic = null;
  608 +
  609 + int writeProperty = BluetoothGattCharacteristic.PROPERTY_WRITE;
  610 +
  611 + if (writeType == BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE) {
  612 + writeProperty = BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE;
  613 + }
  614 +
  615 + List<BluetoothGattCharacteristic> characteristics = service
  616 + .getCharacteristics();
  617 +
  618 + for (BluetoothGattCharacteristic c : characteristics) {
  619 + if ((c.getProperties() & writeProperty) != 0
  620 + && characteristicUUID.equals(c.getUuid())) {
  621 + characteristic = c;
  622 + break;
  623 + }
  624 + }
  625 +
  626 + return characteristic;
  627 + }
  628 +
  629 + private BluetoothGattCharacteristic findNotifyCharacteristic(
  630 + BluetoothGattService service, UUID characteristicUUID) {
  631 +
  632 + BluetoothGattCharacteristic characteristic = null;
  633 +
  634 + List<BluetoothGattCharacteristic> characteristics = service
  635 + .getCharacteristics();
  636 +
  637 + for (BluetoothGattCharacteristic c : characteristics) {
  638 + if ((c.getProperties() & BluetoothGattCharacteristic.PROPERTY_NOTIFY) != 0
  639 + && characteristicUUID.equals(c.getUuid())) {
  640 + characteristic = c;
  641 + break;
  642 + }
  643 + }
  644 +
  645 + if (characteristic != null)
  646 + return characteristic;
  647 +
  648 + for (BluetoothGattCharacteristic c : characteristics) {
  649 + if ((c.getProperties() & BluetoothGattCharacteristic.PROPERTY_INDICATE) != 0
  650 + && characteristicUUID.equals(c.getUuid())) {
  651 + characteristic = c;
  652 + break;
  653 + }
  654 + }
  655 +
  656 + return characteristic;
  657 + }
  658 +
  659 + private String generateHashKey(BluetoothGattCharacteristic characteristic) {
  660 + return this.generateHashKey(characteristic.getService().getUuid(),
  661 + characteristic);
  662 + }
  663 +
  664 + private String generateHashKey(UUID serviceUUID,
  665 + BluetoothGattCharacteristic characteristic) {
  666 + return String.valueOf(serviceUUID) + "|" + characteristic.getUuid()
  667 + + "|" + characteristic.getInstanceId();
  668 + }
  669 +
  670 + /********************************************************************************
  671 + * Implements BluetoothGattCallback API
  672 + *******************************************************************************/
  673 +
  674 + @Override
  675 + public void onConnectionStateChange(BluetoothGatt gatt, int status,
  676 + int newState) {
  677 + TelinkLog.d("onConnectionStateChange status :" + status + " state : "
  678 + + newState);
  679 +
  680 + if (newState == BluetoothGatt.STATE_CONNECTED) {
  681 +
  682 + synchronized (this.mStateLock) {
  683 + this.mConnState = CONN_STATE_CONNECTED;
  684 + }
  685 +
  686 + if (this.gatt == null || !this.gatt.discoverServices()) {
  687 + TelinkLog.d("remote service discovery has been stopped status = "
  688 + + newState);
  689 +
  690 + this.disconnect();
  691 +
  692 + } else {
  693 + this.onConnect();
  694 + }
  695 +
  696 + } else {
  697 +
  698 + synchronized (this.mStateLock) {
  699 + TelinkLog.d("Close");
  700 +
  701 + if (this.gatt != null) {
  702 + this.gatt.close();
  703 + this.mConnState = CONN_STATE_CLOSED;
  704 + }
  705 +
  706 + this.clear();
  707 + this.mConnState = CONN_STATE_IDLE;
  708 + this.onDisconnect();
  709 + }
  710 + }
  711 + }
  712 +
  713 + @Override
  714 + public void onCharacteristicChanged(BluetoothGatt gatt,
  715 + BluetoothGattCharacteristic characteristic) {
  716 + super.onCharacteristicChanged(gatt, characteristic);
  717 +
  718 + String key = this.generateHashKey(characteristic);
  719 + CommandContext commandContext = this.mNotificationCallbacks.get(key);
  720 +
  721 + if (commandContext != null) {
  722 +
  723 + this.onNotify(characteristic.getValue(),
  724 + commandContext.command.serviceUUID,
  725 + commandContext.command.characteristicUUID,
  726 + commandContext.command.tag);
  727 + }
  728 + }
  729 +
  730 + @Override
  731 + public void onCharacteristicRead(BluetoothGatt gatt,
  732 + BluetoothGattCharacteristic characteristic, int status) {
  733 + super.onCharacteristicRead(gatt, characteristic, status);
  734 +
  735 + this.cancelCommandTimeoutTask();
  736 +
  737 + if (status == BluetoothGatt.GATT_SUCCESS) {
  738 + byte[] data = characteristic.getValue();
  739 + this.commandSuccess(data);
  740 + } else {
  741 + this.commandError("read characteristic failed");
  742 + }
  743 +
  744 + this.commandCompleted();
  745 + }
  746 +
  747 + @Override
  748 + public void onCharacteristicWrite(BluetoothGatt gatt,
  749 + BluetoothGattCharacteristic characteristic, int status) {
  750 + super.onCharacteristicWrite(gatt, characteristic, status);
  751 +
  752 + this.cancelCommandTimeoutTask();
  753 +
  754 + if (status == BluetoothGatt.GATT_SUCCESS) {
  755 + this.commandSuccess(null);
  756 + } else {
  757 + this.commandError("write characteristic fail");
  758 + }
  759 +
  760 + TelinkLog.d("onCharacteristicWrite newStatus : " + status);
  761 +
  762 + this.commandCompleted();
  763 + }
  764 +
  765 + @Override
  766 + public void onDescriptorRead(BluetoothGatt gatt,
  767 + BluetoothGattDescriptor descriptor, int status) {
  768 + super.onDescriptorRead(gatt, descriptor, status);
  769 +
  770 + this.cancelCommandTimeoutTask();
  771 +
  772 + if (status == BluetoothGatt.GATT_SUCCESS) {
  773 + byte[] data = descriptor.getValue();
  774 + this.commandSuccess(data);
  775 + } else {
  776 + this.commandError("read description failed");
  777 + }
  778 +
  779 + this.commandCompleted();
  780 + }
  781 +
  782 + @Override
  783 + public void onDescriptorWrite(BluetoothGatt gatt,
  784 + BluetoothGattDescriptor descriptor, int status) {
  785 + super.onDescriptorWrite(gatt, descriptor, status);
  786 +
  787 + this.cancelCommandTimeoutTask();
  788 +
  789 + if (status == BluetoothGatt.GATT_SUCCESS) {
  790 + this.commandSuccess(null);
  791 + } else {
  792 + this.commandError("write description failed");
  793 + }
  794 +
  795 + this.commandCompleted();
  796 + }
  797 +
  798 + @Override
  799 + public void onServicesDiscovered(BluetoothGatt gatt, int status) {
  800 + super.onServicesDiscovered(gatt, status);
  801 +
  802 + if (status == BluetoothGatt.GATT_SUCCESS) {
  803 + List<BluetoothGattService> services = gatt.getServices();
  804 + this.mServices = services;
  805 + this.onServicesDiscovered(services);
  806 + } else {
  807 + TelinkLog.d("Service discovery failed");
  808 + this.disconnect();
  809 + }
  810 + }
  811 +
  812 + @Override
  813 + public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) {
  814 + super.onReadRemoteRssi(gatt, rssi, status);
  815 +
  816 + if (status == BluetoothGatt.GATT_SUCCESS) {
  817 +
  818 + if (rssi != this.rssi) {
  819 + this.rssi = rssi;
  820 + this.onRssiChanged();
  821 + }
  822 + }
  823 + }
  824 +
  825 + @Override
  826 + public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) {
  827 + super.onMtuChanged(gatt, mtu, status);
  828 +
  829 + TelinkLog.d("mtu changed : " + mtu);
  830 + }
  831 +
  832 + @Override
  833 + public void onReliableWriteCompleted(BluetoothGatt gatt, int status) {
  834 + super.onReliableWriteCompleted(gatt, status);
  835 + }
  836 +
  837 + private final class CommandContext {
  838 +
  839 + public Command command;
  840 + public Command.Callback callback;
  841 + public long time;
  842 +
  843 + public CommandContext(Command.Callback callback, Command command) {
  844 + this.callback = callback;
  845 + this.command = command;
  846 + }
  847 +
  848 + public void clear() {
  849 + this.command = null;
  850 + this.callback = null;
  851 + }
  852 + }
  853 +
  854 + private final class RssiUpdateRunnable implements Runnable {
  855 +
  856 + @Override
  857 + public void run() {
  858 +
  859 + if (!monitorRssi)
  860 + return;
  861 +
  862 + if (!isConnected())
  863 + return;
  864 +
  865 + if (gatt != null)
  866 + gatt.readRemoteRssi();
  867 +
  868 + mRssiUpdateHandler.postDelayed(mRssiUpdateRunnable, updateIntervalMill);
  869 + }
  870 + }
  871 +
  872 + private final class CommandTimeoutRunnable implements Runnable {
  873 +
  874 + @Override
  875 + public void run() {
  876 +
  877 + synchronized (mOutputCommandQueue) {
  878 +
  879 + CommandContext commandContext = mOutputCommandQueue.peek();
  880 +
  881 + if (commandContext != null) {
  882 +
  883 + Command command = commandContext.command;
  884 + Command.Callback callback = commandContext.callback;
  885 +
  886 + boolean retry = commandTimeout(commandContext);
  887 +
  888 + if (retry) {
  889 + commandContext.command = command;
  890 + commandContext.callback = callback;
  891 + processCommand(commandContext);
  892 + } else {
  893 + mOutputCommandQueue.poll();
  894 + commandCompleted();
  895 + }
  896 + }
  897 + }
  898 + }
  899 + }
  900 +
  901 + private final class CommandDelayRunnable implements Runnable {
  902 +
  903 + @Override
  904 + public void run() {
  905 + synchronized (mOutputCommandQueue) {
  906 + CommandContext commandContext = mOutputCommandQueue.peek();
  907 + processCommand(commandContext);
  908 + }
  909 + }
  910 + }
  911 +
  912 + private final class ConnectTimeoutRunnable implements Runnable {
  913 +
  914 + @Override
  915 + public void run() {
  916 +
  917 + }
  918 + }
  919 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth;
  6 +
  7 +import android.os.Environment;
  8 +import android.util.Log;
  9 +
  10 +import java.io.BufferedWriter;
  11 +import java.io.File;
  12 +import java.io.FileOutputStream;
  13 +import java.io.IOException;
  14 +import java.io.OutputStreamWriter;
  15 +
  16 +public class TelinkLog {
  17 +
  18 + public final static String TAG = "TelinkBluetoothSDK";
  19 +
  20 + public static boolean ENABLE = true;
  21 + public static boolean LOG2FILE_ENABLE = false;
  22 + public static String FILE_PREFIX = "TelinkBluetoothSDKLogger";
  23 + private static BufferedWriter mWriter;
  24 +
  25 +
  26 + public static boolean isLoggable(int level) {
  27 + if (ENABLE)
  28 + return Log.isLoggable(TAG, level);
  29 + return false;
  30 + }
  31 +
  32 + public static String getStackTraceString(Throwable th) {
  33 + if (ENABLE)
  34 + return Log.getStackTraceString(th);
  35 + return th.getMessage();
  36 + }
  37 +
  38 + public static int println(int level, String msg) {
  39 + if (ENABLE)
  40 + return Log.println(level, TAG, msg);
  41 + return 0;
  42 + }
  43 +
  44 + public static int v(String msg) {
  45 + write2File(msg);
  46 + if (ENABLE)
  47 + return Log.v(TAG, msg);
  48 + return 0;
  49 + }
  50 +
  51 + public static int v(String msg, Throwable th) {
  52 + write2File(msg);
  53 + write2File(getStackTraceString(th));
  54 + if (ENABLE)
  55 + return Log.v(TAG, msg, th);
  56 + return 0;
  57 + }
  58 +
  59 + public static int d(String msg) {
  60 + write2File(msg);
  61 + if (ENABLE)
  62 + return Log.d(TAG, msg);
  63 + return 0;
  64 + }
  65 +
  66 + public static int d(String msg, Throwable th) {
  67 + write2File(msg);
  68 + write2File(getStackTraceString(th));
  69 + if (ENABLE)
  70 + return Log.d(TAG, msg, th);
  71 + return 0;
  72 + }
  73 +
  74 + public static int i(String msg) {
  75 + write2File(msg);
  76 + if (ENABLE)
  77 + return Log.i(TAG, msg);
  78 + return 0;
  79 + }
  80 +
  81 + public static int i(String msg, Throwable th) {
  82 + write2File(msg);
  83 + write2File(getStackTraceString(th));
  84 + if (ENABLE)
  85 + return Log.i(TAG, msg, th);
  86 + return 0;
  87 + }
  88 +
  89 + public static int w(String msg) {
  90 + write2File(msg);
  91 + if (ENABLE)
  92 + return Log.w(TAG, msg);
  93 + return 0;
  94 + }
  95 +
  96 + public static int w(String msg, Throwable th) {
  97 + write2File(msg);
  98 + write2File(getStackTraceString(th));
  99 + if (ENABLE)
  100 + return Log.w(TAG, msg, th);
  101 + return 0;
  102 + }
  103 +
  104 + public static int w(Throwable th) {
  105 + write2File(getStackTraceString(th));
  106 + if (ENABLE)
  107 + return Log.w(TAG, th);
  108 + return 0;
  109 + }
  110 +
  111 + public static int e(String msg) {
  112 + write2File(msg);
  113 + if (ENABLE)
  114 + return Log.w(TAG, msg);
  115 + return 0;
  116 + }
  117 +
  118 + public static int e(String msg, Throwable th) {
  119 + write2File(msg);
  120 + write2File(getStackTraceString(th));
  121 + if (ENABLE)
  122 + return Log.e(TAG, msg, th);
  123 + return 0;
  124 + }
  125 +
  126 + private static void write2File(String log) {
  127 + if (LOG2FILE_ENABLE) {
  128 + try {
  129 + mWriter.write(log);
  130 + mWriter.newLine();
  131 + mWriter.flush();
  132 + } catch (IOException e) {
  133 + e.printStackTrace();
  134 + }
  135 + }
  136 + }
  137 +
  138 + public static void onCreate(String fileName) {
  139 + File root = Environment.getExternalStorageDirectory();
  140 + File dir = new File(root.getPath() + "/TelinkLog");
  141 +
  142 + try {
  143 + if (!dir.exists())
  144 + dir.mkdir();
  145 + File file = new File(dir, fileName);
  146 + if (!file.exists())
  147 + file.createNewFile();
  148 + FileOutputStream fos = new FileOutputStream(file);
  149 + OutputStreamWriter osw = new OutputStreamWriter(fos);
  150 + mWriter = new BufferedWriter(osw, 1024);
  151 + mWriter.write(TAG + " begin : ");
  152 + } catch (IOException e) {
  153 + e.printStackTrace();
  154 + }
  155 + }
  156 +
  157 + public static void onDestroy() {
  158 + try {
  159 + if (mWriter != null) {
  160 + mWriter.write(TAG + " end : ");
  161 + mWriter.close();
  162 + }
  163 + } catch (Exception e) {
  164 + }
  165 + }
  166 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.event;
  6 +
  7 +import com.telink.util.Event;
  8 +
  9 +public class DataEvent<A> extends Event<String> {
  10 +
  11 + protected A args;
  12 +
  13 + public DataEvent(Object sender, String type, A args) {
  14 + super(sender, type);
  15 + this.args = args;
  16 + }
  17 +
  18 + public A getArgs() {
  19 + return args;
  20 + }
  21 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.event;
  6 +
  7 +import com.telink.bluetooth.light.DeviceInfo;
  8 +
  9 +/**
  10 + * 设备事件
  11 + */
  12 +public class DeviceEvent extends DataEvent<DeviceInfo> {
  13 +
  14 + /**
  15 + * 当设备的状态发生改变时,会分发此事件.可以根据事件参数{@link DeviceInfo#status}获取状态.
  16 + *
  17 + * @see com.telink.bluetooth.light.LightAdapter#STATUS_CONNECTING
  18 + * @see com.telink.bluetooth.light.LightAdapter#STATUS_CONNECTED
  19 + * @see com.telink.bluetooth.light.LightAdapter#STATUS_LOGINING
  20 + * @see com.telink.bluetooth.light.LightAdapter#STATUS_LOGIN
  21 + * @see com.telink.bluetooth.light.LightAdapter#STATUS_LOGOUT
  22 + * @see com.telink.bluetooth.light.LightAdapter#STATUS_UPDATING_MESH
  23 + * @see com.telink.bluetooth.light.LightAdapter#STATUS_UPDATE_MESH_COMPLETED
  24 + * @see com.telink.bluetooth.light.LightAdapter#STATUS_UPDATE_MESH_FAILURE
  25 + * @see com.telink.bluetooth.light.LightAdapter#STATUS_UPDATE_ALL_MESH_COMPLETED
  26 + * @see com.telink.bluetooth.light.LightAdapter#STATUS_GET_LTK_COMPLETED
  27 + * @see com.telink.bluetooth.light.LightAdapter#STATUS_GET_LTK_FAILURE
  28 + * @see com.telink.bluetooth.light.LightAdapter#STATUS_GET_FIRMWARE_COMPLETED
  29 + * @see com.telink.bluetooth.light.LightAdapter#STATUS_OTA_PROGRESS
  30 + * @see com.telink.bluetooth.light.LightAdapter#STATUS_OTA_COMPLETED
  31 + * @see com.telink.bluetooth.light.LightAdapter#STATUS_OTA_FAILURE
  32 + */
  33 + public static final String STATUS_CHANGED = "com.telink.bluetooth.light.EVENT_STATUS_CHANGED";
  34 + /**
  35 + * 当前连接的设备改变时分发此事件
  36 + */
  37 + public static final String CURRENT_CONNECT_CHANGED = "com.telink.bluetooth.light.EVENT_CURRENT_CONNECT_CHANGED";
  38 +
  39 + public DeviceEvent(Object sender, String type, DeviceInfo args) {
  40 + super(sender, type, args);
  41 + }
  42 +
  43 + public static DeviceEvent newInstance(Object sender, String type, DeviceInfo args) {
  44 + return new DeviceEvent(sender, type, args);
  45 + }
  46 +}
\ No newline at end of file
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.event;
  6 +
  7 +import com.telink.bluetooth.light.DeviceInfo;
  8 +
  9 +/**
  10 + * 扫描事件
  11 + */
  12 +public class LeScanEvent extends DataEvent<DeviceInfo> {
  13 +
  14 + /**
  15 + * 扫描到设备
  16 + */
  17 + public static final String LE_SCAN = "com.telink.bluetooth.light.EVENT_LE_SCAN";
  18 + public static final String LE_SCAN_COMPLETED = "com.telink.bluetooth.light.EVENT_LE_SCAN_COMPLETED";
  19 + /**
  20 + * 扫描超时
  21 + */
  22 + public static final String LE_SCAN_TIMEOUT = "com.telink.bluetooth.light.EVENT_LE_SCAN_TIMEOUT";
  23 +
  24 + public LeScanEvent(Object sender, String type, DeviceInfo args) {
  25 + super(sender, type, args);
  26 + }
  27 +
  28 + public static LeScanEvent newInstance(Object sender, String type, DeviceInfo args) {
  29 + return new LeScanEvent(sender, type, args);
  30 + }
  31 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.event;
  6 +
  7 +/**
  8 + * 网络事件
  9 + */
  10 +public class MeshEvent extends DataEvent<Integer> {
  11 +
  12 + public static final String UPDATE_COMPLETED = "com.telink.bluetooth.light.EVENT_UPDATE_COMPLETED";
  13 + /**
  14 + * 连接到不任何设备的时候分发此事件
  15 + */
  16 + public static final String OFFLINE = "com.telink.bluetooth.light.EVENT_OFFLINE";
  17 + /**
  18 + * 出现异常时分发此事件,比如蓝牙关闭了
  19 + */
  20 + public static final String ERROR = "com.telink.bluetooth.light.EVENT_ERROR";
  21 +
  22 + public MeshEvent(Object sender, String type, Integer args) {
  23 + super(sender, type, args);
  24 + }
  25 +
  26 + public static MeshEvent newInstance(Object sender, String type, Integer args) {
  27 + return new MeshEvent(sender, type, args);
  28 + }
  29 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.event;
  6 +
  7 +import android.app.Application;
  8 +
  9 +import com.telink.bluetooth.light.NotificationInfo;
  10 +import com.telink.bluetooth.light.NotificationParser;
  11 +import com.telink.bluetooth.light.Opcode;
  12 +
  13 +import java.util.HashMap;
  14 +import java.util.Map;
  15 +
  16 +/**
  17 + * 通知事件,比如设备的状态/分组信息发生变化等
  18 + */
  19 +public class NotificationEvent extends DataEvent<NotificationInfo> {
  20 +
  21 + /**
  22 + * 设备的状态变化事件
  23 + */
  24 + public static final String ONLINE_STATUS = "com.telink.bluetooth.light.EVENT_ONLINE_STATUS";
  25 + /**
  26 + * 分组事件
  27 + */
  28 + public static final String GET_GROUP = "com.telink.bluetooth.light.EVENT_GET_GROUP";
  29 + /**
  30 + * 闹铃事件
  31 + */
  32 + public static final String GET_ALARM = "com.telink.bluetooth.light.EVENT_GET_ALARM";
  33 + /**
  34 + * 场景事件
  35 + */
  36 + public static final String GET_SCENE = "com.telink.bluetooth.light.EVENT_GET_SCENE";
  37 + /**
  38 + * 时间同步事件
  39 + */
  40 + public static final String GET_TIME = "com.telink.bluetooth.light.EVENT_GET_TIME";
  41 +
  42 + private static final Map<Byte, String> EVENT_MAPPING = new HashMap<>();
  43 +
  44 + static {
  45 + register(Opcode.BLE_GATT_OP_CTRL_DC, ONLINE_STATUS);
  46 + register(Opcode.BLE_GATT_OP_CTRL_D4, GET_GROUP);
  47 + register(Opcode.BLE_GATT_OP_CTRL_E7, GET_ALARM);
  48 + register(Opcode.BLE_GATT_OP_CTRL_E9, GET_TIME);
  49 + register(Opcode.BLE_GATT_OP_CTRL_C1, GET_SCENE);
  50 + }
  51 +
  52 + /**
  53 + * 操作码
  54 + */
  55 + protected int opcode;
  56 + /**
  57 + * 源地址,即设备/组地址
  58 + */
  59 + protected int src;
  60 +
  61 + public NotificationEvent(Object sender, String type, NotificationInfo args) {
  62 + super(sender, type, args);
  63 +
  64 + this.opcode = args.opcode;
  65 + this.src = args.src;
  66 + }
  67 +
  68 + /**
  69 + * 注册事件类型
  70 + *
  71 + * @param opcode
  72 + * @param eventType
  73 + * @return
  74 + */
  75 + public static boolean register(byte opcode, String eventType) {
  76 + opcode = (byte) (opcode & 0xFF);
  77 + synchronized (NotificationEvent.class) {
  78 + if (EVENT_MAPPING.containsKey(opcode))
  79 + return false;
  80 + EVENT_MAPPING.put(opcode, eventType);
  81 + return true;
  82 + }
  83 + }
  84 +
  85 + /**
  86 + * 注册事件类型
  87 + *
  88 + * @param opcode
  89 + * @param eventType
  90 + * @return
  91 + * @see NotificationEvent#register(byte, String)
  92 + */
  93 + public static boolean register(Opcode opcode, String eventType) {
  94 + return register(opcode.getValue(), eventType);
  95 + }
  96 +
  97 + /**
  98 + * 获取事件类型
  99 + *
  100 + * @param opcode 操作码
  101 + * @return
  102 + */
  103 + public static String getEventType(byte opcode) {
  104 + opcode = (byte) (opcode & 0xFF);
  105 + synchronized (NotificationEvent.class) {
  106 + if (EVENT_MAPPING.containsKey(opcode))
  107 + return EVENT_MAPPING.get(opcode);
  108 + }
  109 + return null;
  110 + }
  111 +
  112 + public static String getEventType(Opcode opcode) {
  113 + return getEventType(opcode.getValue());
  114 + }
  115 +
  116 + public static NotificationEvent newInstance(Application sender, String type, NotificationInfo args) {
  117 + return new NotificationEvent(sender, type, args);
  118 + }
  119 +
  120 + public Object parse() {
  121 + NotificationParser parser = NotificationParser.get(this.opcode);
  122 + return parser == null ? null : parser.parse(this.args);
  123 + }
  124 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.event;
  6 +
  7 +import android.os.IBinder;
  8 +
  9 +/**
  10 + * LightService事件
  11 + */
  12 +public class ServiceEvent extends DataEvent<IBinder> {
  13 +
  14 + /**
  15 + * 服务启动
  16 + */
  17 + public static final String SERVICE_CONNECTED = "com.telink.bluetooth.light.EVENT_SERVICE_CONNECTED";
  18 + /**
  19 + * 服务关闭
  20 + */
  21 + public static final String SERVICE_DISCONNECTED = "com.telink.bluetooth.light.EVENT_SERVICE_DISCONNECTED";
  22 +
  23 + public ServiceEvent(Object sender, String type, IBinder args) {
  24 + super(sender, type, args);
  25 + }
  26 +
  27 + public static ServiceEvent newInstance(Object sender, String type, IBinder args) {
  28 + return new ServiceEvent(sender, type, args);
  29 + }
  30 +}
\ No newline at end of file
... ...
  1 +package com.telink.bluetooth.light;
  2 +
  3 +import android.util.Log;
  4 +
  5 +/**
  6 + * 命令写入FIFO策略
  7 + */
  8 +public abstract class AdvanceStrategy {
  9 +
  10 + public final static byte[] DEFAULT_SAMPLE_LIST = new byte[]{(byte) 0xD0, (byte) 0xD2, (byte) 0xE2};
  11 +
  12 + private final static AdvanceStrategy DEFAULT = new DefaultAdvanceStrategy();
  13 + private static AdvanceStrategy definition;
  14 + protected Callback mCallback;
  15 + protected int sampleRate = 200;
  16 + protected byte[] sampleOpcodes;
  17 +
  18 + private static final int COMMAND_DELAY = 320;
  19 +
  20 + public static AdvanceStrategy getDefault() {
  21 + synchronized (AdvanceStrategy.class) {
  22 + if (definition != null)
  23 + return definition;
  24 + }
  25 + return DEFAULT;
  26 + }
  27 +
  28 + public static void setDefault(AdvanceStrategy strategy) {
  29 + synchronized (AdvanceStrategy.class) {
  30 + if (strategy != null)
  31 + definition = strategy;
  32 + }
  33 + }
  34 +
  35 + static public boolean isExists(byte opcode, byte[] opcodeList) {
  36 + for (byte opc : opcodeList) {
  37 + if ((opc & 0xFF) == (opcode & 0xFF))
  38 + return true;
  39 + }
  40 +
  41 + return false;
  42 + }
  43 +
  44 + final public int getSampleRate() {
  45 + return sampleRate;
  46 + }
  47 +
  48 + /**
  49 + * 设置采样率,单位毫秒
  50 + *
  51 + * @param sampleRate
  52 + */
  53 + final public void setSampleRate(int sampleRate) {
  54 + this.sampleRate = sampleRate;
  55 + }
  56 +
  57 + /**
  58 + * 回调接口,采样到的命令交由回调接口处理
  59 + *
  60 + * @param mCallback
  61 + */
  62 + public void setCallback(Callback mCallback) {
  63 + this.mCallback = mCallback;
  64 + }
  65 +
  66 + public byte[] getSampleOpcodes() {
  67 + if (sampleOpcodes == null)
  68 + return DEFAULT_SAMPLE_LIST;
  69 + return sampleOpcodes;
  70 + }
  71 +
  72 + /**
  73 + * 设置采样的Opcode数组
  74 + *
  75 + * @param sampleOpcodes
  76 + */
  77 + public void setSampleOpcodes(byte[] sampleOpcodes) {
  78 + this.sampleOpcodes = sampleOpcodes;
  79 + }
  80 +
  81 + /**
  82 + * 处理传进来的命令
  83 + *
  84 + * @param opcode 命令吗
  85 + * @param address 目标地址
  86 + * @param params 命令参数
  87 + * @param delay 命令延时
  88 + * @param tag 命令标签
  89 + * @param noResponse 命令发送方式
  90 + * @param immediate 是否立即写入底层FIFO
  91 + * @return 命令是否成功写入
  92 + */
  93 + abstract public boolean postCommand(byte opcode, int address, byte[] params, int delay, Object tag, boolean noResponse, boolean immediate);
  94 +
  95 + /**
  96 + * 启动,执行初始化
  97 + */
  98 + abstract public void onStart();
  99 +
  100 + /**
  101 + * 停止,做一些清理工作
  102 + */
  103 + abstract public void onStop();
  104 +
  105 + public interface Callback {
  106 + boolean onCommandSampled(byte opcode, int address, byte[] params, Object tag, int delay, boolean noResponse);
  107 + }
  108 +
  109 + /**
  110 + * 默认的命令发送策略
  111 + */
  112 + private static class DefaultAdvanceStrategy extends AdvanceStrategy {
  113 +
  114 + public final static String TAG = "AdvanceStrategy";
  115 +
  116 + private long lastSampleTime;
  117 +
  118 + public DefaultAdvanceStrategy() {
  119 + }
  120 +
  121 + @Override
  122 + public void onStart() {
  123 + this.lastSampleTime = 0;
  124 + }
  125 +
  126 + @Override
  127 + public void onStop() {
  128 + }
  129 +
  130 + @Override
  131 + public boolean postCommand(byte opcode, int address, byte[] params, int delay, Object tag, boolean noResponse, boolean immediate) {
  132 + long currentTime = System.currentTimeMillis();
  133 + boolean flag = false;
  134 + boolean exists = false;
  135 +
  136 + if (lastSampleTime == 0) {
  137 + //第一个命令,直接写入FIFO
  138 + lastSampleTime = currentTime;
  139 + flag = true;
  140 + } else if (immediate || (exists = !isExists(opcode, this.getSampleOpcodes()))) {
  141 + //立即发送的命令,不在采样列表中的命令直接发送
  142 + flag = true;
  143 + if (exists) {
  144 + if (delay <= 0) {
  145 + delay = COMMAND_DELAY;
  146 + }
  147 + }
  148 + } else {
  149 + //计算和最后一次采样时间的间隔,获取采样的命令
  150 + long interval = currentTime - this.lastSampleTime;
  151 + if (interval >= this.getSampleRate()) {
  152 + lastSampleTime = currentTime;
  153 + flag = true;
  154 + }
  155 + }
  156 +
  157 + if (flag && this.mCallback != null) {
  158 + Log.d(TAG, "Sample Opcode : " + Integer.toHexString(opcode));
  159 + //所有采样到的命令立即交给回调接口处理
  160 + return this.mCallback.onCommandSampled(opcode, address, params, tag, delay, noResponse);
  161 + } else {
  162 + Log.d(TAG, "Miss Opcode : " + Integer.toHexString(opcode));
  163 + }
  164 +
  165 + return false;
  166 + }
  167 + }
  168 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.light;
  6 +
  7 +import android.bluetooth.BluetoothDevice;
  8 +
  9 +/**
  10 + * 广播包过滤接口
  11 + *
  12 + * @param <E>
  13 + */
  14 +public interface AdvertiseDataFilter<E extends LightPeripheral> {
  15 +
  16 + /**
  17 + * 过滤接口
  18 + *
  19 + * @param device 扫描到的蓝牙设备
  20 + * @param rssi 信号强度
  21 + * @param scanRecord 广播数据包
  22 + * @return
  23 + */
  24 + E filter(BluetoothDevice device, int rssi,
  25 + byte[] scanRecord);
  26 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.light;
  6 +
  7 +import java.util.ArrayList;
  8 +import java.util.Iterator;
  9 +import java.util.List;
  10 +
  11 +/**
  12 + * 广播过滤器链
  13 + */
  14 +public final class AdvertiseFilterChain {
  15 +
  16 + private static final AdvertiseFilterChain DEFAULT_CHAIN = new AdvertiseFilterChain("Telink default filter chain");
  17 +
  18 + static {
  19 + DEFAULT_CHAIN.add(DefaultAdvertiseDataFilter.create());
  20 + }
  21 +
  22 + private String name;
  23 + private List<AdvertiseDataFilter> mFilters;
  24 +
  25 + private AdvertiseFilterChain(String name) {
  26 + this.name = name;
  27 + this.mFilters = new ArrayList<>();
  28 + }
  29 +
  30 + public static AdvertiseFilterChain getDefault() {
  31 + return DEFAULT_CHAIN;
  32 + }
  33 +
  34 + public String getName() {
  35 + return name;
  36 + }
  37 +
  38 + public AdvertiseFilterChain add(AdvertiseDataFilter filter) {
  39 + synchronized (this) {
  40 + this.mFilters.add(filter);
  41 + }
  42 + return this;
  43 + }
  44 +
  45 + public AdvertiseFilterChain remove(AdvertiseDataFilter filter) {
  46 + synchronized (this) {
  47 + if (this.mFilters.contains(filter)) {
  48 + this.mFilters.remove(filter);
  49 + }
  50 + }
  51 + return this;
  52 + }
  53 +
  54 + public AdvertiseFilterChain removeAll() {
  55 + synchronized (this) {
  56 + this.mFilters.clear();
  57 + }
  58 + return this;
  59 + }
  60 +
  61 + public Iterator<AdvertiseDataFilter> iterator() {
  62 + synchronized (this) {
  63 + return this.mFilters.iterator();
  64 + }
  65 + }
  66 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.light;
  6 +
  7 +/**
  8 + * 连接状态
  9 + */
  10 +public enum ConnectionStatus {
  11 + OFF(0), ON(1), OFFLINE(2);
  12 +
  13 + private final int value;
  14 +
  15 + ConnectionStatus(int value) {
  16 + this.value = value;
  17 + }
  18 +
  19 + public int getValue() {
  20 + return this.value;
  21 + }
  22 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.light;
  6 +
  7 +import android.bluetooth.BluetoothDevice;
  8 +
  9 +import com.telink.bluetooth.TelinkLog;
  10 +import com.telink.util.Arrays;
  11 +
  12 +/**
  13 + * 默认的广播过滤器
  14 + * <p>根据VendorId识别设备.
  15 + */
  16 +public final class DefaultAdvertiseDataFilter implements AdvertiseDataFilter<LightPeripheral> {
  17 +
  18 + private DefaultAdvertiseDataFilter() {
  19 + }
  20 +
  21 + public static DefaultAdvertiseDataFilter create() {
  22 + return new DefaultAdvertiseDataFilter();
  23 + }
  24 +
  25 + @Override
  26 + public LightPeripheral filter(BluetoothDevice device, int rssi, byte[] scanRecord) {
  27 +
  28 + TelinkLog.d(device.getName() + "-->" + Arrays.bytesToHexString(scanRecord, ":"));
  29 +
  30 + int length = scanRecord.length;
  31 + int packetPosition = 0;
  32 + int packetContentLength;
  33 + int packetSize;
  34 + int position;
  35 + int type;
  36 + byte[] meshName = null;
  37 +
  38 + int rspData = 0;
  39 +
  40 + while (packetPosition < length) {
  41 +
  42 + packetSize = scanRecord[packetPosition];
  43 +
  44 + if (packetSize == 0)
  45 + break;
  46 +
  47 + position = packetPosition + 1;
  48 + type = scanRecord[position] & 0xFF;
  49 + position++;
  50 +
  51 + if (type == 0x09) {
  52 +
  53 + packetContentLength = packetSize - 1;
  54 +
  55 + if (packetContentLength > 16 || packetContentLength <= 0)
  56 + return null;
  57 +
  58 + meshName = new byte[16];
  59 + System.arraycopy(scanRecord, position, meshName, 0, packetContentLength);
  60 + } else if (type == 0xFF) {
  61 +
  62 + rspData++;
  63 +
  64 + if (rspData == 2) {
  65 +
  66 + int vendorId = (scanRecord[position++] << 8) + scanRecord[position++];
  67 +
  68 + if (vendorId != Manufacture.getDefault().getVendorId())
  69 + return null;
  70 +
  71 + int meshUUID = scanRecord[position++] + (scanRecord[position++] << 8);
  72 + position += 4;
  73 + int productUUID = scanRecord[position++] + (scanRecord[position++] << 8);
  74 + int status = scanRecord[position++] & 0xFF;
  75 + int meshAddress = scanRecord[position++] + (scanRecord[position] << 8);
  76 +
  77 + LightPeripheral light = new LightPeripheral(device, scanRecord, rssi, meshName, meshAddress);
  78 + light.putAdvProperty(LightPeripheral.ADV_MESH_NAME, meshName);
  79 + light.putAdvProperty(LightPeripheral.ADV_MESH_ADDRESS, meshAddress);
  80 + light.putAdvProperty(LightPeripheral.ADV_MESH_UUID, meshUUID);
  81 + light.putAdvProperty(LightPeripheral.ADV_PRODUCT_UUID, productUUID);
  82 + light.putAdvProperty(LightPeripheral.ADV_STATUS, status);
  83 +
  84 + return light;
  85 + }
  86 + }
  87 +
  88 + packetPosition += packetSize + 1;
  89 + }
  90 +
  91 + return null;
  92 + }
  93 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.light;
  6 +
  7 +import android.os.Parcel;
  8 +import android.os.Parcelable;
  9 +
  10 +/**
  11 + * 设备信息类
  12 + */
  13 +public class DeviceInfo implements Parcelable {
  14 +
  15 + public static final Creator<DeviceInfo> CREATOR = new Creator<DeviceInfo>() {
  16 + @Override
  17 + public DeviceInfo createFromParcel(Parcel in) {
  18 + return new DeviceInfo(in);
  19 + }
  20 +
  21 + @Override
  22 + public DeviceInfo[] newArray(int size) {
  23 + return new DeviceInfo[size];
  24 + }
  25 + };
  26 +
  27 + /**
  28 + * Mac地址
  29 + */
  30 + public String macAddress;
  31 + /**
  32 + * 设备名称
  33 + */
  34 + public String deviceName;
  35 +
  36 + /**
  37 + * 网络名称
  38 + */
  39 + public String meshName;
  40 + /**
  41 + * 网络地址
  42 + */
  43 + public int meshAddress;
  44 + public int meshUUID;
  45 + /**
  46 + * 设备的产品标识符
  47 + */
  48 + public int productUUID;
  49 + public int status;
  50 + public byte[] longTermKey = new byte[16];
  51 + /**
  52 + * 设备的firmware版本
  53 + */
  54 + public String firmwareRevision;
  55 +
  56 + public DeviceInfo() {
  57 + }
  58 +
  59 + public DeviceInfo(Parcel in) {
  60 + this.macAddress = in.readString();
  61 + this.deviceName = in.readString();
  62 + this.meshName = in.readString();
  63 + this.firmwareRevision = in.readString();
  64 + this.meshAddress = in.readInt();
  65 + this.meshUUID = in.readInt();
  66 + this.productUUID = in.readInt();
  67 + this.status = in.readInt();
  68 + in.readByteArray(this.longTermKey);
  69 + }
  70 +
  71 + @Override
  72 + public int describeContents() {
  73 + return 0;
  74 + }
  75 +
  76 + @Override
  77 + public void writeToParcel(Parcel dest, int flags) {
  78 + dest.writeString(this.macAddress);
  79 + dest.writeString(this.deviceName);
  80 + dest.writeString(this.meshName);
  81 + dest.writeString(this.firmwareRevision);
  82 + dest.writeInt(this.meshAddress);
  83 + dest.writeInt(this.meshUUID);
  84 + dest.writeInt(this.productUUID);
  85 + dest.writeInt(this.status);
  86 + dest.writeByteArray(this.longTermKey);
  87 + }
  88 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.light;
  6 +
  7 +import com.telink.util.NumberUtils;
  8 +
  9 +/**
  10 + * 闹铃通知解析器
  11 + */
  12 +public final class GetAlarmNotificationParser extends NotificationParser<GetAlarmNotificationParser.AlarmInfo> {
  13 +
  14 + private GetAlarmNotificationParser() {
  15 + }
  16 +
  17 + public static GetAlarmNotificationParser create() {
  18 + return new GetAlarmNotificationParser();
  19 + }
  20 +
  21 + @Override
  22 + public byte opcode() {
  23 + return Opcode.BLE_GATT_OP_CTRL_E7.getValue();
  24 + }
  25 +
  26 + @Override
  27 + public AlarmInfo parse(NotificationInfo notifyInfo) {
  28 +
  29 + byte[] params = notifyInfo.params;
  30 + int offset = 8;
  31 + int total = params[offset] & 0xFF;
  32 +
  33 + if (total == 0)
  34 + return null;
  35 +
  36 + offset = 1;
  37 + int index = params[offset++] & 0xFF;
  38 + byte data = (byte) (params[offset] & 0xFF);
  39 + offset = 3;
  40 + int sceneId = params[offset] & 0xFF;
  41 +
  42 + int action = NumberUtils.byteToInt(data, 0, 3);
  43 + int type = NumberUtils.byteToInt(data, 4, 6);
  44 + int status = data >> 7 & 0x01;
  45 + long time = NumberUtils.bytesToLong(params, 3, 5);
  46 +
  47 + AlarmInfo alarmInfo = new AlarmInfo();
  48 + alarmInfo.index = index;
  49 + alarmInfo.total = total;
  50 + alarmInfo.action = AlarmAction.valueOf(action);
  51 + alarmInfo.type = AlarmType.valueOf(type);
  52 + alarmInfo.status = AlarmStatus.valueOf(status);
  53 + alarmInfo.time = time;
  54 + alarmInfo.sceneId = sceneId;
  55 +
  56 + return alarmInfo;
  57 + }
  58 +
  59 + public enum AlarmAction {
  60 + OFF(0), ON(1), SCENE(2);
  61 +
  62 + private final int value;
  63 +
  64 + AlarmAction(int value) {
  65 + this.value = value;
  66 + }
  67 +
  68 + static public AlarmAction valueOf(int value) {
  69 +
  70 + AlarmAction[] values = AlarmAction.values();
  71 +
  72 + for (AlarmAction action : values) {
  73 + if (value == action.getValue())
  74 + return action;
  75 + }
  76 +
  77 + return null;
  78 + }
  79 +
  80 + public int getValue() {
  81 + return value;
  82 + }
  83 + }
  84 +
  85 + public enum AlarmType {
  86 + DAY(0), WEEK(1),;
  87 +
  88 + private final int value;
  89 +
  90 + AlarmType(int value) {
  91 + this.value = value;
  92 + }
  93 +
  94 + static public AlarmType valueOf(int value) {
  95 +
  96 + AlarmType[] values = AlarmType.values();
  97 +
  98 + for (AlarmType type : values) {
  99 + if (value == type.getValue())
  100 + return type;
  101 + }
  102 +
  103 + return null;
  104 + }
  105 +
  106 + public int getValue() {
  107 + return value;
  108 + }
  109 + }
  110 +
  111 + public enum AlarmStatus {
  112 + ENABLE(1), DISABLE(0),;
  113 +
  114 + private final int value;
  115 +
  116 + AlarmStatus(int value) {
  117 + this.value = value;
  118 + }
  119 +
  120 + static public AlarmStatus valueOf(int value) {
  121 +
  122 + AlarmStatus[] values = AlarmStatus.values();
  123 +
  124 + for (AlarmStatus status : values) {
  125 + if (value == status.getValue())
  126 + return status;
  127 + }
  128 +
  129 + return null;
  130 + }
  131 +
  132 + public int getValue() {
  133 + return value;
  134 + }
  135 + }
  136 +
  137 + public final class AlarmInfo {
  138 +
  139 + public int index;
  140 + public int total;
  141 + public AlarmAction action;
  142 + public AlarmType type;
  143 + public AlarmStatus status;
  144 + public long time;
  145 + public int sceneId;
  146 +
  147 + public int getMonth() {
  148 + return this.type == AlarmType.DAY ? (int) (this.time >> 32 & 0x0C) : 0;
  149 + }
  150 +
  151 + public int getDayOrWeek() {
  152 + return (int) (this.time >> 24 & 0xFF);
  153 + }
  154 +
  155 + public int getHour() {
  156 + return (int) (this.time >> 16 & 0xFF);
  157 + }
  158 +
  159 + public int getMinute() {
  160 + return (int) (this.time >> 8 & 0xFF);
  161 + }
  162 +
  163 + public int getSecond() {
  164 + return (int) (this.time & 0xFF);
  165 + }
  166 + }
  167 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.light;
  6 +
  7 +import java.util.ArrayList;
  8 +import java.util.List;
  9 +
  10 +/**
  11 + * 分组通知解析器
  12 + */
  13 +public final class GetGroupNotificationParser extends NotificationParser<List<Integer>> {
  14 +
  15 + private GetGroupNotificationParser() {
  16 + }
  17 +
  18 + public static GetGroupNotificationParser create() {
  19 + return new GetGroupNotificationParser();
  20 + }
  21 +
  22 + @Override
  23 + public byte opcode() {
  24 + return Opcode.BLE_GATT_OP_CTRL_D4.getValue();
  25 + }
  26 +
  27 + @Override
  28 + public List<Integer> parse(NotificationInfo notifyInfo) {
  29 +
  30 + List<Integer> mAddress = new ArrayList<>();
  31 +
  32 + byte[] params = notifyInfo.params;
  33 + int length = params.length;
  34 + int position = 0;
  35 + int address;
  36 +
  37 + while (position < length) {
  38 + address = params[position++];
  39 + address = address & 0xFF;
  40 +
  41 + if (address == 0xFF)
  42 + break;
  43 +
  44 + address = address | 0x8000;
  45 + mAddress.add(address);
  46 + }
  47 +
  48 + return mAddress;
  49 + }
  50 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.light;
  6 +
  7 +public final class GetSceneNotificationParser extends NotificationParser<GetSceneNotificationParser.SceneInfo> {
  8 +
  9 + private GetSceneNotificationParser() {
  10 + }
  11 +
  12 + public static GetSceneNotificationParser create() {
  13 + return new GetSceneNotificationParser();
  14 + }
  15 +
  16 + @Override
  17 + public byte opcode() {
  18 + return Opcode.BLE_GATT_OP_CTRL_C1.getValue();
  19 + }
  20 +
  21 + @Override
  22 + public SceneInfo parse(NotificationInfo notifyInfo) {
  23 +
  24 + byte[] params = notifyInfo.params;
  25 + int offset = 8;
  26 + int total = params[offset];
  27 +
  28 + if (total == 0)
  29 + return null;
  30 +
  31 + offset = 0;
  32 + int index = params[offset++] & 0xFF;
  33 + int lum = params[offset++] & 0xFF;
  34 + int r = params[offset++] & 0xFF;
  35 + int g = params[offset++] & 0xFF;
  36 + int b = params[offset] & 0xFF;
  37 +
  38 + SceneInfo sceneInfo = new SceneInfo();
  39 + sceneInfo.index = index;
  40 + sceneInfo.total = total;
  41 + sceneInfo.lum = lum;
  42 + sceneInfo.rgb = (r << 16) + (g << 8) + b;
  43 +
  44 + return sceneInfo;
  45 + }
  46 +
  47 + public final class SceneInfo {
  48 + public int index;
  49 + public int total;
  50 + public int lum;
  51 + public int rgb;
  52 + }
  53 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.light;
  6 +
  7 +import java.util.Calendar;
  8 +
  9 +/**
  10 + * 时间同步通知解析器
  11 + */
  12 +public final class GetTimeNotificationParser extends NotificationParser<Calendar> {
  13 +
  14 + private GetTimeNotificationParser() {
  15 + }
  16 +
  17 + public static GetTimeNotificationParser create() {
  18 + return new GetTimeNotificationParser();
  19 + }
  20 +
  21 + @Override
  22 + public byte opcode() {
  23 + return Opcode.BLE_GATT_OP_CTRL_E9.getValue();
  24 + }
  25 +
  26 + @Override
  27 + public Calendar parse(NotificationInfo notifyInfo) {
  28 +
  29 + byte[] params = notifyInfo.params;
  30 + int offset = 0;
  31 +
  32 + int year = (params[offset++] & 0xFF << 8) + params[offset++];
  33 + int month = params[offset++] & 0xFF;
  34 + int day = params[offset++] & 0xFF;
  35 + int hour = params[offset++] & 0xFF;
  36 + int minute = params[offset++] & 0xFF;
  37 + int second = params[offset] & 0xFF;
  38 +
  39 + Calendar calendar = Calendar.getInstance();
  40 + calendar.set(year, month, day, hour, minute, second);
  41 +
  42 + return calendar;
  43 + }
  44 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.light;
  6 +
  7 +/**
  8 + * 自动重连参数
  9 + * <p>{@link LeAutoConnectParameters}定义了{@link LightService#autoConnect(Parameters)} 方法的必须要设置的几项参数.
  10 + *
  11 + * @see LightService#autoConnect(Parameters)
  12 + */
  13 +public final class LeAutoConnectParameters extends Parameters {
  14 +
  15 + /**
  16 + * 创建{@link LeAutoConnectParameters}实例
  17 + *
  18 + * @return
  19 + */
  20 + public static LeAutoConnectParameters create() {
  21 + return new LeAutoConnectParameters();
  22 + }
  23 +
  24 + /**
  25 + * 网络名
  26 + *
  27 + * @param value
  28 + * @return
  29 + */
  30 + public LeAutoConnectParameters setMeshName(String value) {
  31 + this.set(PARAM_MESH_NAME, value);
  32 + return this;
  33 + }
  34 +
  35 + /**
  36 + * 密码
  37 + *
  38 + * @param value
  39 + * @return
  40 + */
  41 + public LeAutoConnectParameters setPassword(String value) {
  42 + this.set(PARAM_MESH_PASSWORD, value);
  43 + return this;
  44 + }
  45 +
  46 + /**
  47 + * 是否在登录后开启打开Notification
  48 + *
  49 + * @param value
  50 + * @return
  51 + */
  52 + public LeAutoConnectParameters autoEnableNotification(boolean value) {
  53 + this.set(PARAM_AUTO_ENABLE_NOTIFICATION, value);
  54 + return this;
  55 + }
  56 +
  57 + /**
  58 + * 连接超时时间,单位秒.
  59 + *
  60 + * @param timeoutSeconds
  61 + * @return
  62 + */
  63 + public LeAutoConnectParameters setTimeoutSeconds(int timeoutSeconds) {
  64 + this.set(PARAM_TIMEOUT_SECONDS, timeoutSeconds);
  65 + return this;
  66 + }
  67 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.light;
  6 +
  7 +public final class LeDeleteParameters extends Parameters {
  8 +
  9 + public static LeDeleteParameters create() {
  10 + return new LeDeleteParameters();
  11 + }
  12 +
  13 + public LeDeleteParameters setMeshName(String value) {
  14 + this.set(PARAM_MESH_NAME, value);
  15 + return this;
  16 + }
  17 +
  18 + public LeDeleteParameters setPassword(String value) {
  19 + this.set(PARAM_MESH_PASSWORD, value);
  20 + return this;
  21 + }
  22 +
  23 + public LeDeleteParameters setTimeoutSeconds(int value) {
  24 + this.set(PARAM_TIMEOUT_SECONDS, value);
  25 + return this;
  26 + }
  27 +
  28 + public LeDeleteParameters setDeviceInfo(DeviceInfo value) {
  29 + this.set(PARAM_DEVICE_LIST, value);
  30 + return this;
  31 + }
  32 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.light;
  6 +
  7 +/**
  8 + * OTA参数
  9 + *
  10 + * @see LightService#startOta(Parameters)
  11 + */
  12 +public final class LeOtaParameters extends Parameters {
  13 +
  14 + /**
  15 + * 创建{@link LeOtaParameters}实例
  16 + *
  17 + * @return
  18 + */
  19 + public static LeOtaParameters create() {
  20 + return new LeOtaParameters();
  21 + }
  22 +
  23 + /**
  24 + * 网络名
  25 + *
  26 + * @param value
  27 + * @return
  28 + */
  29 + public LeOtaParameters setMeshName(String value) {
  30 + this.set(PARAM_MESH_NAME, value);
  31 + return this;
  32 + }
  33 +
  34 + /**
  35 + * 密码
  36 + *
  37 + * @param value
  38 + * @return
  39 + */
  40 + public LeOtaParameters setPassword(String value) {
  41 + this.set(PARAM_MESH_PASSWORD, value);
  42 + return this;
  43 + }
  44 +
  45 + /**
  46 + * 扫描超时时间,单位秒
  47 + *
  48 + * @param value
  49 + * @return
  50 + */
  51 + public LeOtaParameters setLeScanTimeoutSeconds(int value) {
  52 + this.set(PARAM_SCAN_TIMEOUT_SECONDS, value);
  53 + return this;
  54 + }
  55 +
  56 + /**
  57 + * 要进行OTA的设备
  58 + *
  59 + * @param value
  60 + * @return
  61 + * @see OtaDeviceInfo
  62 + */
  63 + public LeOtaParameters setDeviceInfo(OtaDeviceInfo value) {
  64 + this.set(PARAM_DEVICE_LIST, value);
  65 + return this;
  66 + }
  67 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.light;
  6 +
  7 +/**
  8 + * 自动刷新Notify参数
  9 + *
  10 + * @see LightService#autoRefreshNotify(Parameters)
  11 + */
  12 +public final class LeRefreshNotifyParameters extends Parameters {
  13 +
  14 + /**
  15 + * 创建{@link LeRefreshNotifyParameters}实例
  16 + *
  17 + * @return
  18 + */
  19 + public static LeRefreshNotifyParameters create() {
  20 + return new LeRefreshNotifyParameters();
  21 + }
  22 +
  23 + /**
  24 + * 刷新次数
  25 + *
  26 + * @param value
  27 + * @return
  28 + */
  29 + public LeRefreshNotifyParameters setRefreshRepeatCount(int value) {
  30 + this.set(PARAM_AUTO_REFRESH_NOTIFICATION_REPEAT, value);
  31 + return this;
  32 + }
  33 +
  34 + /**
  35 + * 间隔时间,单位毫秒
  36 + *
  37 + * @param value
  38 + * @return
  39 + */
  40 + public LeRefreshNotifyParameters setRefreshInterval(int value) {
  41 + this.set(PARAM_AUTO_REFRESH_NOTIFICATION_DELAY, value);
  42 + return this;
  43 + }
  44 +}
... ...
  1 +/*
  2 + * Copyright (C) 2015 The Telink Bluetooth Light Project
  3 + *
  4 + */
  5 +package com.telink.bluetooth.light;
  6 +
  7 +/**
  8 + * 扫描参数类
  9 + * <p>{@link LeScanParameters}定义了{@link LightService#startScan(Parameters)}方法的必须要设置的几项参数.
  10 + *
  11 + * @see LightService#startScan(Parameters)
  12 + */
  13 +public final class LeScanParameters extends Parameters {
  14 +
  15 + /**
  16 + * 创建LeScanParameters实例
  17 + *
  18 + * @return
  19 + */
  20 + public static LeScanParameters create() {
  21 + return new LeScanParameters();
  22 + }
  23 +
  24 + /**
  25 + * 网络名
  26 + *
  27 + * @param value
  28 + * @return
  29 + */
  30 + public LeScanParameters setMeshName(String value) {
  31 + this.set(Parameters.PARAM_MESH_NAME, value);
  32 + return this;
  33 + }
  34 +
  35 + /**
  36 + * 超时时间(单位秒),在这个时间段内如果没有发现任何设备将停止扫描.
  37 + *
  38 + * @param value
  39 + * @return
  40 + */
  41 + public LeScanParameters setTimeoutSeconds(int value) {
  42 + this.set(Parameters.PARAM_SCAN_TIMEOUT_SECONDS, value);
  43 + return this;
  44 + }
  45 +
  46 + /**
  47 + * 踢出网络后的名称,默认值为out_of_mesh
  48 + *
  49 + * @param value
  50 + * @return
  51 + */
  52 + public LeScanParameters setOutOfMeshName(String value) {
  53 + this.set(PARAM_OUT_OF_MESH, value);
  54 + return this;
  55 + }
  56 +
  57 + /**
  58 + * 扫描模式,true时扫描到一个设备就会立即停止扫描.
  59 + *
  60 + * @param singleScan
  61 + * @return
  62 + */
  63 + public LeScanParameters setScanMode(boolean singleScan) {
  64 + this.set(Parameters.PARAM_SCAN_TYPE_SINGLE, singleScan);
  65 + return this;
  66 + }
  67 +}
... ...
Please register or login to post a comment