USER_ADVERTISE_DATA

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
12个职位/ 0个新职位
最后发表
鲁奇帕特尔
离线
最后一次露面:2年6个月前
加入:2017年3月29日10:50
USER_ADVERTISE_DATA

你好Dialog_Support,

1.我们在配置DA14580 MCU作为广播员模式。因此,我们需要动态变化USER_ADVERTISE_DATA串发送动态变化的数据。但是,这USER_ADVERTISE_DATA在user_config.h文件中定义的,所以我们不能修改它。是否有任何规定,所以我们可以在我们的用户自定义函数修改USER_ADVERTISE_DATA?

2.我们可以定义多个USER_ADVERTISE_DATA吗?
例如
#定义USER_ADVERTISE_DATA(\“\ x03”
ADV_TYPE_COMPLETE_LIST_16BIT_SERVICE_IDS \
ADV_UUID_DEVICE_INFORMATION_SERVICE \
“\ X11” \
ADV_TYPE_COMPLETE_LIST_128BIT_SERVICE_IDS \
“\ x2F \ x2A \ x93 \ xA6 \ xBD \ xD8 \ x41 \ x52 \ xAC \ x03 \ x00 \ x0F \ xCA \ xEA \ x80 \ x7F”)

#定义USER_ADVERTISE_DATA1(\“\ x03”
ADV_TYPE_COMPLETE_LIST_16BIT_SERVICE_IDS \
ADV_UUID_DEVICE_INFORMATION_SERVICE \
“\ X11” \
ADV_TYPE_COMPLETE_LIST_128BIT_SERVICE_IDS \
“\ X2F \ X2A \ X93 \ xA6 \ XBD \ XD8 \ X41 \ X52 \ XAC \ X03 \ X00 \ X0F \ XCA \ XEA \ X80 \ X00”)

上面提到的代码片段是可能的还是不可能?

3.如果我们想发送一个以上的广告包与不同的有效载荷,那么你有任何示例代码吗?

4.如何改变广告包传输速率?

设备:
PM_DIALOG.
离线
最后一次露面:1天18小时前
工作人员
加入:2018-02-08 11:03
嗨,前腿帕特尔

嗨,前腿帕特尔

请检查其动态演示用户的广告数据的变化SDK的ble_app_barebone例子。是的,你可以用不同的有效载荷发送超过1个通告报文。该ble_app_barebone示例演示该功能了。该广告字符串应该有特定的格式,等等。的代码,您已经张贴这些模块具有这种格式,所以可以做到这一点。所述广告数据包的传输速率可在的user_undirected_advertise_conf结构被定制
user_config.h文件。广告包,其中可以在该结构而改变的特定广告间隔发送

由于PM_dialog

鲁奇帕特尔
离线
最后一次露面:2年6个月前
加入:2017年3月29日10:50
你好PM_Dialog,

你好PM_Dialog,

感谢您的及时回复。它是有帮助的。
我有几个问题在那里。
1.我已经检查了ble_app_barebone示例。在这方面,只有制造业广告数据在改变。如果我们想修改用户文件中的广告数据的其他字节,那么我们如何修改?你有这方面的示例程序吗?
2.我没有找到user_undirected_advertise_conf结构在ble_app_barebone的例子,所以你能告诉我在哪个例子中定义了这个结构吗?
3.我想配置一个广播,传输广告包。这个广告包我们可以修改。我们应该能够修改超过1字节的广告数据。你能指导我怎么开始吗?

感谢和问候,
鲁奇帕特尔

PM_DIALOG.
离线
最后一次露面:1天18小时前
工作人员
加入:2018-02-08 11:03
嗨鲁奇帕特尔

嗨鲁奇帕特尔

