你好1)。如何列出我们DSP(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秒 - 它自动超过8秒),则会有重复的设备(除非广告设备超过10)。因此,如果您启用了此选项,并且您在正常的每次扫描上获取相同的地址,您需要应用程序实现的其他过滤器,以便过滤扫描过程的广告设备,从扫描过程的实例中无关。
嗨MT_dialog,
1.好的,它已经处于Scan_filt_duplic_en模式,但我无法理解上一篇文章的最后一句话即“”您需要应用程序实现的其他过滤器,以便从扫描过程的实例中过滤out的广告设备。“。你能更详细地描述一下吗?
我有两个对话的ble和三个另一个ble。
2.它也只列出了一个设备地址但我们的期望是,它应该发现所有设备地址。
我正在运行BLE与以下设置主机设置:(扫描)GAP_GEN_DISCOVERYSCAN_ALLOW_ADV_ALLGAPM_CONNECTION_SELECTIVE设备设置:(广告)Gap_gen_discoverable.GAP_PERIPHERAL_SLVadv_allow_scan_any_con_any.
你能提供你的建议吗?
1.扫描过程的超时(大约8秒),因此对于一个扫描操作,设备扫描大约8秒钟,在这8秒内,您不应看到重复的设备(只要您拥有Scan_filt_duplic_en)。在您希望扫描更长的时间的情况下,这意味着您应该在每次超时重新启动扫描操作,因此在每次扫描中,您将获得从上一个扫描中报告的设备。如果您想避免此操作,则应在应用程序级别应用过滤器,该过滤器将阻止已报告的打印设备。这意味着您必须创建一个阵列,您将在其中存储您在以前的扫描中拾取的设备,并检查每个广告指示(每个DB地址),以避免找到的打印设备在以前的扫描中。
2.我没看到你的设置有什么问题,广告设备在范围内吗?如果它是检查外围是广告,而中央是扫描(减少您的广告间隔,这样广告主发送广告字符串更频繁,也减少您的扫描窗口和间隔,以便中央扫描广告渠道更频繁),此外,空气中的噪音可能会阻止中央从外围设备获得广告指示。广告也因为你得到只有一个字符串从一个设备检查,以防你有任何如果()条件user_on_adv_report_ind()检查特定字符串在广告信息(如果你复制了user_on_adv_report_ind()从需求方,它使用一个条件来验证的外围设备都有一个特定的序列广告字符串)。
嗨对话框谢谢我能够列出广告设备。扫描在初始化之后立即启动,但我需要使用命令扫描扫描设备,甚至使用命令通过选择来连接到其他设备。我正在使用UART2。我提到了uart2_async.i使更改为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 *)缓冲区,READ_CHAR_COUNT,UART2_READ_COMPLETION_CB);
而(UART2_READ_IN_POGRONGER);
缓冲区[read_char_count] = 0;
// ARCH_PRINTF(“工作”);ARCH_PRINTF(缓冲区);/// / uart2_print_string(缓冲);// user_scan_start();}}代码仅用于检查接收程度......但它不接收任何数据。实际上,必须比较接收的数据,如果命令是扫描,则主机应开始扫描和连接。
请帮助我解决这个问题。
你确定设备没有接收到数据吗?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秒 - 它自动超过8秒),则会有重复的设备(除非广告设备超过10)。因此,如果您启用了此选项,并且您在正常的每次扫描上获取相同的地址,您需要应用程序实现的其他过滤器,以便过滤扫描过程的广告设备,从扫描过程的实例中无关。
谢谢mt_dialog.
嗨MT_dialog,
1.好的,它已经处于Scan_filt_duplic_en模式,但我无法理解上一篇文章的最后一句话
即“”您需要应用程序实现的其他过滤器,以便从扫描过程的实例中过滤out的广告设备。“。
你能更详细地描述一下吗?
我有两个对话的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)。在您希望扫描更长的时间的情况下,这意味着您应该在每次超时重新启动扫描操作,因此在每次扫描中,您将获得从上一个扫描中报告的设备。如果您想避免此操作,则应在应用程序级别应用过滤器,该过滤器将阻止已报告的打印设备。这意味着您必须创建一个阵列,您将在其中存储您在以前的扫描中拾取的设备,并检查每个广告指示(每个DB地址),以避免找到的打印设备在以前的扫描中。
2.我没看到你的设置有什么问题,广告设备在范围内吗?如果它是检查外围是广告,而中央是扫描(减少您的广告间隔,这样广告主发送广告字符串更频繁,也减少您的扫描窗口和间隔,以便中央扫描广告渠道更频繁),此外,空气中的噪音可能会阻止中央从外围设备获得广告指示。广告也因为你得到只有一个字符串从一个设备检查,以防你有任何如果()条件user_on_adv_report_ind()检查特定字符串在广告信息(如果你复制了user_on_adv_report_ind()从需求方,它使用一个条件来验证的外围设备都有一个特定的序列广告字符串)。
谢谢mt_dialog.
嗨对话框
谢谢
我能够列出广告设备。扫描在初始化之后立即启动,但我需要使用命令扫描扫描设备,甚至使用命令通过选择来连接到其他设备。我正在使用UART2。我提到了uart2_async.i使更改为
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 *)缓冲区,READ_CHAR_COUNT,UART2_READ_COMPLETION_CB);
而(UART2_READ_IN_POGRONGER);
缓冲区[read_char_count] = 0;
// ARCH_PRINTF(“工作”);
ARCH_PRINTF(缓冲区);
//
/ / uart2_print_string(缓冲);
// user_scan_start();
}
}
代码仅用于检查接收程度......但它不接收任何数据。实际上,必须比较接收的数据,如果命令是扫描,则主机应开始扫描和连接。
请帮助我解决这个问题。
嗨Ratheesht,
你确定设备没有接收到数据吗?uart2_read_completion_cb()函数应该发生在当你有你在READ_CHAR_COUNT中声明的数据量时,所以请检查当你在你的终端中输入特定数量的数据时回调是否被调用。此外,因为我已经测试了您的代码,您需要将uart_read_in_progress变量设置为volatile以便工作。
谢谢mt_dialog.