在运行时更改设备名称

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
6个帖子/ 0新
最后一篇
niekvdd.
离线
最后一次露面:1年11个月前
加入:2017-01-25 09:29
在运行时更改设备名称

大家好,

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

但是,我可以找到改变这个价值的方法。可以anybode请告诉我如何写入nvds_tag_device_name?欢迎在运行时更改设备名称的替代方法也非常欢迎。
在更改设备名称后重新启动广告并不是一个问题。

亲切的问候,
niek.

P.S.我正在使用SDK 5.0.3.268,而不是5.0.2.1,但此选项未被选择

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

嗨niekvdd,

在运行时在广告字符串上更改设备的名称是可能的,并且从Android手机更改设备的名称也是可能的,但这需要连接到设备并通过自定义特征提供一个。因此,通过nvds_tag_device_name提供设备的名称,这是输入广告字符串中的内容,因此要更改您必须自定义广告功能。app_easy_gap_undirected_advertise_start_create_msg()这是填充邮件参数的函数,默认默认为nvds_tag_device_name的名称,因此您可以在sdk中保留空白空白,使用app_easy_gap_undircated_advertise_get_active()以所有适当的值分配消息然后针对包含广告字符串的成员并应用您想要的名称,您必须使用0x09闪存标记名称,以便其他设备知道这是设备的名称。

谢谢mt_dialog.

niekvdd.
离线
最后一次露面:1年11个月前
加入:2017-01-25 09:29
嗨mt_dialog,

嗨mt_dialog,

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

1)名字是什么意思?

2)“因此,为了改变您必须自定义广告函数”你的意思是我不应该改变nvds_tag_device_name的内容/值,而是修改函数,以便它们不会使用nvds_tag_device_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_get(nvds_tag_device_name,&device_name_length,&device_name_temp_buf [0])!= nvds_ok)
{
//恢复默认值
assert_warning(0);
device_name_length = 0;
}
}

至:

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

uint8_t device_name_length = 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;
//(nvds_get(nvds_tag_device_name,&device_name_length,&device_name_temp_buf [0])!= nvds_ok)
// {
// //恢复默认值
// assert_warning(0);
// device_name_length = 0;
//}
//}

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

//将设备名称放在广告数据中或扫描响应数据中
if(device_name_length> 0)
{
if(adv_avail_space> = device_name_length)
{
app_easy_gap_place_name_ad_struct(&cmd-> info.host.adv_data_len,device_name_length,
&cmd-> info.host.host.addata [cmd-> info.host.adv_data_len],device_name_temp_buf);
}
if(scan_avail_space> = device_name_length)
{
app_easy_gap_place_name_ad_struct(&cmd-> info.host.scan_rsp_data_len,device_name_length,
&cmd-> info.host.scan_rsp_data [cmd-> info.host.scan_rsp_data_len],device_name_temp_buf);
}
}
}

亲切的问候,
niek.

mt_dialog.
离线
最后一次露面:2个月2周前
职员
加入: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.

niekvdd.
离线
最后一次露面: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_name_temp_buf,“name12”)来更改正在宣传的设备名称;就在函数静态结构Gapm_start_advertise_cmd * app_easy_gap_undirected_advertise_start_create_msg(void)中的if(device_name_length> 0)之前。在这种情况下,名称12是新名称。
但是,当我从通用访问服务(UUID 0x1800)连接和读取设备名称(UUID 0x2A00)时,我仍然会获得正如在NVDS_TAG_DEVICE_NAME中设置的原始设备名称。如何将设备名称的值更改为uuid 0x2a00返回的设备名称?

亲切的问候,
niek.

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

嗨niekvdd,

1)您不能这样做,在运行时无法更改NVDS_TAG_DEVICE的值。启动广告时,拍摄来自NVDS_TAG_DEVICE的值并将其放在广告字符串中,因此您可以直接更改广告命令中的值(例如,当APP_EASY_GAP_UNDIRCED_ADVERTES_GET_ACTING_ADVERTERS_ADVERTE_ACTION()返回时广告字符串的指针您可以更改cmd-> info.host.adata []中名称的值,而不是nvds_tag_device,或者如上所述创建自己的功能,可以创建广告消息并将其发送给堆栈。

2)广告字符串中的标签只是广告字符串本身的值,通过放置数据的长度,数据的标签和数据本身标记了广告字符串的特定部分,具体取决于长度和标签作为特定信息。请检查这个规格。

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.