你可以通过改变.intv_min或user_adv_conf结构,这是在user_config.h定义的.intv_max会员登陆配置通告报文传输速率。通过这种方式,可以定义为广告的最大和最小间隔。关于广告数据,你不仅能够修改制造广告数据。你也可以修改超过100个字节的广告数据的。该SDK的ble_app_barebone例子是动态变化的广告串的正当性数据。正当性的数据具有在该特定实例2个字节长度,但它们的长度可以改变。在广告字符串可以追加你的具体数据和应用程序更新。在app_easy_gap_undirected_advertise_start_create_msg()函数创建广告消息,然后被保存在cmd结构被调用app_easy_gap_undirected_advertise_get_active()函数时。cmd的指针将有一个完整的信息,您可以发送到堆栈包括来自USER_ADVERTISE_DATA采取了一些默认的进阶数据,所以你可以做什么app_easy_gap_undirected_advertise_get_active()返回后,目标在保存广告数据的CMD指针数组(CMD-> info.host.adv_data),并改变他们作为你喜欢 - 你的数据将根据BLE规范是。

由于PM_dialog

鲁奇帕特尔
离线
最后一次露面:2年6个月前
加入:2017年3月29日10:50
你好PM_dialog,

你好PM_dialog,

谢谢您的回复。现在我能够发送超过1字节在USER_ADVERTISE_DATA。接下来我想做观察者和播音员之间的角色转换。我有两份个人申请:一份作为播音员,另一份作为亚博国际官网平台网址观察员。以前我做了角色转换之间的外围和中央。所以我试图配置这个,但我的应用程序进入nmi_handler,因为我运行的应用程序。你能告诉我还需要什么额外的改动吗?

感谢和问候,
前腿

PM_DIALOG.
离线
最后一次露面:1天18小时前
工作人员
加入:2018-02-08 11:03
嗨鲁奇帕特尔

嗨鲁奇帕特尔

NMI_handler独立于你的双角色应用程序。NMI_handler将由于看门狗定时器而发出。请检查看门狗进入你的申请。关于广播模式和观察者模式之间的切换,你不应该做任何额外的改变。在广播的情况下,你是作为一个不可连接的设备广告吗?如果不是,可以使用app_easy_gap_non_connectable_advertise_start API为非连接的广告创建广告消息。另外,我建议您在发布完成时使用.app_on_adv_nonconn_complete回调函数,因为这个回调函数在作为非可连接设备发布时被触发。

由于PM_dialog

鲁奇帕特尔
离线
最后一次露面:2年6个月前
加入:2017年3月29日10:50
你好Dialog_Support,

你好Dialog_Support,

谢谢你的回复。现在我可以把观察者的角色转换成广播员,反之亦然。

1.我在我的第一篇文章中问过我们可以定义多个USER_ADVERTISE_DATA吗?.我能够在user_config.h文件来定义它。但如何称呼呢?我的意思是nvds.c文件具有nvds_data_struct结构,其中USER_ADVERTISE_DATA被调用。但是,如果我想打电话给USER_ADVERTISE_DATA和USER_ADVERTISE_DATA1双方又在哪里我可以在用户空间中调用?由于nvds.c文件是SDK的共同文件,所以我不能修改它。

2.我有一个广播设备,在其中我修改的制造数据是USER_ADVERTISE_DATA的一部分,并开始广告。在另一端,我有另一个设备,它是观察者。在观察者一方,我得到USER_ADVERTISE_DATA数据包,但在那我没有得到制造数据。我已经检查使用BLE扫描仪应用程序,在那我得到制造数据。如何在观察者设备侧接收制造数据?

感谢和问候,
前腿

PM_DIALOG.
离线
最后一次露面:1天18小时前
工作人员
加入:2018-02-08 11:03
嗨鲁奇佩特

嗨鲁奇佩特

