⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support..我们将在未来几天修复bug /优化搜索和标记。
6个帖子/ 0新
最后发表
前腿帕特尔
离线
最后看到:2年8个月前
加入:2017-03-29专机
角色切换

你好Dialog_support,

我已经配置角色切换使用ble_app_peripheral实例和DSPS项目。默认操作模式为外围当我按下按钮,当前角色就会切换到中央.除了角色切换之外,它还执行连接其他外设和发送数据等操作。现在,只有当按钮被按下时,才会发生下一个角色转换。角色转换部分工作得很顺利,但是在角色转换后与各自的中心和外围发生连接时,我面临着一个问题。我已经在DSPS项目的帮助下创建了自定义客户端配置文件,命名为custc1.c和custc1_task.c。在这个文件中,我声明了两个常量结构。

1.如果我在下面的结构中声明GATTC_CMP_EVT,然后在外设模式下,它平滑地连接到移动应用程序,但在中心模式下,它不能连接到外设。
Const struct ke_msg_handler custc1_connected[] =

(ke_msg_func_t) custc1_data_write_req_handler}, {CUSTC1_DATA_WRITE_REQ
(ke_msg_func_t) gattc_cmp_evt_handler}, {GATTC_CMP_EVT
};

2.如果我在下面的结构中声明GATTC_CMP_EVT,然后在中心模式下,它能够连接到其他外设,但在外设模式期间,当我们试图连接到移动应用程序,然后它进入hardfault_handler。
const struct ke_msg_handler custc1_default_state [] =

(ke_msg_func_t) custc1_enable_req_handler}, {CUSTC1_ENABLE_REQ
(ke_msg_func_t) gapc_disconnect_ind_handler}, {GAPC_DISCONNECT_IND
(ke_msg_func_t) gattc_cmp_evt_handler}, {GATTC_CMP_EVT
};

上面的gattc_cmp_evt_handler在Musts1_task.c和custc1_task.c中定义。但该处理程序被宣布为静态。你能帮我找出可能是什么原因吗?

我已经上传了我使用的custc1_task.c文件的映像。

感谢和问候,
前腿帕特尔

设备:
MT_dialog
离线
最后看到:4个月,1个星期前
职员
加入:2015-06-08 34
嗨,前腿帕特尔

嗨,前腿帕特尔

我不知道你在这个自定义设计上的实现,但我想你正在使用一个能够切换角色的设备,并且每次都会取决于指定的角色,我也认为新的只有当设备充当中央而不是外围设备时,您要附加的文件和代码将仅当例如设备是外设时,那么应该触发的GattC_CMP_EVT将在对应于Task_custs1的对应文件中。而不是task_custc1(您创建的)。您正在通过PRF_INIT_FUNC()和每个不同的配置文件设置的处理程序为每个传送的消息启动其自己的处理程序,因此这是您应该检查的第一件事。初始化时的所有任务都使用KE_TASK_CREATE()函数以创建任务并为每个可用状态声明处理程序。

由于MT_dialog

前腿帕特尔
离线
最后看到:2年8个月前
加入:2017-03-29专机
你好Dialog_Support,

你好Dialog_Support,

例如,如果该设备是一个外设,那么应该被触发的GATTC_CMP_EVT将在对应的文件中,该文件对应于task_cust1,而不是在task_cust1(您已经创建的)中。

我已经检查过这个问题,它没有正常发生。如果配置文件是外围那么两个TASK_CUSTC1TASK_CUSTS1正在触发。我无法得到这个解决的问题。请帮帮我。

在这里我附加了我的自定义实现谷歌驱动器链接。
https://drive.google.com/open?id=1UsZEpIpUsBgj1FV7huw8yoEmhICqWhJv

感谢和问候,
前腿帕特尔

MT_dialog
离线
最后看到:4个月,1个星期前
职员
加入:2015-06-08 34
嗨,前腿帕特尔

嗨,前腿帕特尔

好吧,据我所知,你能够在启用外围设备(自定义配置文件)时启用中央档案,据我所知,这不是您究竟想做的不是吗?因此,当您在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

前腿帕特尔
离线
最后看到:2年8个月前
加入:2017-03-29专机
你好Dialog_Support,

你好Dialog_Support,

谢谢您快速而完美的回复。

1.一旦启用了外设(自定义配置文件),就启用了中心配置文件。

是的,我不想要这种配置。如何一次配置一个配置文件?我在代码中缺少什么步骤?

2.在替换此PRF_CLIENT_ENABLE_ERROR(custc1_envs, con_info->prf_id, CUSTC1);之后,现在我的应用程序不再进入任何处理程序。

3.当外设模式第一次运行时,它工作得很好,但当我切换到中央模式时,我的设备不能连接到其他外设设备。

4.在2-3倍的角色切换后,外围设备也无法正常工作。当我尝试将外围设备连接到移动应用程序时,它向我显示状态“连接”。

你能帮我解决这个配置文件相关问题。

感谢和问候,
前腿帕特尔

MT_dialog
离线
最后看到:4个月,1个星期前
职员
加入:2015-06-08 34
嗨,前腿帕特尔

嗨,前腿帕特尔

  1. 关于第一个问题,使两个配置文件,SDK没有准备启用相应的角色配置文件切换后,您必须添加一个检查当启用配置文件检查每次都主动扮演什么角色,例如在连接当作为外围没有必要执行发现,因此,一种想法是在启用和启动发现之前检查app_custsc1_enable()中的角色状态,外设角色也是如此。
  2. 关于第二个问题,该设备不去任何处理器,它是为一个中央或外设?以来的弗兰克-威廉姆斯,你提供了我能得到连接指示的设备操作作为核心或外围和启用的概要文件在连接和gattc_cmp_evt_handler()当应用于custc1_discovering[]数组(这是就可以测试它当连接到项目外围)。如果设备没有执行发现的处理程序,这意味着由于某些原因发现失败。
  3. 关于将作为一个核心的连接作为中心时,当您找到与您的广告字符串匹配的设备时,您可以调用app_easy_gap_start_connection_to_set()以设置连接参数,然后取消扫描过程,这意味着设备将执行user_on_scanning_Completed回调。在那个回调中,您可以检查扫描命令的状态,并且在值为外部的情况下,您将重新启动扫描,因此您从不向另一侧发送连接请求,在您可以停止扫描的每个广告字符串中。然后你再次重新启动扫描。您应该做的是检查状态是否已被取消,然后调用app_easy_gap_start_connection_to()否则开始扫描。
  4. 关于最后一个问题,我使用了pro套件上的按钮从外围到中心来回切换,我能够连接在每个开关没有问题,我有一个电话设备和一个外设设备(fw被配置为根据bd地址连接)在这两种情况下,我没有问题连接,无论我做了怎样的交换机。

由于MT_dialog