以程序方式改变广告费率

21个员额/0个新员额
最后一篇文章
斑驳
离线
最后一次见到:5年9个月前
专家
加入:2014-01-20 21:48
以程序方式改变广告费率

我想根据连接到DA14580的传感器的数据更改广告时间间隔。我计划通过将app.c中的第209行和第210行更改为可以由另一个函数更新的全局变量来实现这一点。

所以我在app.c中会有类似的内容:
空白app_adv_start(空白)
{
...
cmd->intv_min=当前应用程序adv_int_min;//应用程序是否为ADV INT MIN
cmd->intv_max=current_app_adv_int_max;//是应用程序ADV INT MAX吗
....
}

这工作吗?这是最好的方法吗?

谢谢你给的任何帮助。

总账对话框(未验证)
亲爱的莫特瑞德,

亲爱的莫特瑞德,

你说得对,app.c中的第209行和第210行都必须更改,以防你需要更改广告间隔。
所以你提到的函数很好。
注意current_app_adv_int_min和current_app_adv_int_max必须相同。

顺致敬意,

纪尧姆。

奥伦
离线
最后一次见到:1年10个月前
专家
加入:2014-06-28 22:03
嗨,纪尧姆,

嗨,纪尧姆,
您知道如果将intv_min和intv_max设置为彼此不同会发生什么吗?
根据我的测试,当intv_min

你知道这样做有没有副作用吗?如果忽略intv_min,它有什么好处?
(我只是出于好奇而感兴趣)。

谢谢
奥伦

hrg
离线
最后一次见到:2年8个月前
大师
加入:2014-08-05 13:37
#定义APP_ADV_INT_MIN

#定义应用程序ADV INT MIN 1100
#定义APP_ADV_INT_MAX 1100
1100意思吗? ?单位? ?

对话
离线
最后一次见到:2个月2周前
工作人员
加入:2013-12-05 14:02
嗨,hrg,我想是单位

嗨,hrg,我想单位是百分之一秒。

对话

MHv_Dialog
离线
最后一次见到:2周6天前
工作人员
加入:2013-12-06 15:10
你好

你好

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

hrg
离线
最后一次见到:2年8个月前
大师
加入:2014-08-05 13:37
嗨JE_Dialog

嗨JE_Dialog

你确定吗?因为是广告时间间隔,所以1100*(1/100)= 11秒!!??还是1100 * 0.625 =687 ?msec ?因为在检查功率分析时,两个广告事件之间的时间大约是680毫秒!!

MHv_Dialog
离线
最后一次见到:2周6天前
工作人员
加入:2013-12-06 15:10
嗨Hrg,

嗨Hrg,

请看我上面的答案。

除了设置之外,堆栈还必须在广告中添加一个随机数,以避免两个独立的设备在空中不断碰撞。所以广告将波动一些+/-10ms

对话
离线
最后一次见到:2个月2周前
工作人员
加入:2013-12-05 14:02
你好,hrg,是的,你是对的

你好,hrg,是的,你是对的:我错看了我们的信标软件,我们有一个不同的计算。

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

#定义APP_ADV_INT_MIN 0x20/*0.625ms(+伪随机advDelay从0到10ms)

BR JE_对话

MHv_Dialog
离线
最后一次见到:2周6天前
工作人员
加入:2013-12-06 15:10
你好

你好

再加上这个。您必须停止,然后重新启动广告,以实际更改间隔。

亚历克斯
离线
最后一次见到:2年9个月前
加入:2014-08-20 03:39
嗨,杰,

嗨,杰,

在#8中,您提到(BLE)堆栈将在APP#u ADV#u INT#u MAX上方添加随机数(0~10ms),而在我们的测试中,我们没有看到此随机数添加到间隔:
-当我们同时启动3个DA模块(使用相同的固件)时,我们几乎无法扫描所有3个模块(有时我们只能扫描1个,有时2个)。
-而如果我们一个接一个地打开3个DA模块,我们每次都可以扫描所有3个模块。
如果我们用不同的APP_ADV_INT_MAX值刻录固件到每个模块,同时启动3个模块,我们也可以每次扫描所有3个模块。

请帮忙检查并建议…

谢谢
亚历克斯

MT_对话框
离线
最后一次见到:5个月3周前
工作人员
加入:2015-06-08 34
嗨,亚历克斯,

嗨,亚历克斯,

根据蓝牙规范,广告事件发生在有规律的间隔,轻微修改与随机延迟,以帮助避免干扰。即使没有这种机制,随着时间的推移,不同的广告间隔也应该漂移并停止相互重叠(无论你的广告在扫描器无法发现其他设备的情况下如何同时开始)。你使用不同的bd地址吗?你的软件版本是什么?

谢谢你的对话

亚历克斯
离线
最后一次见到:2年9个月前
加入:2014-08-20 03:39
谢谢你太. .

谢谢你太. .

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

亚历克斯。

