嗨对话框,
在Sample128项目中,我在app_adv_function中将设备名称设置为“12345”。我还将NVDS中的设备名称设置为“ABC”,同时unefine CFG_NVDS。在这种情况下,我认为BLE堆栈不会再使用NVD。
但是,我在LightBlue应用程序中发现,只有在扫描模式下(当我们可以看到设备列表时),设备名称才会显示为我所期望的(“12345”)。一旦我通过应用程序连接到设备,设备名称将更改为NVDS(“abc”)中的值。如果我将设备与iOS配对,配对列表中的设备名称也是“abc”,即NVDS值。我不认为NVDS中的设备名称存储在任何情况下都应该出现,因为我已经没有定义CFG_NVDS。
我的问题是:
1.为什么有时设备名称是我在app_adv_func中设置的值,有时它是NVDS中的值存储,即使在我取消定义CFG_NVDS之后。
2.如果我想动态地设置设备名称(通过I2C事件),我如何维护统一的设备名称?
非常感谢,期待您的回复。
此致,
问题更新:
在BLE Init函数之前,我在BLE堆栈之前更改Main_Func中的NVDS中的设备名称。现在设备名称正常工作。
但我遇到了一个发现一个新问题:
我在我的应用程序中生成了可解析的私有随机地址和安全模式1级3。如果我只把一台设备和我的iPhone配对,一切都没问题。但是如果我对第二台设备进行了配对,我的第一台设备甚至不会出现在LightBlue app的设备列表中。如果我在iOS设置中删除了第二台设备的配对信息,那么第一台设备将会再次出现在列表中。
您认为此问题也与某些NVDS值相关吗?我相信这两个设备的iRK是不同的,因为我在app_configuration_func中手动设置两个不同的值。
谢谢,
嗨泽宇,,
你能再说一遍你的目标吗?你希望看到什么样的行为。
以上描述基于您所做的更改。
如果您可以澄清您的最终目标,则会更容易,然后我们可以建议进行一些修改。
谢谢,
tru对话框
嗨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为什么在i unefine cfg_nvds之后,为什么BLE仍然在NVDS中使用信息。
2.在app_adv_func和NVDS数据节中设置广告数据有什么区别?
3.生成的可解析私有随机地址是否基于NVDS中的设备地址值?
如有需要,请随时与我联系。
非常感谢,等待您的回复。
你好,泽宇:
感谢您描述您的修改。根据这一点,我推断你的目标如下:
-你想改变广告中的设备名称在两个不同的图像加载到两个不同的设备?这就是你想要达到的目标吗?如果这是你的目标,你只需要修改nvds.c中的NVDS_TAG_DEVICE_NAME字段
不定义CFG_NVDS的需要是什么?
谢谢,
tru对话框
嗨TR_Dialog,
我未定义CFG_NVDS的原因是我想通过另一个处理器的I2C总线设置BLE参数(设备名称,IRK…)。
首先,我让程序在main_func等待I2C设置设备名包。之后,我将设备名称存储在缓冲区中,并使用缓冲区日期在app_adv_func和app_configuration_func中设置设备名称和IRK。由于我从缓冲区而不是从NVDS获取设备名,所以我禁用了CFG_NVDS。
以这种方式,设备名称在将DA连接到iPhone之前显示缓冲区值。但在我连接到我的iPhone后,设备名称更改为NVDS的值。我的设备显示为两种不同的名称,以及在NVDS中设置设备名称的设置设备名称的区别是什么感到困惑。
我通过根据BLE stack init之前的缓冲区数据在NVDS中设置设备名称来解决这个问题。但我仍然想知道,为什么存储在NVDS中的设备名称仍然被使用,即使我没有定义CFG_NVDS,以及何时使用NVDS中的信息。
后者,我发现了如果我将两个设备配对到同一个iPhone,请将第一设备视为第二个(后一个配对设备)。我相信他们每个人都有一个独特的虹膜。后者,我根据我的i2c包在ble堆栈是init和解决问题之前,根据我的i2c包更改NVDS的设备地址值。我认为这里的原因是我使用私有可解变的随机地址和未定义的CFG_NVDS,BLE堆栈仍然在NVDS中的信息上生成可解析的随机地址基础。
同样,在我认为完全禁用NVDS的情况下,我通过改变NVDS中的值来解决这两个问题。我想问的问题是:
1.为什么即使我未定义的CFG_NVDS也仍在使用NVDS中的日期。
2.何时使用存储在NVDS中的设备名称,何时使用在app_adv_func中设置的设备?为什么如果NVDS中的设备名称与我在app_adv_func中设置的不同,我可以在建立连接之前和之后获得同一设备的两个不同名称。
3.是生成的可解析私有随机地址与NVDS中的设备地址存储有关吗?要扩展此问题,请使用NVDS中的数据存储?
我清楚了吗?
谢谢。
您好对话框:
我将字段dA14580修改为对话框_14580。现在我面临的问题是场的长度。如何增加此字段的长度,以便我们可以有更长的名称。
在nvds.c中
DEVICE_NAME_TAG_LEN
你好,泽宇:
您能否澄清以下注释:“以这种方式,设备名称在将DA连接到iPhone之前显示缓冲区值。但在我连接到我的iPhone后,设备名称将更改为NVDS中的值。”。它显示在广告中吗?我可以在app_adv_func中说,无论您提出的任何名称都会显示在广告中。如果您看到设备名称更改,请告诉我们,以下顺序:广告 - > Connect - > Disconnect - >广告。设备名称不应通过此序列进行Chnage。
回答您的一个问题:BLE堆栈在重置时通过自定义函数获取参数。
你能为函数app_adv_func发布代码吗?
此外,您可能希望查看以下文档:http://support.dialog-semiconductor.com/system/files/resources/AN-B-022_DA14580_Resolvable_private_address_guidelines.pdf
谢谢,
tru对话框
嗨TR_Dialog,
如果您使用浅蓝色应用程序,在我连接到设备后,您将看到设备名称更改。连接后,您还可以发现顶部显示的设备名称与广告包不同。请使app_adv_func中的设备名称与NVDS中的值不同。取消NVDS,看看你是否能得到和我一样的结果。
我的应用程序高级功能:
void app_adv_func(struct gapm_start_advertise_cmd * cmd)
{
//开始做广告。填写GAPM\u开始\u广告\u命令消息
//设备名称长度
uint8设备名称长度;
Int8_t device_name_avail_space;
uint8_t device_name_temp_buf [64];
uint8生产日期[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.adata_len = app_add_data_max_size;
cmd->info.host.scan\u rsp\u data\u len=APP\u scan\u RESP\u data\u MAX\u SIZE;
# ifdef HAS_WHITE_LIST
如果(白名单)
cmd-> info.host.adv_filt_policy = adv_allow_scan_wlst_con_wlst;
其他的
cmd->info.host.adv\u filt\u policy=adv\u ALLOW\u SCAN\u ANY\u CON\u ANY;
#别的
cmd->info.host.adv\u filt\u policy=adv\u ALLOW\u SCAN\u ANY\u CON\u ANY;
#万一
//cmd--ingfo.host.adv_filt_policy = adv_allow_scan_any_con_any;
//广告数据
#if(nvds_support)
if(nvds_get(nvds_tag_app_ble_adv_data,&cmd-> info.host.adv_data_len,
&cmd->info.host.adv_data[0])!=NVDS(正常)
#endif/(NVDS_支持)
{
//GPIO_设置激活(GPIO_端口_1,GPIO_引脚_0);
cmd-> info.host.adv_data_len = 10;
memcpy(&制造日期[0],“\x09\xff”,2);
memcpy(制造日期[0]+2,&bb设备名称[0]+4,8);
memcpy (cmd - > info.host。adv_data [0], &manufacture_date [0], cmd - > info.host.adv_data_len);
}
//扫描响应数据
#if(nvds_support)
if(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_支持)
{
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\u name\u avail\u space=APP\u ADV\u DATA\u MAX\u SIZE-cmd->info.host.ADV\u DATA\u len-2;
//检查数据是否可以添加到Advertising数据中
如果(设备名称可用空间>0)
{
//获取要添加到广告数据中的设备名称(默认或NVDS)
/ *#if(nvds_support)
device_name_length = nvds_len_device_name;
如果(nvds获取(nvds标记设备名称、设备名称长度和设备名称温度buf[0])!=nvds确定)
#endif/(NVDS_支持)
{
//获取默认的设备名称(如果没有足够的空间,则无名称)
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);
如果(设备名称长度>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.addata [cmd-> info.host.add_data_len + 2],device_name_temp_buf,device_name_length);
//更新广告数据长度
cmd - > info.host。Adv_data_len += (device_name_length + 2); / /设备长度
}
}
回来
}
谢谢!
你好,泽宇:
有一件事我想指出的是,你在淡蓝色iPhone上看到的设备名称不一定是DA14580正在播出的设备名称。Ios确实缓存了一些信息,因此存在差异。为了解决这个问题,我总是在开发代码时使用Front Line进行嗅探。
我将审查你的应用程序并提供反馈。您是否有机会查看该文档:http://support.dialog-semiconductor.com/system/files/resources/AN-B-022_DA14580_Resolvable_private_address_guidelines.pdf
谢谢,
tru对话框
嗨TR_DIALOG,
我理解IO中有一些特殊的BLE策略,但似乎在IOS连接后呈浅蓝色显示的设备名称将始终保持与NVDS中的一个商店相同。
此外,我将Sample128项目更改为AN-B-022,并且我认为可解析的随机地址对于单个设备来说可以正常工作:每次设备将显示为不同的地址,iOS可以在配对后重新连接到它。但如果我同时打开两台设备,并将两台设备配对到同一台iPhone上。IPhone将两者视为后一对。
后来,我在NVDS中更改了设备。在那之后,我的iPhone可以毫无错误地区分这两个设备。
同样,我猜即使我没有定义CFG_NVDS并在那些app_xxx函数中设置我自己的BLE设置,BLE仍然使用NVDS中的信息存储。所以,我真的想和你们的人检查一下,看看我是否配置错了什么,以及BLE堆栈是如何利用NVDS的。
谢谢!
你好,
.NVDS\u TAG\u APP\u BLE\u SCAN\u RESP\u DATA=“xxx”
#定义APP_SCNRSP_DATA“xxx”
它们之间有什么关系和区别?
谢谢你!
当您可以成功读取扫描响应数据时,使用NVDS_TAG_APP_BLE_SCAN_RESP_DATA。如果存在错误,则使用app_scnrsp_data。
if(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);
}
谢谢,夏天2014年
我有一个连接da14580的应用程序,当uuid包含在扫描响应数据中,应用程序将显示设备,我可以连接,
我更改app_scnrsp_data,应用程序工作正常,
我更改了nvds.c中的响应数据,从应用程序我看不到设备,
这意味着nvds_get总是不正常的,何时会变为正常,为什么要在两个不同的地方定义呢?
nvds.c中的响应数据设置一定有问题,您可以检查其格式和长度。
谢谢你的回复!
代码是:
#定义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总是从应用程序SCNRSP_数据中获取响应数据,而开发程序名称总是从nvds.c获取?
当使用NVDS_TAG_APP_BLE_SCAN_RESP_DATA时,为什么使用“\x”?