嗨,对话框中,
我有以下疑问:
1.我需要动态地改变每个非连接广告中的值。定制adv数据的唯一方法是在#define USER_ADVERTISE_DATA,但由于我必须改变每个包的值,我认为这是不合适的。还有别的办法吗?我正在使用app_peripheral项目。
2.我正在做一个样本项目,重新发布我在被动扫描期间收到的任何不可连接的广告。这是可能的吗?
3.对于不可连接的广告,可以设置的最小发布间隔是多少?在这个间隔期间将发送多少个广告?
提前谢谢。
设备:
嗨wisilica,
1.你可以看一个简单的例子,广告字符串通过一个计数器动态改变,问题是你必须停止广告过程,更新字符串,然后再次开始广告。
2.为了做到这一点,你需要在角色之间进行切换(580不支持多个角色,你要么是外围设备,要么是中心设备)。为了做到这一点,你将不得不从广告的字符串复制数据发现,发出gapm重置命令以重置堆栈,重新配置设备作为peirpheral应用发现广告在外设广告字符串和字符串开始的广告程序。
3.BLE规范中提到,不可连接的非直接类型的最小广告间隔不能小于100ms,每个广告间隔发送3条广告消息,每个广告通道分别发送37、38和39条广告消息。非可连接过程不会超时,因此直到您显式地取消该过程,它将继续发送广告消息。
由于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)循环或一般在任何断言你可以为了我报告有解释flau作为可能的。
以防你不明白任何断言或任何设备卡和设备继续运行而不做任何操作,这意味着你已经改变了角色但是你没有指示你的设备做任何事情,例如切换广播的角色之后,你指导设备做广告,因为如果你不,该设备将会休眠,如果没有任何安排,只有外部唤醒将能够唤醒你。
由于MT_dialog