设备名称和NVDS

17个员额/ 0个新员额
最后发表
Zwang308.
离线
最后看到:4年9月前
主
加入:2014-07-02福音14:15
设备名称和NVDS

嗨对话框,

在你sample128项目,我设置的设备名称为“12345”,在app_adv_function手动。我在NVDS还设置了设备名称为“ABC”,并在同一时间UNDEFINE CFG_NVDS。在这种情况下,我认为BLE堆栈将不使用NVDS了。

但是,我发现在LightBlue应用程序中,只有在扫描模式下(当我们可以看到设备列表时),设备名称显示为我所期望的(“12345”)。一旦我通过应用程序连接到设备,设备名称更改为NVDS中的值(“abc”)。如果我将设备与iOS配对,则配对列表中的设备名称也是“abc”,即NVDS值。我认为NVDS中的设备名称存储在任何情况下都不应该出现,因为我已经定义了CFG_NVDS。

所以,我的问题将是:

1.为什么有时设备名称是我在app_adv_func中设置的值,有时它是NVDS中的值存储,即使我没有定义CFG_NVDS。

2.如果我想动态地设置设备名称(通过I2C事件),我如何维护统一的设备名称?

非常感谢,期待你的回复。

此致,

Zwang308.
离线
最后看到:4年9月前
主
加入:2014-07-02福音14:15
问题更新:

问题更新:

我在NVDS在main_func BLE栈之前更改设备名称前BLE初始化函数。现在设备名工作如我所料。

但是,我遇到一个发现了一个新问题:

我在我的应用程序中生成了已解析的私有随机地址和安全模式1级别3。如果我只是将一个设备与我的iPhone配对,一切都正确。但是如果我配对第二个设备,我的第一个设备甚至不会在LightBlue应用程序的设备列表中显示。如果我在iOS设置中删除了第二个设备的配对信息,则第一个设备将再次显示在列表中。

你觉得这个问题也涉及到一些NVDS值?我相信,这两个设备的IRK是不同的,因为我在app_configuration_func手动设置两个不同的值。

非常感谢,

TR_Dialog
离线
最后看到:3个月5天前
工作人员
加入:2014-06-30 23:52
你好,产品

你好的产品

你能否重新陈述你的目标。您希望看到什么行为。

以上描述是基于您所做的更改。

这将是更容易,如果你能澄清你的最终目标,那么我们就可以提出一些修改。

谢谢,

TR_DIALOG

Zwang308.
离线
最后看到:4年9月前
主
加入:2014-07-02福音14:15
嗨tr_dialog,

嗨tr_dialog,

非常感谢您的回复。在一切之前,我的代码都基于您的示例128项目。

1.i unefine cfg_nvds和app_adv_func中的设置设备名称。当我尝试发现iOS的灯蓝色应用程序下的设备时,设备名称显示为App_adv_func中的值。但在我连接到设备后,设备名称会更改为NVDS中的值。iOS配对设备列表中的设备名称也与NVDS设备名称值相同。
我通过在ove堆栈中设置了NVDS中的设备名称来解决此问题,但我非常好奇地对NVDS中的设备名称存储仍然显示在某个地方,即使是拒绝CFG_NVD。

2.我在我的应用程序中使用生成的可解变私有随机地址和安全模式1级别3。我将两个设备与同一iPhone配对,每个设备都有一个唯一的irk和设备名称。我可以在iOS配对设备列表中看到两个配对的设备。但在我配对第二个设备后,第一个设备将显示为第二设备的名称。我在NVDS中更改设备地址,一切都是对的。

从我观察到的所有事情,我真的很想知道:
1为什么BLE即使我取消定义CFG_NVDS仍然使用信息NVDS。
2.在app_adv_func和nvds数据部分中设置广告数据的区别是什么。
3.是,生成的可解析私有随机地址是否基于NVDS中的设备地址值?

如果需要任何其他信息,请随时与我联系。

非常感谢,等待你的回复。

TR_Dialog
离线
最后看到:3个月5天前
工作人员
加入:2014-06-30 23:52
嗨的产品:

嗨的产品:

谢谢你描述你的修改。由此,我推断你的目标如下:

