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.


person po.pe    schedule 01.04.2021    source источник
comment
Вы можете получить более полезный ответ на форумах сообщества ST.   -  person Tom V    schedule 03.04.2021


Ответы (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
}
person Winfred    schedule 19.04.2021