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.
BluetoothLightLib/.gitignore
0 → 100644
| 1 | +/build | ... | ... |
BluetoothLightLib/build.gradle
0 → 100644
| 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
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
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: | ... | ... |
BluetoothLightLib/obj/local/armeabi-v7a/buglySymbol_libTelinkCrypto_armeabi-v7a-dbc6f.zip
0 → 100644
No preview for this file type
No preview for this file type
No preview for this file type
| 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: | ... | ... |
No preview for this file type
No preview for this file type
No preview for this file type
| 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: | ... | ... |
No preview for this file type
No preview for this file type
No preview for this file type
| 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: | ... | ... |
No preview for this file type
No preview for this file type
No preview for this file type
| 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: | ... | ... |
No preview for this file type
No preview for this file type
No preview for this file type
| 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: | ... | ... |
No preview for this file type
No preview for this file type
No preview for this file type
| 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: | ... | ... |
BluetoothLightLib/proguard-rules.pro
0 → 100644
| 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 | +} | ... | ... |
BluetoothLightLib/src/main/java/com/telink/bluetooth/light/DefaultAdvertiseDataFilter.java
0 → 100644
| 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 | +} | ... | ... |
BluetoothLightLib/src/main/java/com/telink/bluetooth/light/GetAlarmNotificationParser.java
0 → 100644
| 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 | +} | ... | ... |
BluetoothLightLib/src/main/java/com/telink/bluetooth/light/GetGroupNotificationParser.java
0 → 100644
| 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 | +} | ... | ... |
BluetoothLightLib/src/main/java/com/telink/bluetooth/light/GetSceneNotificationParser.java
0 → 100644
| 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 | +} | ... | ... |
BluetoothLightLib/src/main/java/com/telink/bluetooth/light/GetTimeNotificationParser.java
0 → 100644
| 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 | +} | ... | ... |
BluetoothLightLib/src/main/java/com/telink/bluetooth/light/LeRefreshNotifyParameters.java
0 → 100644
| 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