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
}
Другие вопросы по тегам