- 您想在加载到两个不同设备上的两个不同图像中更改广告中的设备名称?这是您尝试实现的目标。如果这是您只需修改NVDS.C中的字段NVDS_TAG_DEVICE_NAME的目标

拒绝CFG_NVDS需要什么?

谢谢,

TR_DIALOG

Zwang308.
离线
最后看到:4年9月前
主
加入:2014-07-02福音14:15
嗨tr_dialog,

嗨tr_dialog,

我未定义CFG_NVDS的原因是我想通过另一个处理器通过I2C总线设置BLE参数(设备名,IRK…)。

因此,首先,我让程序在main_func上等待I2C集设备名包。之后,我将设备名称存储在缓冲区中,并使用缓冲区日期在app_adv_func和app_configuration_func中设置设备名称和IRK。因为我从缓冲区获取设备名,而不是从NVDS,所以我禁用CFG_NVDS。

通过这种方式,设备名称前显示我连接到DA我的iPhone缓冲值。但经过我与DA到我的iPhone,设备名称变更为中NVDS值。我对为什么我的设备显示为两个不同的名字,什么是在app_adv_func设置设备名称和NVDS设置设备名称的区别混淆。

我通过在BLE堆栈初始化之前根据缓冲区数据在NVDS中设置设备名称来解决这个问题。但是我仍然想知道为什么在我未定义CFG_NVDS时,仍然使用存储在NVDS中的设备名,以及NVDS中的信息是什么时候使用的。

后者上,我发现如果我配对我的两个设备相同的iPhone,iOS装置的关于所述第一设备作为第二个(后者配对的设备)。我相信他们每个人都有独特的IRK。后者,我根据我的I2C包改变NVDS设备地址值BLE栈是init之前并解决问题。我觉得这里的原因是,即使我用一个私人解析随机地址和未定义CFG_NVDS中,蓝牙栈还产生在NVDS的信息,解析随机地址基地。

同样,我通过在我认为我完全禁用NVDS的情况下更改NVDS中的值来解决两个问题。所以,我想问的问题是:

1.为什么仍在使用中NVDS日期甚至我不确定CFG_NVDS。

2.当使用NVDS中存储的设备名和app_adv_func中设置的设备时?为什么如果NVDS中的设备名与我在app_adv_func中设置的不同,我可以在连接建立之前和之后得到相同设备的两个不同的名称。

3.是生成的解析私有随机地址与在NVDS设备地址店吗?为了扩大这个问题,当NVDS数据存储用的?

我是把事情说清楚?

非常感谢。

CDECLARENS
离线
最后看到:4年10个月前
加入:2015年6月10日16:43
你好对话框:

你好对话框:
我修改字段dA14580为Dialog_14580。现在我面临着场的长度问题。如何增加这个字段的长度,以便我们可以有更长的Name。

redbear
离线
最后看到:6年2个月前
加入:2015-01-30 08:50
在nvds.c

在nvds.c
device_name_tag_len.

TR_Dialog
离线
最后看到:3个月5天前
工作人员
加入:2014-06-30 23:52
嗨的产品:

嗨的产品:

你能澄清如下评论:“通过这种方式,设备名称前显示我连接到DA我的iPhone缓冲值,但之后我连DA到我的iPhone,设备名称变更为中NVDS的价值。”是否在广告显示?我可以说,在app_adv_func,任何名义你把将广告显示出来。让我知道,如果你看到的设备名称变更通顺序如下:广告 - >连接 - >断开连接 - >广告。设备名称不应该chnage通过这个序列。

回答您的一个问题:BLE堆栈在重置时通过custom_nvds_get_func检索参数。

你可以发布您的代码的功能app_adv_func?

此外,您可能需要查看下列文件:http://support.dialog-seminile.com/system/files/resources/an-b-022_da14580_resolvable_private_address_guidelines.pdf.

谢谢,

TR_DIALOG

Zwang308.
离线
最后看到:4年9月前
主
加入:2014-07-02福音14:15
嗨tr_dialog,

嗨tr_dialog,

