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初始化函数之前。现在,设备名称按照我的预期工作。

但我遇到了一个新问题:

我在我的应用程序中生成了可解析的私有随机地址和安全模式1级别3。如果我只将一台设备与iPhone配对,一切都会正常。但如果我配对第二台设备,我的第一台设备甚至不会显示在LightBlue应用程序的设备列表中。如果在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
嗨,对话,

嗨,对话,

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

1.我在app_adv_func中取消定义CFG_NVDS并设置设备名称。当我尝试在iOS浅蓝色app下查找设备时,设备名称显示为我在app_adv_func中设置的值。但在我连接到设备后,设备名称将更改为NVDS中的值。iOS配对设备列表中的设备名称也与NVDS设备名称值相同。
我通过在初始化BLE堆栈之前在NVDS中设置设备名解决了这个问题,但我真的很好奇为什么NVDS中的设备名存储在某些地方仍然显示,即使我取消了CFG_NVDS的定义。

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

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

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

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

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

嗨的产品:

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

-是否要更改加载到两个不同设备上的两个不同图像中广告中的设备名称?这就是你想要达到的目标吗?如果这是你的目标,你只需要修改NVDS.c中的NVDS\u TAG\u DEVICE\u NAME字段

取消定义CFG\U NVD需要什么?

谢谢

TR_DIALOG

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

嗨,对话,

我未定义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。之后,在BLE栈初始化之前,根据我的I2C包修改NVDS中的设备地址值并解决问题。我认为这里的原因是,即使我使用一个私有的可解析随机地址和未定义的CFG_NVDS, BLE堆栈仍然生成基于NVDS中的信息的可解析随机地址。

同样,我通过改变NVDS中的值来解决这两个问题,如果我认为我完全禁用了NVDS。所以,我想问的问题是:

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

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

3.生成的可解析私有随机地址是否与NVDS中的设备地址存储相关?要扩展这个问题,请说明NVDS中的数据存储何时使用?

我讲清楚了吗?

非常感谢。

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

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

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

在nvds.c
设备名称标签名称

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

嗨的产品:

你能澄清以下评论:“这样,在我将DA连接到我的iPhone之前,设备名称显示缓冲区值。但是当我将DA连接到我的iPhone后,设备名称就变成了NVDS中的值。它在广告中表现出来了吗?我可以说,在app_adv_func中,不管你放什么名字,都会显示在advertising中。让我知道如果你看到设备名称通过以下顺序改变:广告->连接->断开->广告。设备名称不应该通过这个顺序改变。

回答您的一个问题: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
嗨,对话,

嗨,对话,

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

我的app_adv_func:

Void 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.code=GAPM\u ADV\u UNDIRECT;
cmd->op.addr\u src=GAPM\u GEN\u RSLV\u 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\u map=APP\u ADV\u CHMAP;

cmd->info.host.mode=GAP\u GEN\u 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有白名单
如果(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]) ! = NVDS_OK)
# endif / / (NVDS_SUPPORT)

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

memcpy(&制造日期[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\u len);

//扫描响应数据
#如果(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\u rsp\u data\u len=APP\u SCNRSP\u data\u 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)

//获取要添加到广告数据中的设备名称(默认名称或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\u name\u temp\u buf[0]、APP\u device\u name、device\u name\u length);

*/
设备名称长度=BB设备名称大小;
memcpy(&device\u name\u temp\u buf[0]、bb\u device\u name、bb\u DEVICENAME\u 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+=(设备名称_长度+2);

返回;

谢谢

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

嗨的产品:

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

我会审查你的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
嗨,对话,

嗨,对话,

我知道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 "
#定义应用程序SCNRSP数据“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,
cmd - > info.host.scan_rsp_data [0]) ! = NVDS_OK)

cmd->info.host.scan\u rsp\u data\u len=APP\u SCNRSP\u data\u 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, app工作正常,
我改变了nvds。c中的响应数据,从app中我看不到设备,
这意味着nvds_get总是不行,当它可以时,为什么要在两个不同的地方定义?

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 \×\ x4C \ x45”,
.SCAN_RESP_DATA_TAG_LEN = 10,
为什么app扫描,da14580总是响应数据从APP_SCNRSP_DATA,但dev名称总是从nvds.c?
当使用NVDS标签应用程序扫描响应数据时,为什么使用“\x”?