在运行时更改设备名称

⚠️
你好。。谢谢你来参加论坛。令人兴奋的消息!我们现在正在移动到我们的新论坛平台,将提供更好的功能,并包含在主对话网站的过程。所有帖子和账号都已迁移。我们现在只接受新论坛上的流量-请在//www.wsdof.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
6个职位/0个新职位
最后一篇文章
尼科夫德
离线
最后一次露面:1年11个月前
已加入:2017-01-25 09:29
在运行时更改设备名称

大家好,

我想在飞行中更改广告设备名称(在运行时在运行时,由Android应用程序更改)。我的论坛彻底才能得出结论,我应该写信给nvds_tag_device_name,如果我错了,请纠正我。我正在从SDK中从BLE_APP_PERITELAL项目工作。

然而,我找不到方法来改变这个值。有人能告诉我如何写NVDS标签设备名称吗?在运行时更改设备名称的其他方法也非常受欢迎。
在更改设备名称后重新启动广告并不是一个问题。

亲切的问候,
niek.

p、 我使用的是SDK 5.0.3.268,而不是5.0.2.1,但此选项不可选

设备:
mt_dialog.
离线
最后一次露面:2个月1周前
工作人员
已加入:2015-06-08 11:34
嗨niekvdd,

嗨niekvdd,

可以在运行时在广告字符串上更改设备名称,也可以从android手机更改设备名称,但这需要连接到设备并通过自定义特征提供一个名称。因此,设备的名称是通过NVDS\u TAG\u device\u name提供的,这是输入到广告字符串中的内容,因此为了更改,您必须自定义广告功能。app\u easy\u gap\u undirected\u advertized\u start\u create\u msg()函数用于填充消息的参数,默认情况下,该函数从NVDS\u标记\u设备名称中获取名称,因此,您可以在SDK中保留该值为空,使用app\u easy\u gap\u undirected\u advertized\u get\u active()将消息分配给所有适当的值,然后以持有广告字符串的成员为目标并应用您想要的名称,您必须用0x09 flash标记名称,以便其他设备知道这是设备的名称。

谢谢mt_dialog.

尼科夫德
离线
最后一次露面:1年11个月前
已加入:2017-01-25 09:29
嗨mt_dialog,

嗨mt_dialog,

我可以遵循您的解释直到“所以通过nvds_tag_device_name提供设备的名称”。

1) 给名字贴标签是什么意思?

2) “因此,为了改变这一点,你必须自定义广告功能”你的意思是我不应该改变NVDS\u TAG\u DEVICE\u NAME的内容/值,而是修改这些功能,使它们不使用NVDS\u TAG\u DEVICE\u NAME作为资源吗?我试着这样做,但广告名称没有改变。。

在静态结构GAPM_START_ADVERTISE_CMD * APP_EASY_GAP_UNTICHEDED_ADVERTISE_START_CREATEE_MSG(void)源自示例BLE_APP_PERITITALI中我编辑了以下内容:
uint8_t device_name_length = 0;
uint8_t device_name_temp_buf[NVDS_LEN_device_name];
//检查数据是否可以添加到广告数据中
if((adv_avail_space> 0)||(scan_avail_space> 0)))
{
//获取要添加到广告数据中的设备名称
//获取默认的设备名称(如果没有足够的空间,则无名称)
device_name_length = nvds_len_device_name;
if(nvds\u get(nvds\u TAG\u DEVICE\u NAME,&DEVICE\u NAME\u length,&DEVICE\u NAME\u temp\u buf[0])!=NVDS(正常)
{
//恢复默认值
断言警告(0);
device_name_length = 0;
}
}

收件人:

// uint8_t device_name_length = 0;
// uint8_t device_name_temp_buf [nvds_len_device_name];

uint8\u t设备名称\u长度=6;
uint8_t device_name_temp_buf [6] =“1test1”;
// memcpy(&cmd-> info.host.addata [cmd-> info.host.adv_data_len + 2],device_name_temp_buf,device_name_length);
//
//检查数据是否可以添加到广告数据中
// if((adv_avail_space> 0)||(scan_avail_space> 0)))
// {
// //获取设备名称以添加在广告数据中
// //获取默认设备名称(如果没有足够的空间,则无名称)
// device_name_length = nvds_len_device_name;
//if(nvds\u get(nvds\u TAG\u DEVICE\u NAME,&DEVICE\u NAME\u length,&DEVICE\u NAME\u temp\u buf[0])!=NVDS(正常)
// {
// //恢复默认值
//断言警告(0);
// device_name_length = 0;
// }
// }

为了我的理解,静态结构底部底部的(原始)片段_start_advertise_cmd * app_easy_gap_undirected_advertise_start_create_msg(void)应该使1TEST1广告名称:

//将设备名称放在广告数据中或扫描响应数据中
如果(设备名称长度>0)
{
if(adv\u avail\u space>=设备名称\u长度)
{
app\u easy\u gap\u place\u name\u ad\u struct(&cmd->info.host.adv\u data\u len,设备名称\u length,
&cmd-> info.host.host.addata [cmd-> info.host.adv_data_len],device_name_temp_buf);
}
if(扫描可用空间>=设备名称\u长度)
{
app_easy_gap_place_name_ad_struct(&cmd-> info.host.scan_rsp_data_len,device_name_length,
&cmd->info.host.scan\u rsp\u data[cmd->info.host.scan\u rsp\u data\u len],设备名称\u temp\u buf);
}
}
}