如果你使用浅蓝色的应用程序,你会看到设备名称更改后,我连接到设备。连接后,您还可以发现TOP显示的Device名称与广告包不同。请将app_adv_func中的设备名称与NVDS中的值设置为不同的值。undefine NVDS,看看你是否会得到和我一样的结果。

我的app_adv_func:

空隙app_adv_func(结构gapm_start_advertise_cmd * CMD)

/ /开始广告。填补GAPM_START_ADVERTISE_CMD消息

//设备名称长度
uint8_t device_name_length;
中int8_t device_name_avail_space;
uint8_t device_name_temp_buf [64];
uint8_t manufacture_date [10];

cmd-> op.code = gapm_adv_undirect;
cmd-> op.addr_src = gapm_gen_rslv_addr; / * gapm_gen_static_rnd_addr; * /// gapm_public_addr;
cmd - > op。renew_dur = 15000;
CMD-> intv_min = APP_ADV_INT_MIN;
CMD-> intv_max = APP_ADV_INT_MAX;
cmd-> channel_map = app_adv_chmap;

cmd-> info.host.mode = gap_gen_disoverable;

/ * -----------------------------------------------------------------------------------
*设置广告数据和扫描响应数据
* ------------------------------------------------------------------------ * /
CMD-> info.host.adv_data_len = APP_ADV_DATA_MAX_SIZE;
cmd-> info.host.scan_rsp_data_len = app_scan_resp_data_max_size;
#ifdef has_white_list.
如果(white_list_written)
CMD-> info.host.adv_filt_policy = ADV_ALLOW_SCAN_WLST_CON_WLST;
别的
cmd - > info.host。adv_filt_policy = ADV_ALLOW_SCAN_ANY_CON_ANY;
#别的
cmd - > info.host。adv_filt_policy = ADV_ALLOW_SCAN_ANY_CON_ANY;
#万一

//cmd->info.host.adv_filt_policy = ADV_ALLOW_SCAN_ANY_CON_ANY;

/ /广告数据
的#if(NVDS_SUPPORT)
如果(nvds_get(NVDS_TAG_APP_BLE_ADV_DATA,&CMD-> info.host.adv_data_len,
cmd - > info.host.adv_data [0]) ! = NVDS_OK)
# endif / / (NVDS_SUPPORT)

/ / GPIO_SetActive (GPIO_PORT_1 GPIO_PIN_0);
CMD-> info.host.adv_data_len = 10;

memcpy(&makessure_date [0],“\ x09 \ xff”,2);
Memcpy (&manufacture_date[0] + 2, &bb_device_name[0] + 4,8);
Memcpy(&cmd-> info.host.addata [0],&manualure_date [0],cmd-> info.host.adv_data_len);

//扫描响应数据
的#if(NVDS_SUPPORT)
如果(nvds_get(NVDS_TAG_APP_BLE_SCAN_RESP_DATA,&CMD-> info.host.scan_rsp_data_len,
&CMD-> info.host.scan_rsp_data [0])!= NVDS_OK)
# endif / / (NVDS_SUPPORT)

cmd-> info.host.scan_rsp_data_len = app_scnrsp_data_length;
的memcpy(&CMD-> info.host.scan_rsp_data [0],APP_SCNRSP_DATA,CMD-> info.host.scan_rsp_data_len);

//在广告数据中获取剩余空间 - 2个字节用于名称长度/标志
“device_name_avail_space”= APP_ADV_DATA_MAX_SIZE - cmd->info.host.”adv_data_len - 2;

//检查数据是否可以添加到广告数据中
If (device_name_avail_space > 0)

//获取设备名称以添加在广告数据中(默认为1或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_DEVICE_NAME);
memcpy(&device_name_temp_buf [0],app_device_name,device_name_length);

* /
device_name_length = bb_devicename_size;
memcpy(&device_name_temp_buf [0],bb_device_name,bb_devicename_size);
//的memcpy(device_name_temp_buf “bfob01234567”,12);
如果(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);

返回;

谢谢!

TR_Dialog
离线
最后看到:3个月5天前
工作人员
加入:2014-06-30 23:52
嗨的产品:

嗨的产品:

