STM BlueNRG-MS Макс.характеристическая длина
Насколько я понимаю, стандарт BLE поддерживает характеристики длиной до 512 байт. Я использую чип BlueNRG-MS от STM, но там вызов функции для добавления характеристики имеет значение uint8_t для параметра длины
tBleStatus aci_gatt_add_char(uint16_t serviceHandle,
uint8_t charUuidType,
const uint8_t* charUuid,
uint8_t charValueLen,
uint8_t charProperties,
uint8_t secPermissions,
uint8_t gattEvtMask,
uint8_t encryKeySize,
uint8_t isVariable,
uint16_t* charHandle);
Таким образом, это допускает только максимальную характеристическую длину 255 байтов. Согласно этому документу сам стек поддерживает 2 байта с FW 7.2 или выше. У меня 7.23, так что все должно быть хорошо, но я не могу найти никаких ссылок или примеров промежуточного программного обеспечения BlueNRG-MS, которое поддерживало бы вызов с
charValueLen
типа
uint16_t
. Я также загрузил последнюю версию STSW-BLUENRG-DK, и примеры также поддерживают только
uint8_t charValueLen
.
1 ответ
Да, он также поддерживает charValueLen с uint16_t. Пример функции будет следующим:
tBleStatus aci_gatt_add_char(uint16_t serviceHandle,
uint8_t charUuidType,
const uint8_t* charUuid,
uint16_t charValueLen,
uint8_t charProperties,
uint8_t secPermissions,
uint8_t gattEvtMask,
uint8_t encryKeySize,
uint8_t isVariable,
uint16_t* charHandle)
{
struct hci_request rq;
gatt_add_serv_rp resp;
uint8_t buffer[26];
... // code omitted w/o needing modification
Osal_MemCpy(buffer + indx, charUuid, uuid_len);
indx += uuid_len;
charValueLen = htobs(charValueLen);
Osal_MemCpy(buffer + indx, &charValueLen, 2);
indx += 2;
buffer[indx] = charProperties;
indx++;
... // code omitted w/o needing modification
}