设备名称和NVDS

17个帖子/ 0个新
最后发表
zwang308
离线
最后看到:4年2个月前
主
加入:2014-07-02福音14:15
设备名称和NVDS

嗨,对话框中,

在sample128项目中,我在app_adv_function中手动将设备名称设置为“12345”。我还将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年2个月前
主
加入:2014-07-02福音14:15
问题更新:

问题更新:

我在main_func中修改了NVDS中的设备名称,在BLE堆栈之前,在BLE init函数之前。现在设备名称如我所料。

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

我在我的应用程序中生成了可解析的私有随机地址和安全模式1级别3。如果我只把一台设备和我的iPhone配对,一切都没问题。但是如果我配对了第二个设备,我的第一个设备将不会显示在LightBlue app的设备列表中。如果我在iOS设置中删除了我的第二个设备的配对信息,第一个设备将会重新显示在列表中。

你认为这个问题是否也与某些NVDS值有关?我确定这两个设备的IRK是不同的,因为我在app_configuration_func中手动设置了两个不同的值。

非常感谢,

TR_Dialog
离线
最后看到:2周6天前
工作人员
加入:2014-06-30 23:52
你好,产品

的产品

你能再说一遍你的目标吗?你希望看到什么样的行为。

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

如果你能说清楚你的最终目标,我们就能提出一些修改意见。

谢谢,

TR_DIALOG

zwang308
离线
最后看到:4年2个月前
主
加入:2014-07-02福音14:15
嗨TR_Dialog,

嗨TR_Dialog,

非常感谢您的回复。首先,我的所有代码都是基于您的sample128项目。

1.取消定义CFG_NVDS,在app_adv_func中设置设备名称。当我尝试在iOS的浅蓝色应用程序下发现设备时,设备名称显示为我在app_adv_func中设置的值。但连接设备后,设备名称变为NVDS中的值。iOS配对设备列表中的设备名称与NVDS设备名称值相同。
我通过在BLE堆栈被启动之前在NVDS中设置设备名称来解决这个问题,但我真的很好奇为什么NVDS中的设备名称存储仍然显示在某些地方,即使我没有定义CFG_NVDS。

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

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

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

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

TR_Dialog
离线
最后看到:2周6天前
工作人员
加入:2014-06-30 23:52
嗨的产品:

嗨的产品:

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

-您想要在两个不同的图像加载到两个不同的设备上的广告中更改设备名称?这就是你想要达到的目标吗。如果这是目标,你只需要修改nvds.c中的NVDS_TAG_DEVICE_NAME字段

取消定义CFG_NVDS的必要性是什么?

谢谢,

TR_DIALOG

zwang308
离线
最后看到:4年2个月前
主
加入: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中设置设备名称有什么不同。

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

之后,我发现如果我将两台设备与同一款iPhone配对,iOS会将第一个设备视为第二个设备(后一个设备配对)。我相信他们每个人都有一个独特的IRK。之后,我根据我的I2C包在BLE堆栈初始化之前改变了NVDS中的设备地址值,解决了这个问题。我认为这里的原因是,即使我使用了一个私有可解析随机地址和未定义的CFG_NVDS, BLE堆栈仍然根据NVDS中的信息生成可解析随机地址。

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

1.为什么NVDS中的日期仍然在使用,即使我未定义CFG_NVDS。

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

3.生成的可解析私有随机地址是否与NVDS中的设备地址库相关?扩展一下,什么时候使用NVDS中的数据存储?

我讲清楚了吗?

非常感谢。

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

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

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

在nvds.c
DEVICE_NAME_TAG_LEN

TR_Dialog
离线
最后看到:2周6天前
工作人员
加入:2014-06-30 23:52
嗨的产品:

嗨的产品:

你能否澄清以下评论:“通过这种方式,在我将DA连接到我的iPhone之前,设备名称显示了缓冲区值。但是当我将DA连接到我的iPhone后,设备名称更改为NVDS中的值。”它在广告中表现出来了吗?我可以说,在app_adv_func中,你输入的任何名称都会在广告中显示。如果您看到设备名称更改,请按照以下顺序告诉我:广告->连接->断开->广告。设备名称不应在此序列中更改。

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

