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:擦除 GATT_CLIENT 示例中的绑定信息时出现问题

Guru**** 2595805 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1323769/cc2340r5-issue-with-erasing-bond-information-in-gatt_client-example

器件型号:CC2340R5
主题中讨论的其他器件:SysConfig

您好!  

    我们正在使用  GitHub 上提供的 TI 示例 based_ble 外设配置文件项目和中央示例 、称为 basic_ble_GATT_CLIENT。

 https://github.com/TexasInstruments/ble_examples/tree/simplelink_low_power_f3_sdk-7.20/examples/rtos/LP_EM_CC2340R5/ble5stack/basic_ble_GATT_client

我能够执行此  功能以启用并在验证 (配对状态:已保存绑定)成功后接收通知。

不擦除键合信息。 但我修改了 GATT_CLIENT 中的代码、在调用函数 void Menu_disconnectCB (uint8索引)时、在中央位置擦除绑定信息、此处显示以下代码

。  

/*********************************************************************
 * @fn      Menu_disconnectCB
 *
 * @brief   A callback that will be called once the Disconnect item
 *          in the workWithMenu is selected.
 *          Calls BLEAppUtil_disconnect to disconnect from the
 *          menuCurrentConnHandle.
 *
 * @param   index - the index in the menu
 *
 * @return  none
 */
void Menu_disconnectCB(uint8 index)
{
    bStatus_t status;

    // Disconnect from the selected connection
    status = BLEAppUtil_disconnect(menuCurrentConnHandle);

    // Print the status of the set conn phy call
    MenuModule_printf(APP_MENU_GENERAL_STATUS_LINE, 0, "Call Status: Disconnect = "
                      MENU_MODULE_COLOR_BOLD MENU_MODULE_COLOR_RED "%d" MENU_MODULE_COLOR_RESET,
                      status);
                      
    //Erase Bond information
    GAPBondMgr_SetParameter(GAPBOND_ERASE_ALLBONDS, NULL, NULL);  
    
    // Go back to the "connection" menu
    
    MenuModule_goBack();
}

在 Central 中再次擦除绑定信息以进行  身份验证与外设的连接后  、(配对状态:绑定已保存)成功。 现在、在 MTU 交换尝试在  配对状态:已保存绑定更改为配对状态:已在中央设备和外围设备上加密后立即启用通知。 在  外设中未启用通知以及在外设的中央数据接收中执行 GATT_Write 时。

就像我们的定制中央外设代码中发生的同样问题一样。  您能提出解决方案吗?

SDK 版本: simplelink_lowpower_f3_sdk_7_40_00_64 (外设和中央)

CCS 版本:CCS 12.5.0

