diff options
Diffstat (limited to 'device/bluetooth/test/bluetooth_test_win.cc')
-rw-r--r-- | device/bluetooth/test/bluetooth_test_win.cc | 113 |
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(); } } |