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 app的设备列表中。如果我在iOS设置中删除了第二台设备的配对信息,那么第一台设备将会再次出现在列表中。

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

非常感谢,

TR_Dialog
离线
最后看到:3周2天前
工作人员
加入: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中设置设备名称。当我尝试在Light Blue app for iOS下发现设备时,设备名称显示为我在app_adv_func中设置的值。但是在我连接到设备后,设备名称更改为NVDS中的值。iOS配对设备列表中的设备名称与NVDS设备名称相同。
我通过在BLE堆栈初始化之前在NVDS中设置设备名解决了这个问题,但我真的很好奇,为什么即使我没有定义CFG_NVDS, NVDS中的设备名存储仍然显示在某些地方。

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

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

如有需要,请随时与我联系。

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

TR_Dialog
离线
最后看到:3周2天前
工作人员
加入: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中设置设备名称有什么不同。

我通过在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
DEVICE_NAME_TAG_LEN

TR_Dialog
离线
最后看到:3周2天前
工作人员
加入: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
嗨TR_Dialog,

嗨TR_Dialog,

如果你使用浅蓝色的应用程序,你会看到设备名称更改后,我连接到设备。连接后,您还可以发现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。代码= 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。模式= 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]) ! = NVDS_OK)
# 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,
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;

//检查数据是否可以添加到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);
如果(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周2天前
工作人员
加入: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,
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年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_TAG_APP_BLE_SCAN_RESP_DATA时,为什么使用“\x”?