Bluetooth — добавление характерного описания пользователя в несколько пользовательских служб C ++ BLE GATT

Я пытаюсь добавить несколько характерных описаний пользователей в свою пользовательскую службу BLE GATT, используя API mbed. Моя работа до сих пор была основана на этот структура кода. Тем не менее, я хотел бы добавить имена к этим характеристикам. Я не могу найти много информации о том, как это сделать. Однако ниже приведен код, который добавляет информацию к характеристике.

Конструктор для GattCharacteristic () принимает массив GattAttribtues в качестве необязательного аргумента. Вы можете заполнить свое описание пользователя в атрибуте GattAttribute и передать его в характеристику. У меня есть эта структура, работающая на одну характеристику, но я пытаюсь воспроизвести ее для 3 персонажей. Я не могу повторить все это 3 раза, так как я запускаю его для множества проблем, связанных с массивами и т. Д., Которые уже определены. Если я сложу описания в массиве, он не будет принят GattArray?

uint16_t newServiceUUID         = 0xA000;
uint16_t PercentageUUID         = 0xA001;
uint16_t TimeUUID               = 0xA002;
uint16_t UseProfileUUID         = 0xA003;

const static char     DEVICE_NAME[]        = "Device"; // Device name
static const uint16_t uuid16_list[]        = {0xFFF};
static uint8_t percentageValue[10] = {0};
GattAttribute nameDescr( BLE_UUID_DESCRIPTOR_CHAR_USER_DESC, (uint8_t *)"Percentage", strlen("Percentage"));
GattAttribute *descriptors[] = {&nameDescr};

WriteOnlyArrayGattCharacteristic<uint8_t,sizeof(percentageValue)>
percentageChar( PercentageUUID,
percentageValue,
GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_EXTENDED_PROPERTIES,
descriptors,
sizeof(descriptors) / sizeof(GattAttribute*) );

GattCharacteristic *characteristics[] = {&percentageChar, &timeChar, &UseProfileChar};
GattService        newService(newServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));

Работая с обсуждением ниже, у меня теперь есть:

#include <string>
class MyGattArray
{

public:
MyGattArray( const std::string& name ) :
attr( BLE_UUID_DESCRIPTOR_CHAR_USER_DESC, (uint8_t *)name.c_str(), (name.size()+1) )
{
descriptors[0] = &attr;
}

GattAttribute attr;
GattAttribute *descriptors[1];
};

а также

static uint8_t percentageValue[10] = {0};
MyGattArray PercentageName( "Percentage" );
GattAttribute *descriptors[] = {&(PercentageName.attr)};

WriteOnlyArrayGattCharacteristic<uint8_t,sizeof(percentageValue)>
percentageChar( PercentageUUID,
percentageValue,
GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_EXTENDED_PROPERTIES,
descriptors,
sizeof(descriptors) / sizeof(GattAttribute*) );

Это строит, но не дает характеристику имя.

0

Решение

Вот предложение вспомогательного класса шаблона, который может инкапсулировать характерный объект и его дескриптор. Это немного сложно понять, если вы не знакомы с шаблонами.

template <typename T, unsigned NUM_ELEMENTS, template <typename T, unsigned NUM_ELEMENTS> class CharacType>
class CharacteristicWithNameDescrptorHelper
{
public:
CharacteristicWithNameDescrptorHelper( const          UUID &uuid,
T              valuePtr[NUM_ELEMENTS],
uint8_t        additionalProperties,
const std::string& characName ) :
name( characName )
{
descriptor = new GattAttribute( BLE_UUID_DESCRIPTOR_CHAR_USER_DESC, (uint8_t *)name.c_str(), name.size() )
// create descriptor array
descriptors[0] = descriptor;
// create characteristic object:
charac = new CharacType<T,NUM_ELEMENTS>( uuid, valuePtr, additionalProperties, descriptors, 1 );
}

~CharacteristicWithNameDescrptorHelper()
{
delete charac;
delete descriptor;
}

CharacType<T,NUM_ELEMENTS>* charac;
std::string name;
GattAttribute* descriptor;
GattAttribute *descriptors[1];
};

Затем вы просто делаете:

CharacteristicWithNameDescrptorHelper<uint8_t,sizeof(percentageValue),WriteOnlyArrayGattCharacteristic>
percentageChar( PercentageUUID,
percentageValue,
GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_EXTENDED_PROPERTIES,
"Percentage" );

GattCharacteristic *characteristics[] = {percentageChar.charac};
GattService        newService(newServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]