工具/软件:
大家好、我正在使用 LP-EM-CC2340R5、在一次写入 1000 字节数据时遇到问题。
我正在开发我的自定义客户端、其中我的客户端将向服务器写入 1000 字节的数据。 我一直使用该 API 来执行此操作。
void WriteData_OverBLE(uint8_t *payload, uint16_t length)
{
uint16_t offset = 0;
bStatus_t status;
linkDBInfo_t connInfo = {0};
// Get connection info including negotiated MTU
status = linkDB_GetInfo(BLE_Handle.Connection_Handle, &connInfo);
if (status != SUCCESS)
return;
uint16_t maxChunkLen = connInfo.MTU - 3;
while (offset < length)
{
count_of_gatt_write++;
uint16_t chunkLen = (length - offset > maxChunkLen) ? maxChunkLen : (length - offset);
attPrepareWriteReq_t req = {0};
req.pValue = GATT_bm_alloc(BLE_Handle.Connection_Handle, ATT_WRITE_REQ, chunkLen, NULL);
if (req.pValue != NULL)
{
req.handle = BLE_Handle.Rx_Char_Handle;
req.len = chunkLen;
req.offset = offset;
memcpy(req.pValue, payload + offset, chunkLen);
status = GATT_WriteLongCharValue(BLE_Handle.Connection_Handle, &req, BLEAppUtil_getSelfEntity());
if (status != SUCCESS)
{
for(;;);
GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ);
return;
}
}
offset += chunkLen;
}
}
1.我协商 MTU 大小为 MAX ,即 247 ,我能够将 244 字节的自定义数据写入我的自定义特性上的服务器。 在服务器端、我能够正确接收数据、而不会出现任何问题。 客户端接收到状态为成功的 ATT_EXECURE_WRITE_RSP。
2.当 COUNT_OF_GATT_WRITE 变为 2 时、会进入指示 BLE_PENDING 的循环、因为未正确处理该循环。
3.因此、我看到的权变措施是等待 ATT_EXECURE_WRITE_RSP 、当我收到 RSP 时、我调用了下一次写入。 它基本上是通过执行 4 次写入来手动发送数据。 现在、我想知道是否有方法可以一次性发送 1000 字节的数据、而不是多次调用相同的 API。