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.

[参考译文] LAUNCHXL-CC26X2R1:GATT_Indication 存在问题(将 host_test 用作外设)

Guru**** 2539500 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/984145/launchxl-cc26x2r1-problems-with-gatt_indication-using-host_test-as-a-peripheral

器件型号:LAUNCHXL-CC26X2R1

我正在实验 EVB 上的 host_test。 终端产品应该是 BLE 外设、因此我禁用了中心角色。 该应用程序目前是我的 PC 上的脚本黑客攻击。

为了进行测试、我在 Android 手机上使用 BLE Scanner (由 Bluepixel Technologies 提供)。

我构建了一个小型 GATT "数据库"、其中包含通用访问服务(0x1800)和自定义服务。自定义服务只有一个特征、也有自定义特征。 我打算该特征仅支持写入和指示。 在 BLE Scanner 中、我的 GATT 数据库外观符合预期、就我所知、我的自定义特征标记为 W I

当我从 BLE Scanner 写入特征时、我会在 PC 上接收到预期的数据。 但是、当我尝试使用 GATT_Indication (oxFD9D)向手机"指示"时、我会得到错误代码2、指示的数据不会显示在 BLE Scanner 中。

如果我改为使用 GATT_Notification (0xFD9B)、则没有错误代码、数据确实会显示在 BLE Scanner 上。

