你好,
我想改变广告设备的名称在飞行(在运行期间,可由android应用程序更改)。我已经彻底的论坛和得出的结论,我应该写NVDS_TAG_DEVICE_NAME,如果我错了,请纠正我。我从SDK的ble_app_peripheral项目工作。
但是,我可以找到改变这个价值的方法。可以anybode请告诉我如何写入nvds_tag_device_name?欢迎在运行时更改设备名称的替代方法也非常欢迎。
在设备名称被更改后重新启动发布不是问题。
亲切的问候,
Niek
P.S.我正在使用SDK 5.0.3.268,而不是5.0.2.1,但此选项未被选择
设备:
嗨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
嗨MT_dialog,
我可以跟随你的解释直到“所以设备的名称是通过NVDS_TAG_DEVICE_NAME提供的”。
1)名字是什么意思?
2)“因此,为了改变您必须自定义广告函数”你的意思是我不应该改变nvds_tag_device_name的内容/值,而是修改函数,以便它们不会使用nvds_tag_device_name作为资源?我试过这个如下,但是广告名称不改变..
我从示例ble_app_peripheral中编辑了以下内容:
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.adv_data [cmd - > info.host。add_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;
//}
//}
根据我的理解,静态结构gapm_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.adv_data [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
嗨Niekvdd,
1)在广告字符串中包含的所有数据标记为了让客户能够解析广告中的数据字符串,例如在BLE规范0 x09值标记为“完整的本地名称”值0 xff标记为“制造商特定的数据”,更多信息请检查BLE规范。
有几种方法可以做到这一点,你可以修改广告功能,以便在广告字符串中放置你想要的数据。您还可以将NVDS_TAG_DEVICE_NAME留空,甚至在其中放置一个字符串,并在消息初始化之后(使用app_easy_gap_undirected_advertise_start())覆盖广告数据字符串(位于cmd->info.host中。adv_data[]数组)。SDK的默认functionallity获得NVDS_TAG_DEVICE_NAME和把它在广告字符串,因此您可以创建一个定制的广告功能,不做和地点的副词字符串数据,或者把函数作为分配命令和覆盖名称。
由于MT_dialog
嗨MT_dialog,
1)我如何放置一个字符串在NVDS_TAG_DEVICE_NAME在运行时?我看到它是初始化在const struct nvds_data_struct nvds_data_storage __attribute__(((section(“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
嗨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)在Generic Access服务的属性数据库中更改设备名称不同于在广告字符串中更改设备名称,该特征的值是在设备启动时创建数据库时从NVDS结构中获取的,这是在祝福中定义堆栈在ROM代码中,有两种方法可以改变,可以使用函数attmdb_att_set_value()和作为参数应该通过GAPM_GET_ATT_HANDLE (GAP_IDX_DEVNAME)为了使设备名称处理返回,然后提供的长度和价值特征如你愿,或者你可以使用GAPM_SET_DEV_NAME_CMD消息(你可以在RW-BLE-GAP-IS.pdf中找到关于该消息的更多信息)。
由于MT_dialog