MT_对话框
离线
最后一次见到:5个月3周前
工作人员
加入:2015-06-08 34
嗨,亚历克斯,

嗨,亚历克斯,

请您尝试定义CFG\u TRNG配置,并再次检查广告事件是否重叠?

谢谢你的对话。

齐亚诺
离线
最后一次见到:4周8小时前
加入:2014-10-03 08:13
嗨,对话

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

信息:
我们使用“app_easy_gap_non_connectable_advertise_start_create_msg”来设置cmd->intv_max和cmd->intv_min
cmd->intv\u max=user\u non\u connectable\u advertive\u conf.intv;
cmd - > intv_min = user_non_connectable_advertise_conf.intv;

在da1458x_config_advanced.h中启用真随机数生成器
#定义CFG\u TRNG

希望您有一个解决方案,因为这是应用程序的一个实际问题。

最好的问候,
西亚诺霜
丹麦

MT_对话框
离线
最后一次见到:5个月3周前
工作人员
加入:2015-06-08 34
嗨ciano,

嗨ciano,

请确保580中下载的图像已定义CFG_TRNG,我用SDK 5.0.2.1在一个修改模板示例中测试了您的场景在非连接模式下的广告(不同的广告字符串,不同的bd_地址和相同的广告间隔),并通过连接两个复位引脚,我在两个板在同一时间发出复位。我可以用嗅探器和正常的android BLE应用程序正确地看到板子。我可以得到一个设备和损坏的广告数据的唯一方法是当CFG_TRNG是未定义的。请检查嗅嗅器附件是否定义了TRNG。

谢谢你的对话

附件:
齐亚诺
离线
最后一次见到:4周8小时前
加入:2014-10-03 08:13
嗨,对话

嗨,对话

有一件事我忘了提及,那就是我正在使用计时器每秒钟重新启动一次广告。我每次都会更改广告数据。我用user_non_connectable_advertive_conf.intv=16000设置广告,即10秒。因此,我的有效间隔是由我的1秒计时器决定的,在这里我停止并重新启动广告。

现在我的问题是:当蓝牙堆栈每秒钟重新启动它的广告时,广告还会有一个随机的0-10毫秒的延迟吗?
如果在这种情况下没有添加随机延迟,那么这就可以解释我在空中体验到的广告碰撞。

期待你的回答。
最好的问候,
齐亚诺

MT_对话框
离线
最后一次见到:5个月3周前
工作人员
加入:2015-06-08 34
嗨ciano,

嗨ciano,

所以你每一秒发布一个广告包,这是由一个发布广告开始的经过时间定时器定义的。这解释了你的体验,第一个广告信息没有延迟应用于它。在发布app_adv_start之后,广告字符串与其他DUT在同一时间传输,在此之后,下一个广告事件将以随机延迟重新调度,因此在您发送的第一个消息中,两个广告消息之间存在冲突。你正在经历的一个工作是减少广告间隔,以便第二个广告字符串在1秒间隔内传输,并插入广告间隔的随机延迟,以便两个广告字符串不会冲突。

您可以计算已显示的广告字符串,并在第二个显示的广告字符串(将正确接收)中停止广告,您可以捕获广告的完成并启动计时器,当计时器过期时,再次启动广告。

这里有一个小片段,你可以计算你的广告事件:

枚举arch\u main\u loop\u callback\u ret count\u adv\u事件(无效)
{
uint8_t temp_last_ble_event;
temp_last_ble_event=arch_last_rwble_evt_get();
If (app_last_ble_event != temp_last_ble_event)
{
app_last_ble_event=temp_last_ble_event;
如果(应用程序最后一次可执行事件==可执行事件结束)
adv_count + +;
If (adv_count == 2) = 1, If (adv_count == 2) = 1, colorred;
{
adv_计数=0;
app_easy_gap_advertise_stop();
}
}
返回GOTO_睡眠;
}

谢谢你的对话

齐亚诺
离线
最后一次见到:4周8小时前
加入:2014-10-03 08:13
谢谢你的回答。

谢谢你的回答。

一个问题:
据我所知,在10毫秒的范围内添加到广告间隔I的随机延迟。是否有可能将此范围增加到500或1000毫秒?

目前,我已经手动完成了这项工作,应用程序定时器设置为固定延迟加上从-500毫秒到500毫秒的随机(TRNG)时间。。。这及时传播了广告,我几乎没有看到与许多FOB发生任何碰撞。

最好的问候,
西亚诺霜
丹麦

MT_对话框
离线
最后一次见到:5个月3周前
工作人员
加入:2015-06-08 34
嗨ciano,

嗨ciano,

根据BLE规范,插入到广告操作中的延迟位于ROM代码中,您不能更改它。

谢谢你的对话

齐亚诺
离线
最后一次见到:4周8小时前
加入:2014-10-03 08:13
非常感谢你的邀请

非常感谢您提供的信息。

我现在没有问题了。

最好的问候,
西亚诺霜
丹麦。

主题锁定