按程序改变广告费率

21个帖子/ 0新
最后一篇
马达
离线
最后一次露面:5年3个月前
专家
加入:2014-01-20 21:48
按程序改变广告费率

我想根据连接到DA14580的传感器的数据更改广告间隔。我计划通过将App.c中的行209和210更改为App.c中的第209和210来完成此目的,该变量可以由另一个函数更新。

所以我会在app.c上有这样的东西:
void app\u adv\u start(无效)
{
......
cmd-> intv_min = current_app_adv_int_min;//是app_adv_int_min.
cmd-> intv_max = current_app_adv_int_max;//是app_adv_int_max.
....
}

这样行吗?这是最好的方法吗?

谢谢你的帮助。

GLU对话框
离线
最后一次露面:3年3个月前
员工
加入:2014-02-07 13:35
亲爱的马特拉德,

亲爱的马特拉德,

当您在需要更改广告间隔时,必须更改App.c中的209和210行。
所以你提到的功能很好。
请注意,current\u app\u adv\u int\u min和current\u app\u adv\u int\u max必须相同。

最好的祝福,

guillaume。

奥伦
离线
最后一次露面:1年4个月前
专家
加入:2014-06-28 22:03
嗨guillaume,

嗨guillaume,
如果您设置INTV_MIN和INTV_MAX彼此不同,您是否知道会发生什么?
从我的测试中,当INTV_MIN

你知道是否有任何副作用?如果忽略INTV_MIN,它对什么是好的?
(我只是出于好奇心而感兴趣)。

谢谢,
奥伦

HRG.
离线
最后一次露面:2年2个月前
上师
加入:2014-08-05 13:37
#定义APP\u ADV\u INT\u MIN

#define app_adv_int_min 1100.
#define app_adv_int_max 1100.
1100意味着??单位??

je_dialog
离线
最后一次露面:4天7小时前
员工
加入:2013-12-05 14:02
嗨,hrg,我相信

嗨,hrg,我相信单位是1/100秒。

布尔

je_dialog

MHv\U对话框
离线
最后一次露面:5天3小时前
员工
加入:2013-12-06 15:10
嗨,

嗨,

您应该将数字1100乘以0.625,得到事件之间的毫秒数。所以1100=>688毫秒。

HRG.
离线
最后一次露面:2年2个月前
上师
加入:2014-08-05 13:37
Hi JE\u对话框

Hi JE\u对话框

yu确定吗?因为它是广告间隔所以1100 *(1/100)= 11秒!!当或者是1100 * 0.625 = 687.S毫秒?因为在从电力分析中检查两个广告活动的时间约为680毫秒!!

MHv\U对话框
离线
最后一次露面:5天3小时前
员工
加入:2013-12-06 15:10
嗨,Hrg,

嗨,Hrg,

看我上面的答案。

除了设置之外,堆栈还必须在广告中添加一个随机数,以避免两个独立的设备在空中连续碰撞。所以广告会有+/-10毫秒的波动

je_dialog
离线
最后一次露面:4天7小时前
员工
加入:2013-12-05 14:02
Hello HRG,是的,你是对的

Hello HRG,是的,你是对的:我在我们有不同的计算时误认为我们的灯垒SW。

main.c中的第81行和第83行应用了0.625的倍数,因此680mS是正确的值。

#define app_adv_int_min 0x20 // * 0.625ms(+伪随机advdelay从0到10ms)

BR JE_DIALOG.

MHv\U对话框
离线
最后一次露面:5天3小时前
员工
加入:2013-12-06 15:10
嗨,

嗨,

只是在添加这个。您将不得不停止,然后重新启动广告以实际更改间隔。

亚历克斯
离线
最后一次露面:2年3个月前
加入:2014-08-20 03:39
嗨je,

嗨je,

在#8中,您提到(BLE)堆栈将添加随机数(0〜10ms)App_adv_int_max,而在我们的测试中,我们没有看到此随机添加到间隔:
- 当我们同时启动3DA模块(使用相同的固件)时,我们几乎无法扫描所有3个模块(有时我们只能扫描1,有时候2)。
- 如果我们逐个启动3Da模块,我们每次可以扫描所有3个模块。
-如果我们把不同APP ADV INT MAX值的固件烧到每个模块上,同时给3个模块通电,我们也可以每次扫描所有3个模块。

请帮助检查并建议。。

谢谢。
亚历克斯

mt_dialog.
离线
最后一次露面:1周3天前
员工
加入:2015-06-08 11:34
嗨,亚历克斯,

嗨,亚历克斯,

根据蓝牙规范,广告事件以固定的时间间隔发生,并通过随机延迟进行轻微修改,以帮助避免干扰。即使没有这种机制,随着时间的推移,不同的广告间隔应该会漂移并停止重叠(无论你的广告同时开始多长时间,其他设备都不会被你的扫描仪发现)。你使用不同的bd地址吗?你的软件版本是什么?

谢谢mt_dialog.

亚历克斯
离线
最后一次露面:2年3个月前
加入:2014-08-20 03:39
谢谢你,先生。。

谢谢你,先生。。

