.app_on_adv_report_ind未直接执行!

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
10个帖子/ 0个新帖子
最后一篇
塞巴斯蒂安·埃德曼
离线
最后看到:3年8个月前
加入:2017-05-29 12:02
.app_on_adv_report_ind未直接执行!

你好,

以下背景(使用SDK 5.0.4):
我们已经设置了一个广告商,在同一频道上每2秒突发发送5条消息(在ble_供电的回调上,我们等待从ble_EVT_TX到ble_EVT_END的转换,然后使用app_advertise_stop_op()取消传输,然后在无方向(完整回调)时再次启动。这是可行的,我们已经用当前的测量数据验证了它们是即时传输的,所有消息都由中央设备接收,一切正常,但消息在接收时会延迟,中央设备中的.app_on_adv_report_ind在消息到达时不会传递消息。例如:

外设在发送消息1 2 3 4 5之间约10ms,然后等待2秒,结果如下:
外设传输:1(10ms)2(10ms)3(10ms)4(10ms)5(约2秒)1(10ms)2(10ms)3(10ms)4(10ms)5(2秒)1。。。。
中央接收:1,2,3(约2秒)4,5,1,2,3,4(2秒)5,1 ....

消息4,5和下一个周期消息5被延迟了几秒钟!如果您添加另一个外围设备到此(或另一个BT设备在同一频道传输),您将注意到消息与那些消息一起接收。这意味着如果你在一个有大量BT通信的地区,你很可能不会注意到这个bug。

消息似乎被SDK接收和收集,但直到有足够的消息排队或类似的消息时才释放。你能证实吗?或者让我知道是否有一种方法可以迫使SDK释放接收到的消息?

2.并请提供一些SDK的文档。这是非常糟糕的文件!
3.修正登录到支持网站,我必须按“请求新密码”每次我登录到这里。

关键词:
设备:
MT_dialog
离线
最后看到:6个月2个星期前
职员
加入:2015-06-08 34
嗨塞巴斯蒂安,

嗨塞巴斯蒂安,

  1. 回调,通知应用程序的广告串已被接收,不直接触发,但也但这并没有等待缓冲区来填充。回调执行并报告给应用程序,只要该特定通道两端的扫描窗口,也有这样的情况,该装置将只是在一个拥挤的环境的情况下,特别是扫描窗口完成之前报告。该装置将在每一个扫描窗口之间存在,通常扫描窗口之后的时间间隔期间报告任何广告字符串。关于2秒,你是提的是,我没有看到这背后的任何合理的解释,如果有对空气数据并没有对广告数据没有过滤该装置将报告,设备将通知关于接收数据的应用程序整理每个信道上的扫描之后,它不必须等待将被填充任何缓冲。也许你应该检查你的扫描设置(扫描间隔和窗口,如果你申请的任何过滤)。此外,我看不出你如何能发送带有在10毫秒的时间间隔的广告串,因为最小值为20ms,除非你不断启动和停止广告程序。另外要注意,广告不能保证客户端将收到的所有消息从外设发送。
  2. 如果你能提供有关文档的一些具体的意见,我会很乐意把它传递的SDK和文档团队。
  3. 关于登录不工作的事实,请注意以下几点,因为网站的管理员告诉我,机制是检查的,大多数时候,用户体验是由于:
    1. 输入新密码后忘记点击保存。
    2. Didnt注意到,密码未更新,因为用户没有注意到红色ALTER框,告诉他们自己的密码不符合安全标准的。
    3. 使用他们的浏览器自动密码建议,这与他们的新浏览器不同。
    4. 记错密码或用户名

由于MT_dialog

塞巴斯蒂安·埃德曼
离线
最后看到:3年8个月前
加入:2017-05-29 12:02
谢谢您的快速回复,

谢谢您的快速回复,

  1. 接收:
    接收设置为以下值:
    CMD-> op.code = GAPM_SCAN_PASSIVE;
    cmd->op.addr\u src=GAPM\u PUBLIC\u addr;
    CMD->间隔= LLM_SCAN_INTERVAL_MAX;
    cmd窗口- > = LLM_SCAN_WINDOW_MAX;
    CMD->模式= GAP_OBSERVER_MODE;
    CMD-> filt_policy = SCAN_ALLOW_ADV_ALL;
    cmd - > filter_duplic = SCAN_FILT_DUPLIC_DIS;
    附加的图像(logic_analyzer_image_descripbing_the_reception _problem.zip)显示了在更“拥挤”的环境中的接收情况(一些设备每80ms发布一次广告)。
    第一行(蓝色)是消息的传输(当函数app_advertise_start_msg_send(CMD)在外围被执行)
    第二行(棕色)是回调函数.app_on_adv_report_ind在中央执行的时间。
    第三行(红色)表示在中央设备内处理正确的消息。
    如图所示,外围设备传输4条信息(蓝线,数字1至4)。它们分部分接收(棕色线,编号5.至8.和10.至13.),前三条消息(编号5.至7.)是其他一些广告,不是为我们发送的,我们的消息作为编号8接收(并作为编号9处理),其余消息(编号2.至4.延迟到编号13.收到)。然后它们被处理为数字14到16。
    的2到4的接收被延迟,直到编号13的接收(或扫描窗口,其被设置为10秒的可能的端部)。

    在13号到达之前,有没有办法释放2到4号的信息?比如发送一条触发释放的ke_消息,或者模拟接收这两条消息或类似消息?

    或者看着前台,.app_on_adv_report_ind功能总是连续执行的4倍,这将表明接收缓冲器是4个消息大,是否有可能将这一数字减少到1条消息?

    传送:是的,我们停下来又重新开始,这将每四五秒产生一条信息。

  2. 例如:
    • 其中是用于扫描的文件(上述的参数说明)
    • 在哪里解释如何处理不同的状态,例如ke_state_set(TASK_APP,APP_CONNECTABLE)
  3. 输入新密码后忘记点击保存。
    - >我输入的字母,并按下保存
    Didnt注意到,密码未更新,因为用户没有注意到红色ALTER框,告诉他们自己的密码不符合安全标准的。
    ->它被标记为强壮
    使用他们的浏览器自动密码建议,这与他们的新浏览器不同。
    - >我一直有这个功能关闭
    记错密码或用户名
    >我甚至在保存后直接尝试。它仍然没有工作。
    你有什么可以让我试试的吗?
MT_dialog
离线
最后看到:6个月2个星期前
职员
加入:2015-06-08 34
嗨塞巴斯蒂安,

嗨塞巴斯蒂安,

  1. 减少扫描窗口和扫描间隔,您使用的是扫描过程的最大值,尝试使用10作为间隔,5作为扫描窗口。如上所述,设备通常会在扫描窗口结束时报告,因此,如果您保持扫描窗口那么长(约10秒),并且您具有与间隔相同的值,则报告将被延迟(因为正如您所注意到的,存在缓冲功能,但它位于堆栈深处的ROM代码中)。尝试使用上面提到的值,这将解决您的问题。
  2. 关于文档:
    1. 不幸的是,没有涉及中心功能的程序文档,因为大多数用户都是面向外围设备的。
    2. 您可以查看有关第5.3段任务的文档UM-B-051 1458x Software Platform Reference.pdf。
  3. 对不起,我将通知管理员,如果有其他事情发生,让你知道。

由于MT_dialog

塞巴斯蒂安·埃德曼
离线
最后看到:3年8个月前
加入:2017-05-29 12:02
你好MT_dialog,

你好MT_dialog,

  1. 因为我们只在一个通道上发送和接收,所以我们依赖GAPM\u START\u SCAN\u CMD/GAPM\u CANCEL\u CMD体系结构。将扫描窗口缩小到如此小的大小将使其变得无用,因为GAPM_CANCEL_CMD似乎会丢弃缓冲区中的所有消息。这导致基本上没有收到任何消息!所以不幸的是,这不是一个选择,除非我们已经监督了一些事情。

    是否有一种方法来触发在扫描期间缓冲区中接收到的消息的释放?例如:我能以某种方式发出一个内部消息,以便堆栈相信它正在接收第4个消息,从而释放缓冲区吗?或者我能触发提前扫描结束吗?

    或者有没有办法在扫描窗口结束时设置回调,以便我可以从那里取消它?

  2. 和3无可奉告。
MT_dialog
离线
最后看到:6个月2个星期前
职员
加入:2015-06-08 34
嗨塞巴斯蒂安,

嗨塞巴斯蒂安,

没有没有办法扫描窗口结束之前释放缓冲区或迫使设备直接显示的数据是可用的那一刻,在扫描过程配置扫描如何操作在堆栈上,你只能接口特定的消息。关于扫描一个频道,您可以实现和强制扫描过程尽快结束BLE_EVT_END,可以实现.app_on_ble_powered并检查美国的收音机使用arch_last_rwble_evt_get(),你可以看看下面的例子:

空隙user_app_on_ble_powered(无效)

uint8_t temp_last_ble_event;

temp_last_ble_event = arch_last_rwble_evt_get();

如果(app_last_ble_event ! = temp_last_ble_event)

app_last_ble_event=temp_last_ble_event;

if(app_last_ble_event == BLE_EVT_END) //最后一个无线电事件是一个扫描事件(因为它在扫描)

/ /停止扫描
结构gapm_cancel_cmd*cmd=app_gapm_cancel_msg_create();
//发送消息
app_gapm_cancel_msg_send(CMD);


还要确保扫描过程中要放置的间隔和窗口值之间有一定距离,例如,如果窗口为5,则确保间隔至少为15个可移动插槽,以便设备能够在这段时间内运行并检索广告事件。

由于MT_dialog

塞巴斯蒂安·埃德曼
离线
最后看到:3年8个月前
加入:2017-05-29 12:02
你好MT_Dialog,

你好MT_Dialog,

我现在已经实现了你的建议,因为扫描重启(GAPM_CANCEL_CMD,等待回调,然后GAPM_START_SCAN_CMD)大约需要800µs,我们不会太经常这样做,所以我设置间隔为160 (100ms)和窗口为155。这是一个可以接受的妥协,而且它几乎按照预期运行。如预期的那样,缓冲区中的消息在窗口端释放,并由应用程序进行处理。这意味着我们现在接收消息的最大延迟为100毫秒,这比以前好多了。
但是,过了一段时间(30-60秒),扫描不知何故挂起,不再接收任何消息。每次我们在窗口结束之前(或期间?)收到第四条消息(SDK缓冲区已满)时,似乎都会发生这种情况(因此,带有ble_EVT_端的on_动力回调延迟约0,7毫秒)。所有4条消息都被发送到应用程序,很快我们就得到了预期的BLE_EVT_端,我们发送GAPM_CANCEL_CMD,等待回调,然后GAPM_START_SCAN_CMD,每次都是这样,但是从现在起我们没有收到一条消息。BLE_EVT_端按预期继续出现,我们每次都会取消/启动_扫描,但仍然没有收到任何信息(由于我们取消到很晚,它是否更改了通道?还是缓冲区崩溃了?)。

首先,我们是否可以检查任何状态以确定扫描是否成功启动,是否扫描了第一个通道?带有状态或类似的回调?

其次,我尝试将窗口减少到150(仍然将间隔设置为160),然后挂起效果(不再接收)不再发生(运行30分钟)。对我来说,这表明了某种比赛状态,我想知道如何识别何时发生以及如何修复它。这就是为什么你要我让窗户稍微低于间隔的原因吗?这是一个已知的问题,你能详细说明吗?

MT_dialog
离线
最后看到:6个月2个星期前
职员
加入:2015-06-08 34
嗨塞巴斯蒂安,

嗨塞巴斯蒂安,

我已经推荐你执行只是一种方式,以扫描只有一个频道“傻瓜”堆栈,因为扫描到只有一个通道不被SDK支持,所以这只是未正式支持的解决方法和一般不推荐使用,但它的我是知道的,你可以实现你想要什么的唯一方式。关于您的问题,这正是我已经建议有从窗口相当长的时间间隔,因为显然是原因,存在栈竞争条件,并且您遇到什么期望这项工作各地。所以,为了避免您必须确保你给的扫描窗口的结束和扫描间隔之间的一些空间,也这样做并不保证设备不会走到那特定的条件,这就是为什么它明智的做法是实行somekind的当不存在用于广告的迹象相当一段时间切换回普通扫描了一会儿,然后回到一个通道的扫描故障安全机制。但同样我要提醒你,这是唯一的解决方法,而不是扫描一个通道上的正式和验证的解决方案。

由于MT_dialog

塞巴斯蒂安·埃德曼
离线
最后看到:3年8个月前
加入:2017-05-29 12:02
你好MT_dialog,

你好MT_dialog,

谢谢你真诚的回答,这不是我们所希望的,如果能在我们开始这个项目时记录下这段对话的部分内容,那就太好了。光是这个问题就可以让我们少试一个星期。请理解这个提示,写一份关于接收/扫描芯片的文件。

无论如何,因为这个问题和其他一些类似的问题,我们决定去与你的竞争对手。

问候
塞巴斯蒂安

另外,登录仍然不起作用,我不得不按“请求新密码”来写这个。

MT_dialog
离线
最后看到:6个月2个星期前
职员
加入:2015-06-08 34
嗨塞巴斯蒂安,

嗨塞巴斯蒂安,

很抱歉听到这个消息,我将把你的意见传递给文档团队以及支持站点的管理员,无论如何,希望你的项目一切顺利。

由于MT_dialog