我正在使用信标示例项目作为基础,但我想将更改数据添加到广告数据包。
例如,来自ADC的一些值,甚至只是递增计数器。
我发现了榜样的结构困惑 - 我猜它在app_dialog beaccon_proj.c中设置了App_adv_func中的广告包,但它不会立即显而易见,其中它实际上是从中调用的。我认为它唯一一次在建立时被称为,然后它只是做广告。
So my question is, how do I call this function again when I have new data. Do I have to stop advertising first and then reconstruct the package, or can I just reconstruct the package?
程序在该计划中应该这样做,什么是最好的方法?
非常感谢
你好,
你是完全正确的。
以下是您问题的答案:
如何动态改变广告数据?
First, BLE radio must be stopped, then the ADV data can be updated.
必须使用内核计时器在一定时间后更新广告字符串。
内核定时器函数示例:app_timer_set(app_adv_timer,task_app,300);
必须在app_adv_func()中调用的函数。
经过时间,必须将GAPM_CANCEL消息发送到内核。
这将在广告新参数之前取消正在进行的活动。
这是通过在BLE Timer处理程序中调用app_adv_stop()来完成的。
广告可以重新开始
在GAPM_CMP_EVT_HANDLER()中,CASE GAPM_ADV_NON_CONN,必须调用函数app_adv_start()再次启动广告。
regards,
对话团队。
你好,
我还尝试修改广告数据包(序列号)每个广告消息,
从上面的解释中,我无法理解该怎么办?
设置app_timer_set(app_adv_timer,task_app,300);在app_adv_func()。一旦时间过去了,app_adv_timer_handler(..)函数已开始,
在Gapm_cmp_evt_handler()下设置app_adv_start(),案例adapm_adv_undirect无休止循环。
regards,
Tzvika.
嗨,对话团队,
So, there is no *call-back* type function available for changing the ADV packet before the BLE stack is going to send new packet, right?
Hi hardy.chen,
您的意思是在完成发送一个广告数据包之后将调用的回调函数?不,没有这样的回调。如果要在App_Async_trm()函数中执行此类函数检查,请在app_sleep.h文件中查看App_sleep.h文件中。只有完成callback of the advertising operation is available.
谢谢mt_dialog.
嗨mt_dialog,
是否有任何文档来解释从app_last_rwble_evt_get报告的事件?
即,活动BLE_EVT_END何时可用?*每次* adv数据包被发送?或终止BLE连接?或每包连接PDU?
嗨Hardy.chen,
请参阅您的其他帖子,http://support.dialog-semicondiondiondum/please-explain-last -ble-event-enum.。当传输结束时,BLE_EVT_END将可用,这意味着在每个BLE事件的结束时,您将为每个广告事件进行一个BLE_EVT_END完成,并且完成每个连接间隔。
谢谢mt_dialog.
嗨对话小组,
因此,可以通过挂钩事件ble_evt_end来更新广告内容(也通过检查先前的事件代码。即ble_evt_tx),它应该在每个传输完成中生成它?
但我想知道*延迟*应该被认为是* app_adv_stop *&* adp_adv_start *应该始终要求更改广告内容。我应该等待从内核报告的任何回拨或事件,以完成每个调用* app_adv_stop *&* app_adv_start *?如果应以这种方式完成此类广告内容的变化,DA14580支持将广告内容更改为*每个ADV数据包*(以ADV_NONCONN为例)的最大速度(或说出最小间隔)。
简而言之,如果我想有一个灯塔间隔of 20ms, and to rotate the 3 different message in each advertisement, will this be possible?
Hi hardy.chen,
我相信你可以这样做,检查Last_ble_evt for Ble_evt_End,并且当它发生时,发布广告停止才能更改广告字符串。完成停止的完成后,您可以在GAPM_CMP_EVT_HANDLLER中捕获广告结束消息,案例GAPM_ADV_UNDIRECT或GAPM_ADV_NON_CONN更改广告字符串并再次启动广告。我不相信来自命令的延迟(app_adv_stop和app_adv_start)将很大,以便被考虑。您可以查看app_asynch_trm()函数中app_sleep.h文件中的信标实现以获得一些想法。
谢谢mt_dialog.
嗨对话小组,
Thanks, and yes, I've successfully completed this feature according to this manner.
干杯!