应用程序\u轻松\u间隙\u广告\u停止

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
5个员额/0个新员额
最后发表
ohmi
离线
最后一次见到:一年九个月前
加入:2019-03-28 08:21
应用程序\u轻松\u间隙\u广告\u停止

你好,支持团队,

我想了解SDK是如何工作的。

使用示例ble_app_barebone。

我试图让设备在两种状态下运行:

国家0:广告
国家1:无所事事

为了实现这一点,我以这种方式修改了上述项目:
在adv_data_update_timer_cb()——timer callback:我正在切换基于内部计数器的状态
当计数器达到期望值时,我改变状态,请求adv停止:

myStatus是一个全局变量

uint8_t myStatus __attribute__((section("retention_mem_area0"), zero_init));//@RETENTION MEMORY uint8_t nb __attribute__((section("retention_mem_area0"), zero_init));//@RETENTION MEMORY static void adv_data_update_timer_cb() {nb++;if (nb==2) {myStatus=1; / /当前状态//关联app_easy_gap_advertise_stop();} else if (nb>=4) {myStatus=0;nb = 0;} //如果mnd_data_index已经设置MSB,制造商数据存储在扫描响应uint8_t *mnf_data_storage = (mnf_data_index & 0x80) ?stored_scan_rsp_data: stored_adv_data;//更新制造商数据mnf_data_update(); // Update the selected fields of the advertising data (manufacturer data) memcpy(mnf_data_storage + (mnf_data_index & 0x7F), &mnf_data, sizeof(struct mnf_specific_data_ad_structure)); // Update advertising data on the fly app_easy_gap_update_adv_data(stored_adv_data, stored_adv_data_len, stored_scan_rsp_data, stored_scan_rsp_data_len); // Restart timer for the next advertising update app_adv_data_update_timer_used = app_easy_timer(APP_ADV_DATA_UPDATE_TO, adv_data_update_timer_cb); }

当myStatus == 1时,不调用app_easy_gap_undirected_advertise_start

Void user_app_adv_start(Void) {//arch_printf("user_app_adv_start");/*SB*/ //调度下一个广告数据更新app_adv_data_update_timer_used = app_easy_timer(APP_ADV_DATA_UPDATE_TO, adv_data_update_timer_cb);/*SB*/ if (myStatus==1) {return;} struct gapm_start_advertise_cmd* cmd;cmd = app_easy_gap_undirected_advertise_get_active ();app_add_ad_struct(cmd, &mnf_data, sizeof(struct mnf_specific_data_ad_structure), 1); //添加制造商数据到初始广告或扫描响应数据,如果有足够空间app_easy_gap_undirected_advertise_start ();}

当它在NMI_HandlerC中完成时,结果不是我所期望的。

你能帮我理解我做错了什么吗

谢谢

设备:
PM_对话框
离线
最后一次见到:22分53秒前
工作人员
加入:2018-02-08 11:03
嗨ohmi,

嗨ohmi,

当停止发布时,会触发user_app_adv_undirect_complete()回调函数。如果您检查这个函数的源代码,user_app_adv_start()将被触发,因此设备将再次开始发布广告。请在调试模式下运行您的代码,您将看到“status”等于GAP_ERR_CANCELED (= 0x44)。因此,当user_app_adv_start将再次被触发时,myStatus变量将等于1,并执行“return”。这样做的结果是代码卡住,看门狗超时,你得到一个NMI。如果移除If (myStatus==1) {return;},停止发布后,user_app_adv_start()将正确执行,设备将重新启动发布。在SDK中有一个名为ble_app_sleepmode示例的例子,其中设备开始广告,在预定义的时间停止广告后,进入扩展睡眠模式,当您按下开关按钮时,设备醒来并重新启动广告。如果您是我们的产品和SDK的新手,我建议您看一下以下文亚博电竞菠菜件,这将帮助您了解我们的api和SDK的架构。

请阅读UM-B-080文件的柱子5(睡眠模式)部分。此外,我强烈建议您看看我们的教程和我们的软件示例从我们的支持网页。

//www.xmece.com/亚博电竞菠菜products/connectivity/bluetooth-low-energy/smartbond-da14585-and-da14586

谢谢,下午好

ohmi
离线
最后一次见到:一年九个月前
加入:2019-03-28 08:21
是的,我是你们两个公司的新手

是的,我对你们的产品和SDK都是新手。亚博电竞菠菜
我试图通过UM-B-080/079理解SDK,但很难介入。
谢谢你给我教程的链接,我会详细讲解的。

PM_对话框
离线
最后一次见到:22分53秒前
工作人员
加入:2018-02-08 11:03
嗨ohmi,

嗨ohmi,

我建议您阅读UM-B-080/079,运行并调试所有SDK示例,然后阅读教程。如果您有任何其他问题,请创建另一个论坛线程。谢谢你接受我的回答。

谢谢,下午好

ohmi
离线
最后一次见到:一年九个月前
加入:2019-03-28 08:21
嗨,支持,

嗨,支持,

我浏览了这些例子,但我发现教程更有帮助(尤其是讨论睡眠模式的那个)。
我设法让预期的行为在短时间内发送广告,而不是让设备在重新启动广告之前休眠一段时间。

谢谢您的指导。