有一件事我想指出你在iPhone上浅蓝色看到的设备名称不一定是设备名称DA14580放在空中。iOS确实缓存了一些信息,从而差异。为了解决这个问题,在开发代码时,我总是在空中使用前线。

我会审查你的app_adv_func并提供反馈。你有机会看一下文件吗:http://support.dialog-seminile.com/system/files/resources/an-b-022_da14580_resolvable_private_address_guidelines.pdf.

谢谢,

TR_DIALOG

Zwang308.
离线
最后看到:4年9月前
主
加入:2014-07-02福音14:15
嗨tr_dialog,

嗨tr_dialog,

据我所知,在iOS的一些特殊政策BLE,但似乎在淡蓝色显示我连接的设备将始终保持相同的NVDS一个店之后的设备名称。

此外,我将Sample128项目更改为AN-B-022,我认为可解析的随机地址对单个设备很有效:每次设备将显示为一个不同的地址,iOS可以在配对后重新连接它。但如果我同时打开两台设备并将两台设备与同一部iPhone配对。IPhone会将两者视为后一种配对。
后来,我在NVDS中更改了设备。在那之后,我的iPhone可以毫无错误地区分这两款设备。

同样,我猜我甚至是unefine cfg_nvds,并在那些app_xxx函数中设置自己的ble设置,ble仍然在nvds中使用信息存储。所以,我真的想用你的家伙检查我是否配置了错误,并且通过BLE堆栈使用了NVDS的使用程度。

谢谢!

redbear
离线
最后看到:6年2个月前
加入:2015-01-30 08:50
你好,

你好,
.NVDS_TAG_APP_BLE_SCAN_RESP_DATA = " xxx "
#define app_scnrsp_data“xxx”
它们之间的关系和区别是什么?
谢谢!

summer20100514
离线
最后看到:4年9月前
大师
加入:2014-12-30 05:01
当你可以阅读时,扫描

当你可以成功读取扫描响应数据,使用NVDS_TAG_APP_BLE_SCAN_RESP_DATA。如果有什么问题,使用APP_SCNRSP_DATA。

如果(nvds_get(NVDS_TAG_APP_BLE_SCAN_RESP_DATA,&CMD-> info.host.scan_rsp_data_len,
&CMD-> info.host.scan_rsp_data [0])!= NVDS_OK)

cmd-> info.host.scan_rsp_data_len = app_scnrsp_data_length;
的memcpy(&CMD-> info.host.scan_rsp_data [0],APP_SCNRSP_DATA,CMD-> info.host.scan_rsp_data_len);

anthony42
离线
最后看到:5年11个月前
加入:2015-07-17 08:21
我有个应用可以连接

谢谢你,summer20100514
我有一个应用程序来连接DA14580,当uuid包含在扫描响应数据中时,该应用程序将显示设备,我可以连接,
我改变APP_SCNRSP_DATA,应用程序工作正常,
我改变了nvds。c中的响应数据,从app中我看不到设备,
这意味着nvds_get总是不行,当它可以时,为什么要在两个不同的地方定义?

summer20100514
离线
最后看到:4年9月前
大师
加入:2014-12-30 05:01
一定是有问题的

你在nvds.c中的响应数据设置一定有问题,你可以检查它的格式和长度。

anthony42
离线
最后看到:5年11个月前
加入:2015-07-17 08:21
谢谢您的回复!

谢谢您的回复!
代码如下:
#define app_scnrsp_data“\ x11 \ x06 \ xde \ x12 \ xa5 \ x98 \ x1a \ x03 \ x34 \ xf7 \ xab \ xa8 \ x95 \ xa2 \ x80 \ x29 \ x70 \ x70”
.NVDS_TAG_APP_BLE_SCAN_RESP_DATA = " \ x09 \ xFF \ x00 \ x60 \ x52 \ x57 \ x2D \×\ x4C \ x45”,
.SCAN_RESP_DATA_TAG_LEN = 10,
为什么app扫描,da14580总是响应数据从APP_SCNRSP_DATA,但dev名称总是从nvds.c?
将使用NVDS_TAG_APP_BLE_SCAN_RESP_DATA时,为什么使用“\ x”?