微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

STM BlueNRG-MS 最大特征长度

如何解决STM BlueNRG-MS 最大特征长度

我的一般理解是 BLE 标准支持长度高达 512 字节的特性。我正在使用 STM 的 BlueNRG-MS 芯片,但在那里添加特性的函数调用的长度参数具有 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 字节。 根据 this 文档,堆栈本身支持 FW 7.2 或更高版本的 2 个字节。 我有 7.23,所以这应该没问题,但我找不到支持类型为 charValueLenuint16_t 调用的 BlueNRG-MS 中间件的任何参考或示例。我还下载了最新的 STSW-BLUENRG-DK,示例也仅支持 uint8_t charValueLen

解决方法

是的,它也支持带有 uint16_t 的 charValueLen。 示例函数如下:

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
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。