你能发布函数app_adv_func的代码吗?

另外,你可能想要查看下面的文档:http://support.dialog-semiconductor.com/system/files/resources/AN-B-022_DA14580_Resolvable_private_address_guidelines.pdf

谢谢,

TR_DIALOG

zwang308
离线
最后看到:4年2个月前
主
加入:2014-07-02福音14:15
嗨TR_Dialog,

嗨TR_Dialog,

如果你使用浅蓝色app,在我连接到设备后,你会看到设备名称发生了变化。连接后,你也可以发现顶部显示的设备名称与广告包不一样。请使app_adv_func中的设备名称与NVDS中的值不同。undefine NVDS,看看你是否会得到和我一样的结果。

我的app_adv_func:

(struct 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。代码= GAPM_ADV_UNDIRECT;
cmd - > op。/*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。模式= GAP_GEN_DISCOVERABLE;

/*-----------------------------------------------------------------------------------
*设置广告数据和扫描响应数据
*---------------------------------------------------------------------------------*/
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;
# endif

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

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

/ / GPIO_SetActive (GPIO_PORT_1 GPIO_PIN_0);
cmd - > info.host。Adv_data_len = 10;

Memcpy (&manufacture_date[0], "\x09\xff", 2);
Memcpy (&manufacture_date[0] + 2, &bb_device_name[0] + 4,8);
memcpy (cmd - > info.host。Adv_data [0], &manufacture_date[0], cmd->info.host.adv_data_len;

//扫描响应数据
#如果(NVDS_SUPPORT)
如果(nvds_get (NVDS_TAG_APP_BLE_SCAN_RESP_DATA cmd - > info.host.scan_rsp_data_len,
>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;

//检查是否可以在Advertising数据中添加数据
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_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);
If (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
离线
最后看到:2周6天前
工作人员
加入:2014-06-30 23:52
嗨的产品:

嗨的产品:

有一件事我想指出,你们在iPhone上看到的浅蓝色设备名称并不一定是DA14580这个设备名称。Ios确实缓存了一些信息,因此存在差异。为了解决这个问题,我总是在开发代码时使用Front Line进行空中探测。

我会审查你的app_adv_func并提供反馈。你有时间看一下文件吗?http://support.dialog-semiconductor.com/system/files/resources/AN-B-022_DA14580_Resolvable_private_address_guidelines.pdf

谢谢,

TR_DIALOG

zwang308
离线
最后看到:4年2个月前
主
加入:2014-07-02福音14:15
嗨TR_DIALOG,

嗨TR_DIALOG,

我知道iOS中有一些特殊的BLE策略,但似乎我连接设备后显示在浅蓝色的设备名称将始终与NVDS中的一个存储保持一致。

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

同样,我猜即使我没有定义CFG_NVDS,并在那些app_xxx函数中设置我自己的BLE设置,BLE仍然使用NVDS中的信息存储。所以,我真的想和你们一起检查一下,看看我是否配置错了什么,以及BLE堆栈是如何利用NVDS的。

谢谢!

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

你好,
.NVDS_TAG_APP_BLE_SCAN_RESP_DATA = "xxx"
#定义APP_SCNRSP_DATA "xxx"
它们之间有什么关系和区别?
谢谢你!

summer20100514
离线
最后看到:4年2个月前
大师
加入: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,
>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年4个月前
加入:2015-07-17 08:21
我有个软件可以连接

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

summer20100514
离线
最后看到:4年2个月前
大师
加入:2014-12-30 05:01
一定是哪里出了问题

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

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

感谢您的回复!
代码是:
#定义APP_SCNRSP_DATA "\x11\x06\xDE\x12\xA5\x98\x1A\x03\x34\xF7\xAB\xA8\x95\xA2\x80\x29\x70\xB0"
.NVDS_TAG_APP_BLE_SCAN_RESP_DATA = "\x09\xFF\x00\x60\x52\x57\x2D\x42\x4C\x45",
.scan_resp_data_tag_len = 10,
为什么应用程序扫描,da14580总是从APP_SCNRSP_DATA响应数据,但dev名称总是从nvds.c?
当NVDS_TAG_APP_BLE_SCAN_RESP_DATA将被使用,为什么使用“\x”?