summaryrefslogtreecommitdiffstats
path: root/device/bluetooth/test/bluetooth_test_win.cc
diff options
context:
space:
mode:
Diffstat (limited to 'device/bluetooth/test/bluetooth_test_win.cc')
-rw-r--r--device/bluetooth/test/bluetooth_test_win.cc113
1 files changed, 78 insertions, 35 deletions
diff --git a/device/bluetooth/test/bluetooth_test_win.cc b/device/bluetooth/test/bluetooth_test_win.cc
index b9cbe48..68af547 100644
--- a/device/bluetooth/test/bluetooth_test_win.cc
+++ b/device/bluetooth/test/bluetooth_test_win.cc
@@ -5,6 +5,7 @@
#include "device/bluetooth/test/bluetooth_test_win.h"
#include "base/bind.h"
+#include "base/run_loop.h"
#include "base/strings/sys_string_conversions.h"
#include "device/bluetooth/bluetooth_adapter_win.h"
#include "device/bluetooth/bluetooth_low_energy_win.h"
@@ -107,9 +108,8 @@ void BluetoothTestWin::InitWithFakeAdapter() {
adapter_ = new BluetoothAdapterWin(base::Bind(
&BluetoothTestWin::AdapterInitCallback, base::Unretained(this)));
adapter_win_ = static_cast<BluetoothAdapterWin*>(adapter_.get());
- adapter_win_->InitForTest(ui_task_runner_, bluetooth_task_runner_);
- bluetooth_task_runner_->RunPendingTasks();
- ui_task_runner_->RunPendingTasks();
+ adapter_win_->InitForTest(nullptr, bluetooth_task_runner_);
+ FinishPendingTasks();
}
bool BluetoothTestWin::DenyPermission() {
@@ -118,8 +118,7 @@ bool BluetoothTestWin::DenyPermission() {
void BluetoothTestWin::StartLowEnergyDiscoverySession() {
__super ::StartLowEnergyDiscoverySession();
- bluetooth_task_runner_->RunPendingTasks();
- ui_task_runner_->RunPendingTasks();
+ FinishPendingTasks();
}
BluetoothDevice* BluetoothTestWin::DiscoverLowEnergyDevice(int device_ordinal) {
@@ -153,18 +152,17 @@ BluetoothDevice* BluetoothTestWin::DiscoverLowEnergyDevice(int device_ordinal) {
device_name, CanonicalStringToBLUETOOTH_ADDRESS(device_address));
if (simulated_device != nullptr) {
if (!service_uuid_1.empty()) {
- fake_bt_le_wrapper_->SimulateBLEGattService(
+ fake_bt_le_wrapper_->SimulateGattService(
simulated_device, nullptr,
CanonicalStringToBTH_LE_UUID(service_uuid_1));
}
if (!service_uuid_2.empty()) {
- fake_bt_le_wrapper_->SimulateBLEGattService(
+ fake_bt_le_wrapper_->SimulateGattService(
simulated_device, nullptr,
CanonicalStringToBTH_LE_UUID(service_uuid_2));
}
}
- bluetooth_task_runner_->RunPendingTasks();
- ui_task_runner_->RunPendingTasks();
+ FinishPendingTasks();
std::vector<BluetoothDevice*> devices = adapter_win_->GetDevices();
for (auto device : devices) {
@@ -176,8 +174,7 @@ BluetoothDevice* BluetoothTestWin::DiscoverLowEnergyDevice(int device_ordinal) {
}
void BluetoothTestWin::SimulateGattConnection(BluetoothDevice* device) {
- bluetooth_task_runner_->RunPendingTasks();
- ui_task_runner_->RunPendingTasks();
+ FinishPendingTasks();
// Clear records caused by CreateGattConnection since we do not support it on
// Windows.
@@ -194,12 +191,11 @@ void BluetoothTestWin::SimulateGattServicesDiscovered(
CHECK(simulated_device);
for (auto uuid : uuids) {
- fake_bt_le_wrapper_->SimulateBLEGattService(
+ fake_bt_le_wrapper_->SimulateGattService(
simulated_device, nullptr, CanonicalStringToBTH_LE_UUID(uuid));
}
- bluetooth_task_runner_->RunPendingTasks();
- ui_task_runner_->RunPendingTasks();
+ FinishPendingTasks();
}
void BluetoothTestWin::SimulateGattServiceRemoved(
@@ -213,8 +209,8 @@ void BluetoothTestWin::SimulateGattServiceRemoved(
static_cast<BluetoothRemoteGattServiceWin*>(service);
std::string service_att_handle =
std::to_string(win_service->GetAttributeHandle());
- fake_bt_le_wrapper_->SimulateBLEGattServiceRemoved(target_device, nullptr,
- service_att_handle);
+ fake_bt_le_wrapper_->SimulateGattServiceRemoved(target_device, nullptr,
+ service_att_handle);
ForceRefreshDevice();
}
@@ -226,31 +222,42 @@ void BluetoothTestWin::SimulateGattCharacteristic(BluetoothGattService* service,
win::BLEDevice* target_device =
fake_bt_le_wrapper_->GetSimulatedBLEDevice(device_address);
CHECK(target_device);
- win::BLEGattService* target_service =
+ win::GattService* target_service =
GetSimulatedService(target_device, service);
CHECK(target_service);
- BTH_LE_GATT_CHARACTERISTIC win_cha_info;
- win_cha_info.CharacteristicUuid = CanonicalStringToBTH_LE_UUID(uuid);
+ BTH_LE_GATT_CHARACTERISTIC win_characteristic_info;
+ win_characteristic_info.CharacteristicUuid =
+ CanonicalStringToBTH_LE_UUID(uuid);
+ win_characteristic_info.IsBroadcastable = FALSE;
+ win_characteristic_info.IsReadable = FALSE;
+ win_characteristic_info.IsWritableWithoutResponse = FALSE;
+ win_characteristic_info.IsWritable = FALSE;
+ win_characteristic_info.IsNotifiable = FALSE;
+ win_characteristic_info.IsIndicatable = FALSE;
+ win_characteristic_info.IsSignedWritable = FALSE;
+ win_characteristic_info.HasExtendedProperties = FALSE;
if (properties & BluetoothGattCharacteristic::PROPERTY_BROADCAST)
- win_cha_info.IsBroadcastable = TRUE;
+ win_characteristic_info.IsBroadcastable = TRUE;
if (properties & BluetoothGattCharacteristic::PROPERTY_READ)
- win_cha_info.IsReadable = TRUE;
+ win_characteristic_info.IsReadable = TRUE;
if (properties & BluetoothGattCharacteristic::PROPERTY_WRITE_WITHOUT_RESPONSE)
- win_cha_info.IsWritableWithoutResponse = TRUE;
+ win_characteristic_info.IsWritableWithoutResponse = TRUE;
if (properties & BluetoothGattCharacteristic::PROPERTY_WRITE)
- win_cha_info.IsWritable = TRUE;
+ win_characteristic_info.IsWritable = TRUE;
if (properties & BluetoothGattCharacteristic::PROPERTY_NOTIFY)
- win_cha_info.IsNotifiable = TRUE;
+ win_characteristic_info.IsNotifiable = TRUE;
if (properties & BluetoothGattCharacteristic::PROPERTY_INDICATE)
- win_cha_info.IsIndicatable = TRUE;
+ win_characteristic_info.IsIndicatable = TRUE;
if (properties &
- BluetoothGattCharacteristic::PROPERTY_AUTHENTICATED_SIGNED_WRITES)
- win_cha_info.IsSignedWritable = TRUE;
+ BluetoothGattCharacteristic::PROPERTY_AUTHENTICATED_SIGNED_WRITES) {
+ win_characteristic_info.IsSignedWritable = TRUE;
+ }
if (properties & BluetoothGattCharacteristic::PROPERTY_EXTENDED_PROPERTIES)
- win_cha_info.HasExtendedProperties = TRUE;
- fake_bt_le_wrapper_->SimulateBLEGattCharacterisc(
- device_address, target_service, win_cha_info);
+ win_characteristic_info.HasExtendedProperties = TRUE;
+
+ fake_bt_le_wrapper_->SimulateGattCharacterisc(device_address, target_service,
+ win_characteristic_info);
ForceRefreshDevice();
}
@@ -262,20 +269,32 @@ void BluetoothTestWin::SimulateGattCharacteristicRemoved(
CHECK(characteristic);
std::string device_address = service->GetDevice()->GetAddress();
- win::BLEGattService* target_service = GetSimulatedService(
+ win::GattService* target_service = GetSimulatedService(
fake_bt_le_wrapper_->GetSimulatedBLEDevice(device_address), service);
CHECK(target_service);
std::string characteristic_att_handle = std::to_string(
static_cast<BluetoothRemoteGattCharacteristicWin*>(characteristic)
->GetAttributeHandle());
- fake_bt_le_wrapper_->SimulateBLEGattCharacteriscRemove(
+ fake_bt_le_wrapper_->SimulateGattCharacteriscRemove(
target_service, characteristic_att_handle);
ForceRefreshDevice();
}
-win::BLEGattService* BluetoothTestWin::GetSimulatedService(
+void BluetoothTestWin::SimulateGattDescriptor(
+ BluetoothGattCharacteristic* characteristic,
+ const std::string& uuid) {
+ win::GattCharacteristic* target_characteristic =
+ GetSimulatedCharacteristic(characteristic);
+ CHECK(target_characteristic);
+ fake_bt_le_wrapper_->SimulateGattDescriptor(
+ characteristic->GetService()->GetDevice()->GetAddress(),
+ target_characteristic, CanonicalStringToBTH_LE_UUID(uuid));
+ ForceRefreshDevice();
+}
+
+win::GattService* BluetoothTestWin::GetSimulatedService(
win::BLEDevice* device,
BluetoothGattService* service) {
CHECK(device);
@@ -287,16 +306,40 @@ win::BLEGattService* BluetoothTestWin::GetSimulatedService(
chain_of_att_handles.insert(
chain_of_att_handles.begin(),
std::to_string(win_service->GetAttributeHandle()));
- win::BLEGattService* simulated_service =
+ win::GattService* simulated_service =
fake_bt_le_wrapper_->GetSimulatedGattService(device,
chain_of_att_handles);
CHECK(simulated_service);
return simulated_service;
}
+win::GattCharacteristic* BluetoothTestWin::GetSimulatedCharacteristic(
+ BluetoothGattCharacteristic* characteristic) {
+ CHECK(characteristic);
+ BluetoothRemoteGattCharacteristicWin* win_characteristic =
+ static_cast<BluetoothRemoteGattCharacteristicWin*>(characteristic);
+
+ std::string device_address =
+ win_characteristic->GetService()->GetDevice()->GetAddress();
+ win::BLEDevice* target_device =
+ fake_bt_le_wrapper_->GetSimulatedBLEDevice(device_address);
+ if (target_device == nullptr)
+ return nullptr;
+ win::GattService* target_service =
+ GetSimulatedService(target_device, win_characteristic->GetService());
+ if (target_service == nullptr)
+ return nullptr;
+ return fake_bt_le_wrapper_->GetSimulatedGattCharacteristic(
+ target_service, std::to_string(win_characteristic->GetAttributeHandle()));
+}
+
void BluetoothTestWin::ForceRefreshDevice() {
adapter_win_->force_update_device_for_test_ = true;
+ FinishPendingTasks();
+}
+
+void BluetoothTestWin::FinishPendingTasks() {
bluetooth_task_runner_->RunPendingTasks();
- ui_task_runner_->RunPendingTasks();
+ base::RunLoop().RunUntilIdle();
}
}