Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(195)

Side by Side Diff: device/bluetooth/bluetooth_remote_gatt_characteristic_android.cc

Issue 1765773002: bluetooth: Refactor GetDescriptorForUUID to GetDescriptorsForUUID. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bta-notify-tommyt-
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #include "device/bluetooth/bluetooth_remote_gatt_characteristic_android.h" 5 #include "device/bluetooth/bluetooth_remote_gatt_characteristic_android.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_array.h" 8 #include "base/android/jni_array.h"
9 #include "base/android/jni_string.h" 9 #include "base/android/jni_string.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 bool BluetoothRemoteGattCharacteristicAndroid::UpdateValue( 130 bool BluetoothRemoteGattCharacteristicAndroid::UpdateValue(
131 const std::vector<uint8_t>& value) { 131 const std::vector<uint8_t>& value) {
132 NOTIMPLEMENTED(); 132 NOTIMPLEMENTED();
133 return false; 133 return false;
134 } 134 }
135 135
136 void BluetoothRemoteGattCharacteristicAndroid::StartNotifySession( 136 void BluetoothRemoteGattCharacteristicAndroid::StartNotifySession(
137 const NotifySessionCallback& callback, 137 const NotifySessionCallback& callback,
138 const ErrorCallback& error_callback) { 138 const ErrorCallback& error_callback) {
139 if (!pending_start_notify_calls_.empty()) { 139 if (!pending_start_notify_calls_.empty()) {
140 pending_start_notify_calls_.push(std::make_pair(callback, error_callback)); 140 pending_start_notify_calls_.push_back(
141 std::make_pair(callback, error_callback));
141 return; 142 return;
142 } 143 }
143 144
144 Properties properties = GetProperties(); 145 Properties properties = GetProperties();
145 146
146 bool hasNotify = properties & PROPERTY_NOTIFY; 147 bool hasNotify = properties & PROPERTY_NOTIFY;
147 bool hasIndicate = properties & PROPERTY_INDICATE; 148 bool hasIndicate = properties & PROPERTY_INDICATE;
148 149
149 if (!hasNotify && !hasIndicate) { 150 if (!hasNotify && !hasIndicate) {
150 LOG(ERROR) << "Characteristic needs NOTIFY or INDICATE"; 151 LOG(ERROR) << "Characteristic needs NOTIFY or INDICATE";
(...skipping 24 matching lines...) Expand all
175 FROM_HERE, 176 FROM_HERE,
176 base::Bind(error_callback, 177 base::Bind(error_callback,
177 BluetoothRemoteGattServiceAndroid::GATT_ERROR_FAILED)); 178 BluetoothRemoteGattServiceAndroid::GATT_ERROR_FAILED));
178 return; 179 return;
179 } 180 }
180 181
181 std::vector<uint8_t> value; 182 std::vector<uint8_t> value;
182 value.push_back(hasNotify ? 1 : 2); 183 value.push_back(hasNotify ? 1 : 2);
183 value.push_back(0); 184 value.push_back(0);
184 185
185 pending_start_notify_calls_.push(std::make_pair(callback, error_callback)); 186 pending_start_notify_calls_.push_back(
187 std::make_pair(callback, error_callback));
186 descriptor->WriteRemoteDescriptor( 188 descriptor->WriteRemoteDescriptor(
187 value, base::Bind(&BluetoothRemoteGattCharacteristicAndroid:: 189 value, base::Bind(&BluetoothRemoteGattCharacteristicAndroid::
188 OnStartNotifySessionSuccess, 190 OnStartNotifySessionSuccess,
189 base::Unretained(this)), 191 base::Unretained(this)),
190 base::Bind( 192 base::Bind(
191 &BluetoothRemoteGattCharacteristicAndroid::OnStartNotifySessionError, 193 &BluetoothRemoteGattCharacteristicAndroid::OnStartNotifySessionError,
192 base::Unretained(this))); 194 base::Unretained(this)));
193 } 195 }
194 196
195 void BluetoothRemoteGattCharacteristicAndroid::ReadRemoteCharacteristic( 197 void BluetoothRemoteGattCharacteristicAndroid::ReadRemoteCharacteristic(
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 247
246 void BluetoothRemoteGattCharacteristicAndroid::OnChanged( 248 void BluetoothRemoteGattCharacteristicAndroid::OnChanged(
247 JNIEnv* env, 249 JNIEnv* env,
248 const JavaParamRef<jobject>& jcaller, 250 const JavaParamRef<jobject>& jcaller,
249 const JavaParamRef<jbyteArray>& value) { 251 const JavaParamRef<jbyteArray>& value) {
250 base::android::JavaByteArrayToByteVector(env, value, &value_); 252 base::android::JavaByteArrayToByteVector(env, value, &value_);
251 adapter_->NotifyGattCharacteristicValueChanged(this, value_); 253 adapter_->NotifyGattCharacteristicValueChanged(this, value_);
252 } 254 }
253 255
254 void BluetoothRemoteGattCharacteristicAndroid::OnStartNotifySessionSuccess() { 256 void BluetoothRemoteGattCharacteristicAndroid::OnStartNotifySessionSuccess() {
255 while (!pending_start_notify_calls_.empty()) { 257 std::vector<PendingStartNotifyCall> reentrant_safe_callbacks;
256 PendingStartNotifyCall callbacks = pending_start_notify_calls_.front(); 258 reentrant_safe_callbacks.swap(pending_start_notify_calls_);
257 pending_start_notify_calls_.pop(); 259
260 for (const auto& callback_pair : reentrant_safe_callbacks) {
258 scoped_ptr<device::BluetoothGattNotifySession> notify_session( 261 scoped_ptr<device::BluetoothGattNotifySession> notify_session(
259 new BluetoothGattNotifySessionAndroid(instance_id_)); 262 new BluetoothGattNotifySessionAndroid(instance_id_));
260 callbacks.first.Run(std::move(notify_session)); 263 callback_pair.first.Run(std::move(notify_session));
261 } 264 }
262 } 265 }
263 266
264 void BluetoothRemoteGattCharacteristicAndroid::OnStartNotifySessionError( 267 void BluetoothRemoteGattCharacteristicAndroid::OnStartNotifySessionError(
265 BluetoothGattService::GattErrorCode error) { 268 BluetoothGattService::GattErrorCode error) {
266 while (!pending_start_notify_calls_.empty()) { 269 std::vector<PendingStartNotifyCall> reentrant_safe_callbacks;
267 PendingStartNotifyCall callbacks = pending_start_notify_calls_.front(); 270 reentrant_safe_callbacks.swap(pending_start_notify_calls_);
268 pending_start_notify_calls_.pop(); 271
269 callbacks.second.Run(error); 272 for (auto const& callback_pair : reentrant_safe_callbacks) {
273 callback_pair.second.Run(error);
270 } 274 }
271 } 275 }
272 276
273 void BluetoothRemoteGattCharacteristicAndroid::OnRead( 277 void BluetoothRemoteGattCharacteristicAndroid::OnRead(
274 JNIEnv* env, 278 JNIEnv* env,
275 const JavaParamRef<jobject>& jcaller, 279 const JavaParamRef<jobject>& jcaller,
276 int32_t status, 280 int32_t status,
277 const JavaParamRef<jbyteArray>& value) { 281 const JavaParamRef<jbyteArray>& value) {
278 read_pending_ = false; 282 read_pending_ = false;
279 283
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 void BluetoothRemoteGattCharacteristicAndroid::EnsureDescriptorsCreated() 349 void BluetoothRemoteGattCharacteristicAndroid::EnsureDescriptorsCreated()
346 const { 350 const {
347 if (!descriptors_.empty()) 351 if (!descriptors_.empty())
348 return; 352 return;
349 353
350 Java_ChromeBluetoothRemoteGattCharacteristic_createDescriptors( 354 Java_ChromeBluetoothRemoteGattCharacteristic_createDescriptors(
351 AttachCurrentThread(), j_characteristic_.obj()); 355 AttachCurrentThread(), j_characteristic_.obj());
352 } 356 }
353 357
354 } // namespace device 358 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698