在广告字符串修改后启用和禁用广告

10个帖子/ 0个新
最后发表
asalhuv
离线
最后看到:2年前10个月前
加入:2015-10-22 09:49
在广告字符串修改后启用和禁用广告


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

我的问题是是否有其他地方需要修改,或者有其他方法来更改广告字符串。

BTW:我已经改变了长度在“cmd->info.host。”“Adv_data_len”为我的数据长度,并在注释中设置这个过程,这样长度就可以了:

If (device_name_avail_space > 0)

//获取要添加到广告数据中的设备名称(默认名称或NVDS名称)
#如果(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.adv_data [cmd - > info.host。Adv_data_len + 2], device_name_temp_buf, device_name_length);
//更新广告数据长度
cmd - > info.host。Adv_data_len += (device_name_length + 2);

设备:
MT_dialog
离线
最后看到:三个月前两个星期前
工作人员
加入:2015-06-08 34
嗨asalhuv,

嗨asalhuv,

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

由于MT_dialog

asalhuv
离线
最后看到:2年前10个月前
加入:2015-10-22 09:49
嗨,谢谢,也许我没有

嗨,谢谢,也许我没有很好地解释我的问题,所以我试着用另一种方式问:
当我调用函数"app_adv_stop()"时,我需要等待多长时间,直到内核消耗消息。
同样的问题也适用于"app_adv_start()".我问的原因是,因为我需要做广告字符串后面的MCU消息的快速变化,但如果调用函数“app_adv_stop()”,然后立即调用“app_adv_start()”它不会再次启动广告。只有当我在前面的过程中调用app_adv_stop()。(当在UART端口获取字符串的最后一个字节时)。此外,如果我调用函数“app_adv_start()”后,我正在发送一个字节使用“uart_txdata_setf()”函数,广告字符串将不会更新(我正在调用广告启动函数和更新“&cmd->info.host.adv_data[6]”。
谢谢

MT_dialog
离线
最后看到:三个月前两个星期前
工作人员
加入:2015-06-08 34
嗨asalhuv,

嗨asalhuv,

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

由于MT_dialog

asalhuv
离线
最后看到:2年前10个月前
加入:2015-10-22 09:49
你好,谢谢你的回复,

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

我必须说,很难理解操作系统的流程,就像如果试图修改状态机,它有很多问题。你对描述操作系统状态机的文档有什么建议吗?

谢谢

MT_dialog
离线
最后看到:三个月前两个星期前
工作人员
加入:2015-06-08 34
嗨asalhuv,

嗨asalhuv,

没错,每当您停止广告时,处理程序就会被执行。操作系统状态机是什么意思?你指的是哪部分代码?

由于MT_dialog

asalhuv
离线
最后看到:2年前10个月前
加入:2015-10-22 09:49
你好,谢谢你的回复,我

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

MT_dialog
离线
最后看到:三个月前两个星期前
工作人员
加入:2015-06-08 34
嗨asalhuv,

嗨asalhuv,

连接后调用的处理程序依赖于您从主机和最终从ble堆栈获得的消息,例如,如果您从master接收到连接请求,则应该调用gapc_connection_req_ind_handler()回调。通过查看RW_BLE_GAP_IS,您可以了解连接过程中交换的消息。内核只是调度它从堆栈和应用程序任务接收到的消息。

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

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

由于MT_dialog

asalhuv
离线
最后看到:2年前10个月前
加入:2015-10-22 09:49
嗨,谢谢你

大家好,谢谢你的回答
1)是的,我指的是应用程序(Android和IOS)的源代码,我在哪里可以得到它?
好的,谢谢

MT_dialog
离线
最后看到:三个月前两个星期前
工作人员
加入:2015-06-08 34
嗨asalhuv,

嗨asalhuv,

邮件发送。

由于MT_dialog