嗨
我使用了一个外部处理器来控制DA14580(基于SPS设备代码),外部处理器对DA14580进行编程,然后在运行时需要修改advertise字符串。
在我通过UART端口收集数据后,我正在尝试使用“app_adv_stop()”取消广告,然后调用“app_adv_start()”并将数据修改为* cmd指针。问题是广告不是再次开始。
如果我在数据接收的开始而不是在结束调用app_adv_stop(),广告将停止并再次开始,但数据保持不变(传输的数据-在cmd->数据中我看到数据确实改变了)。
我的问题如果需要修改其他东西,或者还有另一种方式来改变广告字符串。
顺便说一句:我已经改变了“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);
}
如果(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); / /设备长度
}
}
嗨Asalhuv,
没有其他功能来修改广告。您可以调试功能以检查Device_name_temp_buf中的值是什么。我无法在代码中看到任何内容,都会更改device_name_temp_buf数组的值。如果使用NVDS,则将从NVDS中加载名称,否则它将加载默认名称。
由于MT_dialog
大家好,谢谢。也许我没有解释清楚我的问题,所以我试着用不同的方式问:
当我调用函数“app_adv_stop()”时,我需要等待多长时间,直到内核消费消息。
同样的问题也适用于“app_adv_start()”.我问的原因是因为我需要做广告字符串跟随MCU消息的快速变化,但如果调用函数“app_adv_stop()”,然后立即调用“app_adv_start()”,它不会再次开始广告。仅当我在前面的过程中调用app_adv_stop()时。(当在UART端口获取字符串的最后一个字节时)。同样,如果我在使用“uart_txdata_setf()”函数发送字节后立即调用函数“app_adv_start()”,广告字符串将不会被更新(我调用advertise start函数并更新“&cmd->info.host.adv_data[6]”)。
谢谢
嗨Asalhuv,
它难以知道内核将执行停止通告命令的时间有多大时间,这取决于操作系统在此刻做了什么。您可以做的是发出停止advertise命令,然后捕获停止宣传请求的完整处理程序。在完整的请求中,您可以更改广告字符串并重新启动通告。请查看app_add_undirect_complete_function()中的灯塔ref设计。
由于MT_dialog
你好,谢谢你的回复,你的意思是“app_adv_undirect_complete(uint8_t status)”对吗?
标志指示是(status == gap_err_canceled)?这表明广告已经停止了?
我必须说,很难理解操作系统的流程,似乎如果试图修改状态机,它有很多问题。你对描述操作系统状态机的文档有什么建议吗?
谢谢
嗨Asalhuv,
没错,当你停止广告时,处理器就会被执行。你说的OS状态机是什么意思?你指的是代码的哪一部分?
由于MT_dialog
你好,谢谢你的回复,我指的是内核任务。我不知道如何遵循这个系统的流程。例如:在连接之后,调用了哪些句柄?什么是内核的例行程序。
关于SPS项目的另外两个问题:
1.有一个SDK的SPS android/IOS应用程序,我将在一个新的应用程序中实现类似的东西。
2.如何修改本地设备名称在广告模式,我看到,如果我设置一个信标字符串没有空间留给设备名称,是否有可能添加它?
谢谢
嗨Asalhuv,
连接后调用的处理程序依赖于你从主机和ble堆栈获得的消息,例如,如果你从主机接收到一个连接请求,应该调用gapc_connection_req_ind_handler()回调。通过签出RW_BLE_GAP_IS,您可以了解连接过程中交换的消息。内核只调度它从堆栈和应用程序任务接收的消息。
1)我不确定我不确定您的问题,但没有SDK为DSP开发特别是Android或iOS应用程序,但如果您有兴趣,我们可以为Android / IOS DSPS应用程序提供源代码。
2)广告字符串限制为31个字节,并且已全部保留3个字节,但我想您可以更改信标识别模式并发出扫描响应,并将设备名称放在扫描响应字符串中。
由于MT_dialog
嗨,谢谢你的回答
1)是的,我指的是应用程序(Android和IOS)的源代码,我可以从哪里得到它?
我会的,谢谢
嗨Asalhuv,
邮件发送。
由于MT_dialog