GAPM不返回GAPM_CMP_EVT

7个帖子/ 0新
最后一篇
Meriororen.
离线
最后一次露面:3年8个月前
加入:2015-08-12 13:45
GAPM不返回GAPM_CMP_EVT

嗨,对话框中,

我有一个外围应用程序,要求我通过停止当前的广告来快速更新广告
然后在GAPM_CMP_EVT(无向/ NON_CONECTABLE ADV COMPERT)回调之后用新数据重新启动它。

但是,我一直在观察到DA14580(由Murata包装)的奇怪行为
在统计上很小的机会,有一个时间差距不会返回我的app_easy_gap_advertise_stop()。
并在发生这种情况后继续这样做(问题只能在硬件复位后固定)。

很难重现这个,这就是为什么我无法究竟在发生这种情况时究竟是什么样的条件。还在努力。

我的问题是,也有任何类似的已知错误(差距不会发送返回adv完整的gapm_cmp_evt,即使task_llm是在llm_advertising上)
SDK 5.0.3?

谢谢

设备:
Meriororen.
离线
最后一次露面:3年8个月前
加入:2015-08-12 13:45
供参考,

供参考,

发生此后,任务状态似乎正常。
GAPM在GAPM_IDLE处,TASS_LLM在LLM_ADVERTISING(实际上是广告NON_CONN ADV),Task_LLC在LLC_FREE。
但是,GAPM不会返回APP_EASY_GAP_ADVERTES_STOP()的响应返回GAPM_CMP_EVT。
即使是计时器也是如此。

mt_dialog.
离线
最后一次露面:2个月5天前
职员
加入:2015-06-08 11:34
嗨meriororen,

嗨meriororen,

您的问题是,在通过发出app_easy_gap_advertising_stop()停止广告之后,广告永远不会停止,所以带有GAPM_CMP_EVT的处理程序永远不会触发?我们没有任何关于这种行为的报告。也许你可以给我一些更多的信息,关于你多快开始和停止广告程序,以及你如何实现这个功能?另外,你能告诉我你使用的SDK (SDK5哪个版本),你的项目基于哪个例子,以及这种情况发生的频率吗?

由于MT_dialog

Meriororen.
离线
最后一次露面:3年8个月前
加入:2015-08-12 13:45
是的。我有两种

是的。我有两种广告,
1.无向(可连接)的广告,具有50ms(INTV 80)间隔,数据更新每400ms的数据。
2.具有100ms(INTV 160)间隔的不可连接(信标)广告,数据每150ms更新一次。
是的,我知道,我正在将间隔推向极限。

这两个广告有2种操作模式,在连接期间,只有信标被宣传(信标模式),并且在断开期间,广告在1到2之间切换(切换模式)。

要更新广告数据,请先检查广告是否通过选中task_llm,如果它是llm_adverting,我发送了取消(停止)消息,
等待GAPM_CMP_EVT消息(使用GAPP_ERR_CANCELLED状态的ADV_COMPLETE),然后立即启动广告。

断开连接后出现问题,在断开断开后,我切换到切换模式(这通过从另一个微控制器发送UART消息时异步完成),
像常规一样,切换到切换模式发生:如果现在我是广告,请在发送app_easy_gap_adverting_stop()时停止它,然后再次启动
一个gapm_cmp_evt(adv_complete w / gap_err_cancelled)提示。但有时暗示甚至没有来。

在进一步调试之后,我知道了几件事:
1.发生这种情况后,而不是返回GapM_CMP_EVT ADV_COMPLETE,而是使用GAPM_CMP_EVT GAPM_CANCEL与GAPM_ERR_COMMAND_DISALLED(0x43)返回停止命令。无论我们尝试多少时间。
2.在此之前发生,突然存在一个Gapm_cmp_evt adv_complete,gapm_err_protocol_problem(0x41)。在论坛的某个地方,我检查了有关这个原因是广告间隔的指示广告有类似的问题,并不是那样。我怀疑这将导致问题1号。但是,在我的情况下,在0x41来之后,问题1号出现了。
3.有时,GAPM甚至会陷入GAPM_BUSY_AIR,并停止响应任何命令。

我们正在使用SDK 5.0.3,从鞍骨示例。问题发生在100个断开之间大约3到4次。

Meriororen.
离线
最后一次露面:3年8个月前
加入:2015-08-12 13:45
哦,是的,整个100

哦,是的,整个100个断开,0x41状态只出来一次。之后,我的广告stop命令始终以0x43状态返回。

谢谢

Joacimwe.
离线
最后一次露面:1年5个月前
大师
加入:2014-01-14 06:45
你能做的第一件事是

您可以做的第一件事是尽量避免检查TASK_LLM的任务状态。由于分层架构和消息传递,你的应用程序任务根据最新的消息检索看到的状态可能与内部任务不同步。相反,你应该自己跟踪状态。例如,如果你开始广告,你设置一个变量,广告正在进行,一旦你得到GAPM_CMP_EVT告诉广告已经停止,你清除那个变量。

mt_dialog.
离线
最后一次露面:2个月5天前
职员
加入:2015-06-08 11:34
嗨meriororen,

嗨meriororen,

您可以尝试通过你定义的变量,如Joacimwe建议,或者你可以尝试用ke_state_get检查应用程序TASK_APP的状态()时,该设备是广告,你应该在APP_CONNECTABLE模式。从堆栈的回复我假设您正在发送堆栈无法在当前操作模式下执行的命令。

由于MT_dialog