mirror of https://github.com/ARMmbed/mbed-os.git
97 lines
3.4 KiB
C++
97 lines
3.4 KiB
C++
/* mbed Microcontroller Library
|
|
* Copyright (c) 2021 ARM Limited
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include "GattServerImpl_mock.h"
|
|
|
|
namespace ble {
|
|
|
|
GattServerMock::GattServerMock()
|
|
{
|
|
ON_CALL(*this, addService).WillByDefault([this](GattService &service) {
|
|
// Fake registration, it populates the handles of the input and store its
|
|
// representation in the services field.
|
|
fake_register_services(service);
|
|
return BLE_ERROR_NONE;
|
|
});
|
|
}
|
|
|
|
GattServerMock::~GattServerMock() {};
|
|
|
|
void GattServerMock::fake_register_services(GattService& gattService)
|
|
{
|
|
gattService.setHandle(current_handle++);
|
|
service_t result {
|
|
gattService.getUUID(),
|
|
gattService.getHandle()
|
|
};
|
|
|
|
for (size_t i = 0; i < gattService.getCharacteristicCount(); ++i) {
|
|
current_handle++; // Increment for the characteristic declaration handle
|
|
auto& ref = *gattService.getCharacteristic(i);
|
|
ref.getValueAttribute().setHandle(current_handle++);
|
|
|
|
characteristic_t c;
|
|
c.uuid = ref.getValueAttribute().getUUID();
|
|
c.value_handle = ref.getValueHandle();
|
|
c.properties = ref.getProperties();
|
|
c.read_security = ref.getReadSecurityRequirement();
|
|
c.write_security = ref.getWriteSecurityRequirement();
|
|
c.update_security = ref.getUpdateSecurityRequirement();
|
|
c.read_cb = ref.getReadAuthorizationCallback();
|
|
c.write_cb = ref.getWriteAuthorizationCallback();
|
|
c.value.reserve(ref.getValueAttribute().getMaxLength());
|
|
c.value.resize(ref.getValueAttribute().getLength());
|
|
{
|
|
auto value_ptr = ref.getValueAttribute().getValuePtr();
|
|
if (value_ptr) {
|
|
std::copy(value_ptr, value_ptr + c.value.size(), c.value.begin());
|
|
}
|
|
}
|
|
c.has_variable_len = ref.getValueAttribute().hasVariableLength();
|
|
|
|
for (size_t j = 0; j < ref.getDescriptorCount(); ++j) {
|
|
auto& ref_desc = *ref.getDescriptor(j);
|
|
ref_desc.setHandle(current_handle++);
|
|
|
|
descriptor_t d;
|
|
d.uuid = ref_desc.getUUID();
|
|
d.handle = ref_desc.getHandle();
|
|
d.read_security = ref_desc.getReadSecurityRequirement();
|
|
d.write_security = ref_desc.getWriteSecurityRequirement();
|
|
d.is_readable = ref_desc.isReadAllowed();
|
|
d.is_writable = ref_desc.isWriteAllowed();
|
|
d.value.reserve(ref_desc.getMaxLength());
|
|
d.value.resize(ref_desc.getLength());
|
|
{
|
|
auto value_ptr = ref_desc.getValuePtr();
|
|
if (value_ptr) {
|
|
std::copy(value_ptr, value_ptr + d.value.size(), d.value.begin());
|
|
}
|
|
}
|
|
|
|
c.descriptors.push_back(d);
|
|
}
|
|
|
|
result.characteristics.push_back(c);
|
|
}
|
|
|
|
services.push_back(result);
|
|
}
|
|
|
|
|
|
}
|