亲切的问候,
niek.

mt_dialog.
离线
最后一次露面:2个月1周前
工作人员
已加入:2015-06-08 11:34
嗨niekvdd,

嗨niekvdd,

1)在广告字符串中,所有包含的数据都被标记为使客户端能够解析广告字符串中的数据,例如在BLE规范中,0x09值被标记为“完整的本地名称”值0xFF标记为“制造商特定数据”,有关详细信息,请检查BLE规范。

2)有几种方法可以这样做,可以修改广告功能,以便将您想要的数据放在广告字符串中。您还可以将NVDS_TAG_DEVICE_NAME留空或甚至将字符串放在那里,并且消息初始化(使用APP_EASY_GAP_UNDIRCED_ADVERTISE_START())覆盖广告数据字符串(位于CMD-> INFO.HOST.ADC_DATA []数组中)。SDK具有获取NVDS_TAG_DEVICE_NAME的默认函数,并将其放在广告字符串中,因此您可以创建一个自定义广告函数,无论是adv字符串中的数据还是留下函数并覆盖函数并覆盖分配命令中的名称。

谢谢mt_dialog.

尼科夫德
离线
最后一次露面:1年11个月前
已加入:2017-01-25 09:29
嗨mt_dialog,

嗨mt_dialog,

1)在运行时在NVDS_TAG_DEVICE_NAME中将字符串放在运行时?我看到它是inclay中的inclayized in const struct_data_struct nvds_data_storage __attribute __((部分(“nvds_data_storage_area”)))),但是如何在运行时更改此值?

2)如何手动标记任何值?

3) 我设法通过放置strcpy((char*)device\u name\u temp\u buf,“name12”)来更改正在播发的设备名称;就在函数static struct gapm\u start\u adversed\u cmd*app\u easy\u gap\u undirected\u adversed\u start\u create\u msg(void)中的if(device\u name\u length>0)之前。在本例中,name12是新名称。
但是,当我连接并从通用访问服务(uuid0x1800)读取设备名(uuid0x2a00)时,仍然会返回原始设备名,作为NVDS\u TAG\u Device\u Name中的设置。如何更改UUID 0x2A00返回的设备名的值?

亲切的问候,
niek.

mt_dialog.
离线
最后一次露面:2个月1周前
工作人员
已加入:2015-06-08 11:34
嗨niekvdd,

嗨niekvdd,

1) 不能这样做,不能在运行时更改NVDS\u TAG\u设备的值。当您开始播发时,NVDS\u TAG\u设备中的值将被获取并放入播发字符串中,因此,您可以直接更改广告命令中的值(例如,当app\u easy\u gap\u undirected\u advanced\u get\u active()返回广告字符串消息的指针时,在user\u app\u adv\u start()函数中的barebone项目中,您可以更改cmd->info.host.adv\u data[]中名称的值,而不是NVDS\u TAG\u设备,或者如上所述创建您自己的函数,该函数将创建广告消息并将其发送到堆栈。

2) 广告字符串中的标记只是广告字符串本身的值,通过将数据的长度、数据的标记和数据本身标记为广告字符串的特定部分,取决于长度和作为特定信息的标记。请检查BLE规格。

3)在通用访问服务的属性数据库中更改设备的名称是与刚刚更改广告字符串中的设备名称的不同之处,在设备靴子创建数据库时,该特性的值是从NVDS结构中获取的向上,这在ROM代码中的BLE堆栈中定义,有两种方法可以更改,可以使用函数Attmdb_att_set_value(),作为参数,您应该通过GapM_Get_att_Handle(Gap_idx_devname)以使设备名称句柄顺序要返回,然后提供您想要的特性的长度和值,或者您可以使用GapM_Set_Dev_name_cmd消息(您将在RW-BLE-GAP-IS.PDF中找到更多信息。

谢谢mt_dialog.