hello dialog_support,
我有配置的角色交换机ble_app_peripheral.示例和DSPS项目。默认操作模式是外围当我按下按钮时,将切换当前角色中央。除了角色交换机之外,它还执行连接到其他外设和发送数据的操作。现在只有按下按钮时,才会发生下一个角色交换机。角色交换机部分顺利工作,但在发生与各个中央和外围设备的连接时,在发生变化后,我就会面临问题。我已经创建了自定义客户端配置文件配置文件,其中dsps项目名为custc1.c和custc1_task.c。在此文件中,我声明了两个常量结构。
1.如果我在下面的结构中声明gattc_cmp_evt然后在外围模式下,它平滑地连接到移动应用,但在中央模式期间它无法连接到外围设备。const struct ke_msg_handler custc1_connected [] =
{
{custc1_data_write_req,(ke_msg_func_t)custc1_data_write_req_handler},
{gattc_cmp_evt,(ke_msg_func_t)gattc_cmp_evt_handler},
};
2.如果我在下面的结构中声明gattc_cmp_evt然后在中央模式下,它能够连接到其他外设但在外围模式期间,当我们尝试连接到移动应用程序时,它进入hardfault_handler。const struct ke_msg_handler custc1_default_state [] =
{
{custc1_enable_req,(ke_msg_func_t)custc1_enable_req_handler},
{gapc_disconnect_ind,(ke_msg_func_t)gapc_disconnect_ind_handler},
{gattc_cmp_evt,(ke_msg_func_t)gattc_cmp_evt_handler},
};
以上gattc_cmp_evt_handler.在Musts1_task.c和custc1_task.c中定义。但该处理程序被宣布为静态。你能帮我找出可能是什么原因吗?
我已经上传了我使用的custc1_task.c文件的映像。
感谢致敬,
Ruchi Patel.
嗨Ruchi Patel,
我不知道你在这个自定义设计上的实现,但我想你正在使用一个能够切换角色的设备,并且每次都会取决于指定的角色,我也认为新的只有当设备充当中央而不是外围设备时,您要附加的文件和代码将仅当例如设备是外设时,那么应该触发的GattC_CMP_EVT将在对应于Task_custs1的对应文件中。而不是task_custc1(您创建的)。您正在通过PRF_INIT_FUNC()和每个不同的配置文件设置的处理程序为每个传送的消息启动其自己的处理程序,因此这是您应该检查的第一件事。初始化时的所有任务都使用KE_TASK_CREATE()函数以创建任务并为每个可用状态声明处理程序。
谢谢mt_dialog.
hello dialog_support,
我已经检查过这个问题,它没有正常发生。如果配置文件是外围然后两者task_custc1.和task_custs1.正在触发。我无法得到这个解决的问题。请帮帮我。
在这里,我附上了我的自定义实现的Google Drive链接。
https://drive.google.com/open?id=1uszepipusbgj1fv7huw8yoemhicqwhjv.
感谢致敬,
Ruchi Patel.
嗨Ruchi Patel,
好吧,据我所知,你能够在启用外围设备(自定义配置文件)时启用中央档案,据我所知,这不是您究竟想做的不是吗?因此,当您在Custs1_connected []阵列中有Gattc_cmp_evt时,由于配置文件与连接的状态不同,因此未执行相应的处理程序,因此没有执行任何内容。在custc1_default_handler []中具有相同的消息,如果gattc_cmp_evt到达特定任务,则它将被执行,并且显然是您在该处理程序中所做的任何事情都将导致硬盘发生。收到Gattc_cmp_evt的原因是因为您启用了发现过程(您调用了配置文件的启用),显然发现过程不会返回成功,因此您可以使用prf_err_stop_disc_char_missing和custc1_enable_cfm_send调用custc1_enable_cfm_send()函数()再次您调用prf_client_enable_error哪个触发硬盘触发。发生了硬盘,因为您在Prf_Client_Enable_Error宏中传递错误的变量,您将传递PRF_Client_enable_Error(Custc1_env,con_info-> prf_id,custc1);但是你应该通过的是prf_client_enable_error(custc1_envs,con_info-> prf_id,custc1);这是一个错误的指针,所以ke_free()函数遇到了硬盘困难。
谢谢mt_dialog.
hello dialog_support,
感谢您的快速和完美的回复。
嗨Ruchi Patel,
谢谢mt_dialog.