我们创建了一个具有2个特性(读/通知和写)的固件。您可以使用write(with response)特性发送命令,并使用read特性返回结果。要通知读取特征包含响应,将发送通知。
当在电池模式下从PRO-DEVKIT运行时,一切工作都很顺利。
如果我们连接了一个USB智能手机充电器,并尝试在这种情况下进行相同的操作,有时即使通知已发送,也无法到达目的地(ble\u gatts\u send\u event返回success,ble\u EVT\u gatts\u event\u sent正确显示)。
写入/通知/读取事件的数量在大约5秒内约为10个。通常最后一个命令是没有得到通知的命令。
你知道吗?
当做,
不
设备:
你好nhan.ngodinh,
我不明白如何从电池供电的设备,然后直接从USB可能会影响通知的发送,没有明显的原因,你有一个嗅探器日志来验证通过空气发送的数据包的数量?您确定您遇到的问题与使用电池或VBUS插入时的操作有关吗?
谢谢你的对话
不幸的是,没有可用的嗅探器日志。我确认问题是按照我描述的方式发生的。
我找到了一个解决方法,错误的命令序列是(简化的):
ble\ u storage\ u put\ u buffer(conn\ u idx,response\ u h,length,buf,OS\ u FREE\ u FUNC,false);
ble\ U storage\ U get\ U 16(连接idx、ccc\ h和ccc);
国际单项体育联合会(ccc和GATT\ ccc\ U通知){
ble_gatts_send_event(conn_idx,response_h,GATT_event_NOTIFICATION,sizeof(notify_body),¬ify_body);//当VBUS应用时,这有时不起作用
}
我创建了一个解决方法,在ble\u storage\u put\u buffer()之后立即添加一个无用的ble\u storage\u get\u buffer(),其简化顺序如下:
ble\ u storage\ u put\ u buffer(conn\ u idx,response\ u h,length,buf,OS\ u FREE\ u FUNC,false);
ble_storage_get_buffer(conn_idx,response_h,&dummylength,&dummybuf,OS_FREE_FUNC,false);//虚拟读取(解决方法)
ble\ U storage\ U get\ U 16(连接idx、ccc\ h和ccc);
国际单项体育联合会(ccc和GATT\ ccc\ U通知){
ble\ u gatts\ u send\ u event(conn\ u idx、response\ u h、GATT\ u event\ u NOTIFICATION、sizeof(notify\ body)和notify\ body);
}