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.

[参考译文] CC2651R3:通用访问服务中的器件名称特征长度限制为21?

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1319992/cc2651r3-device-name-characteristics-length-in-generic-access-service-is-limited-to-21

器件型号:CC2651R3

大家好、是极客!

我使用 TI BLE SDK 6.20版本进行项目开发。

为了设置器件名称、我使用了器件名称特征、这些特征作为 BLE SIG 定义的通用访问服务的一部分。

之前、我使用 GGS 参数 GGS_DEVICE_NAME_ATT 设置名称、其长度限制为21个字节。

目前、我要求将器件名称至少设置为30个字节。 是否可以使用相同的参数并将 GAP_DEVICE_NAME_LEN 更改为超过21字节?

因为我知道从内核通信技术规格来看、这个限值是248字节、请在下面的屏幕截图中找到它。 我可以知道为什么在 TI SDK 中将限制降低到21个字节、或者我需要使用不同的参数来将器件名称设置为超过21个字节吗?

感谢您并请求立即回复。

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

    您好!

    感谢您与我们联系。

    回答正确、默认情况下、器件名称限制为21个字节、即使根据规范、该值可以设置为248字节-这是为了节省 RAM 和闪存大小、因为大多数用例不需要这么长的器件名称。

    如前所述、器件名称的最大长度大小由符号 GAP_DEVICE_NAME_LEN 定义。   GAP_DEVICE_NAME_LEN 值可在 gapgattserver.h 文件中进行更改。 请将 GAP_DEVICE_NAME_LEN 设置为所需的值并重新生成项目。

    我相信这会起作用、因为我在查看堆栈的非公开部分中的一些代码时可以找到以下信息:

    // Device Name attribute (0 - 248 octets) - extra octet for null-terminate char
    uint8 deviceName[GAP_DEVICE_NAME_LEN+1] = { 0 };

    请告知我们您的结果、

    此致、

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

    您好、Clement、

    我已经尝试将其更改为30个字节、在测试通用名称特征时、读取的是0个字节。

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

    您好!

    请您分享用于设置器件名称的代码片段吗?

    此外、在调试模式下运行代码时、您能否使用内存浏览器并验证变量"deviceName"的内容。 我希望使用您设置的值来设置该变量。

    此致、

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

    您好、Clement、

    感谢您立即恢复工作。

    请找到随附的代码片段。

    我已验证 deviceName 的内容(对于我而言、此处是 attDeviceName)、并且使用如下所示的设置器件名称正确更新了相同内容:

    但是,一旦我连接到 NRF 应用程序或 lightBlue 应用程序,并读取它显示为空的特征。

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

    您好!

    您能否检查"deviceName"变量的内容、而不是"attDeviceName"

    此外、出于完整性考虑、您能否确保设备被电话"遗忘"、因此不会缓存任何信息?

    此致、

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

    您好、Clement、

    当我检查 deviceName 的内容时、它显示为空。

    但在长度限制为21个字节之前、attDeviceName == deviceName。 这种情况的原因是什么?

    我认为既然 SYCONFIG 限制在21,即使我们改变它也不会采取改变或?

    务必在每次新连接之前忘记进行相同的操作。

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

    您好!

    感谢您的耐心。

    我想我已经重现了您的问题并了解了其根本原因。

    如前所述、deviceName 变量由堆栈定义。 由于堆栈是在 GAP_DEVICE_NAME_LEN = 21的情况下 进行预编译的、因此 deviceName 的大小以及向其加载值时进行的所有检查均考虑 GAP_DEVICE_NAME_LEN = 21。

    因此、当您设置 GAP_DEVICE_NAME_LEN = 248时、堆栈会收到一条命令、以写入 deviceName 无法包含的更多数据。  

    解决这个问题既简单又有点棘手。
    非常简单、因为需将 gapgattserver.c 文件添加到项目的"include"文件夹即可。
    有点棘手、因为如前所述、SDK 未提供该文件。 因此、请允许我联系您的 TI 本地支持团队?  通过这种方法、我们可以为您找到短期解决方案。

    下面是我在实现相同功能时获得的结果:

    同时、我将 打开一个内部票证以取消此限制。

    此致、

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

    您好、Clement、

    非常感谢您确定根本原因并提出解决方案。

    但是如何联系 TI 本地支持团队、能否分享该链接?

    并行时,我将 打开一个内部 TT 以删除此限制。

    是的、这将会非常有帮助。

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

    您好!

    我已经与 TI 内部的几个人建立了联系。 您应该在几个小时内收到他们的反馈。

    此致、

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

    谢谢 Clement。

    已获得 TI 团队的响应。