你使用不同的bd地址吗?
- 是的,我们为每个模块具有不同的BDA。
你的软件版本是什么?
- 基于SDK304开发的固件。

亚历克斯。

mt_dialog.
离线
最后一次露面:1周3天前
员工
加入:2015-06-08 11:34
嗨,亚历克斯,

嗨,亚历克斯,

如果广告活动重叠,请尝试定义CFG_TRNG配置,然后再次检查吗?

谢谢mt_dialog。

ciano
离线
最后一次露面:1天10小时前
加入:2014-10-03 08:13
嗨对话框

嗨对话框
我们与#11有同样的问题,我们使用的是SDK 5.0.2.1

信息:
我们正在使用“app\u easy\u gap\u non\u connectable\u advertise\u start\u create\u msg”设置cmd->intv\u max和cmd->intv\u min
cmd-> intv_max = user_non_connectable_advertise_conf.intv;
cmd->intv\u min=user\u non\u connectable\u播发_配置intv;

“da1458x\u config\u advanced.h”中启用了真随机数生成器
#define cfg_trng.

希望你有一个解决方案,因为这是应用程序的真正问题。

致以最诚挚的问候,
Ciano Frost.
丹麦

mt_dialog.
离线
最后一次露面:1周3天前
员工
加入:2015-06-08 11:34
你好,齐亚诺,

你好,齐亚诺,

请确保在580中下载的映像定义了CFG\u TRNG,我用sdk5.0.2.1在修改的模板示例中测试了您的场景,该示例以不可连接模式进行广告(不同的广告字符串,不同的bd_地址和相同的广告间隔),通过连接两个复位引脚,我在同一时间在两块板上发出一个复位。我可以正确地看到与嗅探器和正常的android应用程序板。我能得到一个设备和损坏的广告数据的唯一方法是当CFG\u TRNG未定义时。定义TRNG和未定义TRNG时,请检查嗅探器附件。

谢谢mt_dialog.

附件:
ciano
离线
最后一次露面:1天10小时前
加入:2014-10-03 08:13
嗨对话框

嗨对话框

我忘了提到的一件事是我正在使用计时器每一秒重新启动广告。我每次都改变广告数据。我使用user_non_connectable_advertise_conf.intv = 16000设置广告,这是10秒。因此,我的有效间隔由我的1秒计时器确定,我停止并重新启动广告。

现在我的问题是:当蓝牙协议栈每秒钟重启一次播发时,还会给播发添加0-10ms的随机延迟吗?
如果在这种情况下不加上随机延迟,那么这就可以解释我在空中遇到的广告碰撞。

期待您的回答。
致以最诚挚的问候,
ciano

mt_dialog.
离线
最后一次露面:1周3天前
员工
加入:2015-06-08 11:34
你好,齐亚诺,

你好,齐亚诺,

因此,您每1秒播发一个播发包,这是由发出播发开始的已用计时器定义的。这就解释了你的体验,第一条广告信息没有延迟。在发出app\u adv\u start之后,广告字符串将与另一个DUT在同一时间传输,之后下一个广告事件将以随机延迟重新安排,因此在您发送的第一条消息中,两条广告消息之间存在冲突。你正在经历的一个解决方法是减少广告间隔,以便第二个广告字符串在1秒间隔内传输,并随机延迟插入广告间隔,以便两个广告字符串不会发生冲突。

您可以计算您在第二个辅助广告字符串中的发布并停止广告(将被正确收到)的广告字符串,您可以捕获广告的完成,并启动计时器,当Tha计时器再次启动广告时。

以下是一个关于如何计算广告事件的小片段:

enum arch_main_loop_callback_ret count_adv_events(void)
{
uint8\t temp\u last\u ble\u事件;
temp_last_ble_event = arch_last_rwble_evt_get();
如果(应用程序\u上次\u ble \u事件!=温度(上次事件)
{
app_last_ble_event = temp_last_ble_event;
if(app_last_ble_event == ble_evt_end)
高级计数++;
如果(adv\u count==2)
{
adv_count = 0;
app_easy_gap_advertise_stop();
}
}
返回goto_sleep;
}

谢谢mt_dialog.

ciano
离线
最后一次露面:1天10小时前
加入:2014-10-03 08:13
谢谢你的答案。

谢谢你的答案。

还有一个问题:
如我所理解的,然后将随机延迟添加到广告间隔I的范围为10毫秒。是否可以将此范围增加到500或1000ms(如1000ms)?

目前,我用App Timer Setup从固定延迟加上了从-500ms到500ms的随机(trng)时间手动完成了这一点......这会及时传播广告,我几乎没有看到与许多fobs的任何冲突。

致以最诚挚的问候,
Ciano Frost.
丹麦

mt_dialog.
离线
最后一次露面:1周3天前
员工
加入:2015-06-08 11:34
你好,齐亚诺,

你好,齐亚诺,

根据BLE规范,在广告操作中插入的延迟位于ROM代码中,您无法更改。

谢谢mt_dialog.

ciano
离线
最后一次露面:1天10小时前
加入:2014-10-03 08:13
非常感谢你

十分感谢你分享这些信息。

我现在没有问题了。

致以最诚挚的问候,
Ciano Frost.
丹麦。

主题锁定