嗨对话框,我有以下疑问:1.我需要动态地改变每个非可连接广告中的值。自定义adv数据的唯一方法是#define user_advertise_data,但由于我必须更改每个数据包的值,我认为不太适合。有没有其他方式?我正在使用app_peripheral项目。2.我正在研究一个示例项目来重新宣传我在被动扫描期间收到的任何不可连接的广告。这可能吗?3.可以为非可连接广告设置的最小广告间隔是多少,以及在此间隔期间将发送多少广告?提前谢谢。
嗨wisilica,
1.你可以看一个简单的例子,广告字符串通过一个计数器动态改变,问题是你必须停止广告过程,更新字符串,然后再次开始广告。
2.为了做到这一点,你需要在角色之间进行切换(580不支持多个角色,你要么是外围设备,要么是中心设备)。为了做到这一点,你将不得不从广告的字符串复制数据发现,发出gapm重置命令以重置堆栈,重新配置设备作为peirpheral应用发现广告在外设广告字符串和字符串开始的广告程序。
3.在每个广告间隔3上,不能小于100ms的不可连接的未连接类型的最小广告间隔的BLE规范提及,在每个广告通道37,38和39上发送一个广告消息。非可连接过程“T超时,在您默认取消该过程之前,它将继续进行授权广告消息。
谢谢mt_dialog.
感谢您的及时回复。关于第二点,14583年GAPM角色的动态转换是否可能?
是的,583本质上是一个带有闪光的580,因为闪光而没有深度睡眠能力,所以是的,你可以使用GAPM_RESET_CMD在583上切换角色。
谢谢你。在发出GAPM_RESET_CMD后如何分配新角色?
嗨,对话框的团队,
我的目的是在固定的时间内发布ble数据包,然后开始扫描。为此,我在user_config.h中初始化结构user_gapm_conf,如下所示:Static struct gapm_configuration user_gapm_conf = {///设备角色:中央、外围、观察者或广播者.role = GAP_PERIPHERAL_SLV,..}
在几则广告之后,我需要扫描那些需要转换角色的祝福包。在这一点上,我遵循了你的建议。也就是说,我设置了user_gapm_conf。role = GAP_OBSERVER_SCA,然后通过调用api app_gapm_reset_op()发出GAPM_RESET_CMD。但是没有收到任何数据包。此外,流控制正在输入函数user_app_scaning_completed,定义如下。.app_on_scanning_completed = user_app_scanning_completed,
谢谢提前Wisilica
SDK默认不支持这种配置,所以你必须覆盖一些功能,外设和中心之间的变化流程是这样的:
通过调用app_gapm_reset_op(),您只是用与之前相同的配置重置了堆栈,我假设它是一个外围设备。
关于扫描和扫描的完成,扫描过程有一个超时,这意味着大约8秒后,该过程将以user_app_scaning_completed中的状态参数GAP_ERR_TIMEOUT的值完成。
我已经按照您的指示做了,我可以将设备角色从外围设备转换为观察者。此外,我可以收到ble包扫描。但在我的应用程序中,我需要许多这样的开关。例如,我需要在观察者和广播模式之间进行多次切换。当我这样做时,我的设备执行突然停止。
例如,最初的设备角色是GAP_PERIPHERAL_SLV。设备在一段时间内处于发布模式。之后,我将重置堆栈,并将设备角色设置为GAP_OBSERVER_SCA。然后在一定的时间内,设备处于扫描模式。设备也在捕获BLE报文。现在,在这个扫描周期之后,我希望设备回到广告模式,为此,我再次重置堆栈,并将角色更改为gap_broadcast_adv。但在此之后,设备的执行突然停止。你能说明这种情况发生的可能原因吗?角色转换的次数是否有限制?
提前谢谢,
Wisilica
嗨wicilica,
如果设备在某些时候可以在两种模式下切换,则无限度地没有限制,可以在某个地方停下来,因此您必须报到设备摊位的究竟在哪里,以便我能够检查。如果您使用的是5.0.4 SDK,您可以继续调试和睡眠,如果您使用的是较旧的SDK,则必须禁用休眠并捕获设备的状态,因此如果设备堆栈在一段时间内(1)循环或一般来说,在任何断言中,您可以报告它,以便让我有一些东西来解释可能的武力。
在您没有看到任何断言或设备所卡住的任何断言和设备的任何位置,而无需执行任何操作,这意味着您已更改的角色,但您尚未指示设备执行任何操作,例如在您之后转回广播公司的角色,你指示设备宣传,自从你没有,设备会睡觉,如果没有任何东西安排了外部唤醒就可以唤醒你。
嗨wisilica,
1.你可以看一个简单的例子,广告字符串通过一个计数器动态改变,问题是你必须停止广告过程,更新字符串,然后再次开始广告。
2.为了做到这一点,你需要在角色之间进行切换(580不支持多个角色,你要么是外围设备,要么是中心设备)。为了做到这一点,你将不得不从广告的字符串复制数据发现,发出gapm重置命令以重置堆栈,重新配置设备作为peirpheral应用发现广告在外设广告字符串和字符串开始的广告程序。
3.在每个广告间隔3上,不能小于100ms的不可连接的未连接类型的最小广告间隔的BLE规范提及,在每个广告通道37,38和39上发送一个广告消息。非可连接过程“T超时,在您默认取消该过程之前,它将继续进行授权广告消息。
谢谢mt_dialog.
感谢您的及时回复。关于第二点,14583年GAPM角色的动态转换是否可能?
嗨wisilica,
是的,583本质上是一个带有闪光的580,因为闪光而没有深度睡眠能力,所以是的,你可以使用GAPM_RESET_CMD在583上切换角色。
谢谢mt_dialog.
谢谢你。在发出GAPM_RESET_CMD后如何分配新角色?
嗨,对话框的团队,
我的目的是在固定的时间内发布ble数据包,然后开始扫描。
为此,我在user_config.h中初始化结构user_gapm_conf,如下所示:
Static struct gapm_configuration user_gapm_conf = {
///设备角色:中央、外围、观察者或广播者
.role = GAP_PERIPHERAL_SLV,
..
}
在几则广告之后,我需要扫描那些需要转换角色的祝福包。在这一点上,我遵循了你的建议。也就是说,我设置了user_gapm_conf。role = GAP_OBSERVER_SCA,然后通过调用api app_gapm_reset_op()发出GAPM_RESET_CMD。但是没有收到任何数据包。此外,流控制正在输入函数user_app_scaning_completed,定义如下。
.app_on_scanning_completed = user_app_scanning_completed,
谢谢提前
Wisilica
嗨wisilica,
SDK默认不支持这种配置,所以你必须覆盖一些功能,外设和中心之间的变化流程是这样的:
通过调用app_gapm_reset_op(),您只是用与之前相同的配置重置了堆栈,我假设它是一个外围设备。
关于扫描和扫描的完成,扫描过程有一个超时,这意味着大约8秒后,该过程将以user_app_scaning_completed中的状态参数GAP_ERR_TIMEOUT的值完成。
谢谢mt_dialog.
嗨,对话框的团队,
我已经按照您的指示做了,我可以将设备角色从外围设备转换为观察者。此外,我可以收到ble包扫描。但在我的应用程序中,我需要许多这样的开关。例如,我需要在观察者和广播模式之间进行多次切换。当我这样做时,我的设备执行突然停止。
例如,最初的设备角色是GAP_PERIPHERAL_SLV。设备在一段时间内处于发布模式。之后,我将重置堆栈,并将设备角色设置为GAP_OBSERVER_SCA。然后在一定的时间内,设备处于扫描模式。设备也在捕获BLE报文。现在,在这个扫描周期之后,我希望设备回到广告模式,为此,我再次重置堆栈,并将角色更改为gap_broadcast_adv。但在此之后,设备的执行突然停止。你能说明这种情况发生的可能原因吗?角色转换的次数是否有限制?
提前谢谢,
Wisilica
嗨wicilica,
如果设备在某些时候可以在两种模式下切换,则无限度地没有限制,可以在某个地方停下来,因此您必须报到设备摊位的究竟在哪里,以便我能够检查。如果您使用的是5.0.4 SDK,您可以继续调试和睡眠,如果您使用的是较旧的SDK,则必须禁用休眠并捕获设备的状态,因此如果设备堆栈在一段时间内(1)循环或一般来说,在任何断言中,您可以报告它,以便让我有一些东西来解释可能的武力。
在您没有看到任何断言或设备所卡住的任何断言和设备的任何位置,而无需执行任何操作,这意味着您已更改的角色,但您尚未指示设备执行任何操作,例如在您之后转回广播公司的角色,你指示设备宣传,自从你没有,设备会睡觉,如果没有任何东西安排了外部唤醒就可以唤醒你。
谢谢mt_dialog.