#define " USER_ADVERTISE_DATA "被添加到nvds_data_storage结构的。nvds_tag_app_ble_adv_data项中。您可以定义多个USER_ADVERTISE_DATA,但由于. nvds_tag_app_ble_adv_data项是唯一的,因此只能将其中一个添加到该结构中。如果你想要一个以上的广告数据,你可以做到,但用不同的方式。我建议您将USER_ADVERTISE_DATA定义为空,然后动态添加不同的广告数据。当设备开始发布时,执行user_app_adv_start(),然后由app_easy_gap_undirected_advertise_get_active()创建cmd。函数的作用是:返回app_easy_gap_undirected_advertise_get_active()函数,该函数为可连接的无向事件创建广告消息。发布消息包括用户发布配置、发布数据和其他数据。app_easy_gap_adv_read_from_NVDS()函数从nvds_data_storage结构中读取USER_ADVERTISE_DATA,因此如果USER_ADVERTISE_DATA定义为空,则您的广告数据将为空。通过这种方式,您可以根据应用程序动态地添加不同的广告数据,方法是在user_app_adv_start()函数中使用app_add_ad_struct()。

关于制造商数据,当设备处于observer模式时,.app_on_adv_report_ind ind回调函数(在user_callback_config.h文件中)将被执行,所以它不应该是NULL,你应该定义一个函数来触发。当接收到GAPM_ADV_REPORT_IND时,gapm_adv_report_ind_handler()将被执行。app_on_adv_report_ind ind回调。这个处理程序具有gapm_adv_report_ind结构的输入参数,其中包括adv_report结构。制造商数据应该位于adv_report结构的data[ADV_DATA_LEN]项。那么,如何实际检查没有接收到制造商数据以及所有其他数据是否正确接收?

由于PM_dialog

鲁奇帕特尔
离线
最后一次露面:2年6个月前
加入:2017年3月29日10:50
你好PM_Dialog,

你好PM_Dialog,

1.在user_config.h文件中,我将保持USER_ADVERTISE_DATA为空,稍后我将动态添加广告数据。但是是否有可能将大量字节(大约16-20字节)添加到单个USER_ADVERTISE_DATA中?让我们考虑我能够广播大量字节,但在观察者一方,我能接收超过31字节的数据吗?现在,如果广播员在USER_ADVERTISE_DATA中有大量字节,那么在观察者侧我无法接收超过31字节的广告数据字节。

