工具/软件:
您好论坛、
我正在处理一个密钥卡项目、其中密钥卡和群集设备都是多角色的。 在钥匙扣方面、当按下一个按钮时、它会尝试通过 GATT 写入向群集发送数据包 (GATT_WriteCharValue)。
但是、在集群侧、在写入回调 (WriteCB) 内部、我没有收到任何数据;len参数始终为 0。 值得注意的是,GATT_WriteCharValue 密钥卡上的 API 返回SUCCESS,并且 GATT 消息中没有报告错误。
作为交叉检查、我使用 NRF Connect 应用程序连接到集群并执行相同的写入操作。 使用 NRF Connect 时、写入按预期工作、群集可以正确接收数据。
我使用的是 SDK 版本 09.11.00.08。
是否有任何关于从钥匙扣写入的内容为何无法到达群集的建议?
我要添加代码片段、请看一下
void send_packet(uint8_t packet[], uint8_t len)
{
attWriteReq_t wReq;
KeyFobFlags.data_exchange_in_process = 1;
memcpy(current_packet,packet,len); // Store latest packet globally.
uint8_t tmp;
wReq.pValue = GATT_bm_alloc( CurConnHndl, ATT_WRITE_REQ, len, NULL );
if(NULL == wReq.pValue)
{
sprint("\nsendPacket::MemAllocError");//ERROR
return;
}
memcpy(wReq.pValue,packet,len);
wReq.cmd = 0;
wReq.sig = 0;
wReq.handle = ClusterParams.valueHndle_CtrlPoint_char;//ClusterParams.valueHndle_CtrlPoint_char;
sprint("\nValue Handle:");
print(&ClusterParams.valueHndle_CtrlPoint_char,2);
uint8_t status = 0x00;
//status = GATT_WriteNoRsp(CurConnHndl, &wReq);
sprint("\nConnHandle:");
print(&CurConnHndl,2);
status = GATT_WriteCharValue(CurConnHndl, &wReq, BLEAppUtil_getSelfEntity());
sprint("\nLen:");
tmp = len + 0x30;
print(&tmp,1);
sprint("\nPacket Sent:");
print(&status,1);
if(SUCCESS != status)
{
GATT_bm_free((gattMsg_t*)&wReq, ATT_WRITE_REQ);
}
if(SUCCESS == status)
{
//read_auxillary_packet(); // the auxillary packet from cluster.
}
}
此致、
Vaibhav