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:CC2340R5 -删除了特性和服务

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1480283/cc2340r5-cc2340r5---remove-characteristics-and-service

器件型号:CC2340R5

工具与软件:

早上好、

感谢您回复我的上一篇文章

这是我上一个主题的后续内容,其中包括删除以下特征和 服务:

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1463056/cc2340r5-cc2340r5---remove-characteristic-from-generic-access/5619460#5619460

我们得出结论、通过使用 gatt_uuuid.c 和 gatt_uuid.h 文件修改 SDK 可以实现这一点、恢复工作后、这些文件似乎不会修改服务和特征。

我在论坛上看到了很多关于同一问题的主题。 并回答说这是不可能的、因为它是一个无法修改的预编译代码的一部分。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1346107/cc2340r5-how-to-change-generic-access-attribute-s-characteristic-properties

我有点迷路了,我绝对必须删除它们。 是否有解决方案?我需要采取哪些步骤? 是否有可以让我修改所有这些内容的 API?

提前感谢、

此致、

Yohan

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

    您好、Yohan:

    感谢您联系我们! 我将对此进行研究、并尽快与您联系

    此致、

    Tarek

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

    您好、Yohan:

    感谢您的耐心等待!  进一步研究蓝牙核心规范(具体来说是5.4版|第3卷、C 部分)后、我能够总结以下关于您之前的 E2E 主题中提到的特性的内容:

    • 外设首选连接参数
      在核心角色中、不包括此特征。 在外设角色中、此特征 是可选的。
    • 中心地址解析:
      在中心角色中、如果启用了链路层隐私、则此特性是必需的、否则将排除此特性。 在外设角色中、如果启用了链路层隐私、则此特性是可选的、否则将排除此特性。
    • 仅可解析私有地址:
      在外设和中央角色中、如果启用了链路层隐私、则此特性是可选的、否则将排除此特性。

    由于您提到您遵循特定规范并需要删除这些特性、因此您需要禁用链路层隐私、这将排除上述所有3个特性。 下面、我提供了一个有关如何为外设角色器件执行此操作的示例:

    1. 转至工程中 app 文件夹内的 app_peripheral.c 文件。
    2. 在项目中的其他事件处理程序附近添加以下事件处理程序:
      BLEAppUtil_EventHandler_t peripheralHCIHandler =
      {
          .handlerType = BLEAPPUTIL_HCI_GAP_TYPE, // Handler type.
          .pEventHandler = Peripheral_HCIEventHandler, // Function to handle events.
          .eventMask = BLEAPPUTIL_HCI_COMMAND_COMPLETE_EVENT_CODE // HCI events to subscribe to.
                       | BLEAPPUTIL_HCI_VE_EVENT_CODE,
      }; 


    3. 发生上述事件时、下面包含的代码将读取支持的功能、然后继续禁用链接层:
      void Peripheral_HCIEventHandler(uint32 event, BLEAppUtil_msgHdr_t *pMsgData)
      {
          switch (event)
          {
              case BLEAPPUTIL_HCI_COMMAND_COMPLETE_EVENT_CODE:
              {
                  hciEvt_CmdComplete_t* command_complete = (hciEvt_CmdComplete_t*) pMsgData;
      
                  switch (command_complete->cmdOpcode)
                  {
                      case HCI_LE_READ_LOCAL_SUPPORTED_FEATURES:
                      {
                          uint8_t status = command_complete->pReturnParam[0];
      
                          if (status == SUCCESS)
                          {
                              // Get current feature set from received event (bytes 1-9
                              // of the returned data
                              uint8_t featSet[8];
      
                              memcpy(featSet, &(command_complete->pReturnParam[1]), 8 );
      
                              // Clear bit 7 of byte 1 of feature set to disable LL
                              // the Channel Selection Algorithm 2 feature
                              CLR_FEATURE_FLAG(featSet[0], LL_FEATURE_PRIVACY);
      
                              // Update controller with modified features
                              HCI_EXT_SetLocalSupportedFeaturesCmd( featSet );
                          }
      
                          break;
                      }
      
                  }
                  break;
              }
      
              case BLEAPPUTIL_HCI_VE_EVENT_CODE:
              {
                  break;
              }
              default: break;
          }
      } 


    4. 最后、滚动到项目的末尾、并在最后一次 return (status);function 前、将以下函数添加到 peripheral_start ()函数的末尾:
      HCI_LE_ReadLocalSupportedFeaturesCmd();

    这应该会成功禁用链路层隐私、这将导致排除所有不需要的特性。

    我希望这对您有所帮助!

    此致、

    Tarek

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

    您好!

    感谢 Tarek 的回答。


    不幸的是,问题似乎仍然存在, 我  冒昧地添加了以下函数 BLEAppUtil_registerEventHandler (& peripheralHCIHandler );以在 Peripheral_start ()中注册事件。


    bStatus_t Peripheral_start()
    {
      bStatus_t status = SUCCESS;
    
      status = BLEAppUtil_registerEventHandler(&peripheralConnHandler);
      if (status != SUCCESS)
      {
        // Return status value
        return (status);
      }
    
      status = BLEAppUtil_registerEventHandler(&peripheralAdvHandler);
      if (status != SUCCESS)
      {
        return (status);
      }
    
      status = BLEAppUtil_initAdvSet(&peripheralAdvHandle_1, &advSetInitParamsSet_1);
      if (status != SUCCESS)
      {
        // Return status value
        return (status);
      }
    
      // Note that the structure is used to register the event handler.
      status = BLEAppUtil_registerEventHandler(&peripheralHCIHandler);
      if (status != SUCCESS)
      {
        // Return status value
        return (status);
      }
    
      HCI_LE_ReadLocalSupportedFeaturesCmd();
    
      // Return status value
      return (status);
    }

    我看到我们使用调试器在事件回调"Peripheral_HCIEventHandler"中输入、并且所有函数都返回成功、但特征仍然存在。

    此致、

    Yohan

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

    您好、Yohan:

    停用链路层隐私应该会自动排除特征,我已经运行了代码,它工作正常。 您能否提供数据包监听器日志?

    此致、

    Tarek

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

    您好、Yohan:

    我正在研究这种情况发生的其他原因。 平均而言,您是否可以将 HCI_LE_ReadLocalSupportedFeaturesCmd ()函数移至 BLEAppUtill_advStart 函数下方? 其他信息、从而可能会导致问题。

    此致、

    Tarek

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

    您好、Tarek、

    将其置于广告激活下方不会发生变化。

    此致、

    Yohan

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

    您好、Yohan:

    如果可以、请提供数据包监听器日志(最好使用 ellisys 或使用 Wireshark)、以便我查看是否正在传输禁用链路层隐私数据包。 因为我无法在我的系统上复制此文件、所以这将非常有助于准确找出问题所在。

    此致、

    Tarek

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

    您好、Tarek、

    下面是数据包日志的屏幕截图:

    我有 .pcapng 以了解更多详细信息、但我不知道如何发送。

    LL 隐私似乎已被禁用。

    此致、

    Yohan,

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

    您好、Yohan:

    感谢您提供屏幕截图! 如果 LL 隐私被禁用、根据规范、您需要删除的特征将被排除。 我怀疑您用于检查特征的应用程序可能会为您提供不准确或旧的数据。 您是否可以测试其他应用程序并确认您仍能看到此信息? 另外、能否确保电路板未绑定到电话。 如果是、请确保从蓝牙设备列表中删除该设备并重新测试。

    此致、

    Tarek

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

    您好、Tarek、

    我已使用不同的手机、软件狗/计算机对其进行了测试、问题仍然存在。问题是否链接到 SDK? 到样例项目中?

    CC2340R5
    SDK: simplelink_lowpower_f3_sdk_8_10_01_02

    exemple 项目:   basic_ble_LP_EM_CC2340R5_freertos_ticlang  

    此致、

    Yohan

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

    您好、Yohan:

    您可以尝试迁移到最新的 SDK (8.40)吗、然后告诉我问题是否仍然存在。 我们希望很快就能解决这个问题!

    此致、

    Tarek

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

    您好、Tarek、

    谢谢、我将尝试迁移我的项目。 这是一个已在最新 SDK 中纠正的已知问题?

    此致、


    Yohan

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

    Tarek 下午好


    我使用最新的 SKD (simplelink_lowpower_f3_sdk_8_40_02_01)对其进行了测试、并观察到相同的现象。  为了简化该任务、我没有迁移我的工程、而是导入了新的基本 ble 工程(simplelink_lowpower_f3_sdk_8_40_02_01)、并停用了 LL 隐私。 LL 隐私已停用、但特征仍保留。


    我的工具链如下所示:

    产品选项:

    Code Composer:12.7.1.00001

    Cortex_M0P:闪存加载程序:CC23xx_CC27xx_flash_library_version 3.19.0.12


    如果您禁用了 LL 隐私、以便 lstack ble 将其删除、也许还有其他事情要做?

    此致、

    Yohan

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

    您好、Yohan:

    我无法重现该问题。 如果您提供了完整的数据包监听器日志、无论是在此处发布还是让负责您帐户的 FAE 通过电子邮件发送给我、它都将非常有用。

    此外、您是否可以导入默认的 basic_ble 工程并尝试使用该工程  而变化 添加我之前提供的代码? 那么、我想看看您是否发现了相同的问题。

    此致、

    Tarek

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

    您好、Tarek、

    我尝试导入默认的 Basic BLE 工程、方法是只添加几行代码、但结果完全相同。
    我们就发信息给 FAE、沟通问题

    此致、

    Yohan

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

    您好、Yohan:  

    非常感谢您提供数据包监听器日志! 我们将开始分析并尽快回复您。  

    此致、

    Tarek

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

    您好、Yohan:

    感谢您的耐心等待! 在使用 Android 设备时、我最终能够重新创建您提到的问题。 我已提交请求单、让我们的研发团队看看这个问题。 与此同时、解决此问题的快速权变措施是:

    1. 请访问 通用 文件夹中找到该工程
    2. 取消链接以下文件:(若要取消链接文件、只需复制文件、从项目中删除、然后将文件粘贴回原来的位置)
      1. bleapputil_init.c (BLEAppUtil 文件夹内)
      2. ble_stack_api.c (在 iCallBLE 文件夹内)
      3. ble_stack_api.h (在 iCallBLE 文件夹中)
    3. 转到 ble_stack_api.c 文件
    4. 向下滚动到 bleStack_initGatt 函数
    5. 注释掉 GGS_AddService ()和 GATTcontircu App_Add ()函数。 现在代码应如下所示:
    6. 构建和闪存项目

    但是、这将禁用所有通用访问特性。 有关此 API 的更多信息(如果您需要进行修改): https://software-dl.ti.com/simplelink/esd/simplelink_cc13x2_26x2_sdk/4.10.00.78/exports/docs/ble5stack/ble_user_guide/doxygen/ble/html/group___g_a_p_g_a_t_t_s_e_r_v_e_r.html#gadb5d755b466055f8a6d167a4b881c59f

    我希望这能解决您的问题!  

    此致、

    Tarek

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

    您好、Tarek、

    这个解决方案工作完美,谢谢你的帮助!
    此致、

    Yohan