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:启用"Indices"时、在 NRF Connect 日志中获取错误"GATT no resources"

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1509639/cc2340r5-getting-error-gatt-no-resources-in-nrf-connect-log-when-indicate-is-enabled

器件型号:CC2340R5

工具/软件:

尊敬的 TI 论坛:  

我已经开发了一个配置文件为"自行车速度和节奏". 作为一个标准配置文件、它有四个服务、每个服务都有一个特征。

最后一个特征的属性是"指明",我遇到了问题,点击"指示"按钮后,我在 NRF 连接应用程序的日志部分中收到了一个错误:GATT no resources"。

但偶尔,它是正常工作。

请让我来看看背后的原因以及解决方法。

此致  

Vaibhav  

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

    您好!

    根据我可以读取的内容、当您要发送的数据大于 MTU 大小时、可能会发生此错误。 您能否回答您的 MTU 值以及您希望在指示中发送的数据大小?

    此致、
    Maxence

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

    您好、Maxence、

    该问题似乎来自 Set_Parameter 函数。 我正在尝试实现一个自定义配置文件、该配置文件具有多个具有 notify 属性的属性、现在、问题是、无论启用此函数的任何属性通知都接收到相同的参数。 理想情况下、它接收唯一的 to 属性参数。

    您能告诉我、这里缺少了什么吗? 我想在"通知"按钮打开时为每个属性指定唯一的参数。

      

    此致

    Vaibhav

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

    您好、

    我很难理解您所面临的问题。 您如何知道问题来自Set_parameter功能? 您说无论您打开什么属性、这个函数都接收到相同的参数、您能告诉我如何检查它是否正确吗? 您还能告诉我调用这个函数的代码吗?

    此致、
    Maxence

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

    您好、

    我在"switch"语句中放置一个断点、并每次启用不同的通知按钮。 我发现这个函数具有相同的参数。

    从何处调用这个函数? 我不知道,我还不清楚这一点。 于是我就走了出去。

    恐怕我无法在这里共享整个代码、因为我公司的政策。

    此致

    Vaibhav

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

    您是从 SDK 的一个例子开始您的项目吗? 我看到 SimpleGattProfile 可能来自 Basic-BLE 工程。 如果您可以确认、那么我可以在我这边检查什么调用此函数以及问题可能是什么。

    如果要查看此函数在代码中的调用位置、可以通过单击此按钮使用 CCS 的搜索功能:

    此致、
    Maxence

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

    是的、我使用了 Basic_Ble 作为基础项目。  
    我删除了 Basic_ble 的所有特性并实现了自己的特性。 在原始基本项目中、只有字符4具有 notify 属性、它的 ID 为"4"、这是我在"SetParameter"函数中得到的、不管任何属性打开它 notify。

    此致

    Vaibhav

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

    您好、

    我注意到在 app_simple_gatt.c 文件的函数 SimpleGatt_notifyChar4中使用特性4调用 SimpleGattprofile_getParameter。
     当写入特性3或启用特性4的通知时、SimpleGatt_changeCB 会调用此函数。

    您的问题解决方案可能是修改 app_simple_gatt.c 中的代码、以执行您期望的 GATT 服务执行的操作。 如果您需要 有关如何执行此操作的资源、我邀请您阅读有关 GATT 服务的用户指南

    此致、
    Maxence

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

    你能用例子解释一下,如果我有3个服务2带通知和1带指示. 应该流动什么?
    我觉得这有点困惑

    此致

    Vaibhav

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

    您好、

    阅读用户指南将帮助您了解 GATT 的工作原理:
    https://dev.ti.com/tirex/content/simplelink_lowpower_f3_sdk_8_40_00_61/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/gatt-cc23xx.html

    如果已经创建了这3个具有其特性的服务、则每当您想要发送通知时、都可以调用 SimpleGattProfile_SetParameter (SIMPLEGATTPROFILE_CHAR4、sizeof (uint8_t)、&value);其中 value 是您要在通知中发送的值、而 SIMPLEGATTPROFILE_CHAR4是通知类型或指明通知的特性。

    你到底是什么意思流?

    此致、
    Maxence

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

    您好、

    中央设备(nrf connect)打开通知时出现问题。 无论任何服务如何、set 参数都将以"param"作为4进行调用。 知道原因吗?

    我希望每项服务都有独特的"参数"。 我不了解如何对其进行配置。

    手动 调用 set_paramter 并传递相应的"param"中央设备会收到通知、我知道这一点、此部件工作正常。

    仔细检查一下、我会再次查看 GATT 文档。  

    此致

    Vaibhav

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

    您好!

    如前所述、set parameter 函数由 SimpleGatt_notifyChar4函数调用、 在写入特性3或启用特性4通知时、SimpleGatt_changeCB 会调用该函数。 您可以删除对 SimpleGatt_changeCB 中 SimpleGatt_notifyChar4的调用、也可以删除 SimpleGatt_notifyChar4中的 set_parameter 函数调用。

    此致、
    Maxence

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

    您好、Maxence、

    感谢您的支持。 我发现这是在 writeCB 我搞砸了。 基本上、当我们启用或禁用通知/指示我们正在 CCCD 上进行写入操作时、它会发出 writeCB 函数信号。 由于 CCCD 是 SIG 注册的 UUID、所有服务的 CCCD 都具有相同的 UUID 值、因此当我启用任何服务的通知时、它将转至相同的语句(使用 switch case)。

    所以,我发现的解决方案是,对于每项服务,我们需要单独的读/写 CBS。 但如果服务包含超过1个带有 Notify 的属性、则这有限制、我们再次无法使用 writeCB 进行区分。

    此致

    Vaibhav。