你好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 \
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.如何更改广告数据包传输速率?
嗨Ruchi Patel.
请查看SDK的ble_app_barebone示例,它演示了用户广告数据的动态变化。是的,您可以发送超过1个不同有效载荷的广告包。ble_app_barebone示例也演示了该功能。广告字符串应该有特定的格式,比如。您发布的代码块具有这种格式,所以可以这样做。通告报文的传输速率可以按照“user_undirected_advertise_conf”结构进行定制
user_config.h文件。该广告包以特定的广告间隔传输,该间隔可以在该结构中改变
谢谢pm_dialog.
你好pm_dialog,
感谢您的及时答复。这很有帮助。
我还有几个问题要问。
1.我已经检查了BLE_APP_BAREBONE示例。在此,只有制造广告数据正在发生变化。如果我们想在用户文件中修改其他字节的广告数据,那么我们如何修改?你有这个例子吗?
2.我没有找到user_undirected_advertise_conf结构在ble_app_barebone的例子,所以你能告诉我在哪个例子中这个结构是定义的吗?
3.我想配置一个传输广告数据包的广播公司。我们可以修改此广告数据包。我们应该能够修改超过1个字节的广告数据。所以你能引导我如何开始这个吗?
感谢致敬,
前腿帕特尔
嗨,前腿帕特尔
可以通过改变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.
你好PM_dialog,
谢谢你的回复。现在我能够在USER_ADVERTISE_DATA中发送超过1个字节。接下来我想做观察者和播音员的角色转换。我有两份个人申请:一份作为播音员,另一份作为亚博国际官网平台网址观察员。以前我做过外围和中心的角色转换。所以我尝试配置这个,但我的应用程序进入nmi_handler当我运行应用程序。你能告诉我是否需要做额外的修改吗?
感谢致敬,
Ruchi.
嗨,前腿帕特尔
关于NMI_Handler独立于双角色应用程序。由于看门狗定时器,将发出NMI_Handler。请检查看门狗击中您的应用程序。关于广播和观察者模式之间的切换,您不应该做任何其他更改。在广播的情况下,您是作为不可连接的设备进行广告吗?如果没有,可以使用app_easy_gap_non_connectable_advertise_start API为不可连接的广告创建广告消息。此外,我建议您使用.App_on_adv_nonconn_complete回调函数,因为在广告作为不可连接的设备时触发此回调时,从而触发。
谢谢pm_dialog.
你好Dialog_Support,
感谢你的回复。现在我能够将角色从观察者切换到广播公司,反之亦然。
我在我的第一个帖子中问道我们可以定义多个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应用程序检查,在我获得制造数据。如何在观察者设备侧接收此制造数据?
感谢致敬,
Ruchi.
嗨,前腿肉酱,
#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()。
关于制造商数据,当设备处于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.
你好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)
{
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-> eport.adddr.addr [5],
param-> eport.addr.addr [4],
param - > report.adv_addr.addr [3],
param - > report.adv_addr.addr [2],
param-> eport.addr.addr [1],
param-> eport.addr.addr [0],
param_data [0] = param-> 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] = param-> report.data [5],
像这样,我读取31字节的数据。我不知道其他读取数据的方法。在广播端,26字节后,制造数据被附加。如果我修改自定义数据在生产数据字符串和广告数据长度超过31个字节然后我00在观察者身边如果我检查相同的祝福扫描仪应用原始数据部分中我得到相同的数据修改。你能给我解释一下为什么会这样吗?如果您有任何其他方法来阅读USER_ADVERTISE_DATA,请让我知道。
感谢致敬,
Ruchi.
嗨,前腿帕特尔
取决于你如何使用SDK和示例使用注意,SDK将附加任何额外的数据,不适合在广告字符串扫描响应数据,所以确保您所感兴趣的数据是在广告的字符串,而不是扫描响应数据。在第一个指示(广告指示)中,广告数据将填充adv_report结构的数据成员,然后在第二个指示(扫描响应指示)中,扫描响应数据将填充结构。为了捕获扫描响应数据,您应该将设备配置为GAPM_SCAN_ACTIVE以获得扫描响应。如果你将你的设备配置为GAPM_SCAN_PASSIVE,观察者只接收广告数据,而不会发送扫描请求来接收扫描响应,所以你将无法读取扫描响应数据。我还使用一个观察者和ble_app_barebone对此进行了测试,我能够获得广告字符串或扫描响应数据中的增量。
谢谢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,但我无法实现所以可以为我提供任何代码片段或示例代码,这些代码可以完全相同。
简而言之,我想一次向4个不同的观察者广播28个字节。因此,如果我可以发送7字节每个广告数据包和4广告数据包我想广播的时间,然后我需要遵循什么配置?请帮帮我。
感谢致敬,
前腿帕特尔
嗨,前腿帕特尔
正如我在上一篇文章中所指出的那样,您无法定义多个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字节追加到广告字符串中。在以下代码中,我会向您展示您如何做到这一点。
空白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_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();
}
如果将26字节的数据添加到广告字符串中,并且希望填充其他数据,则可以将它们添加到扫描响应数据中,但在另一方面,观察者应该配置为GAPM_SCAN_ACTIVE,以便发送扫描请求。
谢谢pm_dialog.