动态adv数据|扫描

9个帖子/ 0个新
最后发表
wisilica
离线
最后看到:1年3天前
加入:2015-03-17 08:16
动态adv数据|扫描

嗨对话框,
我有以下疑问:
1.我需要动态地改变每个非可连接广告中的值。自定义adv数据的唯一方法是#define user_advertise_data,但由于我必须更改每个数据包的值,我认为不太适合。有没有其他方式?我正在使用app_peripheral项目。
2.我正在研究一个示例项目来重新宣传我在被动扫描期间收到的任何不可连接的广告。这可能吗?
3.可以为非可连接广告设置的最小广告间隔是多少,以及在此间隔期间将发送多少广告?
提前谢谢。

设备:
MT_dialog
离线
最后看到:4个月3天前
工作人员
加入:2015-06-08 34
嗨wisilica,

嗨wisilica,

1.你可以看一下最基本的例子,广告字符串通过计数器动态改变,问题是你必须停止广告过程,更新字符串,然后再次开始广告。

2.为了做到这一点,您需要在角色之间进行切换(580不支持多个角色,您必须是外围设备或中心设备)。为了做到这一点,你将不得不从广告的字符串复制数据发现,发出gapm重置命令以重置堆栈,重新配置设备作为peirpheral应用发现广告在外设广告字符串和字符串开始的广告程序。

3.在每个广告间隔3上,不能小于100ms的不可连接的未连接类型的最小广告间隔的BLE规范提及,在每个广告通道37,38和39上发送一个广告消息。非可连接过程“T超时,在您默认取消该过程之前,它将继续进行授权广告消息。

谢谢mt_dialog.

wisilica
离线
最后看到:1年3天前
加入:2015-03-17 08:16
谢谢你的提示

感谢您的及时回复。关于第二点,在14583年,GAPM的角色是否可以动态转换?

MT_dialog
离线
最后看到:4个月3天前
工作人员
加入:2015-06-08 34
嗨wisilica,

嗨wisilica,

是的,583本质上是带有flash的580,因为有flash,所以没有深度睡眠能力,所以你可以用GAPM_RESET_CMD在583上切换角色。

谢谢mt_dialog.

wisilica
离线
最后看到:1年3天前
加入:2015-03-17 08:16
谢谢你。如何分配

谢谢你。在发出GAPM_RESET_CMD后如何分配新角色?

wisilica
离线
最后看到:1年3天前
加入:2015-03-17 08:16
嗨,对话框的团队,

嗨,对话框的团队,

我的目的是在固定的时间内通告ble包,然后开始扫描。
为此,我在user_config.h中初始化结构user_gapm_conf如下:
静态struct gapm_configuration user_gapm_conf = {
///设备角色:中心,外围,观察者或广播
.role = GAP_PERIPHERAL_SLV,
..
}

在一些广告之后,我需要扫描ble数据包,其中的角色必须转换。为此,我遵循了您的建议。也就是说,我已经设置了user_gapm_conf。role = GAP_OBSERVER_SCA,然后通过调用api app_gapm_reset_op()发出GAPM_RESET_CMD。但是没有收到任何数据包。另外,流控制输入函数user_app_scanning_completed,定义如下。
.app_on_scanning_completed = user_app_scanning_completed,

谢谢提前
Wisilica

MT_dialog
离线
最后看到:4个月3天前
工作人员
加入:2015-06-08 34
嗨wisilica,

嗨wisilica,

SDK默认不支持这种配置,所以你必须覆盖一些功能,外围设备和中心之间的变化流程是这样的:

  • 当设备启动时,会触发GAPM_CMP_EVT,表明堆栈的重置已经完成,该重置由gapm_cmp_evt_handler()处理,并调用app_easy_gap_dev_configure()。
  • app_easy_gap_dev_configure()使用来自user_gapm_conf结构的配置来设置设备的角色。
  • 因此,您必须创建自己的app_easy_gap_dev_configure()函数,该函数将根据之前的状态或您想要的条件将设备配置为中心设备或外设设备。

通过调用app_gapm_reset_op(),您只是使用与前面相同的配置重置堆栈,我假设它是一个外设。

对于扫描和扫描的完成,扫描过程有一个超时,即在大约8秒之后,该过程将完成,状态参数值为user_app_scanning_completed中的GAP_ERR_TIMEOUT。

谢谢mt_dialog.

wisilica
离线
最后看到:1年3天前
加入:2015-03-17 08:16
嗨,对话框的团队,

嗨,对话框的团队,

我已经按照您的指示,能够将设备角色从外设切换为观察者。此外,我能够收到ble包扫描。但是在我的应用程序中,我需要一些这样的开关。例如,我需要在观察者和广播模式之间切换多次。当我这样做时,我的设备执行突然停止。

例如,设备角色最初为GAP_PERIPHERAL_SLV。设备在一定时间内处于通告模式。然后,我将重置堆栈,并将设备角色设置为GAP_OBSERVER_SCA。然后在一段时间内,设备进入扫描模式。该设备也可以捕获BLE数据包。现在,在这个扫描周期之后,我希望设备返回到广告模式,为此,我再次重置堆栈,并将角色更改为gap_broadcast_adv。但在此之后,设备执行突然停止。请问这种情况发生的原因是什么?角色转换的次数是否有限制?

提前谢谢,

Wisilica

MT_dialog
离线
最后看到:4个月3天前
工作人员
加入:2015-06-08 34
嗨wicilica,

嗨wicilica,

如果设备在某些时候可以在两种模式下切换,则无限度地没有限制,可以在某个地方停下来,因此您必须报到设备摊位的究竟在哪里,以便我能够检查。如果您使用的是5.0.4 SDK,您可以继续调试和睡眠,如果您使用的是较旧的SDK,则必须禁用休眠并捕获设备的状态,因此如果设备堆栈在一段时间内(1)循环或一般来说,在任何断言中,您可以报告它,以便让我有一些东西来解释可能的武力。

在您没有看到任何断言或设备所卡住的任何断言和设备的任何位置,而无需执行任何操作,这意味着您已更改的角色,但您尚未指示设备执行任何操作,例如在您之后转回广播公司的角色,你指示设备宣传,自从你没有,设备会睡觉,如果没有任何东西安排了外部唤醒就可以唤醒你。

谢谢mt_dialog.