谢谢。

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

    您好 Vignesh:

    感谢您的联系。

    请帮助我确认您正在执行以下步骤、以确保我了解您的流程:

    1. Central (执行 basic_ble_GATT_CLIENT)连接到 Peripheral (运行 based_ble)。
    2. 两个设备配对和绑定(配对状态:绑定已保存)。
    3. Central 启用并接收通知。
    4. 中央断开与外设 Mgr_Set 的连接、并通过 GAPB博 博博博蒂表清除所有键合(GAPBOND_ERASE_ALLBONDS、0、NULL)。
    5. 中央连接到外设。
    6. 两个设备配对和绑定(配对状态:绑定已保存)。
    7. Central 尝试启用通知和配对状态:绑定已保存更改为配对状态:在中央和外围设备上加密。
    8. 中央无法启用通知。
    9. 中央设备可以通过 GATT_Writeto 外设发送数据。

    还请帮助我回答以下问题、以便进一步帮助您:

    1. 您所描述的是在只保存然后擦除1个键后发生的情况?
    2. 谁启动配对/键合流程(中央或外围)?
    3. 除了在 Menu_disconnectCB() Mgr_Set 中 为 basic_ble_GATT_CLIENT 添加 GAPBOND_ERASE_ALLBONDS、NULL、NULL)之外,您是否对两个项目(basic_ble_GATT_CLIENT)中的任何一个进行了修改?
    4. 您在 SysConfig 中对绑定管理器进行了什么配置?

    Github 中的 basic_ble_GATT_CLIENT 示例在7.20.00.29 SDK 中运行、不过这可能与您看到的内容无关。 最新版本即将在线更新、但您可以查看以下内容: CC23xx SDK 7.20至 CC23xx SDK 7.40

    Br、

    大卫。

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

    尊敬的 David:

        谢谢、此处为您的问题提供了

    • 您所描述的是在只保存然后擦除1个键后发生的情况?

            -是的,对于中心测试,我们只保存一个外围设备的绑定和擦除绑定信息在中心断开。

    • 谁启动配对/键合流程(中央或外围)?

            -在 syscfg 配对模式设置在中央启动配对请求,并等待外围设备中的配对请求,因此配对发生时连接链路已建立。

    •  除了在 Menu_disconnectCB() Mgr_Set 中 为 basic_ble_GATT_CLIENT 添加 GAPBOND_ERASE_ALLBONDS、NULL、NULL)之外,您是否对两个项目(basic_ble_GATT_CLIENT)中的任何一个进行了修改?

               除了在中央和外围的配对模式和在中央的绑定擦除模式之外,我们没有修改代码。

    • 您在 SysConfig 中对绑定管理器进行了什么配置?

    外设:

    中心:

    很抱歉、我 在 SDK 版本中使用了 basic_ble_GATT_CLIENT、  

    SDK 版本:simplelink_lowpower_f3_sdk_7_20_01_10 (外设和中央)

    CCS 版本:CCS 12.5.0

    使用  SDK 版本的定制应用  

    SDK 版本: simplelink_lowpower_f3_sdk_7_40_00_64 (外设和中央)

    CCS 版本:CCS 12.5.0

    谢谢。

    Vignesh。

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

    您好 Vignesh:

    我们可以帮助我在这里查看几件事吗?

    1. 从 Mgr_Set 的 Menu_disconnectCB()调用函数 GAPBOND_ERASE_ALLBONDS,0,NULL)返回成功状态的验证性。
    2. 验证是否已在外设处擦除键合。 在这种情况下、 当对等器件上的绑定已移除时、应接收到 GAP_Bond_LOSS_EVENT。

    此外、您能否确认我在第一个答案中写下的步骤是您为了重现此场景而遵循的步骤?

    您碰巧有蓝牙监听器吗? 在此、记录通过空气传播发生的情况会有所帮助。

    Br、

    大卫。

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

    尊敬的 David:   

    1.  从 Mgr_Set 的 Menu_disconnectCB()调用函数 GAPBOND_ERASE_ALLBONDS,0,NULL)返回成功状态的验证性。

             -调用函数 GAPB52 Mgr_Set 时返回成功状态(GAPBOND_ERASE_ALLBONDS, 0, NULL) 。

         2.验证是否已在外设擦除键合。 在这种情况下、  当对等器件上的绑定已移除时、应接收到 GAP_Bond_LOSS_EVENT。

            -    当对等器件上的绑定被移除时,外设中无法接收 GAP_BEND_LASE_EVENT。

    此处为  函数 void Connection_Conn 52处理程序(Uint32 event,BLEAppUtil_msgHdr_t *pMsgData)中添加的 gap_bond_lost_event 代码。

     void Connection_ConnEventHandler(uint32 event, BLEAppUtil_msgHdr_t *pMsgData)
    {
        switch(event)
        { 
    		case BLEAPPUTIL_BOND_LOST_EVENT:
            {
                gapBondLostEvent_t *gapbondmsg = (gapBondLostEvent_t *)pMsgData;
    
                MenuModule_printf(APP_MENU_PROFILE_STATUS_LINE16, 0, "BOND_LOST_EVENT "
                                             "connectionHandle = "MENU_MODULE_COLOR_YELLOW "%d " MENU_MODULE_COLOR_RESET
                                             "device address = "MENU_MODULE_COLOR_YELLOW "%s " MENU_MODULE_COLOR_RESET,
                                             gapbondmsg->connectionHandle,
                                             BLEAppUtil_convertBdAddr2Str(gapbondmsg->deviceAddr));
                break;
            }
    	}
    }

    此外、您能否确认我在第一个答案中写下的步骤是您为了重现此场景而遵循的步骤?

    -是的,这些是重现场景的步骤。

    谢谢。

    Vignesh。

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

    尊敬的 Vignesh

    关于

         2.验证是否已在外设擦除键合。 在这种情况下、  当对等器件上的绑定已移除时、应接收到 GAP_Bond_LOSS_EVENT。

            -    当对等器件上的绑定被移除时,外设中无法接收 GAP_BEND_LASE_EVENT。

    [/报价]

    如果我可以、如果您擦除外设侧的键合、则 预计将在中央侧接收 GAP_Bond_LOSS_EVENT。

    您能为我们检查一下吗?

    此外、您能回答 David 关于您有权访问蓝牙监听器的问题吗?

    此致、

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

    您好、Clement、

           在  Mgr_Set 外设的 Menu_disconnectCB()中调用 GAPB博 博博博博博博博博博博博(GPIP_ERASE_ALLBONDS, NULL, NULL)的断开过程中,我擦除了外设侧的绑定。

      当对等器件上的绑定已移除时、GAP_BUND_LASE_EVENT 无法在 CENTRAL 接收。 当再次进行 通过 身份验证与外设的连接时、  且(配对状态:已保存绑定)成功。 现在、在 MTU 交换尝试在  配对状态:已保存绑定更改为配对状态:已在中央设备和外围设备上加密后立即启用通知。

    此外、您能回答 David 关于您有权访问蓝牙监听器的问题吗?

     -抱歉,我们没有 蓝牙监听器。

      通过 David 的第一次回复、我们可以按照以下步骤重现问题。

    谢谢。

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

    您好 Vignesh:  

    感谢您确认此项。

    您是否还可以确认是否已将 BLEAPPUTIL_Bond_LOSS_EVENT 添加到 app_connection.c 内 connectionConnHandler 中的.EventMask 中?

    根据我正在重现您看到的问题的步骤。 请多多包涵。

    与此同时、为了进行彻底的检查、我们可以尝试让两个项目在同一个 SDK 上运行吗? 为此、我们提供了一份迁移指南、您可以按照该指南将 basic_ble_GATT_CLIENT 更新 为最新的 SDK此处

    Br、

    大卫。

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

    尊敬的 David:

       您是否还可以确认是否已将 BLEAPPUTIL_Bond_LOSS_EVENT 添加到 app_connection.c 内 connectionConnHandler 中的.EventMask 中?

      -是的,我已经  在 app_connection.c 内 connectionConnHandler 的.EventMask 中添加了 BLEAPPUTIL_Bond_lost_event。

    我 使用同一 SDK 尝试了 Basic_ble_Peripheral 工程和 basic_ble_GATT_CLIENT 工程、在迁移指南的帮助下、该行为仍然与旧 SDK 相同。

    SDK 版本: simplelink_lowpower_f3_sdk_7_40_00_64 (外设和中央)

    CCS 版本:CCS 12.5.0

    谢谢。

    Vignesh。

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

    您好 Vignesh:

    感谢您的回答。

    我已经执行了一系列测试:1)使用配置为中央和外设的 BASIC _ble、2)使用配置为外设的 BASIC _ble、以及使用 BTool 配置为中央主机测试、3)使用配置为外设的 BASIC _ble、以及配置为中心的 BASIC _BLE_GATT_CLIENT。 在每次测试中、外设配置为"wait for a pair request (等待配对请求)"、而中央设备配置为"Initiate a pair request (启动配对请求)"(与您的情况相同)。

    根据我们讨论的步骤、我无法重现您的问题:

    • Central (执行 basic_ble_GATT_CLIENT)连接到 Peripheral (运行 based_ble)。
    • 两个设备配对和绑定(配对状态:绑定已保存)。
    • Central 启用并接收通知。
    • 中央断开与外设 Mgr_Set 的连接、并通过 GAPB博 博博博蒂表清除所有键合(GAPBOND_ERASE_ALLBONDS、0、NULL)。
    • 中央连接到外设。
    • 两个设备配对和绑定(配对状态:绑定已保存)。
    • 中央设备启用通知
    • 配对状态:绑定保存更改为配对状态:在中央设备和外设上加密。
    • 中央设备启用通知
    • Central 可以通过 GATT_Write 将数据发送到外设特性3、这将通过特征4作为通知回显相同的数据。

    仅供参考:通知数据未加密、因为我正在使用 ECC 调试密钥。

    附件是一些蓝牙监听器日志。

    首次连接和绑定:

    擦除第一个键合点(擦除所有键合点)并生成新连接和键合点后:

    中央(完成之前的步骤时):

    外设(当前面的步骤完成时):

    请帮助我回答以下问题:

    1. 您能再多分享一点关于您遇到的通知问题吗?
    2. 您要为通知编写什么特征?
    3. 您如何知道它没有发送任何通知?
    4. 我们在此遗漏了一个步骤吗? 您能否仔细检查我为了重现此示例而执行的步骤?

    此致、

    大卫。

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

    尊敬的 David:

        感谢您  重现我们的案例

    请帮助我回答以下问题:

      1. 您能再多分享一点关于您遇到的通知问题吗?
    1.         否、我们使用的 是 GATT Client 示例、因此我们未修改任何通知功能。
    2.  
    3.     B.您要为通知写信给哪种特征?
    4.        -与您发送特征3数据相同,其中0x00,0x02,0x55,0xff。
    5.  
    6.     C 您如何知道它未发送任何通知?
    7.        -从 GATT 客户端  向  特征3中的外围设备发送数据 ,  并按预期在外围设备中接收数据, 这将通过特征4作为通知回显相同的数据。 但 数据未在 GATT 客户端中接收。

    8. 包含以上步骤、我需要知道吗?

    中央(完成之前的步骤时):

    根据该图像数据已发送特征3 (写入发送= 0xff)。

      外设中按预期接收到的数据、 这些数据将通过特征4作为通知来回显相同的数据。 但  在 GATT 客户端中未接收数据具有0xff.Still Notification Received = 0x02。 我想知道原因。

             D。 我们在此遗漏了一个步骤吗? 您能否仔细检查我为了重现此示例而执行的步骤?

                 -绑定擦除后,连接到外设现在绑定保存后,从中央完成通知启用。

    谢谢。

    Vignesh。

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

    您好 Vignesh:

    感谢您指出。 我重点介绍了启用的通知、但我看到在绑定擦除后接收这些通知存在问题。 我已经将此报告给团队、以便更详细地了解如何解决它。 请多多包涵。

    我将在星期四返回状态。

    Br、

    大卫。

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

    尊敬的 David:

        有更新吗?

    谢谢。

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

    尊敬的 Vignesh:

    我们已经和 TI 的研发团队进行了这次讨论。

    为了进行进一步调试、他们要求我们为您尝试访问的通知特征指定 GATT 权限。

    您能否为值和特征配置提供 GATT 权限?

    如果需要、下面指定了现有权限:

    感谢您的意见、

    此致、

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

    您好、Clement、

        外设通知特性的 GATT 权限  

       // Characteristic 4 Declaration
       GATT_BT_ATT( characterUUID,                GATT_PERMIT_READ,                      &simpleGattProfile_Char4Props ),
       // Characteristic Value 4
       GATT_BT_ATT( simpleGattProfile_char4UUID,  0,                                     &simpleGattProfile_Char4 ),
       // Characteristic 4 configuration
       GATT_BT_ATT( clientCharCfgUUID,            GATT_PERMIT_READ | GATT_PERMIT_WRITE,  (uint8 *) &simpleGattProfile_Char4Config ),
       // Characteristic 4 User Description
       GATT_BT_ATT( charUserDescUUID,             GATT_PERMIT_READ,                      simpleGattProfile_Char4UserDesp ),
    

    谢谢。

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

    您好、Clement、

       有更新吗?

    谢谢。

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

    您好、Clement、

    有更新吗?

    从本周开始、我们就一直在等待解决方案的出台。 请尽快回复。

    谢谢。

    Vignesh。  

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

    您好 Vignesh:

    很抱歉耽误你的时间。

    我们已经对团队进行了一些进一步的检查、目前我们正在根据 ATT_Handle_Value_Noti 擦除绑定后、在 GATT_eventhandler (app_data.c)上未接收到。 但处理接收到的消息的第一个函数 -> gattClientProcessMsgCB (GATT_CLIENT.c)实际收到的是 ATT_Handle_Value_Noti 在这两种情况下(键合擦除之前和之后)。

    我正在与团队合作、以便为您提供有关这一点的更多信息、这是明天可能的解决方法。

    与此同时、我能否询问您是否尝试擦除单个键合物、以及您的用例是否可以考虑这一点?

    Br、

    大卫。

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

    您好 Vignesh:

    从而让您了解此问题的最新动态。 我们还发现,在第二个债券建立之后, MAP_LinkDB_Auten (connHandle、keysize、mitmReq) 退货 LINBDB_ERR_Insufficed_keysize 而不是成功。 这将设置 NotifyApp 从变量更改为 false、不允许栈将消息(通知)转发到上层应用程序。 我们仍在研究这个问题。 请耐心等待。

    谢谢。

    大卫。

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

    您好 Vignesh:

    请帮助我执行以下步骤、以更正此行为。

    1. 在中找到 gapbondmgr.c 文件 \source\ti\ble5stack_flash\host。
    2. 将 gapbondmgr.c 文件复制到 GATT_CLIENT 项目中。
    3. 在文件内,查找 GapB3852 Mgr_Get Auth()函数。
    4. 在 void osal_SNV_read (DEV_LTK_NV_ID (idx)、sizeof (gapBondLTK_t)和&ltkInfo)中;通过以下命令修改 DEV_LTK_NV_ID: LOCAL_LTK_NV_ID。

    这一问题依赖于这样一个事实: 本地长期键 (LTK)用于存储本地设备的加密信息、需要从 NVS 中的本地密钥部分读取(通过使用 local_LTK_NV_ID 来完成)、而不是从 NVS 中的对等器件的密钥部分读取(在这种情况下、应使用 DEV_LTK_NV_ID)。

    此修复程序将包含在下一个 SDK 版本中。 同时、请按照所述方法处理解决方案。

    请让我知道情况如何。

    Br、

    大卫。

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

    David、您好!

    我已  按照 步骤更正此行为、并尝试使用 basic_ble_peripheral 和 basic_ble_central 来解决我的问题。

    谢谢。

    Vignesh。