diff options
Diffstat (limited to 'device/bluetooth/test/bluetooth_test_android.cc')
-rw-r--r-- | device/bluetooth/test/bluetooth_test_android.cc | 87 |
1 files changed, 83 insertions, 4 deletions
diff --git a/device/bluetooth/test/bluetooth_test_android.cc b/device/bluetooth/test/bluetooth_test_android.cc index 522cd61..b1cd357 100644 --- a/device/bluetooth/test/bluetooth_test_android.cc +++ b/device/bluetooth/test/bluetooth_test_android.cc @@ -176,10 +176,14 @@ void BluetoothTestAndroid::RememberCharacteristicForSubsequentAction( void BluetoothTestAndroid::SimulateGattNotifySessionStarted( BluetoothGattCharacteristic* characteristic) { - // Android doesn't provide any sort of callback for when notifications have - // been enabled. So, just run the message loop to process the success - // callback. - base::RunLoop().RunUntilIdle(); + BluetoothGattDescriptor* descriptor = characteristic->GetDescriptorForUUID( + BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid()); + BluetoothRemoteGattDescriptorAndroid* descriptor_android = + static_cast<BluetoothRemoteGattDescriptorAndroid*>(descriptor); + Java_FakeBluetoothGattDescriptor_valueWrite( + base::android::AttachCurrentThread(), + descriptor_android ? descriptor_android->GetJavaObject().obj() : nullptr, + 0); // android.bluetooth.BluetoothGatt.GATT_SUCCESS } void BluetoothTestAndroid:: @@ -291,6 +295,75 @@ void BluetoothTestAndroid::SimulateGattDescriptor( base::android::ConvertUTF8ToJavaString(env, uuid).obj()); } +void BluetoothTestAndroid::RememberDescriptorForSubsequentAction( + BluetoothGattDescriptor* descriptor) { + BluetoothRemoteGattDescriptorAndroid* descriptor_android = + static_cast<BluetoothRemoteGattDescriptorAndroid*>(descriptor); + + Java_FakeBluetoothGattDescriptor_rememberDescriptorForSubsequentAction( + base::android::AttachCurrentThread(), + descriptor_android->GetJavaObject().obj()); +} + +void BluetoothTestAndroid::SimulateGattDescriptorRead( + BluetoothGattDescriptor* descriptor, + const std::vector<uint8_t>& value) { + BluetoothRemoteGattDescriptorAndroid* descriptor_android = + static_cast<BluetoothRemoteGattDescriptorAndroid*>(descriptor); + JNIEnv* env = base::android::AttachCurrentThread(); + + Java_FakeBluetoothGattDescriptor_valueRead( + env, + descriptor_android ? descriptor_android->GetJavaObject().obj() : nullptr, + 0, // android.bluetooth.BluetoothGatt.GATT_SUCCESS + base::android::ToJavaByteArray(env, value).obj()); +} + +void BluetoothTestAndroid::SimulateGattDescriptorReadError( + BluetoothGattDescriptor* descriptor, + BluetoothGattService::GattErrorCode error_code) { + BluetoothRemoteGattDescriptorAndroid* descriptor_android = + static_cast<BluetoothRemoteGattDescriptorAndroid*>(descriptor); + JNIEnv* env = base::android::AttachCurrentThread(); + std::vector<uint8_t> empty_value; + + Java_FakeBluetoothGattDescriptor_valueRead( + env, descriptor_android->GetJavaObject().obj(), + BluetoothRemoteGattServiceAndroid::GetAndroidErrorCode(error_code), + base::android::ToJavaByteArray(env, empty_value).obj()); +} + +void BluetoothTestAndroid::SimulateGattDescriptorReadWillFailSynchronouslyOnce( + BluetoothGattDescriptor* descriptor) { + BluetoothRemoteGattDescriptorAndroid* descriptor_android = + static_cast<BluetoothRemoteGattDescriptorAndroid*>(descriptor); + JNIEnv* env = base::android::AttachCurrentThread(); + + Java_FakeBluetoothGattDescriptor_setReadDescriptorWillFailSynchronouslyOnce( + env, descriptor_android->GetJavaObject().obj()); +} + +void BluetoothTestAndroid::SimulateGattDescriptorWrite( + BluetoothGattDescriptor* descriptor) { + BluetoothRemoteGattDescriptorAndroid* descriptor_android = + static_cast<BluetoothRemoteGattDescriptorAndroid*>(descriptor); + Java_FakeBluetoothGattDescriptor_valueWrite( + base::android::AttachCurrentThread(), + descriptor_android ? descriptor_android->GetJavaObject().obj() : nullptr, + 0); // android.bluetooth.BluetoothGatt.GATT_SUCCESS +} + +void BluetoothTestAndroid::SimulateGattDescriptorWriteError( + BluetoothGattDescriptor* descriptor, + BluetoothGattService::GattErrorCode error_code) { + BluetoothRemoteGattDescriptorAndroid* descriptor_android = + static_cast<BluetoothRemoteGattDescriptorAndroid*>(descriptor); + Java_FakeBluetoothGattDescriptor_valueWrite( + base::android::AttachCurrentThread(), + descriptor_android->GetJavaObject().obj(), + BluetoothRemoteGattServiceAndroid::GetAndroidErrorCode(error_code)); +} + void BluetoothTestAndroid::SimulateGattDescriptorWriteWillFailSynchronouslyOnce( BluetoothGattDescriptor* descriptor) { BluetoothRemoteGattDescriptorAndroid* descriptor_android = @@ -348,6 +421,12 @@ void BluetoothTestAndroid::OnFakeBluetoothGattWriteCharacteristic( base::android::JavaByteArrayToByteVector(env, value, &last_write_value_); } +void BluetoothTestAndroid::OnFakeBluetoothGattReadDescriptor( + JNIEnv* env, + const JavaParamRef<jobject>& caller) { + gatt_read_descriptor_attempts_++; +} + void BluetoothTestAndroid::OnFakeBluetoothGattWriteDescriptor( JNIEnv* env, const JavaParamRef<jobject>& caller, |