广告字符串Modificaton后启用和禁用广告

10个帖子/ 0新
最后一篇
Asalhuv.
离线
最后一次露面:2年8个月前
加入:2015-10-22 09:49
广告字符串Modificaton后启用和禁用广告

你好
我正在使用外部处理器以控制DA14580(基于SPS设备代码),外部处理器程序编程DA14580,然后需要在运行时修改广告字符串。
在我通过UART端口收集数据后,我试图取消广告使用"app_adv_stop()",然后调用"app_adv_start()"和修改数据到*cmd指针。问题是广告不是再次开始。
如果我在数据接收开始时调用app_adv_stop()而不是最后,则广告确实再次停止并重新开始,但数据保持不变(传输的数据 - 在cmd->数据中,我看到数据确实如此改变了)。

我的问题是,是否有其他东西需要修改,或有另一种方法来改变广告字符串。

顺便说一下:我已经改变了“cmd->info.host.”的长度。Adv_data_len "到我的数据长度,并在注释这个过程中设置长度将是好的:

if(device_name_avail_space> 0)
{
//获取设备名称以添加在广告数据中(默认为1或nvds)
#if(nvds_support)
device_name_length = nvds_len_device_name;
if(nvds_get(nvds_tag_device_name,&device_name_length,&device_name_temp_buf [0])!= nvds_ok)
#endif //(nvds_support)
{
//获取默认的设备名称(如果没有足够的空间,则无名称)
device_name_length = strlen(app_dflt_device_name);
memcpy(&device_name_temp_buf [0],app_dflt_device_name,device_name_length);
}

if(device_name_length> 0)
{
//检查可用空间
device_name_length = co_min(device_name_length,device_name_avail_space);

//填充长度
cmd-> info.host.adv_data [cmd-> info.host.adv_data_len] = device_name_length + 1;
//填充设备名称标志
cmd-> info.host.adv_data [cmd-> info.host.adv_data_len + 1] ='\ x09';
//复制设备名称
memcpy(&cmd-> info.host.addata [cmd-> info.host.add_data_len + 2],device_name_temp_buf,device_name_length);
//更新广告数据长度
cmd-> info.host.adv_data_len + =(device_name_length + 2);
}
}

关键词:
设备:
mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨asalhuv,

嗨asalhuv,

没有其他功能可以修改为广告。您可以调试该函数,检查device_name_temp_buf中的值是什么。我在代码中看不到任何会改变device_name_temp_buf数组值的东西。如果您使用NVDS,那么将从NVDS加载名称,否则将加载默认名称。

谢谢mt_dialog.

Asalhuv.
离线
最后一次露面:2年8个月前
加入:2015-10-22 09:49
嗨,谢谢,也许我没有

嗨,谢谢,也许我没有解释我的问题,所以我试着用不同的方式问:
当我调用函数“app_adv_stop()”时,我需要等多长时间,直到内核消耗邮件。
“app_adv_start()”相同的问题。我要问的原因是因为我需要在MCU消息后的广告字符串中进行快速更改,但如果调用函数“app_adv_stop()”然后立即调用“app_adv_start()”它不会再次启动广告。只有我在早期的过程中调用app_adv_stop()。(在UART端口上获取字符串的最后一个字节时)。此外,如果我在使用“app_add_start()”函数中使用“uart_txdata_setf()”函数后,请不会更新广告字符串(我调用广告start函数并更新“&cmd-> info.host.addata [6]“。
谢谢

mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨asalhuv,

嗨asalhuv,

很难知道内核会在多长时间内执行stop advertise命令,这取决于操作系统此刻正在做什么。您可以做的是发出stop advertise命令,然后捕获stop advertise请求的完整处理程序。在完整请求中,您可以更改广告字符串并重新启动advertise。请查看app_adv_undirect_complete_function()中的信标引用设计。

谢谢mt_dialog.

Asalhuv.
离线
最后一次露面:2年8个月前
加入:2015-10-22 09:49
嗨,谢谢你的回复,

嗨,谢谢你的回复,你的意思是“app_adv_undirect_complete(uint8_t status)”对吗?
标志指示是(status == GAP_ERR_CANCELED)?这是不是说明广告已经停止了?

我必须说很难了解操作系统的流程,似乎是,如果尝试修改状态机它有很多问题。您是否有一个描述操作系统状态机的文档的建议?

谢谢

mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨asalhuv,

嗨asalhuv,

那是对的,处理程序是在停止广告时执行的。你是什​​么意思与OS状态机?您指的代码是什么?

谢谢mt_dialog.

Asalhuv.
离线
最后一次露面:2年8个月前
加入:2015-10-22 09:49
嗨,谢谢你的回复,我

嗨,谢谢你的回复,我的意思是内核任务。我不知道如何遵循系统的流程。例如:连接后,调用哪个句柄?什么是内核的例程。
关于SPS项目还有两个问题:
1. SPS Android / IOS应用程序有一个SDK,我将在一个新的应用程序中实施类似的东西。
2.如何在广告模式下修改本地设备名称,我看到如果我设置信标字符串,则没有剩余的设备名称剩余空间,可以以某种方式添加它吗?
谢谢

mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨asalhuv,

嗨asalhuv,

连接后调用的处理程序依赖于从主机获得的消息,并最终从BLE堆栈中获取,例如,如果您收到来自主站的连接请求,则应调用GapC_Connection_Req_ind_Handler()回调。您可以通过查看RW_BLE_GAP_IS来了解在连接过程中交换的消息。内核只是安排它从堆栈和应用程序任务接收的消息。

1)我不确定我理解你的问题,但没有SDK用于开发特别是android或iOS应用程序的DSPS,但如果你感兴趣,我们可以提供android/iOS DSPS应用程序的源代码。

2)广告字符串被限制为31个字节,其中3个字节已经被保留,但我假设你可以改变信标发布方式并发出扫描响应,并将设备名称放入扫描响应字符串中。

谢谢mt_dialog.

Asalhuv.
离线
最后一次露面:2年8个月前
加入:2015-10-22 09:49
嗨,谢谢你的

嗨,谢谢你的答案
1)是的,我的意思是应用程序的源代码(Android和iOS),我可以在哪里得到这个?
2)会做,谢谢

mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨asalhuv,

嗨asalhuv,

邮件发送。

谢谢mt_dialog.