嗨如何列出在我们的DSPS (v_5.150.2)主机程序中广告的所有BLE设备。2).在主机中列出所有设备后,我需要通过选择该设备连接到一个特定的设备。请说明BLE主持人节目的哪些地方需要修改。
我使用的是DA14580 pro kit。
请参考相关链接或示例项目或文档
嗨RatheeshT,
1)每次你得到一个指示,你有一个广告信息,你可以打印数据,dsp应用程序实现了arch_prinf user_on_adv_report_ind中的()函数()只要你已经定义了CFG_PRINTF da1458x_config_basic.h文件中定义(也为了能够打印你还需要做一个额外的修改,在这篇文章中表示https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。)
2)如果你想有这种功能,那么你应该有一个数组放置发现的设备,并在扫描过程中为每个发现的设备分配一个索引(扫描过程作为一个中心持续大约10秒)。关于打印何时发生,这取决于你想如何实现它(要么在扫描期间或扫描完成时)。没有完全托管的示例具有这种功能,但是邻近监视窗口应用程序确实做到了这一点(在窗口上),这可能会给您一些启发。
由于MT_dialog
嗨当我列出设备地址,我得到一个单一的设备地址两次。为什么会这样,如何解决。
扫描命令消息有一个由user_scan_conf中的.filter_duplic成员配置的选项,该成员的值为SCAN_FILT_DUPLIC_EN或SCAN_FILT_DUPLIC_DIS。因此,如果配置SCAN_FILT_DUPLIC_EN为当前扫描(持续约8秒-它自动超时)不会有重复的设备(除非广告设备超过10)。因此,如果你有这个选项,你得到相同的地址在每个扫描,这是正常的,你将需要一个额外的过滤器实现的应用程序,以过滤出广告设备,独立于扫描过程的实例。
嗨MT_dialog,
1.好的,它已经在SCAN_FILT_DUPLIC_EN模式,但我不能理解你之前的帖子的最后一句话即。"你将需要一个额外的过滤器来实现你的应用程序,以过滤出广告设备将独立于扫描过程的实例。"你能更详细地描述一下吗?
我有两个对话BLE和三个其他BLE。
2.它也只列出了一个设备地址但我们的期望是,它应该发现所有设备地址。
我正在运行BLE与以下设置主机设置:(扫描)GAP_GEN_DISCOVERYSCAN_ALLOW_ADV_ALLGAPM_CONNECTION_SELECTIVE设备设置:(广告)GAP_GEN_DISCOVERABLEGAP_PERIPHERAL_SLVADV_ALLOW_SCAN_ANY_CON_ANY
你能提供你的建议吗?
1.扫描过程有一个超时(大约8秒),所以对于一个扫描操作,设备扫描大约8秒,在这8秒中,您应该不会看到重复的设备(只要您有SCAN_FILT_DUPLIC_EN)。如果您想要扫描更长的时间,这意味着您应该在每次超时时重新启动扫描操作,因此在每次扫描中,您将获得上一次扫描报告的设备。如果您想避免这种情况,您应该在应用程序级别应用一个过滤器,该过滤器将阻止已报告的打印设备。这意味着您必须创建一个数组,你将存储设备已经在以前的扫描,并检查每个广告指示(每个数据库地址)的条目数组,以避免打印设备中发现以前的扫描。
2.我没看到你的设置有什么问题,广告设备在范围内吗?如果它是检查外围是广告,而中央是扫描(减少您的广告间隔,这样广告主发送广告字符串更频繁,也减少您的扫描窗口和间隔,以便中央扫描广告渠道更频繁),此外,空气中的噪音可能会阻止中央从外围设备获得广告指示。广告也因为你得到只有一个字符串从一个设备检查,以防你有任何如果()条件user_on_adv_report_ind()检查特定字符串在广告信息(如果你复制了user_on_adv_report_ind()从需求方,它使用一个条件来验证的外围设备都有一个特定的序列广告字符串)。
嗨对话框谢谢你!我可以列出广告设备。扫描开始后立即初始化,但我需要扫描的设备与命令扫描或甚至使用命令连接到其他设备选择连接。我使用uart2。我引用了示例uart2_async。我将更改更改为mode-ARCH_SLEEP_OFF连接端口1引脚2和端口1引脚3。Arch_printf工作,但我不能接收任何命令并给出响应。我的代码更改
Void user_on_set_dev_config_complete(Void){//在数据库中添加第一个需要的服务如果(app_db_init_start ()){
uart2_read_in_progress = 1;uart2_read((uint8_t *)buffer, READ_CHAR_COUNT, uart2_read_completion_cb);
而(uart2_read_in_progress);
缓冲(READ_CHAR_COUNT) = 0;
/ / arch_printf(“工作”);arch_printf(缓冲);/// / uart2_print_string(缓冲);/ / user_scan_start ();}}代码只是检查接收,但它不接收任何数据。实际上,必须比较接收到的数据,如果命令是scan,那么主机应该开始扫描,对于连接也是一样。
请帮助我解决这个问题。
你确定设备没有接收到数据吗?uart2_read_completion_cb()函数应该发生在当你有你在READ_CHAR_COUNT中声明的数据量时,所以请检查当你在你的终端中输入特定数量的数据时回调是否被调用。此外,因为我已经测试了您的代码,您需要将uart_read_in_progress变量设置为volatile以便工作。
嗨RatheeshT,
1)每次你得到一个指示,你有一个广告信息,你可以打印数据,dsp应用程序实现了arch_prinf user_on_adv_report_ind中的()函数()只要你已经定义了CFG_PRINTF da1458x_config_basic.h文件中定义(也为了能够打印你还需要做一个额外的修改,在这篇文章中表示https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。)
2)如果你想有这种功能,那么你应该有一个数组放置发现的设备,并在扫描过程中为每个发现的设备分配一个索引(扫描过程作为一个中心持续大约10秒)。关于打印何时发生,这取决于你想如何实现它(要么在扫描期间或扫描完成时)。没有完全托管的示例具有这种功能,但是邻近监视窗口应用程序确实做到了这一点(在窗口上),这可能会给您一些启发。
由于MT_dialog
嗨
当我列出设备地址,我得到一个单一的设备地址两次。为什么会这样,如何解决。
嗨RatheeshT,
扫描命令消息有一个由user_scan_conf中的.filter_duplic成员配置的选项,该成员的值为SCAN_FILT_DUPLIC_EN或SCAN_FILT_DUPLIC_DIS。因此,如果配置SCAN_FILT_DUPLIC_EN为当前扫描(持续约8秒-它自动超时)不会有重复的设备(除非广告设备超过10)。因此,如果你有这个选项,你得到相同的地址在每个扫描,这是正常的,你将需要一个额外的过滤器实现的应用程序,以过滤出广告设备,独立于扫描过程的实例。
由于MT_dialog
嗨MT_dialog,
1.好的,它已经在SCAN_FILT_DUPLIC_EN模式,但我不能理解你之前的帖子的最后一句话
即。"你将需要一个额外的过滤器来实现你的应用程序,以过滤出广告设备将独立于扫描过程的实例。"
你能更详细地描述一下吗?
我有两个对话BLE和三个其他BLE。
2.它也只列出了一个设备地址但我们的期望是,它应该发现所有设备地址。
我正在运行BLE与以下设置
主机设置:(扫描)
GAP_GEN_DISCOVERY
SCAN_ALLOW_ADV_ALL
GAPM_CONNECTION_SELECTIVE
设备设置:(广告)
GAP_GEN_DISCOVERABLE
GAP_PERIPHERAL_SLV
ADV_ALLOW_SCAN_ANY_CON_ANY
你能提供你的建议吗?
嗨RatheeshT,
1.扫描过程有一个超时(大约8秒),所以对于一个扫描操作,设备扫描大约8秒,在这8秒中,您应该不会看到重复的设备(只要您有SCAN_FILT_DUPLIC_EN)。如果您想要扫描更长的时间,这意味着您应该在每次超时时重新启动扫描操作,因此在每次扫描中,您将获得上一次扫描报告的设备。如果您想避免这种情况,您应该在应用程序级别应用一个过滤器,该过滤器将阻止已报告的打印设备。这意味着您必须创建一个数组,你将存储设备已经在以前的扫描,并检查每个广告指示(每个数据库地址)的条目数组,以避免打印设备中发现以前的扫描。
2.我没看到你的设置有什么问题,广告设备在范围内吗?如果它是检查外围是广告,而中央是扫描(减少您的广告间隔,这样广告主发送广告字符串更频繁,也减少您的扫描窗口和间隔,以便中央扫描广告渠道更频繁),此外,空气中的噪音可能会阻止中央从外围设备获得广告指示。广告也因为你得到只有一个字符串从一个设备检查,以防你有任何如果()条件user_on_adv_report_ind()检查特定字符串在广告信息(如果你复制了user_on_adv_report_ind()从需求方,它使用一个条件来验证的外围设备都有一个特定的序列广告字符串)。
由于MT_dialog
嗨对话框
谢谢你!
我可以列出广告设备。扫描开始后立即初始化,但我需要扫描的设备与命令扫描或甚至使用命令连接到其他设备选择连接。我使用uart2。我引用了示例uart2_async。我将更改更改为
mode-ARCH_SLEEP_OFF
连接端口1引脚2和端口1引脚3。
Arch_printf工作,但我不能接收任何命令并给出响应。
我的代码更改
Void user_on_set_dev_config_complete(Void)
{
//在数据库中添加第一个需要的服务
如果(app_db_init_start ())
{
uart2_read_in_progress = 1;
uart2_read((uint8_t *)buffer, READ_CHAR_COUNT, uart2_read_completion_cb);
而(uart2_read_in_progress);
缓冲(READ_CHAR_COUNT) = 0;
/ / arch_printf(“工作”);
arch_printf(缓冲);
//
/ / uart2_print_string(缓冲);
/ / user_scan_start ();
}
}
代码只是检查接收,但它不接收任何数据。实际上,必须比较接收到的数据,如果命令是scan,那么主机应该开始扫描,对于连接也是一样。
请帮助我解决这个问题。
嗨RatheeshT,
你确定设备没有接收到数据吗?uart2_read_completion_cb()函数应该发生在当你有你在READ_CHAR_COUNT中声明的数据量时,所以请检查当你在你的终端中输入特定数量的数据时回调是否被调用。此外,因为我已经测试了您的代码,您需要将uart_read_in_progress变量设置为volatile以便工作。
由于MT_dialog