嗨对话框,
我使用下面的函数将BLE消息发送到我的移动(主机)。
void user_send_ble_data(uint16_t句柄,const uint8_t * data,const uint16_t长度)
{
if(ke_state_get(task_app)!= app_connected)
返回;
struct susts1_val_ntf_ind_req * req = ke_msg_alloc_dyn(custs1_val_ntf_req,prf_get_task_from_id(task_id_custs1),task_app,custs1_val_ntf_ind_req,length);
req-> handle = handle;
req->长度=长度;
req-> notification = false;
memcpy(req->值,数据,长度);
KE_MSG_SEND(REQ);
}
我使用Android的测试应用程序每5秒连续向DA14585发送命令消息。
每次我的设备接收命令消息时,它应该向测试应用程序发送10个原始数据消息,例如:
for(Uint8_t i = 0; i <10; i ++)
{
user_send_ble_data(tdkam_idx_control_point_val,ble_report,10);
}
一段时间后,设备将断开连接。
重新连接后,DA14585可以接收消息但无法发送任何消息。
如果我仍然将命令消息发送到DA14585,它将崩溃。
即使我重新刻录代码,它也会陷入“rwip_schedule()”功能。
你有什么主意吗?我的发送功能有什么不对吗?
顺便说一下,如果da14585收到一条消息并刚发送返回一条消息,那就没问题了。
非常感谢。
设备:
嗨斯坦利_yeh,
据我所知,试图使用指示发送数据,这意味着在发送下一个指示之前,外设必须验证前一个是由中央包装的。所以,据我所知,在设备期望从链接的另一边确认确认时,请继续分配消息以便发送指示,因此您可能会耗尽堆。为了正确发送通知和迹象,您必须等待完成回调,然后在向堆栈发送其他消息之前发生。因此,您可以使用user_send_ble_data并等到指示确认消息,例如ble_app_peripheral项目包括可指示的特征,该消息将指示中央确认的指示的接收是Custs1_Val_ind_cfm和该项目处理在BLE_APP_PERITELAL项目中的项目处理。所以从那个回调你可以触发后续迹象。
谢谢mt_dialog.