1

mbed APIを使用して、いくつかの Characteristic User Descriptions をカスタム BLE GATT サービスに追加しようとしています。私のこれまでの仕事は、このコード構造に基づいていました。ただし、これらの特性に名前を付けたいと思います。これを行う方法について見つけることができる情報はあまりありません。ただし、以下はフォーラムからのコメントで、その方法を示しています。

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"「サイズ」行にスローされます。

4

1 に答える 1

1

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 */
    }
};

特性に添付された記述子は、作成しているオブジェクトの4 番目のパラメーター (GattAttribute *descriptors[]デフォルトでは NULL であり、特性に記述子がないことを意味します)として渡す必要があります。*ArrayGattCharacteristicこれらはGattAttributeであり、特性の前に作成され、作成時に渡されます。

おそらく、これは1つの記述子を追加するために機能する可能性があります(テストされていません)。配列を使用してさらに追加する必要があります(特性の場合と同様):

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

これが役に立てば幸いです(再び;-))

于 2015-10-25T11:04:27.373 に答える