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.

[参考译文] CC2640R2F:SDKv4.10:128位 UUID 在一段时间后变为16位 UUID?

Guru**** 2589265 points
Other Parts Discussed in Thread: CC2640R2F, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1079506/cc2640r2f-sdkv4-10-128-bit-uuid-becomes-16-bit-uuid-after-a-period-of-time

部件号:CC2640R2F
“线程 :sysconfig”中讨论的其它部分

您好,

我们的硬件是 CC2640R2F 蓝牙标签,我正在与应用程序开发人员合作。 在我身边,我正在使用 IOS LightBlue 应用程序和 NRF Connect 应用程序进行测试。 我看不到任何问题。 但是,他报告说,128位 UUID 正在更改为16位 UUID。 这仅适用于数据服务 F0001110-0451-4000-B000-00000000。 您是否知道为什么会发生这种情况?

“我看到的是,经过一段时间后,标签似乎停止了正确的数据服务广告(F0001110-0451-4000-B000-00000000)。

当处于此状态时,我使用 iOS 或 macOS 查询标签,它将返回以下服务:
*“F0001120-0451-4000-B000-00000000”
*“F0001130-0451-4000-B000-00000000”
*“F0001140-0451-4000-B000-00000000”
* 1110

如果我使用 Android 设备查询,它将看到以下服务:
*"00001800-0000-1000-8000-00805f9b34fb"
*"00001801-0000-1000-8000-00805f9b34fb"
*“F0001120-0451-4000-B000-00000000”
*“F0001130-0451-4000-B000-00000000”
*“F0001140-0451-4000-B000-00000000”

我不确定是什么原因造成了 iOS/Mac 与 Android 上显示的差异,但平台解析服务发现消息的方式必须有所不同。 如果不使用数据包嗅探器深入了解,很难说出标签在这里传输的内容。

从 iOS/Mac 的角度来看,该标签会通告数据服务的“短”16位 UUID (1110,而不是完整的 F0001110-0451-4000-B000-00000000)。 此标签仅为数据服务执行此操作,其它服务仍可通过其全部128位 UUID 被发现。”

克尔

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

    嘿,克尔,

    我已将您的职位分配给一位可以提供帮助的同事。

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

    大家好,我是 Markel 的应用程序开发人员  

    我注意到标签可能会进入无法发现其中一项服务的状态。  如果我重新刷新标签,该服务将在一段时间内再次被发现,然后再次被发现。

    我用我的 NRF 嗅探器进行了一些 Wireshark 捕获,并能够观察到这两种情况:1)发现了服务,2)未发现服务。

    在 Wireshark 捕获中,我看到的是:

    案例1:未发现服务

    • 中央设备发送:按组类型请求(0x10)读取 GATT 主要服务声明(0x2800),开始句柄0x0001,结束句柄0xFFFF
    • 标签以“按组类型读取”响应(0x11)响应,分布在4个数据包中:
      • 句柄0x0001:通用访问配置文件,
      • 句柄0x0008:通用属性配置文件
      • 句柄0x0013:专有服务2
      • 句柄0x001a:专有服务3.
      • 手柄0x001e:专有服务4.

    案例2:发现服务

    • 中央设备发送:按组类型请求(0x10)读取 GATT 主要服务声明(0x2800),开始句柄0x0001,结束句柄0xFFFF
    • 标签以“按组类型读取”响应(0x11)响应,分布在5个数据包中:
      • 句柄0x0001:通用访问配置文件,
      • 句柄0x0008:通用属性配置文件
      • 句柄0x0009:专有服务1   <<<------------- 这是缺少的服务
      • 句柄0x0013:专有服务2
      • 句柄0x001a:专有服务3.
      • 手柄0x001e:专有服务4.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    关于服务从128位更改为16位的报告,我认为这是因为我们在广告数据中将专有服务作为16位 UUID 包含在内。  然后,当我使用 macOS 实用程序应用程序运行服务发现时,该应用程序将此16位服务(0x1110)包括在显示的服务列表中,即使该服务不包括在实际的服务发现交换中。

    我们尝试将通告的服务 UUID 更改为完整的128位 UUID。  在这种情况下,该服务将在实用程序应用程序中显示完整的 UUID,但我仍然无法与该服务进行交互或发现其特征。  我猜测这是因为该应用程序不知道该服务的实际处理方式,因为它未被发现,它只知道该服务应该存在,因为它存在于广告数据中。

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

    你(们)好

    感谢您提供详细信息。 我建议您尝试在示例代码(例如,项目0)上使用 sysconfig。 尝试在 sysconfig 上重复 UUID 配置,让我们看看结果。

    BTW

    *"00001800-0000-1000-8000-00805f9b34fb"
    *"00001801-0000-1000-8000-00805f9b34fb"
    *“F0001120-0451-4000-B000-00000000”
    *“F0001130-0451-4000-B000-00000000”
    *“F0001140-0451-4000-B000-00000000”

    我也没有看到 F0001110-0451-4000-B000-00000000。 您是否在某处禁用了 LED 服务?

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

    您好,西蒙,

    这些是 使用 SDKv4.10 (没有 sysconfig)的自定义蓝牙服务。 在自定义 Android 应用程序中,据报告 数据服务 F0001110-0451-4000-B000-00000000在 一段时间后消失

    在我使用 Android NRF Connect 应用程序进行测试时 ,数据服务 F0001110-0451-4000-B000-00000000不会消失。

    克尔

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

    我询问 F0001110-0451-4000-B000-00000000的原因是为了确保您的代码在 Android 设备上运行良好。

    现在,我认为您在 Android 和 iOS 上的应用程序代码可能存在不同的问题。 您能否在这些应用程序上显示您的配置?

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

    我还建议检查是否未发生内存损坏。 内存损坏可能是由于内存处理错误或堆/堆栈短缺。

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

    您好,西蒙,

    作为广告数据包的一部分,数据服务 UUID 似乎导致了上述问题。 所以我已经评论了。 我将此帖子标记为已解决。 如果我们遇到更多的问题,我将就这一问题发表一个新的帖子。

    static uint8_t advertData[] =
    {
      // Flags: this field sets the device to use general discoverable
      // mode (advertises indefinitely) instead of general
      // discoverable mode (advertise for 30 seconds at a time)
      0x02,   // length of this data
      GAP_ADTYPE_FLAGS,
      DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,
    
      // service UUID, to notify central devices what services are included
      // in this peripheral
      0x01,   // length of this data
      GAP_ADTYPE_16BIT_MORE,      // some of the UUID's, but not all
      //LO_UINT16(XXXXXSERVICE_SERV_UUID),
      //HI_UINT16(XXXXXSERVICE_SERV_UUID)
    };

    克尔

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

    很高兴您的问题得到解决,并感谢您的回复!