好记性不如烂笔头,既然不够聪明,就乖乖的做笔记,温故而知新。
项目场景:
Dialog DA14531 DSPS例程主要用于透传,使用场景广泛
问题描述:
客户在测试时发现,频繁、快速的连接和断开设备,有几率导致设备工作异常,不广播,宕机。
原因分析:
连接和断开的回调函数中有向主机发送消息,获取对端设备支持的特性,确认是否支持数据包拓展特性,这里存在主机未来得及回复便断开连接,从而导致从机陷入异常状态。
解决方案:
DSPS例程在连接、断开的回调函数中,获取对端设备支持的特性的目的是发现支持拓展数据包类型的设备,增加包容量,从而提高传输效率、速率;对大部分小数据的透传应用,或对端设备不支持拓展数据包的设备来说,该功能无意义,所以我们将其屏蔽。
如下屏蔽这三行代码,测试问题解决。
更多Dialog技术问题,可私信、留言或者email:495323976@qq.com。
void user_on_connection(uint8_t connection_idx, struct gapc_connection_req_ind const *param)
{
default_app_on_connection(connection_idx, param);
conn_idx = connection_idx;
// features_timer = app_easy_timer(60, get_features);
dma_uart_on_connect();
dev_connected = true;
arch_printf("Device connected\r\n");
}
void user_on_disconnect( struct gapc_disconnect_ind const *param )
{
#if BLE_REMOTE_CONFIG
if (mtu_reset)
platform_reset(RESET_NO_ERROR);
#endif
#if BLE_SUOTA_RECEIVER
if (suota_state.reboot_requested)
platform_reset(RESET_AFTER_SUOTA_UPDATE);
#endif
// dma_uart_set_tx_size(23);
// default_app_on_disconnect(param);
arch_printf("Device disconnected, reason %i\r\n", (int)param->reason);
if( dma_uart.p_rx_ready_active!=NULL)
{
__disable_irq();
co_list_push_front(&dma_uart.rx_list_ready, &dma_uart.p_rx_ready_active->hdr);
dma_uart.p_rx_ready_active=NULL;
__enable_irq();
}
dma_uart_deassert_rts();
dma_uart_rx_disable();
}