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

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

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

我的问题是,是否有其他内容需要修改,或者是否有其他方法可以更改播发字符串。

顺便说一句:我已经将“cmd->info.host.adv\u data\u 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.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 11:34
你好,旭化成,

你好,旭化成,

没有其他功能可以为广告修改。您可以调试该函数,以检查设备\u name\u temp\u buf中的值。我在代码中看不到任何更改设备名称临时数组值的内容。如果使用NVDS,则将从NVDS加载名称,否则将加载默认名称。

谢谢mt_dialog.

Asalhuv.
离线
最后一次露面:2年9个月前
加入: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.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 11:34
你好,旭化成,

你好,旭化成,

很难知道内核将在多长时间内执行stop advertise命令,这取决于操作系统目前正在做什么。您可以做的是发出stop advertise命令,然后捕获stop advertise请求的完整处理程序。在完整请求中,您可以更改播发字符串并重新启动播发。请在app\u adv\u undirect\u complete\u function()中查看信标参考设计。

谢谢mt_dialog.

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

嗨,谢谢你的回复,你的意思是“app_adv_undirect_complete(uint8_t status)”对吗?
标志指示为(状态==间隙\u错误\u取消)?这说明广告已经停止了吗?

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

谢谢

mt_dialog.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 11:34
你好,旭化成,

你好,旭化成,

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

谢谢mt_dialog.

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

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

mt_dialog.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 11:34
你好,旭化成,

你好,旭化成,

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

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

2) 广告字符串被限制为31个字节,其中3个字节是allready保留的,但是我认为您可以更改信标广告模式并发出扫描响应,并将设备名称放入扫描响应字符串中。

谢谢mt_dialog.

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

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

mt_dialog.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 11:34
你好,旭化成,

你好,旭化成,

邮件发送。

谢谢mt_dialog.