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:服务发现

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1441664/cc2340r5-service-discovery

器件型号:CC2340R5

工具与软件:

您好!

使用的芯片组: CC2340R5

SDK 版本:  simplelink_lowpower_f3_sdk_8_10_01_02

我将 CC2340R5用作中央角色、并使用此 示例  作为参考。 示例代码演示了如何从服务和特征进行读取和写入。   

然而、在上面的示例中、读取和写入的句柄值被硬编码。 我感兴趣的是服务发现、如果我可以执行服务发现、那么我可以对支持它的任何句柄值执行读取和写入。  

在读取"gatt.h"头文件时、我发现我们有一个名为" GATT_DiscAllPrimaryServices "。 一旦我连接到外围设备、我将调用以下函数。

我还在 dataGATTHandler 中注册了相关事件、如下所示。

20秒后我收到 BLEAPPUTIL_ATT_READ_BY_GRP_TYPE_RSP 事件、但"attReadByTypeRsp_t" 结构中没有句柄。  

请帮助我解决此问题。  

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

    Sandeep、您好!

    感谢您的咨询。

    我想问您在哪里调用 SvcDiscovery 函数吗? 例如、是在 LINK_ESTABED_EVENT 之后吗? 此外、当您获得 BLEAPPUTIL_ATT_READ_BY_GRP_TYPE_RSP 时、您如何解析(假设使用 attReadByTypeRsp_t i)处理程序传递的 gattMsg 消息? 关于如何实现该功能的更多代码片段将是理想的选择。

    BR、

    David。

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

    尊敬的 David:

    当我获得" Link_Established_event "、我将事件发送到我创建的自定义任务、如下所示。

    一旦我收到上述事件、我就会调用如下所示的服务发现函数。

    "SvcDiscovery"具有以下调用。

    根据下面的图表,我应该寻找" ATT_READ_BY_GRP_TYPE_RSP "。  

    因此、在 GATT_EventHander 中、我按如下所示解析数据。  

    我放置一个断点并检查 Svctbl 的内容、但内容是空的。

    我希望我已经捕获了所有内容。

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

    你(们)好、

    您似乎为该 API 使用了错误的结构。 请不要使用 attReadByTypeRsp_t、而是使用 attReadByGrpTypeRsp_t 如需更多信息、请访问:

    dev.ti.com/.../group___a_t_t___g_a_t_t.html

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

    尊敬的 Evan:

    感谢您的答复。 但是,如果你看看图像下的 GATTEVENTHandler 部分在我的上一篇文章,变量的类型" SvcTbl "的  attReadByGrpTypeRsp_t . 问题是、服务发现大约需要23秒、然后当我收到" ATT_READ_BY_GRP_TYPE_RSP "、类型为" attReadByGrpTypeRsp_t "为零。

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

    Sandeep、您好!

    您如何解析结构? 您是不是只是通过存储器视图来读取它?

    此外、您要连接到的器件是什么、具有已知服务的手机还是其他 TI LaunchPad?

    此致!

    Nima Behmanesh

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

    您好!

    我创建了一个称为" SvcTbl"  结构体类型  attReadByGrpTypeRsp_t  我把" SvcTbl "看着手表看着结构的内容。 他们是空的。  

    外围设备是 CC2340r5、运行 SDK 中的基本 BLE 示例。

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

    Sandeep、您好!

    我相信您在观察程序中看到的是最后发出的响应、其中包含零。 外设接收到多个响应、我已经通过将每个响应打印出来进行了确认。

    下面是我用来打印每个响应的长度和组的代码。

        case ATT_READ_BY_GRP_TYPE_RSP:
        {
            attReadByGrpTypeRsp_t *resp = (attReadByGrpTypeRsp_t *)&(gattMsg->msg.readByGrpTypeRsp);
            MenuModule_printf(APP_MENU_PROFILE_STATUS_LINE + display_index, 0, "response len: %d", resp->len);
            display_index++;
            MenuModule_printf(APP_MENU_PROFILE_STATUS_LINE + display_index, 0, "num groups: %d", resp->numGrps);
            display_index++;
        }

    您是否可以尝试打印每个响应的值、并告知我您是否看到更多值?

    此致!

    Nima Behmanesh

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

    尊敬的 Nima:  

    感谢您的回复! 它真的很有帮助。 在我之前的测试中、我正在应用断点来测试调试。 看到您的帖子后、我再次使用照片创建了整个序列、我能够看到所需的响应。 谢谢!

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

    尊敬的 Nima:  

    我还有一些关于服务发现过程的其他问题。 我应该继续这个线程本身还是必须创建一个单独的线程?

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

    Sandeep、您好!

    很高兴为您提供了解决方案!  

    如果您有其他问题、请创建单独的主题帖。 其他开发人员 也可以分享这些问题、让它们自带帮助。

    请注意、由于美国是感谢、我们的回复将延迟。  

    此致!

    Nima Behmanesh