你好Dialog_Support,
1.我们将DA14580 MCU配置为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.如何改变广播数据包的传输速率?
嗨,前腿帕特尔
请检查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字节的广告数据。你能告诉我怎么开始吗?
感谢和问候,
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
你好PM_dialog,
谢谢你的回复。现在我能够在USER_ADVERTISE_DATA中发送超过1个字节。接下来我想做观察者和播音员的角色转换。我有两份个人申请:一份作为播音员,另一份作为雷竞技安卓下载观察员。以前我做过外围和中心的角色转换。所以我尝试配置这个,但我的应用程序进入nmi_handler当我运行应用程序。你能告诉我是否需要做额外的修改吗?
感谢和问候,
前腿
嗨Ruchi Patel,
关于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文件具有user_advertise_data的nvds_data_struct结构。但如果我想调用user_advertise_data和user_advertise_data1,那么我可以在用户空间中调用的地方?由于nvds.c文件是SDK的常用文件,所以我无法修改它。
2.我有一个广播设备,我在其中修改生产数据是USER_ADVERTISE_DATA的一部分,并开始广告。在另一端,我有另一个装置,观察者。在观察者方面,我得到USER_ADVERTISE_DATA数据包,但在那我没有得到制造数据。我已经使用BLE Scanner App进行了检查,因为我正在获取制造数据。在观察装置侧如何接收制造数据?
感谢和问候,
前腿
嗨Ruchi Pate,
#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
你好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) (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-> eport.adddr.addr [2],
param-> eport.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,那么请告诉我。
感谢和问候,
前腿
嗨Ruchi Patel,
取决于你如何使用SDK和示例使用注意,SDK将附加任何额外的数据,不适合在广告字符串扫描响应数据,所以确保您所感兴趣的数据是在广告的字符串,而不是扫描响应数据。在第一个指示(广告指示)中,广告数据将填充adv_report结构的数据成员,然后在第二个指示(扫描响应指示)中,扫描响应数据将填充结构。为了捕获扫描响应数据,您应该将设备配置为GAPM_SCAN_ACTIVE以获得扫描响应。如果你将你的设备配置为GAPM_SCAN_PASSIVE,观察者只接收广告数据,而不会发送扫描请求来接收扫描响应,所以你将无法读取扫描响应数据。我还使用一个观察者和ble_app_barebone对此进行了测试,我能够获得广告字符串或扫描响应数据中的增量。
由于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个不同的观察者。因此,如果我可以在每次广告包和4个广告数据包发送7个字节,我想一次播放,那么我需要遵循哪些配置?请帮帮我。
感谢和问候,
Ruchi Patel.
嗨Ruchi Patel,
正如我在前一篇文章中指出的,您不能定义多个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,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_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 ();
}
如果将26bytes数据添加到广告字符串并希望填充其他数据,则可以将它们追加到扫描响应数据中,但在另一侧,观察者应配置为GAPM_SCAN_ACTIVE才能发送扫描请求。
由于PM_dialog