user_advertise_data.

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
12个帖子/ 0新
最后一篇
Ruchi Patel.
离线
最后一次露面:2年6个月前
加入:2017-03-29 10:50
user_advertise_data.

hello dialog_support,

1.我们将DA14580 MCU配置为a广播公司模式。所以我们需要动态改变user_advertise_data.字符串发送动态更改的数据。但是此User_Advertise_Data在User_Config.h文件中定义,因此我们无法修改它。是否有任何规定,因此我们可以在我们的用户定义函数中修改User_Advertise_data?

2.我们可以定义多个user_advertise_data吗?
例如
#define user_advertise_data(“\ x03”\
adv_type_complete_list_16bit_service_ids \
avd_uuid_device_information_service \
“\ x11”\
adv_type_complete_list_128bit_service_ids \
“\ x2f \ x2a \ x93 \ xa6 \ xbd \ xd8 \ x41 \ x52 \ xac \ x03 \ x00 \ x0f \ x03 \ x x00 \ x0f \ xca \ xea \ x80 \ x7f”)

#define user_advertise_data1(“\ x03”\
adv_type_complete_list_16bit_service_ids \
avd_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.
离线
最后一次露面:4天21小时前
职员
加入:2018-02-08 11:03
嗨Ruchi Patel.

嗨Ruchi Patel.

请检查SDK的BLE_APP_BAREBONE示例,该示例演示了用户广告数据的动态变化。是的,您可以发送超过1个具有不同有效载荷的广告数据包。BLE_APP_BAREBONE示例也展示了该功能。广告字符串应具有特定格式,如。您发布的代码块具有此格式,因此可以执行此操作。广告分组传输速率可以在user_undirected_advertise_conf结构中定制
user_config.h文件。广告数据包以特定的广告间隔传输,该间隔可以在该结构中更改

谢谢pm_dialog.

Ruchi Patel.
离线
最后一次露面:2年6个月前
加入:2017-03-29 10:50
你好pm_dialog,

你好pm_dialog,

感谢您的及时答复。这很有帮助。
我还有很少有问题。
1.我已经检查了BLE_APP_BAREBONE示例。在此,只有制造广告数据正在发生变化。如果我们想在用户文件中修改其他字节的广告数据,那么我们如何修改?你有这个例子吗?
2.我没有在ble_app_barebone示例中找到user_undircated_advertise_conf结构,所以你可以告诉我在哪个例子中定义了这个结构?
3.我想配置一个传输广告数据包的广播公司。我们可以修改此广告数据包。我们应该能够修改超过1个字节的广告数据。所以你能引导我如何开始这个吗?

感谢致敬,
Ruchi Patel.

PM_DIALOG.
离线
最后一次露面:4天21小时前
职员
加入:2018-02-08 11:03
嗨Ruchi Patel,

嗨Ruchi Patel,

您可以通过更改user_adc_conf结构的.intv_min或.intv_max engers来配置广告分组传输速率。通过这种方式,您可以定义广告的最小和最大间隔。关于广告数据,您不仅可以修改制造广告数据。您还可以修改超过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.

Ruchi Patel.
离线
最后一次露面:2年6个月前
加入:2017-03-29 10:50
你好pm_dialog,

你好pm_dialog,

感谢您的答复。现在我能够在user_advertise_data中发送超过1个字节的字节。接下来我想在观察者和广播公司之间进行角色交换机。我有两个个人申请:作为广播公司和其他人作为观雷竞技安卓下载察者。以前我在外围和中心之间做过角色。所以我试图配置这个,但我的应用程序进入NMI_Handler,因为我运行应用程序。您能否建议我需要额外的更改?

感谢致敬,
Ruchi.

PM_DIALOG.
离线
最后一次露面:4天21小时前
职员
加入:2018-02-08 11:03
嗨Ruchi Patel,

嗨Ruchi Patel,

关于NMI_Handler独立于双角色应用程序。由于看门狗定时器,将发出NMI_Handler。请检查看门狗击中您的应用程序。关于广播和观察者模式之间的切换,您不应该做任何其他更改。在广播的情况下,您是作为不可连接的设备进行广告吗?如果没有,可以使用app_easy_gap_non_connectable_advertise_start API为不可连接的广告创建广告消息。此外,我建议您使用.App_on_adv_nonconn_complete回调函数,因为在广告作为不可连接的设备时触发此回调时,从而触发。

谢谢pm_dialog.

Ruchi Patel.
离线
最后一次露面:2年6个月前
加入:2017-03-29 10:50
hello dialog_support,

hello dialog_support,

感谢你的回复。现在我能够将角色从观察者切换到广播公司,反之亦然。

我在我的第一个帖子中问道我们可以定义多个user_advertise_data吗?。我能够在user_config.h文件中定义它。但是怎么称呼它?我的意思是nvds.c文件具有user_advertise_data的nvds_data_struct结构。但如果我想调用user_advertise_data和user_advertise_data1,那么我可以在用户空间中调用的地方?由于nvds.c文件是SDK的常用文件,所以我无法修改它。

2.我有一个广播设备,其中我正在修改作为user_advertise_data的一部分的制造数据并开始广告。在另一端我有另一个是观察者的设备。在观察者侧,我得到了user_advertise_data报文,但我没有得到制造数据。我使用BLE Scanner应用程序检查,在我获得制造数据。如何在观察者设备侧接收此制造数据?

感谢致敬,
Ruchi.

PM_DIALOG.
离线
最后一次露面:4天21小时前
职员
加入:2018-02-08 11:03
嗨Ruchi Pate,

嗨Ruchi Pate,

