GAPM doesn't send back GAPM_CMP_EVT

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

Hi Dialog,

我有一个外围应用程序,要求我通过停止当前的广告来快速更新广告
然后在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,

你的问题是,在停止广告by issuing the app_easy_gap_advertising_stop() the advertising never stops so the handler with the GAPM_CMP_EVT never triggers ? We dont have any reports for this kind of behaviour. Perhaps you can give me some more information regarding how fast you start and stop the advertising procedure and how you implement this functionallity? Also can you please let me know about the SDK that you are using (SDK5 which version) and on which example your project is based on, also how often this happens ?

谢谢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)提示。但有时暗示甚至没有来。

After debugging a bit further I know several things:
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个月前
Guru
加入:2014-01-14 06:45
你能做的第一件事是

你能做的第一件事是try to avoid checking the task state of TASK_LLM. Due to the layered architecture and message passing, the state seen by your app task according to the latest messages retrieved might not be in sync with the internal tasks. You should instead keep track of the state yourself. For example if you start advertise you set a variable that advertising is going on and once you get GAPM_CMP_EVT telling advertising has stopped, you clear that variable.

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

嗨meriororen,

您可以尝试由您定义的变量,因为JoacimWe建议,或者您可以尝试使用Ke_State_Get()在设备广告时检查应用程序Task_App的状态,您应该在App_connectable模式下。从堆栈的回复我假设您正在发送堆栈无法在当前操作模式下执行的命令。

谢谢mt_dialog.