我们创建了一个具有2个特征的固件(读/通知和写)。您可以使用Write(具有响应)特性发送命令,并使用读取特性返回结果。要通知读取特性包含响应发送通知。
当从Pro Devkit运行时,电池模式中的一切顺畅工作。
如果我们附上USB智能手机充电器,我们尝试在该条件下执行此操作,有时候,即使显然他们已被发送(BLE_GATTS_SEND_EVENT返回成功和BLE_EVT_GATTS_EVENT_SENT)也无法到达目的地。
写入/通知/读取事件的数量在约5秒内每个约10。通常,最后一个命令是一个没有收到通知的命令。
任何想法?
问候,
N
设备:
嗨nhan.ngodinh,
我不知道如何从电池中提供设备然后直接从USB提供通知的发出,没有明显的原因,您是否有嗅探器日志验证数据包的数量发送到空中?您是否确定您获得的问题与电池或VBUS插入时相关的问题?
谢谢mt_dialog.
不幸的是,没有嗅探器日志。我确认问题是我所描述的方式发生的。
我发现了一个解决方法,错误的命令序列是(简化):
ble_storage_put_buffer(conn_idx,response_h,length,buf,os_free_func,false);
ble_storage_get_u16(conn_idx,ccc_h,&ccc);
if(ccc&gatt_ccc_notifications){
ble_gatts_send_event(conn_idx,response_h,gatt_event_notification,sizeof(notify_body),&notify_body);//当应用vbus时,它有时不起作用
}
我通过在ble_storage_put_buffer()之后立即添加无用的BLE_STORAGE_GET_BUFFER()创建了替代方法,其中简化的序列如:
ble_storage_put_buffer(conn_idx,response_h,length,buf,os_free_func,false);
ble_storage_get_buffer(conn_idx,response_h,&dummyymf,&dummybuf,os_free_func,false);//虚拟读(替代方法)
ble_storage_get_u16(conn_idx,ccc_h,&ccc);
if(ccc&gatt_ccc_notifications){
ble_gatts_send_event(conn_idx,response_h,gatt_event_notification,sizeof(notify_body),&notify_body);
}