当您在帖子中说,#define“user_advertise_data”附加到.nvds_tag_app_ble_adv_data项目的nvds_data_storage结构。您可以定义多个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_undircated_advertise_get_active()函数返回app_easy_gap_undircated_advertise_start_create_msg()函数,为可连接的无向事件创建广告消息。广告消息包括用户广告配置,广告数据和其他数据。app_easy_gap_adv_read_from_nvds()函数从nvds_data_storage结构中读取user_advertise_data,因此如果您有空的user_advertise_data定义,则您的广告数据将为空。通过这种方式,您可以根据user_app_add_start()函数中的app_add_ad_struct()动态地追加不同的广告数据。

关于制造商数据,当设备处于Observer模式时,.app_on_adv_report_ind Ind Callback函数(在user_callback_config.h文件中)将执行,因此它不应该为null,您应该定义要触发的函数。收到GAPM_ADV_REPORT_IND时,将执行GAPM_ADV_REPORT_IND_HANDLER()执行.app_on_adv_report_ind IND回调。此处理程序具有输入参数The GapM_Adv_Report_ind结构,包括Adv_report结构。制造商数据应该是ADV_REPORT调节的数据[ADV_DATA_LEN]项。那么你如何检查没有收到制造商数据,并且所有其他数据都正确收到?

谢谢pm_dialog.

Ruchi Patel.
离线
最后一次露面:2年6个月前
加入:2017-03-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_od_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-> eport.adddr.addr [5],
param-> eport.addr.addr [4],
param-> eport.adddr.addr [3],
param-> eport.adddr.addr [2],
param-> eport.addr.addr [1],
param-> eport.addr.addr [0],
param_data [0] = param-> report.data [0],
param_data [1] = Param-> Report.data [1],
param_data [2] = param-> report.data [2],
param_data [3] = param-> report.data [3],
param_data [4] = param-> report.data [4],
param_data [5] = param-> report.data [5],

就像这个我正在读31个字节的数据。我不知道其他读取数据的方法。在广播方面,在26个字节之后,附加制造数据。如果我在制造数据字符串处修改我的自定义数据,并且广告数据长度更像是31个字节,那么我在观察者侧获得00,但如果我在原始数据部分中的BLE扫描仪应用中检查相同,我会得到相同的数据已经修改过。你能解释一下我为什么会发生这种情况吗?如果您有任何其他方法来读取user_advertise_data,那么请告诉我。

感谢致敬,
Ruchi.

PM_DIALOG.
离线
最后一次露面:4天21小时前
职员
加入:2018-02-08 11:03
嗨Ruchi Patel,

嗨Ruchi Patel,

Depending how you are using the SDK and which example you are using be aware that the SDK will append any extra data that don’t fit in the advertising string in the scan response data, so make sure that the data that you are interested in is in the advertising string and not the scan response data. In the first indication (advertising indication) the advertising data will populate the data member of the adv_report struct, and then in the second indication (scan response indication) the scan response data will populate the struct. In order to catch the scan response data, you should configure your device as GAPM_SCAN_ACTIVE to get a scan response. If you configure your device as GAPM_SCAN_PASSIVE, the observer only receives advertising data and doesn’t send a scan request to receive a scan response, so you will not able to read your scan response data. I’ve also tested this using an observer and the ble_app_barebone, I was able to get the increment in the advertising string or in the scan response data.

谢谢pm_dialog.

Ruchi Patel.
离线
最后一次露面:2年6个月前
加入:2017-03-29 10:50
你好pm_dialog,

你好pm_dialog,

感谢您的答复。我正在参考BLE_APP_PERITELAL和BLE_APP_BAREBONE示例来开发我的申请。现在我想向user_advertise_data发送我的自定义数据,但该数据不适合user_advertise_data,以便我在我的前一篇文章中询问,我们可以定义多个user_advertise_data并广播它?但是在nvds.c文件中调用user_advertise_data,它是DSK的常用文件,所以我无法修改它。正如您所建议的那样,更新User_Advertise_Data,但我无法实现所以可以为我提供任何代码片段或示例代码,这些代码可以完全相同。

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

感谢致敬,
Ruchi Patel.

PM_DIALOG.
离线
最后一次露面:4天21小时前
职员
加入:2018-02-08 11:03
嗨Ruchi Patel,

嗨Ruchi Patel,

正如我在上一篇文章中所指出的那样,您无法定义多个user_advertise_data,因为#define“user_advertise_data”将附加到.nvds_tag_app_ble_add_data项的nvds_data_storage结构。广告字符串具有31个字节长度,但它们的3个字节是从堆栈中保留的,广告过滤策略和广告数据长度,因此您可以使用最多28bytes。附加到广告字符串中的数据将由USER_APP_ADV_START填充,其中我在上一个帖子中已提及的过程。如果要将自定义数据添加到广告字符串中,则应将它们复制到CMD的正确数组中,该数组是user_app_adv_start()函数。cmd由app_easy_gap_undircted_advertise_get_active()创建。在您的应用程序中,您可以将user_advertise_data为空,并将数据复制到广告字符串中。自定义数据应该有效,并且应遵循user_advertise_data的结构,以便正确启动广告。您应该将2字节与长度和标志一起放入数据中,因此最终您能够将高达26字节追加到广告字符串中。在以下代码中,我会向您展示您如何做到这一点。

void user_app_adv_start(void)
{

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

//安排下一个广告数据更新
app_add_data_update_timer_used = app_easy_timer(app_add_data_update_to,avd_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_undircated_advertise_start();
}

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

谢谢pm_dialog.