我的一般理解是,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,所以这应该很好,但我找不到任何支持使用uint16_t类型的charValueLen调用的BlueNRG-MS中间件的参考或示例。我还下载了最新的STSW-BLUENRG-DK,示例也只支持uint8_t charValueLen。
发布于 2021-04-19 11:58:41
是的,它也支持带有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
}https://stackoverflow.com/questions/66908163
复制相似问题