OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.device.bluetooth; | 5 package org.chromium.device.bluetooth; |
6 | 6 |
7 import android.annotation.TargetApi; | 7 import android.annotation.TargetApi; |
8 import android.bluetooth.BluetoothGattCharacteristic; | 8 import android.bluetooth.BluetoothGattCharacteristic; |
9 import android.bluetooth.BluetoothGattDescriptor; | 9 import android.bluetooth.BluetoothGattDescriptor; |
10 import android.os.Build; | 10 import android.os.Build; |
(...skipping 14 matching lines...) Expand all Loading... |
25 */ | 25 */ |
26 @JNINamespace("device") | 26 @JNINamespace("device") |
27 @TargetApi(Build.VERSION_CODES.LOLLIPOP) | 27 @TargetApi(Build.VERSION_CODES.LOLLIPOP) |
28 final class ChromeBluetoothRemoteGattCharacteristic { | 28 final class ChromeBluetoothRemoteGattCharacteristic { |
29 private static final String TAG = "Bluetooth"; | 29 private static final String TAG = "Bluetooth"; |
30 | 30 |
31 private long mNativeBluetoothRemoteGattCharacteristicAndroid; | 31 private long mNativeBluetoothRemoteGattCharacteristicAndroid; |
32 final Wrappers.BluetoothGattCharacteristicWrapper mCharacteristic; | 32 final Wrappers.BluetoothGattCharacteristicWrapper mCharacteristic; |
33 final String mInstanceId; | 33 final String mInstanceId; |
34 final ChromeBluetoothDevice mChromeDevice; | 34 final ChromeBluetoothDevice mChromeDevice; |
| 35 private boolean mPendingOnStartNotifySession = false; |
35 | 36 |
36 private ChromeBluetoothRemoteGattCharacteristic( | 37 private ChromeBluetoothRemoteGattCharacteristic( |
37 long nativeBluetoothRemoteGattCharacteristicAndroid, | 38 long nativeBluetoothRemoteGattCharacteristicAndroid, |
38 Wrappers.BluetoothGattCharacteristicWrapper characteristicWrapper, S
tring instanceId, | 39 Wrappers.BluetoothGattCharacteristicWrapper characteristicWrapper, S
tring instanceId, |
39 ChromeBluetoothDevice chromeDevice) { | 40 ChromeBluetoothDevice chromeDevice) { |
40 mNativeBluetoothRemoteGattCharacteristicAndroid = | 41 mNativeBluetoothRemoteGattCharacteristicAndroid = |
41 nativeBluetoothRemoteGattCharacteristicAndroid; | 42 nativeBluetoothRemoteGattCharacteristicAndroid; |
42 mCharacteristic = characteristicWrapper; | 43 mCharacteristic = characteristicWrapper; |
43 mInstanceId = instanceId; | 44 mInstanceId = instanceId; |
44 mChromeDevice = chromeDevice; | 45 mChromeDevice = chromeDevice; |
(...skipping 17 matching lines...) Expand all Loading... |
62 } | 63 } |
63 | 64 |
64 void onCharacteristicChanged() { | 65 void onCharacteristicChanged() { |
65 Log.i(TAG, "onCharacteristicChanged"); | 66 Log.i(TAG, "onCharacteristicChanged"); |
66 if (mNativeBluetoothRemoteGattCharacteristicAndroid != 0) { | 67 if (mNativeBluetoothRemoteGattCharacteristicAndroid != 0) { |
67 nativeOnChanged( | 68 nativeOnChanged( |
68 mNativeBluetoothRemoteGattCharacteristicAndroid, mCharacteri
stic.getValue()); | 69 mNativeBluetoothRemoteGattCharacteristicAndroid, mCharacteri
stic.getValue()); |
69 } | 70 } |
70 } | 71 } |
71 | 72 |
| 73 boolean onStartNotifySession(int status) { |
| 74 if (!mPendingOnStartNotifySession) { |
| 75 return false; |
| 76 } |
| 77 |
| 78 mPendingOnStartNotifySession = false; |
| 79 |
| 80 Log.i(TAG, "onStartNotifySession status:%d==%s", status, |
| 81 status == android.bluetooth.BluetoothGatt.GATT_SUCCESS ? "OK" :
"Error"); |
| 82 if (mNativeBluetoothRemoteGattCharacteristicAndroid != 0) { |
| 83 nativeOnStartNotifySession(mNativeBluetoothRemoteGattCharacteristicA
ndroid, status); |
| 84 } |
| 85 |
| 86 return true; |
| 87 } |
| 88 |
72 void onCharacteristicRead(int status) { | 89 void onCharacteristicRead(int status) { |
73 Log.i(TAG, "onCharacteristicRead status:%d==%s", status, | 90 Log.i(TAG, "onCharacteristicRead status:%d==%s", status, |
74 status == android.bluetooth.BluetoothGatt.GATT_SUCCESS ? "OK" :
"Error"); | 91 status == android.bluetooth.BluetoothGatt.GATT_SUCCESS ? "OK" :
"Error"); |
75 if (mNativeBluetoothRemoteGattCharacteristicAndroid != 0) { | 92 if (mNativeBluetoothRemoteGattCharacteristicAndroid != 0) { |
76 nativeOnRead(mNativeBluetoothRemoteGattCharacteristicAndroid, status
, | 93 nativeOnRead(mNativeBluetoothRemoteGattCharacteristicAndroid, status
, |
77 mCharacteristic.getValue()); | 94 mCharacteristic.getValue()); |
78 } | 95 } |
79 } | 96 } |
80 | 97 |
81 void onCharacteristicWrite(int status) { | 98 void onCharacteristicWrite(int status) { |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 return false; | 167 return false; |
151 } | 168 } |
152 Log.v(TAG, hasNotify ? "startNotifySession NOTIFY." : "startNotifySessio
n INDICATE."); | 169 Log.v(TAG, hasNotify ? "startNotifySession NOTIFY." : "startNotifySessio
n INDICATE."); |
153 | 170 |
154 if (!mChromeDevice.mBluetoothGatt.writeDescriptor( | 171 if (!mChromeDevice.mBluetoothGatt.writeDescriptor( |
155 clientCharacteristicConfigurationDescriptor)) { | 172 clientCharacteristicConfigurationDescriptor)) { |
156 Log.i(TAG, "startNotifySession writeDescriptor failed!"); | 173 Log.i(TAG, "startNotifySession writeDescriptor failed!"); |
157 return false; | 174 return false; |
158 } | 175 } |
159 | 176 |
| 177 mPendingOnStartNotifySession = true; |
| 178 |
160 return true; | 179 return true; |
161 } | 180 } |
162 | 181 |
163 // Implements BluetoothRemoteGattCharacteristicAndroid::ReadRemoteCharacteri
stic. | 182 // Implements BluetoothRemoteGattCharacteristicAndroid::ReadRemoteCharacteri
stic. |
164 @CalledByNative | 183 @CalledByNative |
165 private boolean readRemoteCharacteristic() { | 184 private boolean readRemoteCharacteristic() { |
166 if (!mChromeDevice.mBluetoothGatt.readCharacteristic(mCharacteristic)) { | 185 if (!mChromeDevice.mBluetoothGatt.readCharacteristic(mCharacteristic)) { |
167 Log.i(TAG, "readRemoteCharacteristic readCharacteristic failed."); | 186 Log.i(TAG, "readRemoteCharacteristic readCharacteristic failed."); |
168 return false; | 187 return false; |
169 } | 188 } |
(...skipping 28 matching lines...) Expand all Loading... |
198 descriptorInstanceId, descriptor, mChromeDevice); | 217 descriptorInstanceId, descriptor, mChromeDevice); |
199 } | 218 } |
200 } | 219 } |
201 | 220 |
202 // -------------------------------------------------------------------------
-------------------- | 221 // -------------------------------------------------------------------------
-------------------- |
203 // BluetoothAdapterDevice C++ methods declared for access from java: | 222 // BluetoothAdapterDevice C++ methods declared for access from java: |
204 | 223 |
205 // Binds to BluetoothRemoteGattCharacteristicAndroid::OnChanged. | 224 // Binds to BluetoothRemoteGattCharacteristicAndroid::OnChanged. |
206 native void nativeOnChanged(long nativeBluetoothRemoteGattCharacteristicAndr
oid, byte[] value); | 225 native void nativeOnChanged(long nativeBluetoothRemoteGattCharacteristicAndr
oid, byte[] value); |
207 | 226 |
| 227 // Binds to BluetoothRemoteGattCharacteristicAndroid::OnStartNotifySession. |
| 228 native void nativeOnStartNotifySession( |
| 229 long nativeBluetoothRemoteGattCharacteristicAndroid, int status); |
| 230 |
208 // Binds to BluetoothRemoteGattCharacteristicAndroid::OnRead. | 231 // Binds to BluetoothRemoteGattCharacteristicAndroid::OnRead. |
209 native void nativeOnRead( | 232 native void nativeOnRead( |
210 long nativeBluetoothRemoteGattCharacteristicAndroid, int status, byt
e[] value); | 233 long nativeBluetoothRemoteGattCharacteristicAndroid, int status, byt
e[] value); |
211 | 234 |
212 // Binds to BluetoothRemoteGattCharacteristicAndroid::OnWrite. | 235 // Binds to BluetoothRemoteGattCharacteristicAndroid::OnWrite. |
213 native void nativeOnWrite(long nativeBluetoothRemoteGattCharacteristicAndroi
d, int status); | 236 native void nativeOnWrite(long nativeBluetoothRemoteGattCharacteristicAndroi
d, int status); |
214 | 237 |
215 // Binds to BluetoothRemoteGattCharacteristicAndroid::CreateGattRemoteDescri
ptor. | 238 // Binds to BluetoothRemoteGattCharacteristicAndroid::CreateGattRemoteDescri
ptor. |
216 // TODO(http://crbug.com/505554): Replace 'Object' with specific type when J
NI fixed. | 239 // TODO(http://crbug.com/505554): Replace 'Object' with specific type when J
NI fixed. |
217 private native void nativeCreateGattRemoteDescriptor( | 240 private native void nativeCreateGattRemoteDescriptor( |
218 long nativeBluetoothRemoteGattCharacteristicAndroid, String instance
Id, | 241 long nativeBluetoothRemoteGattCharacteristicAndroid, String instance
Id, |
219 Object bluetoothGattDescriptorWrapper, Object chromeBluetoothDevice)
; | 242 Object bluetoothGattDescriptorWrapper, Object chromeBluetoothDevice)
; |
220 } | 243 } |
OLD | NEW |