我出了什么问题?

  

 

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

    您好 Stefan、

    您使用的是哪款 SDK? 此外、"error code 2"是 BLE Scanner 在移动电话上报告的错误、还是 GATT_Indication 调用的返回状态? 您是否能够使用监听器日志验证数据是从 host_test 设备发送的?

    首先参考我们的 simple_peripheral 示例以了解其如何处理/发送通知可能会有所帮助。 BTool 通常要求 您正确配置所有内容;因为 GATT_Notifications 已开始工作、所以听起来您是最常用的方法。

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

    我使用的是 SimpleLink CC13X2_26X2 SDK 4.40.04.04。

    当我从 PC 发送 GATT_Indication 时、EVB 以状态字段为0x02的 CommandStatus (0x067F)进行响应。

    谢谢、我将介绍 simple_peripheral 示例。

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

    好的、如果您有任何后续问题、请告诉我。 如果此帖子锁定、请随时点击"提出相关问题"按钮以继续此讨论。

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

    遗憾的是、我觉得 simple_peripheral 对于这个特定的问题没有帮助。

    总结我的问题:

    • 我向 EVB 发送 GATT_Indication、后者以错误代码2进行响应。 根据《供应商特定指南》、此错误代码表示我的命令中存在不正确的数据。
    • 如果我发送 GATT_Notification、使用完全相同的数据(我只更改运算代码)、则 EVB 没有错误响应、数据显示在电话上。

    在我解释《供应商特定指南》时、只有两条命令的操作代码不同、数据应该相同。

    在我的第一篇文章中、我说禁用中央角色是我对 host_test 所做的唯一更改。 但是、我还将 GATT 数据库管理移至 PC (定义了 GATT_DB_OFF_CHIP)。 我对这种混乱表示歉意。

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

    嗨、Stephan、

    您是否能够向我发送 BTOOL 日志、以便我可以按照您执行的相同步骤操作?

    我想在我的结尾重复这一过程、以更好地帮助您。

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

    我不使用 BTool、因为我可以找到编写它的方法。 不过、PC 和 EVB 之间的原始通信日志已附加。 我希望这已经足够了。 如果不是、请告诉我、我将尝试创建 BTool 日志。

    TX:从 PC 到 EVB。
    RX:从 EVB 到 PC。

    TX:01 00 FE 08 04 02 00 00 00 00 00 00
    RX:04 FF 06 7F 06 00 00 FE 00
    RX:04 FF 2C 00 06 00 1D 79 2D 5E 8A F8 FF 00 05 37 40 F3 CF D7 48 4C A0 92 A6 D1 E9 46 4D 6D 6C 78 35 72 61 A2 1B 13 B4 FB 3F 2E D9 B4 F0 FA 2A
    TX:01 FC FD 05 00 28 05 00 10
    RX:04 FF 06 7F 06 00 FC FD 00
    TX:01 FE FD 03 28 01
    RX:04 FF 06 7F 06 00 FE FD 00
    TX:01 FE FD 03 00 2A 03
    RX:04 FF 06 7F 06 00 FE FD 00
    TX:01 FE FD 03 28 01
    RX:04 FF 06 7F 06 00 FE FD 00
    TX:01 FE FD 03 01 2A 01
    RX:04 FF 0A 7F 06 00 FE FD 04 01 00 05 00
    TX:01 FC FD 05 00 28 01 00 10
    RX:04 FF 0A 7F 06 00 FC FD 04 06 00 06 00
    TX:01 FC FD 05 00 28 04 00 10
    RX:04 FF 06 7F 06 00 FC FD 00
    TX:01 FE FD 03 28 01
    RX:04 FF 06 7F 06 00 FE FD 00
    TX:01 FE FD 11 F0 FF FF EF CD AB 78 56 34 12 BB AA 00 02 00 02
    RX:04 FF 06 7F 06 00 FE FD 00
    TX:01 FE FD 03 02 29 03
    RX:04 FF 0A 7F 06 00 FE FD 04 07 00 0A 00
    TX:01 3E FE 15 13 00 20 00 F4 00 07 01 00 00 00 00 00 00 00 00 00 7F 01 02 00
    RX:04 FF 07 7F 06 00 3E FE 01 00
    TX:09 44 FE 1C 00 00 18 00 02 01 06 11 06 00 01 00 AA BB 12 34 56 78 AB CD EF FF F0 02 0A EC
    RX:04 FF 06 7F 06 00 44 FE 00
    TX:09 44 FE 13 00 01 0F 00 0E 09 53 45 35 30 30 20 53 4D 41 52 54 32
    RX:04 FF 06 7F 06 00 44 FE 00
    TX:01 3F FE 04 00 00 00
    RX:04 FF 06 7F 06 00 3F FE 00

    RX:04 FF 14 05 06 00 01 E7 2A 4A D1 E3 45 00 04 19 00 00 F4 01
    TX:01 3F FE 04 00 00 00
    RX:04 FF 06 7F 06 00 3F FE 00

    RX:04 3E 0C 04 00 00 00 FF 59 00 00 00 00 00 00 00 00 00
    RX:04 FF 0C 10 05 00 00 06 01 00 FF 00 28
    TX:01 11 FD 0F 00 06 01 00 05 00 18 06 00 06 00 01 18
    RX:04 0E 06 01 20 12 00 00
    RX:04 FF 06 7F 06 00 11 FD 00
    RX:04 FF 0C 10 05 00 06 07 00 FF 00 28
    TX:01 11 FD 17 00 14 07 00 0A 00 F0 FF FF EF CD AB 78 56 34 12 BB AA 00 01 00
    RX:04 FF 06 7F 06 00 11 FD 00
    RX:04 FF 0B 07 06 1E 00 03 00 00 1F 00
    RX:04 FF 0C 08 05 00 06 01 00 05 00 03 28
    TX:01 09 FD 11 00 07 02 00 02 03 00 2A 04 00 02 05 00 01 2A
    RX:04 FF 06 7F 06 00 09 FD 00
    RX:04 FF 0C 08 05 00 06 07 00 0A 00 03 28
    TX:01 09 FD 18 00 15 08 00 38 09 00 F0 FF FF EF CD AB 78 56 34 12 BB AA 00 02 00
    RX:04 FF 06 7F 06 00 09 FD 00
    RX:04 3E 09 82 00 1B FE FF DF FE 1F
    RX:04 3E 09 82 00 0F FF FF DF FF 1F

    RX:04 FF 0C 12 05 00 00 06 00 0A 00 02 00

    TX:01 13 FD 02 00
    TX:01 9D FD 09 00 00 09 00 48 65 6A 33
    RX:04 FF 06 7F 06 00 13 FD 00
    RX:04 FF 06 7F 06 02 9D FD 00
       #指示失败。

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

    您好 Stefan、

    BTOOL 日志有助于加快数据包/有效负载的原始 RX/TX 解析时间。 是否可以尝试使用 BTOOL 重新创建此项?

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

    是的、我明天会试一下。

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

    很抱歉我的答复很晚。

    我无法使用 BTOOL 捕获日志、因为在我能够发送对连接期间发出的各种请求的响应之前、电话会超时。

    总之、我知道错误代码2来自哪里。  文件"ble5stack/iCall/app/iCall_HCI_tl.c"中的函数 processExtMsgGATT 会生成该函数、请参阅以下内容:

       案例 ATT_Handle_Value_IND:
         pPayload = createMsgPayload (&pBuf[3],pCmd->len-3);
         if (pPayload!=空)
         {
           IF (ATT_ParseHandleValueInd (ATT_SIG_NOT 包含在内、false、pPayload、
                                         pCmd->len-3,&msg)==成功)
           {
             attHandleValueInd_t * Pind =&msg.handleValueInd;
             gattCharCfg_t * indCharCfg =(gattCharCfg_t *)*(uint32_t*)(gattAttrTbl[3].pValue);
             if (indCharCfg =空)
             {
               STAT = INVALIDPARAMETER;
               中断;
             }
       (笑声)

    通过破解此代码、我可以使通知成功(通知到达电话、得到了电话的确认)。

    顺便说一下、通知代码没有从 gattAttrTbl 中提取信息的额外代码。 (如前所述、通知工作正常。)

    希望这能帮助您发现我的错误。

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

    您好 Stefan、

    您添加了哪些"黑客"以使通知成功?

    从 gattAttrTbl 中提取信息所涉及的额外代码是检查特征是否 正确配置为发送指示。 我们的默认 simple_gatt_profile 不配置指示、因此这可能是您遇到此问题的原因。

    您可以查看我们的血糖服务示例、了解我们如何配置特征以启用指示(请参阅血糖控制点部分、或搜索 GlucoseControlProps)。 以下是一个链接:

    https://github.com/ti-simplelink/ble_examples/blob/master/source/ti/ble5stack/profiles/glucose/glucservice.c 

    此外、这里是上一篇相关文章中的评论、阐述了这一点、并提供了有关指示的见解。 您是否有理由更喜欢指示而不是通知?

    https://e2e.ti.com/support/wireless-connectivity/bluetooth/f/bluetooth-forum/566045/rtos-enable-indications-in-cc2650