OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 org.chromium.base.Log; | 7 import org.chromium.base.Log; |
8 import org.chromium.base.annotations.CalledByNative; | 8 import org.chromium.base.annotations.CalledByNative; |
9 import org.chromium.base.annotations.JNINamespace; | 9 import org.chromium.base.annotations.JNINamespace; |
10 | 10 |
11 /** | 11 /** |
12 * Exposes android.bluetooth.BluetoothGattDescriptor as necessary | 12 * Exposes android.bluetooth.BluetoothGattDescriptor as necessary |
13 * for C++ device::BluetoothRemoteGattDescriptorAndroid. | 13 * for C++ device::BluetoothRemoteGattDescriptorAndroid. |
14 * | 14 * |
15 * Lifetime is controlled by device::BluetoothRemoteGattDescriptorAndroid. | 15 * Lifetime is controlled by device::BluetoothRemoteGattDescriptorAndroid. |
16 */ | 16 */ |
17 @JNINamespace("device") | 17 @JNINamespace("device") |
18 final class ChromeBluetoothRemoteGattDescriptor { | 18 final class ChromeBluetoothRemoteGattDescriptor { |
19 private static final String TAG = "Bluetooth"; | 19 private static final String TAG = "Bluetooth"; |
20 | 20 |
21 // TODO(scheib): Will need c++ pointer eventually: | 21 private long mNativeBluetoothRemoteGattDescriptorAndroid; |
22 // private long mNativeBluetoothRemoteGattDescriptorAndroid; | |
23 final Wrappers.BluetoothGattDescriptorWrapper mDescriptor; | 22 final Wrappers.BluetoothGattDescriptorWrapper mDescriptor; |
24 final ChromeBluetoothDevice mChromeDevice; | 23 final ChromeBluetoothDevice mChromeDevice; |
25 | 24 |
26 private ChromeBluetoothRemoteGattDescriptor( | 25 private ChromeBluetoothRemoteGattDescriptor(long nativeBluetoothRemoteGattDe
scriptorAndroid, |
27 // TODO(scheib): Will need c++ pointer eventually: | |
28 // long nativeBluetoothRemoteGattDescriptorAndroid, | |
29 Wrappers.BluetoothGattDescriptorWrapper descriptorWrapper, | 26 Wrappers.BluetoothGattDescriptorWrapper descriptorWrapper, |
30 ChromeBluetoothDevice chromeDevice) { | 27 ChromeBluetoothDevice chromeDevice) { |
31 // TODO(scheib): Will need c++ pointer eventually: | 28 mNativeBluetoothRemoteGattDescriptorAndroid = nativeBluetoothRemoteGattD
escriptorAndroid; |
32 // mNativeBluetoothRemoteGattDescriptorAndroid = | |
33 // nativeBluetoothRemoteGattDescriptorAndroid; | |
34 mDescriptor = descriptorWrapper; | 29 mDescriptor = descriptorWrapper; |
35 mChromeDevice = chromeDevice; | 30 mChromeDevice = chromeDevice; |
36 | 31 |
37 mChromeDevice.mWrapperToChromeDescriptorsMap.put(descriptorWrapper, this
); | 32 mChromeDevice.mWrapperToChromeDescriptorsMap.put(descriptorWrapper, this
); |
38 | 33 |
39 Log.v(TAG, "ChromeBluetoothRemoteGattDescriptor created."); | 34 Log.v(TAG, "ChromeBluetoothRemoteGattDescriptor created."); |
40 } | 35 } |
41 | 36 |
42 /** | 37 /** |
43 * Handles C++ object being destroyed. | 38 * Handles C++ object being destroyed. |
44 */ | 39 */ |
45 @CalledByNative | 40 @CalledByNative |
46 private void onBluetoothRemoteGattDescriptorAndroidDestruction() { | 41 private void onBluetoothRemoteGattDescriptorAndroidDestruction() { |
47 Log.v(TAG, "ChromeBluetoothRemoteGattDescriptor Destroyed."); | 42 Log.v(TAG, "ChromeBluetoothRemoteGattDescriptor Destroyed."); |
48 // TODO(scheib): Will need c++ pointer eventually: | 43 mNativeBluetoothRemoteGattDescriptorAndroid = 0; |
49 // mNativeBluetoothRemoteGattDescriptorAndroid = 0; | |
50 mChromeDevice.mWrapperToChromeDescriptorsMap.remove(mDescriptor); | 44 mChromeDevice.mWrapperToChromeDescriptorsMap.remove(mDescriptor); |
51 } | 45 } |
52 | 46 |
| 47 void onDescriptorRead(int status) { |
| 48 Log.i(TAG, "onDescriptorRead status:%d==%s", status, |
| 49 status == android.bluetooth.BluetoothGatt.GATT_SUCCESS ? "OK" :
"Error"); |
| 50 if (mNativeBluetoothRemoteGattDescriptorAndroid != 0) { |
| 51 nativeOnRead( |
| 52 mNativeBluetoothRemoteGattDescriptorAndroid, status, mDescri
ptor.getValue()); |
| 53 } |
| 54 } |
| 55 |
| 56 void onDescriptorWrite(int status) { |
| 57 Log.i(TAG, "onDescriptorWrite status:%d==%s", status, |
| 58 status == android.bluetooth.BluetoothGatt.GATT_SUCCESS ? "OK" :
"Error"); |
| 59 if (mNativeBluetoothRemoteGattDescriptorAndroid != 0) { |
| 60 nativeOnWrite(mNativeBluetoothRemoteGattDescriptorAndroid, status); |
| 61 } |
| 62 } |
| 63 |
53 // -------------------------------------------------------------------------
-------------------- | 64 // -------------------------------------------------------------------------
-------------------- |
54 // BluetoothRemoteGattDescriptorAndroid methods implemented in java: | 65 // BluetoothRemoteGattDescriptorAndroid methods implemented in java: |
55 | 66 |
56 // Implements BluetoothRemoteGattDescriptorAndroid::Create. | 67 // Implements BluetoothRemoteGattDescriptorAndroid::Create. |
57 // TODO(http://crbug.com/505554): Replace 'Object' with specific type when J
NI fixed. | 68 // TODO(http://crbug.com/505554): Replace 'Object' with specific type when J
NI fixed. |
58 @CalledByNative | 69 @CalledByNative |
59 private static ChromeBluetoothRemoteGattDescriptor create( | 70 private static ChromeBluetoothRemoteGattDescriptor create( |
60 // TODO(scheib): Will need c++ pointer eventually: | 71 long nativeBluetoothRemoteGattDescriptorAndroid, Object bluetoothGat
tDescriptorWrapper, |
61 // long nativeBluetoothRemoteGattDescriptorAndroid, | 72 ChromeBluetoothDevice chromeDevice) { |
62 Object bluetoothGattDescriptorWrapper, ChromeBluetoothDevice chromeD
evice) { | 73 return new ChromeBluetoothRemoteGattDescriptor(nativeBluetoothRemoteGatt
DescriptorAndroid, |
63 return new ChromeBluetoothRemoteGattDescriptor( | |
64 // TODO(scheib): Will need c++ pointer eventually: | |
65 // nativeBluetoothRemoteGattDescriptorAndroid, | |
66 (Wrappers.BluetoothGattDescriptorWrapper) bluetoothGattDescripto
rWrapper, | 74 (Wrappers.BluetoothGattDescriptorWrapper) bluetoothGattDescripto
rWrapper, |
67 chromeDevice); | 75 chromeDevice); |
68 } | 76 } |
69 | 77 |
70 // Implements BluetoothRemoteGattDescriptorAndroid::GetUUID. | 78 // Implements BluetoothRemoteGattDescriptorAndroid::GetUUID. |
71 @CalledByNative | 79 @CalledByNative |
72 private String getUUID() { | 80 private String getUUID() { |
73 return mDescriptor.getUuid().toString(); | 81 return mDescriptor.getUuid().toString(); |
74 } | 82 } |
| 83 |
| 84 // Implements BluetoothRemoteGattDescriptorAndroid::ReadRemoteDescriptor. |
| 85 @CalledByNative |
| 86 private boolean readRemoteDescriptor() { |
| 87 if (!mChromeDevice.mBluetoothGatt.readDescriptor(mDescriptor)) { |
| 88 Log.i(TAG, "readRemoteDescriptor readDescriptor failed."); |
| 89 return false; |
| 90 } |
| 91 return true; |
| 92 } |
| 93 |
| 94 // Implements BluetoothRemoteGattDescriptorAndroid::WriteRemoteDescriptor. |
| 95 @CalledByNative |
| 96 private boolean writeRemoteDescriptor(byte[] value) { |
| 97 if (!mDescriptor.setValue(value)) { |
| 98 Log.i(TAG, "writeRemoteDescriptor setValue failed."); |
| 99 return false; |
| 100 } |
| 101 if (!mChromeDevice.mBluetoothGatt.writeDescriptor(mDescriptor)) { |
| 102 Log.i(TAG, "writeRemoteDescriptor writeDescriptor failed."); |
| 103 return false; |
| 104 } |
| 105 return true; |
| 106 } |
| 107 |
| 108 // -------------------------------------------------------------------------
-------------------- |
| 109 // BluetoothAdapterDevice C++ methods declared for access from java: |
| 110 |
| 111 // Binds to BluetoothRemoteGattDescriptorAndroid::OnRead. |
| 112 native void nativeOnRead( |
| 113 long nativeBluetoothRemoteGattDescriptorAndroid, int status, byte[]
value); |
| 114 |
| 115 // Binds to BluetoothRemoteGattDescriptorAndroid::OnWrite. |
| 116 native void nativeOnWrite(long nativeBluetoothRemoteGattDescriptorAndroid, i
nt status); |
75 } | 117 } |
OLD | NEW |