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

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

The constructor for GattCharacteristic() takes an array of GattAttribtues as an optional argument. You can populate your User-Description into a GattAttribute and pass it along to the Characteristic.

Пока у меня есть эта структура, устанавливающая мои характеристики.

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};
WriteOnlyArrayGattCharacteristic<uint8_t,
sizeof(percentageValue)> percentageChar(PercentageUUID, percentageValue);

static uint8_t timeValue[10] = {0};
ReadWriteArrayGattCharacteristic<uint8_t,
sizeof(timeValue)> timeChar(TimeUUID, timeValue);

static uint8_t UseProfileValue[10] = {0};
WriteOnlyArrayGattCharacteristic<uint8_t,
sizeof(UseProfileValue)> UseProfileChar(UseProfileUUID, UseProfileValue);

// Set up custom service

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

Как добавить описания к этим 3 характеристикам?

Теперь у меня есть:

static uint8_t percentageValue[10] = {0};
GattAttribute descr( BLE_UUID_DESCRIPTOR_CHAR_USER_DESC, (uint8_t *)"Percentage", strlen("Percentage"));
WriteOnlyArrayGattCharacteristic<uint8_t,
sizeof(percentageValue)> percentageChar( PercentageUUID,
percentageValue,
GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_EXTENDED_PROPERTIES,
&descr,
1 );

Это бросает Error: No instance of constructor "WriteOnlyArrayGattCharacteristic<T, NUM_ELEMENTS>::WriteOnlyArrayGattCharacteristic [with T=std::uint8_t, NUM_ELEMENTS=10U]" matches the argument list in "main.cpp" на линии «размер».

0

Решение

Проверьте Characteristic API класса:
https://developer.mbed.org/teams/Bluetooth-Low-Energy/code/BLE_API/file/d494ad3e87bd/ble/GattCharacteristic.h:

template <typename T>
class WriteOnlyGattCharacteristic : public GattCharacteristic {
public:
WriteOnlyGattCharacteristic<T>(const UUID     &uuid,
T              *valuePtr,
uint8_t        additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE,
GattAttribute *descriptors[]        = NULL,
unsigned       numDescriptors       = 0) :
GattCharacteristic(uuid, reinterpret_cast<uint8_t *>(valuePtr), sizeof(T), sizeof(T),
BLE_GATT_CHAR_PROPERTIES_WRITE | additionalProperties, descriptors, numDescriptors) {
/* empty */
}
};

Дескрипторы, прикрепленные к характеристике, должны быть переданы в качестве четвертого параметра (GattAttribute *descriptors[]по умолчанию это NULL, что означает, что характеристика не имеет дескриптора) *ArrayGattCharacteristic объекты, которые вы создаете. Они есть GattAttributes, которые будут созданы до ваших характеристик и переданы ему при создании.

Может быть, это может сработать, чтобы добавить один дескриптор (не испытано), массивы следует использовать, чтобы добавить больше (как вы сделали для характеристик):

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*) );

Надеюсь, это поможет (снова ;-))

1

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

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

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