user_advertise_data.

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
12个职位/ 0个新职位
最后发表
前腿帕特尔
离线
最后看到:2年6个月前
加入:2017-03-29专机
user_advertise_data.

你好Dialog_Support,

1.我们将DA14580单片机配置为a广播公司模式。所以我们需要动态改变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.如果我们想发送超过1个不同的有效载荷的广告数据包,那么你有任何示例代码吗?

4.如何改变广播数据包的传输速率?

设备:
PM_Dialog
离线
最后看到:1天21小时前
工作人员
加入: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-03-29专机
你好PM_Dialog,

你好PM_Dialog,

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

感谢和问候,
前腿帕特尔

PM_Dialog
离线
最后看到:1天21小时前
工作人员
加入:2018-02-08 11:03
嗨,前腿帕特尔

嗨,前腿帕特尔

可以通过改变user_adv_conf结构的成员。intv_min或。intv_max来配置通告报文的传输速率,该结构在user_config.h中定义。通过这种方式,您可以定义广告的最小和最大间隔。关于广告数据,您不仅可以修改制造广告数据。您还可以修改超过1字节的广告数据。SDK的ble_app_barebone示例动态地更改广告字符串的适当数据。在特定的示例中,专有数据的长度为2字节,但是它们的长度可以更改。在广告字符串中,您可以附加您的特定数据,并从您的应用程序更新它们。广告消息在app_easy_gap_undirected_advertise_start_create_msg()函数中创建,然后在调用app_easy_gap_undirected_advertise_get_active()函数时保存在cmd结构中。cmd指针将有一个完整的消息,您可以发送到堆栈,包括从USER_ADVERTISE_DATA获取的一些默认adv数据,所以您可以做的是在app_easy_gap_undirected_advertise_get_active()返回后,目标数组在cmd指针,持有广告数据(cmd->info.host.adv_data)和改变他们如你所愿-你的数据将根据BLE规范。

由于PM_dialog

前腿帕特尔
离线
最后看到:2年6个月前
加入:2017-03-29专机
你好PM_dialog,

你好PM_dialog,

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

感谢和问候,
前腿

PM_Dialog
离线
最后看到:1天21小时前
工作人员
加入: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-03-29专机
你好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 Scanner App进行了检查,因为我正在获取制造数据。在观察装置侧如何接收制造数据?

感谢和问候,
前腿

PM_Dialog
离线
最后看到:1天21小时前
工作人员
加入: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_undirected_advertise_start_create_msg()函数,该函数为可连接的无定向事件创建广告消息。发布消息包括用户发布配置、发布数据和其他数据。app_easy_gap_adv_read_from_NVDS()函数从nvds_data_storage结构中读取USER_ADVERTISE_DATA,因此如果USER_ADVERTISE_DATA定义为空,广告数据将为空。通过这种方式,您可以根据应用程序动态地添加不同的广告数据,方法是在user_app_adv_start()函数中使用app_add_ad_struct()。

对于制造商数据,当设备处于观察者模式时,将执行.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结构的数据[ADV_DATA_LEN]项。那么,你实际上如何检查没有收到制造商数据和所有其他数据的正确接收?

由于PM_dialog

前腿帕特尔
离线
最后看到:2年6个月前
加入:2017-03-29专机
你好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)

volatile static uint8_t param_data[ADV_DATA_LEN];

Arch_printf(“%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %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] =参数- > report.data [1],
param_data[2] =参数- > 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在观察者身边如果我检查相同的祝福扫描仪应用原始数据部分中我得到相同的数据修改。你能给我解释一下为什么会这样吗?如果您有任何其他方法来阅读USER_ADVERTISE_DATA,请让我知道。

感谢和问候,
前腿

PM_Dialog
离线
最后看到:1天21小时前
工作人员
加入:2018-02-08 11:03
嗨,前腿帕特尔

嗨,前腿帕特尔

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

由于PM_dialog

前腿帕特尔
离线
最后看到:2年6个月前
加入:2017-03-29专机
你好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,但我无法实现,所以你能提供我任何代码片段或示例代码,这是完全一样的。

简而言之,我想一次向4个不同的观察者广播28个字节。因此,如果我可以发送7字节每个广告数据包和4广告数据包我想广播的时间,然后我需要遵循什么配置?请帮帮我。

感谢和问候,
前腿帕特尔

PM_Dialog
离线
最后看到:1天21小时前
工作人员
加入: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] = {0 x1b 0 xff 0 x31 0 x32, 0 x33 0 x34 0 x35 0 x36 0 x37 0 x38 0 x39 0 x31, 0 x32 0 x33 0 x34 0 x35 0 x36 0 x37 0 x38 0 x39 0 x31, 0 x32 0 x33 0 x34 0 x35 0 x36 0 x37 0 x38};

//安排下一次广告数据更新
app_adv_data_update_timer_used = app_easy_timer(app_adv_data_update_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(struct mnf_specific_data_ad_structure));

app_easy_gap_undirected_advertise_start ();

如果将26字节的数据添加到广告字符串中,并且希望填充其他数据,则可以将它们添加到扫描响应数据中,但在另一方面,观察者应该配置为GAPM_SCAN_ACTIVE,以便发送扫描请求。

由于PM_dialog