J'essaie d'ajouter des descriptions d'utilisateur caractéristiques à mon service BLE GATT personnalisé, en utilisant le mbed API. Mon travail a jusqu'à présent été basé sur la structure du code this. Cependant, j'aimerais ajouter des noms à ces caractéristiques. Il n'y a pas beaucoup d'informations que je pourrais trouver sur la façon de le faire. Cependant, ci-dessous est le code qui ajoute l'information à une caractéristique.Ajout de la description de l'utilisateur caractéristique à plusieurs services BLE GATT C++ personnalisés
Le constructeur de GattCharacteristic() prend un tableau de GattAttribtues en tant qu'argument optionnel. Vous pouvez remplir votre User-Description dans un GattAttribute et le transmettre à la caractéristique. J'ai cette structure fonctionnant pour une caractéristique, mais j'ai du mal à la reproduire pour 3 caractères. Je ne peux pas reproduire le tout 3 fois, car je le lance à beaucoup de questions sur les tableaux, etc. étant déjà définis. Si j'empile les descriptions dans le tableau, il ne sera pas accepté par le 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 *));
EDIT
Travailler avec la discussion ci-dessous, j'ai maintenant:
#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];
};
et
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*));
Cela construit, mais ne donne pas un nom caractéristique.
Que voulez-vous dire par 'ne donne pas une name' caractéristique ne le characterstic ont un descripteur lorsque vous vous connectez l'appareil? Si oui, quel est son contenu? – jpo38
@ jpo38 Le service est créé, mais la caractéristique n'a que la description 0xA001 et rien d'autre. –
Avez-vous essayé de déboguer l'exécution de la fonction 'WriteOnlyArrayGattCharacteristic' dans les deux situations? – jpo38