动态adv数据|扫描

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

嗨,对话框中,
我有以下疑问:
1.我需要动态地改变每个不可连接的广告中的值。定制adv数据的唯一方法是在#define USER_ADVERTISE_DATA中,但由于我必须更改每个数据包的值,我认为这是不合适的。还有别的办法吗?我使用的是app_peripheral项目。
2.我正在做一个样本项目,重新广告任何不可连接的广告,我收到在我的被动扫描。这是可能的吗?
3.可为不可连接的广告设置的最小发布间隔是多少?在此间隔期间将发送多少个广告?
提前谢谢。

设备:
MT_dialog
离线
最后看到:两个月三个星期前
工作人员
加入:2015-06-08 34
嗨wisilica,

嗨wisilica,

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

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

3.BLE规范中提到不可连接的非直接类型的最小广告间隔不能小于100ms,在每个广告间隔上发送3条广告消息,在每个广告通道37,38和39上发送一条。不可连接过程不会超时,因此在显式取消过程之前,它将继续发出广告消息。

由于MT_dialog

wisilica
离线
最后看到:11个月2天前
加入:2015-03-17 08:16
谢谢你的提示

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

MT_dialog
离线
最后看到:两个月三个星期前
工作人员
加入:2015-06-08 34
嗨wisilica,

嗨wisilica,

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

由于MT_dialog

wisilica
离线
最后看到:11个月2天前
加入:2015-03-17 08:16
谢谢你!我如何分配

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

wisilica
离线
最后看到:11个月2天前
加入: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
离线
最后看到:两个月三个星期前
工作人员
加入: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
离线
最后看到:11个月2天前
加入:2015-03-17 08:16
嗨,对话框的团队,

嗨,对话框的团队,

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

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

提前谢谢,

Wisilica

MT_dialog
离线
最后看到:两个月三个星期前
工作人员
加入:2015-06-08 34
嗨wicilica,

嗨wicilica,

你可以在两种模式之间切换多少次是没有限制的,如果设备在某个点停转,它可以在任何地方,所以你必须报告设备确切的停转位置,以便我能够检查。如果您使用的是5.0.4 SDK可以继续调试和睡觉,如果您使用的是一个老SDK你需要禁用睡眠和捕获设备的状态,如果设备栈在一段时间(1)循环或一般在任何断言你可以为了我报告有解释flau作为可能的。

以防你不明白任何断言或任何设备卡和设备继续运行而不做任何操作,这意味着你已经改变了角色但是你没有指示你的设备做任何事情,例如切换广播的角色之后,你指导设备做广告,因为如果你不,设备将进入睡眠状态,如果没有任何预定,只有一个外部唤醒将能够唤醒您。

由于MT_dialog