summaryrefslogtreecommitdiffstats
path: root/device/bluetooth/bluetooth_low_energy_win_fake.cc
diff options
context:
space:
mode:
Diffstat (limited to 'device/bluetooth/bluetooth_low_energy_win_fake.cc')
-rw-r--r--device/bluetooth/bluetooth_low_energy_win_fake.cc117
1 files changed, 93 insertions, 24 deletions
diff --git a/device/bluetooth/bluetooth_low_energy_win_fake.cc b/device/bluetooth/bluetooth_low_energy_win_fake.cc
index bc1d2b5..d6fb5f0 100644
--- a/device/bluetooth/bluetooth_low_energy_win_fake.cc
+++ b/device/bluetooth/bluetooth_low_energy_win_fake.cc
@@ -18,14 +18,14 @@ namespace win {
BLEDevice::BLEDevice() {}
BLEDevice::~BLEDevice() {}
-BLEGattService::BLEGattService() {}
-BLEGattService::~BLEGattService() {}
+GattService::GattService() {}
+GattService::~GattService() {}
-BLEGattCharacteristic::BLEGattCharacteristic() {}
-BLEGattCharacteristic::~BLEGattCharacteristic() {}
+GattCharacteristic::GattCharacteristic() {}
+GattCharacteristic::~GattCharacteristic() {}
-BLEGattDescriptor::BLEGattDescriptor() {}
-BLEGattDescriptor::~BLEGattDescriptor() {}
+GattDescriptor::GattDescriptor() {}
+GattDescriptor::~GattDescriptor() {}
BluetoothLowEnergyWrapperFake::BluetoothLowEnergyWrapperFake() {}
BluetoothLowEnergyWrapperFake::~BluetoothLowEnergyWrapperFake() {}
@@ -65,7 +65,7 @@ bool BluetoothLowEnergyWrapperFake::
BluetoothLowEnergyDeviceInfo* device_info =
new BluetoothLowEnergyDeviceInfo();
*device_info = *(device.second->device_info);
- base::string16 path = GenerateBLEGattServiceDevicePath(
+ base::string16 path = GenerateGattServiceDevicePath(
device.second->device_info->path.value(),
service.second->service_info->AttributeHandle);
device_info->path = base::FilePath(path);
@@ -107,7 +107,7 @@ bool BluetoothLowEnergyWrapperFake::EnumerateKnownBluetoothLowEnergyServices(
}
} else {
// Return corresponding GATT service for BLE GATT service device.
- BLEGattService* target_service =
+ GattService* target_service =
GetSimulatedGattService(it_d->second.get(), service_attribute_handles);
BluetoothLowEnergyServiceInfo* service_info =
new BluetoothLowEnergyServiceInfo();
@@ -129,7 +129,7 @@ HRESULT BluetoothLowEnergyWrapperFake::ReadCharacteristicsOfAService(
ExtractDeviceAddressFromDevicePath(service_path.value());
const std::vector<std::string> service_att_handles =
ExtractServiceAttributeHandlesFromDevicePath(service_path.value());
- BLEGattService* target_service = GetSimulatedGattService(
+ GattService* target_service = GetSimulatedGattService(
GetSimulatedBLEDevice(
std::string(device_address.begin(), device_address.end())),
service_att_handles);
@@ -153,6 +153,30 @@ HRESULT BluetoothLowEnergyWrapperFake::ReadCharacteristicsOfAService(
return HRESULT_FROM_WIN32(ERROR_NO_MORE_ITEMS);
}
+HRESULT BluetoothLowEnergyWrapperFake::ReadDescriptorsOfACharacteristic(
+ base::FilePath& service_path,
+ const PBTH_LE_GATT_CHARACTERISTIC characteristic,
+ scoped_ptr<BTH_LE_GATT_DESCRIPTOR>* out_included_descriptors,
+ USHORT* out_counts) {
+ GattCharacteristic* target_characteristic =
+ GetSimulatedGattCharacteristic(service_path, characteristic);
+ if (target_characteristic == nullptr)
+ return HRESULT_FROM_WIN32(ERROR_NOT_FOUND);
+
+ std::size_t number_of_included_descriptors =
+ target_characteristic->included_descriptors.size();
+ PBTH_LE_GATT_DESCRIPTOR win_descriptors_info =
+ new BTH_LE_GATT_DESCRIPTOR[number_of_included_descriptors];
+ *out_counts = USHORT(number_of_included_descriptors);
+ std::size_t i = 0;
+ for (const auto& d : target_characteristic->included_descriptors) {
+ win_descriptors_info[i] = *(d.second->descriptor_info);
+ i++;
+ }
+ out_included_descriptors->reset(win_descriptors_info);
+ return S_OK;
+}
+
BLEDevice* BluetoothLowEnergyWrapperFake::SimulateBLEDevice(
std::string device_name,
BLUETOOTH_ADDRESS device_address) {
@@ -178,13 +202,13 @@ BLEDevice* BluetoothLowEnergyWrapperFake::GetSimulatedBLEDevice(
return it_d->second.get();
}
-BLEGattService* BluetoothLowEnergyWrapperFake::SimulateBLEGattService(
+GattService* BluetoothLowEnergyWrapperFake::SimulateGattService(
BLEDevice* device,
- BLEGattService* parent_service,
+ GattService* parent_service,
const BTH_LE_UUID& uuid) {
CHECK(device);
- BLEGattService* service = new BLEGattService();
+ GattService* service = new GattService();
PBTH_LE_GATT_SERVICE service_info = new BTH_LE_GATT_SERVICE[1];
std::string string_device_address =
BluetoothAddressToCanonicalString(device->device_info->address);
@@ -204,9 +228,9 @@ BLEGattService* BluetoothLowEnergyWrapperFake::SimulateBLEGattService(
return service;
}
-void BluetoothLowEnergyWrapperFake::SimulateBLEGattServiceRemoved(
+void BluetoothLowEnergyWrapperFake::SimulateGattServiceRemoved(
BLEDevice* device,
- BLEGattService* parent_service,
+ GattService* parent_service,
std::string attribute_handle) {
if (parent_service) {
parent_service->included_services.erase(attribute_handle);
@@ -215,11 +239,11 @@ void BluetoothLowEnergyWrapperFake::SimulateBLEGattServiceRemoved(
}
}
-BLEGattService* BluetoothLowEnergyWrapperFake::GetSimulatedGattService(
+GattService* BluetoothLowEnergyWrapperFake::GetSimulatedGattService(
BLEDevice* device,
const std::vector<std::string>& chain_of_att_handle) {
// First, find the root primary service.
- BLEGattServicesMap::iterator it_s =
+ GattServicesMap::iterator it_s =
device->primary_services.find(chain_of_att_handle[0]);
if (it_s == device->primary_services.end())
return nullptr;
@@ -229,7 +253,7 @@ BLEGattService* BluetoothLowEnergyWrapperFake::GetSimulatedGattService(
for (std::size_t i = 1; i < chain_of_att_handle.size(); i++) {
std::string included_att_handle = std::string(
chain_of_att_handle[i].begin(), chain_of_att_handle[i].end());
- BLEGattServicesMap::iterator it_i =
+ GattServicesMap::iterator it_i =
it_s->second->included_services.find(included_att_handle);
if (it_i == it_s->second->included_services.end())
return nullptr;
@@ -238,14 +262,13 @@ BLEGattService* BluetoothLowEnergyWrapperFake::GetSimulatedGattService(
return it_s->second.get();
}
-BLEGattCharacteristic*
-BluetoothLowEnergyWrapperFake::SimulateBLEGattCharacterisc(
+GattCharacteristic* BluetoothLowEnergyWrapperFake::SimulateGattCharacterisc(
std::string device_address,
- BLEGattService* parent_service,
+ GattService* parent_service,
const BTH_LE_GATT_CHARACTERISTIC& characteristic) {
CHECK(parent_service);
- BLEGattCharacteristic* win_characteristic = new BLEGattCharacteristic();
+ GattCharacteristic* win_characteristic = new GattCharacteristic();
PBTH_LE_GATT_CHARACTERISTIC win_characteristic_info =
new BTH_LE_GATT_CHARACTERISTIC[1];
*win_characteristic_info = characteristic;
@@ -258,13 +281,59 @@ BluetoothLowEnergyWrapperFake::SimulateBLEGattCharacterisc(
return win_characteristic;
}
-void BluetoothLowEnergyWrapperFake::SimulateBLEGattCharacteriscRemove(
- BLEGattService* parent_service,
+void BluetoothLowEnergyWrapperFake::SimulateGattCharacteriscRemove(
+ GattService* parent_service,
std::string attribute_handle) {
CHECK(parent_service);
parent_service->included_characteristics.erase(attribute_handle);
}
+GattCharacteristic*
+BluetoothLowEnergyWrapperFake::GetSimulatedGattCharacteristic(
+ GattService* parent_service,
+ std::string attribute_handle) {
+ CHECK(parent_service);
+ GattCharacteristicsMap::iterator it =
+ parent_service->included_characteristics.find(attribute_handle);
+ if (it != parent_service->included_characteristics.end())
+ return it->second.get();
+ return nullptr;
+}
+
+void BluetoothLowEnergyWrapperFake::SimulateGattDescriptor(
+ std::string device_address,
+ GattCharacteristic* characteristic,
+ const BTH_LE_UUID& uuid) {
+ scoped_ptr<GattDescriptor> descriptor(new GattDescriptor());
+ descriptor->descriptor_info.reset(new BTH_LE_GATT_DESCRIPTOR[1]);
+ descriptor->descriptor_info->DescriptorUuid = uuid;
+ descriptor->descriptor_info->AttributeHandle =
+ GenerateAUniqueAttributeHandle(device_address);
+ characteristic->included_descriptors[std::to_string(
+ descriptor->descriptor_info->AttributeHandle)] = std::move(descriptor);
+}
+
+GattCharacteristic*
+BluetoothLowEnergyWrapperFake::GetSimulatedGattCharacteristic(
+ base::FilePath& service_path,
+ const PBTH_LE_GATT_CHARACTERISTIC characteristic) {
+ base::string16 device_address =
+ ExtractDeviceAddressFromDevicePath(service_path.value());
+ BLEDevice* target_device = GetSimulatedBLEDevice(
+ std::string(device_address.begin(), device_address.end()));
+ if (target_device == nullptr)
+ return nullptr;
+ const std::vector<std::string> service_att_handles =
+ ExtractServiceAttributeHandlesFromDevicePath(service_path.value());
+ GattService* target_service =
+ GetSimulatedGattService(target_device, service_att_handles);
+ if (target_service == nullptr)
+ return nullptr;
+ GattCharacteristic* target_characteristic = GetSimulatedGattCharacteristic(
+ target_service, std::to_string(characteristic->AttributeHandle));
+ return target_characteristic;
+}
+
USHORT BluetoothLowEnergyWrapperFake::GenerateAUniqueAttributeHandle(
std::string device_address) {
scoped_ptr<std::set<USHORT>>& set_of_ushort =
@@ -300,7 +369,7 @@ base::string16 BluetoothLowEnergyWrapperFake::GenerateBLEDevicePath(
return base::string16(device_address.begin(), device_address.end());
}
-base::string16 BluetoothLowEnergyWrapperFake::GenerateBLEGattServiceDevicePath(
+base::string16 BluetoothLowEnergyWrapperFake::GenerateGattServiceDevicePath(
base::string16 resident_device_path,
USHORT service_attribute_handle) {
std::string sub_path = std::to_string(service_attribute_handle);