我按照Dialog SDK 5.0.3培训材料,基于ble_app_profile工程,修改了user_catch_rest_hndl函数中的case CUST1_IDX_LED_STATE_VAL,作为接收我的手机端传来的命令,进一步在主循环里进行判断操作。
代码如下:
void user_catch_rest_hndl(ke_msg_id_t const msgid,
void const *param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
switch(msgid)
{
case CUSTS1_VAL_WRITE_IND: //特征值已被写入
{
struct custs1_val_write_ind const *msg_param = (struct custs1_val_write_ind const *)(param);
switch (msg_param->handle)
{
case CUST1_IDX_CONTROL_POINT_VAL:
user_custs1_ctrl_wr_ind_handler(msgid, msg_param, dest_id, src_id);
break;
case CUST1_IDX_LED_STATE_VAL:
memcpy (&ble_Rec &msg_param[0] - >价值, msg_param->length);
VAL_FLAG = 1; //val接收完毕
// user_custs1_led_wr_ind_handler(msgid, msg_param, dest_id, src_id);
break;
..........
主循环
while(1)
{
if(VAL_FLAG == 1)
{
Audion_WriteCMD(ble_Rec); //接收蓝牙命令并执行相关操作
VAL_FLAG = 0;
}
do {
// schedule all pending events
schedule_while_ble_on();
}
while (app_asynch_proc() != GOTO_SLEEP);
————————————————————————————————————————————————————
其中Audion_WriteCMD,为我对IO的操作,当我这个操作需要进行5s+时,连接就会断开,等待该操作完毕后,蓝牙方可重新连接。
请问这是什么原因呢,有办法解决这个吗,我的操作命令中最长的需要进行6s左右,虽然操作是可以进行完毕的,但是会断掉,随后进行下一步操作的话就得重新连接,有点不方便。
主机是手机端,LightBlue ,android端。
你好,
Audion_WriteCMD 函数执行的时间过长,导致蓝牙事件没有处理的机会,导致连接断开
你需要用状态机的方式,将这段阻塞拆分成多个时间段执行。
好的,请问哪个例程我可以参考一下呢
你好,
这属于编程技巧的范畴,可从网上查找相关状态机的相关知识。
明白 谢谢了
不客气~