2.我正在观察user_on_adv_report_ind函数中的数据。在这里我附上了该功能的代码片段。
Void user_on_adv_report_ind (struct gapm_adv_report_ind const * param)
{
易失静态uint8_t param_data [ADV_DATA_LEN];

arch_printf( “%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X \ n \ r”,
param - > report.adv_addr.addr [5],
param - > report.adv_addr.addr [4],
param - > report.adv_addr.addr [3],
param-> report.adv_addr.addr [2],
param - > report.adv_addr.addr [1],
param - > report.adv_addr.addr [0],
param_data[0] =参数- > report.data [0],
param_data [1] = param-> report.data [1],
param_data [2] = param-> report.data [2],
param_data[3] =参数- > report.data [3],
param_data[4] =参数- > report.data [4],
param_data[5] =参数- > report.data [5],

像这样的我读31点字节的数据。我不知道其他的方法来读取数据。在广播侧,后26个字节,数据的制造附连。如果我修改我的自定义数据在生产数据串和广告数据长度更多的则是31字节,然后我得到00在观察侧,但如果我入住的是相同的BLE扫描应用程序中的原始数据部分我收到相同的数据,我已经修改。能否请您解释一下我为什么发生这种情况?如果您有任何其他的方法来读取USER_ADVERTISE_DATA那么请让我知道。

感谢和问候,
前腿

PM_DIALOG.
离线
最后一次露面:1天18小时前
工作人员
加入:2018-02-08 11:03
嗨鲁奇帕特尔

嗨鲁奇帕特尔

取决于你如何使用SDK和示例使用注意,SDK将附加任何额外的数据,不适合在广告字符串扫描响应数据,所以确保您所感兴趣的数据是在广告的字符串,而不是扫描响应数据。在第一个指示(广告指示)中,广告数据将填充adv_report结构的数据成员,然后在第二个指示(扫描响应指示)中,扫描响应数据将填充结构。为了捕获扫描响应数据,您应该将设备配置为GAPM_SCAN_ACTIVE以获取扫描响应。如果您将设备配置为GAPM_SCAN_PASSIVE,观察者只接收广告数据,而不发送扫描请求来接收扫描响应,因此您将无法读取扫描响应数据。我还使用一个观察者和ble_app_barebone测试了这个,我能够在广告字符串或扫描响应数据中获得增量。

由于PM_dialog

鲁奇帕特尔
离线
最后一次露面:2年6个月前
加入:2017年3月29日10:50
你好PM_Dialog,

你好PM_Dialog,

谢谢你的回复。我正在开发我的应用程序的参考ble_app_peripheral和ble_app_barebone的例子。现在我想发送我的自定义数据到USER_ADVERTISE_DATA,但该数据不适合USER_ADVERTISE_DATA,所以我问在我以前的帖子,我们可以定义多个USER_ADVERTISE_DATA和广播它?但是由于USER_ADVERTISE_DATA是在nvds.c文件中调用的,这是DSK的普通文件,所以我不能修改它。正如你已经建议,更新USER_ADVERTISE_DATA,但我不能实现,所以你可以提供我任何代码片段或示例代码,这是做完全相同的。

总之,我希望每次播出28个字节到4个不同的观察员。所以,如果我能在同一时间发送每个通告数据包7个字节和4个广告包我要广播,然后配置我需要遵循什么?请帮助我。

感谢和问候,
鲁奇帕特尔

PM_DIALOG.
离线
最后一次露面:1天18小时前
工作人员
加入:2018-02-08 11:03
嗨鲁奇帕特尔

嗨鲁奇帕特尔

正如我在以前的文章中指出的,你不能定义一个以上的USER_ADVERTISE_DATA,因为#define " USER_ADVERTISE_DATA "被附加到nvds_data_storage结构的。nvds_tag_app_ble_adv_data项中。广告字符串有31个字节长度,但其中3个字节是从堆栈、广告过滤策略和广告数据长度中保留的,所以您能够使用最多28个字节。添加到广告字符串中的数据将由user_app_adv_start填充,过程我已经在前一篇文章中提到过。如果你想要将你的自定义数据添加到广告字符串中,你应该将它们复制到cmd的正确数组中,这是user_app_adv_start()函数。cmd由app_easy_gap_undirected_advertise_get_active()创建。在您的应用程序中,您可以将USER_ADVERTISE_DATA设置为空,并将数据复制到广告字符串中。自定义数据应该是有效的,并且应该遵循USER_ADVERTISE_DATA的结构,以便正确地开始广告。你应该有2字节的长度和标记到你的数据,所以最后你可以追加到26字节的广告字符串。在下面的代码中,我将向您展示如何做到这一点。

空白user_app_adv_start(空白)
{

uint8_t advdata [28] = {0x1B,0xFF时,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38};

//日程表的下一个广告数据更新
app_adv_data_update_timer_used = app_easy_timer(APP_ADV_DATA_UPDATE_TO, adv_data_update_timer_cb);

struct gapm_start_advertise_cmd * cmd;
cmd = app_easy_gap_undirected_advertise_get_active ();

memcpy (cmd - > info.host。Adv_data, advdata, 28);

//增加制造商特定动态数据
/ / mnf_data_update ();
app_add_ad_struct(CMD,&mnf_data,的sizeof(结构mnf_specific_data_ad_structure));

app_easy_gap_undirected_advertise_start ();
}

如果添加26bytes数据到广告串并要填充额外的数据,您可以将它们变成扫描响应数据,但在另一边,观察者应以发送搜索请求被配置为GAPM_SCAN_ACTIVE。

由于PM_dialog