嗨1).如何列出在我们的DSPS (v_5.150.2)主机程序中发布的所有BLE设备。2).在Host中列出所有设备后,我需要通过选择某个设备来连接到该设备。请建议BLE主机程序中的哪些地方需要进行更改。
我正在使用DA14580 pro工具包。
请参考有关此或示例项目或文档的一些链接
嗨RatheeshT,
1)每当你得到一个指示,你有一个广告消息,你可以只打印数据,DSPS应用程序实现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)。如果您想扫描更长的时间,这意味着您应该在每次超时时重新启动扫描操作,因此在每次扫描中,您将获得从前一次扫描报告的设备。如果你想避免这种情况,你应该在应用级别上应用一个过滤器,以防止打印已经报告的设备。这意味着您必须创建一个数组,在其中存储在以前的扫描中获得的设备,并根据数组的条目检查每个广告指示(每个db地址),以避免打印在以前的扫描中找到的设备。
2.我看不出你的设置有什么问题,广告设备在范围内吗?如果在中央扫描时检查外围设备是否在做广告(减少广告间隔,以便广告主更频繁地发送广告字符串,也减少扫描窗口和间隔,以便中央更频繁地扫描广告频道),空中的噪声也会阻止中央设备从外围设备获得广告指示。此外,由于您只能从一个设备检查中获得一个广告字符串,如果您在user_on_adv_report_ind()中有任何if()条件,它检查广告消息中的特定字符串(如果您从DSPS复制了user_on_adv_report_ind(),它使用一个条件来验证外围设备在广告字符串中具有特定的序列)。
嗨对话框谢谢你!我能列出广告设备。扫描在初始化后立即开始,但我需要使用scan命令扫描设备,甚至使用connect命令通过选择连接到其他设备。我正在使用uart2。我引用了示例uart2_async。我做了改动mode-ARCH_SLEEP_OFF连接-端口1 pin2和端口1 pin3。Arch_printf工作,但我不能接收任何命令并给出响应。我的代码改变了
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 ();}}该代码是为了检查接收,但它没有接收任何数据。实际上,接收到的数据必须进行比较,如果命令被扫描,那么主机应该开始扫描连接。
请帮助我解决这个问题。
您确定设备没有接收到数据吗?当您拥有在READ_CHAR_COUNT中声明的数据量时,应该出现uart2_read_completion_cb()函数,因此请检查当您在终端中键入特定数量的数据时是否调用了回调。另外,因为我已经测试了您的代码,所以您需要将uart_read_in_progress变量设置为volatile才能正常工作。
嗨RatheeshT,
1)每当你得到一个指示,你有一个广告消息,你可以只打印数据,DSPS应用程序实现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)。如果您想扫描更长的时间,这意味着您应该在每次超时时重新启动扫描操作,因此在每次扫描中,您将获得从前一次扫描报告的设备。如果你想避免这种情况,你应该在应用级别上应用一个过滤器,以防止打印已经报告的设备。这意味着您必须创建一个数组,在其中存储在以前的扫描中获得的设备,并根据数组的条目检查每个广告指示(每个db地址),以避免打印在以前的扫描中找到的设备。
2.我看不出你的设置有什么问题,广告设备在范围内吗?如果在中央扫描时检查外围设备是否在做广告(减少广告间隔,以便广告主更频繁地发送广告字符串,也减少扫描窗口和间隔,以便中央更频繁地扫描广告频道),空中的噪声也会阻止中央设备从外围设备获得广告指示。此外,由于您只能从一个设备检查中获得一个广告字符串,如果您在user_on_adv_report_ind()中有任何if()条件,它检查广告消息中的特定字符串(如果您从DSPS复制了user_on_adv_report_ind(),它使用一个条件来验证外围设备在广告字符串中具有特定的序列)。
由于MT_dialog
嗨对话框
谢谢你!
我能列出广告设备。扫描在初始化后立即开始,但我需要使用scan命令扫描设备,甚至使用connect命令通过选择连接到其他设备。我正在使用uart2。我引用了示例uart2_async。我做了改动
mode-ARCH_SLEEP_OFF
连接-端口1 pin2和端口1 pin3。
Arch_printf工作,但我不能接收任何命令并给出响应。
我的代码改变了
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 ();
}
}
该代码是为了检查接收,但它没有接收任何数据。实际上,接收到的数据必须进行比较,如果命令被扫描,那么主机应该开始扫描连接。
请帮助我解决这个问题。
嗨RatheeshT,
您确定设备没有接收到数据吗?当您拥有在READ_CHAR_COUNT中声明的数据量时,应该出现uart2_read_completion_cb()函数,因此请检查当您在终端中键入特定数量的数据时是否调用了回调。另外,因为我已经测试了您的代码,所以您需要将uart_read_in_progress变量设置为volatile才能正常工作。
由于MT_dialog