This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2340R5:是否可以告知 BLEAPPUTIL_ADV_END_AFTER_DISABLE 事件的来源?

Guru**** 2500435 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1554065/cc2340r5-is-it-possible-to-tell-the-source-of-bleapputil_adv_end_after_disable-event

器件型号:CC2340R5


工具/软件:

我有一个项目使用有限的 ADV 持续时间、在持续时间到期后 、BLEAPPUTIL_ADV_END_AFTER_DISABLE 事件将被调用。 同时、建立连接 后、BLEAPPUTIL_ADV_END_AFTER_DISABLE 事件也将被调用。 是否有办法告知由于 ADV 持续时间或连接建立已过期而调用此事件?

我想将事件分开的原因是、在这些不同的情况下、我需要调用不同的函数。 例如、我将在 ADV 持续时间到期后调用函数 A、在连接建立后调用函数 B。 但是 、由于 BLEAPPUTIL_ADV_END_AFT_DISABLE 事件始终早于 BLEAPPUTIL_LINK_INSTABLE_EVENT 、因此始终不会一直调用函数 A。 处理此用例的建议方法是什么?

此致、

Shuyang

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    在最新的 SDK 中、由两个不同的事件进行处理 GAP_EVT_ADV_END_AFTER_DISABLE GAP_EVT_ADV_SET_TERMINATED

    在 BLEAppUtil API 中、这些事件分别链接到 BLEAPPUTIL_ADV_END_AFTER_DISABLE BLEAPPUTIL_ADV_SET_TERMINATED

    您应该能够在外设或广播设备事件处理程序中设置这两个事件、然后在事件处理程序的事件掩码中筛选这些事件


    我在最新的 SDK 上制作了这些屏幕截图。 您能和我分享您正在使用的 SDK 的版本吗?

    此致、
    Maxence

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Maxence、

    我正在使用最新的 SDK、我看到了这些事件、但我发现了这一点  BLEAPPUTIL_ADV_END_AFTER_DISABLE  由于连接而终止广播时、将调用。 你能检查你是否看到同样在你身边?

    此致、

    Shuyang

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我会检查一下、然后返回给您。

    此致、
    Maxence

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您能在结束时确认一下  BLEAPPUTIL_ADV_SET_TERMINATED  发生断开连接时是否正确触发?

    此致、
    Maxence

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Maxence、

    在我这边 、BLEAPPUTIL_ADV_SET_TERMINATED 在建立连接(未断开连接)时触发、 BLEAPPUTIL_ADV_END_AFTER_DISABLE 在广播因持续时间到期或建立连接而终止时触发。

    此致、

    Shuyang

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我想我找到了这个问题。 事件已正确发送、问题源于 basic_ble 示例的行为。 在 app_peripheral.c 中、您将找到 Peripheral_GAPConnEventHandler 函数。 此函数会侦听 GAP 事件、在建立连接时、它通过 GapAdv_disable 函数停止广播。 这是发送 BLEAPPUTIL_ADV_END_AFTER_DISABLE 事件的函数。

    在您的用例中、 您可以改为侦听 BLEAPPUTIL_ADV_END_AFTER_DISABLE 和 BLEAPPUTIL_ADV_SET_TERMINATED、而不是侦听 BLEAPPUTIL_ADV_END_DISABLE BLEAPPUTIL_ADV_END_AFTER_DISABLE 和  BLEAPPUTIL_LINK_RESIDEND_EVENT (注意,这些事件的类型不同,使用两个不同的处理程序)。

    您可以做的就是更改内部的代码  Peripheral_GAPConnEventHandler 以通知  Peripheral_Adv 事件处理程序  处理程序  BLEAPPUTIL_ADV_END_AFTER_DISABLE  事件来自连接、而不是对 GapAdv_disable 的实际调用。

    此致、
    Maxence

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Maxence、

    我忘记与您同步、我已经尝试注释掉  Peripheral_GAPConnEventHandler 中的 GapAdv_disable、但 在建立连接时仍会触发 BLEAPPUTIL_ADV_END_AFT_DISABLE 事件。 我认为这是 BLE 堆栈的设计、它没有区分 ADV 终止原因。 您能帮助检查是否出现这种情况吗?

    此致、

    Shuyang

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    即使在对功能进行注释后、我也能重现您的问题。 我将尝试找出根本原因或将其报告为错误、并在此期间找到解决方法。

    此致、
    Maxence

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我找到了您的问题的解决方案。 您可以将外围设备通告处理程序函数更改为:

    void Peripheral_AdvEventHandler(uint32 event, BLEAppUtil_msgHdr_t *pMsgData)
    {
        switch(event)
        {
            case BLEAPPUTIL_ADV_START_AFTER_ENABLE:
            {
                MenuModule_printf(APP_MENU_ADV_EVENT, 0, "Adv status: Started - handle: "
                                  MENU_MODULE_COLOR_YELLOW "%d" MENU_MODULE_COLOR_RESET,
                                  ((BLEAppUtil_AdvEventData_t *)pMsgData)->pBuf->advHandle);
                break;
            }
    
            case BLEAPPUTIL_ADV_END_AFTER_DISABLE:
            {
                if(linkDB_NumActive() < linkDB_NumConns())
                {
                    MenuModule_printf(APP_MENU_PROFILE_STATUS_LINE, 0, "Adv status: Ended - Function A");
                }
                else 
                {
                    MenuModule_printf(APP_MENU_PROFILE_STATUS_LINE1, 0, "Adv status: Ended - Function B");
                }
                break;
            }
    
            default:
            {
                break;
            }
        }
    }

    这将显示如何区分由于连接或广播过期而导致的广播变化。

    此致、
    Maxence

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Maxence、  

    这适用于我的用例、感谢您的支持!

    此致、

    Shuyang